summaryrefslogtreecommitdiff
path: root/source3/tdb/tdbtest.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2000-12-05 03:12:57 +0000
committerJeremy Allison <jra@samba.org>2000-12-05 03:12:57 +0000
commit1218b4147488a081182e910cdcd60e123db043a8 (patch)
treecb25d84e1a1ff1b3f72b530d24f360ba28e60e81 /source3/tdb/tdbtest.c
parent7e9736703cba8a1d6378b1c089fd5dc865a7a303 (diff)
downloadsamba-1218b4147488a081182e910cdcd60e123db043a8.tar.gz
samba-1218b4147488a081182e910cdcd60e123db043a8.tar.bz2
samba-1218b4147488a081182e910cdcd60e123db043a8.zip
Added sorted freelist neighbour merge code to stop tdb fragmentation.
This needs TESTING !!! (It passes tdbtest of course :-). Jeremy. (This used to be commit 7ae54a93e756d927419242adf35f46e91e974573)
Diffstat (limited to 'source3/tdb/tdbtest.c')
-rw-r--r--source3/tdb/tdbtest.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/source3/tdb/tdbtest.c b/source3/tdb/tdbtest.c
index 67580f9067..9e636eef83 100644
--- a/source3/tdb/tdbtest.c
+++ b/source3/tdb/tdbtest.c
@@ -177,6 +177,43 @@ static int traverse_fn(TDB_CONTEXT *db, TDB_DATA key, TDB_DATA dbuf, void *state
return 0;
}
+static void merge_test()
+{
+ int klen, dlen;
+ int i;
+ char keys[5][2];
+ TDB_DATA key, data;
+
+ for (i = 0; i < 5; i++) {
+ sprintf(keys[i], "%d", i);
+ key.dptr = keys[i];
+ key.dsize = 2;
+
+ data.dptr = "test";
+ data.dsize = 4;
+
+ if (tdb_store(db, key, data, TDB_REPLACE) != 0) {
+ fatal("tdb_store failed");
+ }
+ }
+
+ key.dptr = keys[0];
+ tdb_delete(db, key);
+ tdb_printfreelist(db);
+ key.dptr = keys[4];
+ tdb_delete(db, key);
+ tdb_printfreelist(db);
+ key.dptr = keys[2];
+ tdb_delete(db, key);
+ tdb_printfreelist(db);
+ key.dptr = keys[1];
+ tdb_delete(db, key);
+ tdb_printfreelist(db);
+ key.dptr = keys[3];
+ tdb_delete(db, key);
+ tdb_printfreelist(db);
+}
+
int main(int argc, char *argv[])
{
int i, seed=0;
@@ -201,6 +238,8 @@ int main(int argc, char *argv[])
printf("gdbm got %.2f ops/sec\n", i/end_timer());
#endif
+ merge_test();
+
srand(seed);
start_timer();
for (i=0;i<loops;i++) addrec_db();