コード例 #1
0
ファイル: verify.c プロジェクト: 9thsector/seafile
static int
check_blocks (VerifyData *data, const char *file_id)
{
    SeafRepo *repo = data->repo;
    Seafile *seafile;
    int i;

    seafile = seaf_fs_manager_get_seafile (seaf->fs_mgr,
                                           repo->store_id,
                                           repo->version,
                                           file_id);
    if (!seafile) {
        seaf_warning ("Failed to find file %s.\n", file_id);
        return -1;
    }

    for (i = 0; i < seafile->n_blocks; ++i) {
        if (!seaf_block_manager_block_exists (seaf->block_mgr,
                                              repo->store_id,
                                              repo->version,
                                              seafile->blk_sha1s[i]))
            g_message ("Block %s is missing.\n", seafile->blk_sha1s[i]);
    }

    seafile_unref (seafile);

    return 0;
}
コード例 #2
0
ファイル: fsck.c プロジェクト: rptec/seafile
static int
check_blocks (const char *file_id, FsckData *fsck_data, gboolean *io_error)
{
    Seafile *seafile;
    int i;
    char *block_id;
    int ret = 0;
    int dummy;

    gboolean ok = TRUE;
    SeafRepo *repo = fsck_data->repo;
    const char *store_id = repo->store_id;
    int version = repo->version;

    seafile = seaf_fs_manager_get_seafile (seaf->fs_mgr, store_id,
                                           version, file_id);

    for (i = 0; i < seafile->n_blocks; ++i) {
        block_id = seafile->blk_sha1s[i];

        if (g_hash_table_lookup (fsck_data->existing_blocks, block_id))
            continue;

        if (!seaf_block_manager_block_exists (seaf->block_mgr,
                                              store_id, version,
                                              block_id)) {
            seaf_warning ("Block %s:%s is missing.\n", store_id, block_id);
            ret = -1;
            break;
        }

        // check block integrity, if not remove it
        ok = seaf_block_manager_verify_block (seaf->block_mgr,
                                              store_id, version,
                                              block_id, io_error);
        if (!ok) {
            if (*io_error) {
                ret = -1;
                break;
            } else {
                if (fsck_data->repair) {
                    seaf_message ("Block %s is corrupted, remove it.\n", block_id);
                    seaf_block_manager_remove_block (seaf->block_mgr,
                                                     store_id, version,
                                                     block_id);
                } else {
                    seaf_message ("Block %s is corrupted.\n", block_id);
                }
                ret = -1;
                break;
            }
        }

        g_hash_table_insert (fsck_data->existing_blocks, g_strdup(block_id), &dummy);
    }

    seafile_unref (seafile);

    return ret;
}
コード例 #3
0
ファイル: fsck.c プロジェクト: Danath/seafile
static int
check_blocks (SeafFSManager *mgr, FsckRes *res, const char *file_id)
{
    SeafRepo *repo = res->repo;
    Seafile *seafile;
    int i;
    char *block_id;
    int ret = 0;
    int dummy;
    gboolean io_error = FALSE;
    gboolean ok = TRUE;


    seafile = seaf_fs_manager_get_seafile (mgr, repo->store_id, repo->version, file_id);
    if (!seafile) {
        seaf_warning ("Failed to find file %s.\n", file_id);
        return -1;
    }

    for (i = 0; i < seafile->n_blocks; ++i) {
        block_id = seafile->blk_sha1s[i];

        if (g_hash_table_lookup (res->existing_blocks, block_id))
            continue;

        if (!seaf_block_manager_block_exists (seaf->block_mgr,
                                              repo->store_id, repo->version,
                                              block_id)) {
            seaf_message ("Block %s is missing.\n", block_id);
            ret = -1;
            break;
        }

        // check block integrity, if not remove it
        ok = seaf_block_manager_verify_block (seaf->block_mgr,
                                              repo->store_id, repo->version,
                                              block_id, &io_error);
        if (!ok && !io_error) {
            seaf_message ("Block %s is corrupted, remove it.\n", block_id);
            seaf_block_manager_remove_block (seaf->block_mgr,
                                             repo->store_id, repo->version,
                                             block_id);
            ret = -1;
            break;
        }

        g_hash_table_insert (res->existing_blocks, g_strdup(block_id), &dummy);
    }

    seafile_unref (seafile);

    return ret;
}
コード例 #4
0
ファイル: seaf-tool.c プロジェクト: Jack-Tsue/seafile
static void
validate_block (void *userdata, const char *block_id)
{
    g_message ("Checking for Block %s", block_id);
    if (g_tree_lookup(already_traversed_blocks, block_id)) {
        g_message (" [Skipped]\n");
        return;
    }
    g_message ("\n");

    if (!seaf_block_manager_block_exists(seaf->block_mgr, block_id)) {
        fprintf (stderr, "[ERROR] block %s does not exist\n", block_id);
        return;
    }
    char *id = g_strdup(block_id);
    g_tree_insert(already_traversed_blocks, id, id);
}
コード例 #5
0
ファイル: verify.c プロジェクト: c326277320/seafile
static int
check_blocks (SeafFSManager *mgr, const char *file_id)
{
    Seafile *seafile;
    int i;

    seafile = seaf_fs_manager_get_seafile (mgr, file_id);
    if (!seafile) {
        seaf_warning ("Failed to find file %s.\n", file_id);
        return -1;
    }

    for (i = 0; i < seafile->n_blocks; ++i) {
        if (!seaf_block_manager_block_exists (seaf->block_mgr,
                                              seafile->blk_sha1s[i]))
            g_message ("Block %s is missing.\n", seafile->blk_sha1s[i]);
    }

    seafile_unref (seafile);

    return 0;
}