diff options
author | Michael Adam <obnox@samba.org> | 2014-02-14 01:55:39 +0100 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2014-03-06 11:31:10 +1100 |
commit | af5568b26761dadbb652d92f8c8ced477b38c7cc (patch) | |
tree | f69e09ecbbe434ef5288bd9b8f999ab51c23c68c | |
parent | b4e0b01a8c8415bec9c7dbbe4494813917dddfe5 (diff) | |
download | samba-af5568b26761dadbb652d92f8c8ced477b38c7cc.tar.gz samba-af5568b26761dadbb652d92f8c8ced477b38c7cc.tar.xz samba-af5568b26761dadbb652d92f8c8ced477b38c7cc.zip |
ctdb-vacuum: fix treatment of remaining records and statistics in delete_record_traverse()
Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
-rw-r--r-- | ctdb/server/ctdb_vacuum.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/ctdb/server/ctdb_vacuum.c b/ctdb/server/ctdb_vacuum.c index 3a0105d437..8291e77b39 100644 --- a/ctdb/server/ctdb_vacuum.c +++ b/ctdb/server/ctdb_vacuum.c @@ -594,7 +594,6 @@ static int delete_record_traverse(void *param, void *data) struct ctdb_ltdb_header *header; TDB_DATA tdb_data; uint32_t lmaster; - bool deleted = false; uint32_t hash = ctdb_hash(&(dd->key)); res = tdb_chainlock(ctdb_db->ltdb->tdb, dd->key); @@ -604,6 +603,8 @@ static int delete_record_traverse(void *param, void *data) "key hash [0x%08x] on database db[%s].\n", hash, ctdb_db->db_name)); vdata->delete_local_error++; + vdata->delete_left--; + talloc_free(dd); return 0; } @@ -618,8 +619,7 @@ static int delete_record_traverse(void *param, void *data) "on database db[%s] does not exist or is not" " a ctdb-record. skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } if (tdb_data.dsize > sizeof(struct ctdb_ltdb_header)) { @@ -627,8 +627,7 @@ static int delete_record_traverse(void *param, void *data) "on database db[%s] has been recycled. " "skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } header = (struct ctdb_ltdb_header *)tdb_data.dptr; @@ -638,8 +637,7 @@ static int delete_record_traverse(void *param, void *data) "on database db[%s] has read-only flags. " "skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } if (header->dmaster != ctdb->pnn) { @@ -647,8 +645,7 @@ static int delete_record_traverse(void *param, void *data) "on database db[%s] has been migrated away. " "skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } if (header->rsn != dd->hdr.rsn + 1) { @@ -663,8 +660,7 @@ static int delete_record_traverse(void *param, void *data) "migrated away and back again (with empty " "data). skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } lmaster = ctdb_lmaster(ctdb_db->ctdb, &dd->key); @@ -674,8 +670,7 @@ static int delete_record_traverse(void *param, void *data) "delete list (key hash [0x%08x], db[%s]). " "Strange! skipping.\n", hash, ctdb_db->db_name)); - vdata->delete_skipped++; - goto done; + goto skip; } res = tdb_delete(ctdb_db->ltdb->tdb, dd->key); @@ -689,12 +684,16 @@ static int delete_record_traverse(void *param, void *data) goto done; } - deleted = true; - DEBUG(DEBUG_DEBUG, (__location__ " Deleted record with key hash [0x%08x] from " "local data base db[%s].\n", hash, ctdb_db->db_name)); + vdata->delete_deleted++; + goto done; + +skip: + vdata->delete_skipped++; + done: if (tdb_data.dptr != NULL) { free(tdb_data.dptr); @@ -702,15 +701,8 @@ done: tdb_chainunlock(ctdb_db->ltdb->tdb, dd->key); - if (deleted) { - /* - * successfully deleted the record locally. - * remove it from the list and update statistics. - */ - talloc_free(dd); - vdata->delete_deleted++; - vdata->delete_left--; - } + talloc_free(dd); + vdata->delete_left--; return 0; } |