]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb1_tdb.c
tdb2: add stats to tdb1 backend.
[ccan] / ccan / tdb2 / tdb1_tdb.c
index 98f830cc9a81d0c18f78cfa5e5aae6e4b44ca0f4..9730dceffc2b5b7b8bccbeaef1ca6bacd689c2a4 100644 (file)
@@ -89,11 +89,18 @@ static tdb1_off_t tdb1_find(struct tdb_context *tdb, TDB_DATA key, uint32_t hash
                if (tdb1_rec_read(tdb, rec_ptr, r) == -1)
                        return 0;
 
-               if (!TDB1_DEAD(r) && hash==r->full_hash
-                   && key.dsize==r->key_len
-                   && tdb1_parse_data(tdb, key, rec_ptr + sizeof(*r),
-                                     r->key_len, tdb1_key_compare,
-                                     NULL) == 0) {
+               tdb->stats.compares++;
+               if (TDB1_DEAD(r)) {
+                       tdb->stats.compare_wrong_bucket++;
+               } else if (key.dsize != r->key_len) {
+                       tdb->stats.compare_wrong_keylen++;
+               } else if (hash != r->full_hash) {
+                       tdb->stats.compare_wrong_rechash++;
+               } else if (tdb1_parse_data(tdb, key, rec_ptr + sizeof(*r),
+                                          r->key_len, tdb1_key_compare,
+                                          NULL) != 0) {
+                       tdb->stats.compare_wrong_keycmp++;
+               } else {
                        return rec_ptr;
                }
                /* detect tight infinite loop */