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; }
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; }
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; }
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); }
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; }