From 1218b4147488a081182e910cdcd60e123db043a8 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 5 Dec 2000 03:12:57 +0000 Subject: 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) --- source3/tdb/tdbtest.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'source3/tdb/tdbtest.c') 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