X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Frun-04-basichash.c;h=50c7c77df119642cba9b62a91fab3e133b897fc3;hp=ba70cc37143b90a57800bf331665a66774a24ea9;hb=dc9da1e34fe6a9d113fd57e116ebbc6d5bd54819;hpb=6804501c350181dea8f531142b28c620b70edbd9 diff --git a/ccan/tdb2/test/run-04-basichash.c b/ccan/tdb2/test/run-04-basichash.c index ba70cc37..50c7c77d 100644 --- a/ccan/tdb2/test/run-04-basichash.c +++ b/ccan/tdb2/test/run-04-basichash.c @@ -1,8 +1,10 @@ #include +#include #include #include #include #include +#include #include #include #include "logging.h" @@ -10,7 +12,7 @@ /* We rig the hash so adjacent-numbered records always clash. */ static uint64_t clash(const void *key, size_t len, uint64_t seed, void *priv) { - return ((uint64_t)*(unsigned int *)key) + return ((uint64_t)*(const unsigned int *)key) << (64 - TDB_TOPLEVEL_HASH_BITS - 1); } @@ -23,7 +25,7 @@ int main(int argc, char *argv[]) struct tdb_data key = { (unsigned char *)&v, sizeof(v) }; struct tdb_data dbuf = { (unsigned char *)&v, sizeof(v) }; union tdb_attribute hattr = { .hash = { .base = { TDB_ATTRIBUTE_HASH }, - .hash_fn = clash } }; + .fn = clash } }; int flags[] = { TDB_INTERNAL, TDB_DEFAULT, TDB_NOMMAP, TDB_INTERNAL|TDB_CONVERT, TDB_CONVERT, TDB_NOMMAP|TDB_CONVERT, @@ -45,7 +47,7 @@ int main(int argc, char *argv[]) v = 0; /* Should not find it. */ - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == 0); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) == 0); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in group 0, bucket 0. */ @@ -58,23 +60,24 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Allocate a new record. */ - new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, false); - ok1(new_off != TDB_OFF_ERR); + new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, + TDB_USED_MAGIC, false); + ok1(!TDB_OFF_IS_ERR(new_off)); /* We should be able to add it now. */ ok1(add_to_hash(tdb, &h, new_off) == 0); /* Make sure we fill it in for later finding. */ off = new_off + sizeof(struct tdb_used_record); - ok1(!tdb->methods->write(tdb, off, key.dptr, key.dsize)); + ok1(!tdb->methods->twrite(tdb, off, key.dptr, key.dsize)); off += key.dsize; - ok1(!tdb->methods->write(tdb, off, dbuf.dptr, dbuf.dsize)); + ok1(!tdb->methods->twrite(tdb, off, dbuf.dptr, dbuf.dsize)); /* We should be able to unlock that OK. */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, @@ -84,7 +87,8 @@ int main(int argc, char *argv[]) ok1(tdb_check(tdb, NULL, NULL) == 0); /* Now, this should give a successful lookup. */ - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == new_off); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) + == new_off); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in group 0, bucket 0. */ @@ -97,9 +101,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, @@ -110,7 +114,7 @@ int main(int argc, char *argv[]) /* Test expansion. */ v = 1; - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == 0); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) == 0); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in group 0, bucket 1. */ @@ -123,9 +127,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Make it expand 0'th bucket. */ @@ -146,7 +150,8 @@ int main(int argc, char *argv[]) /* Should be able to find it. */ v = 0; - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == new_off); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) + == new_off); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in expanded group 0, bucket 0. */ @@ -160,14 +165,14 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Simple delete should work. */ ok1(delete_from_hash(tdb, &h) == 0); - ok1(add_free_record(tdb, rec_zone_bits(&rec), new_off, + ok1(add_free_record(tdb, new_off, sizeof(struct tdb_used_record) + rec_key_length(&rec) + rec_data_length(&rec) @@ -178,7 +183,7 @@ int main(int argc, char *argv[]) /* Test second-level expansion: should expand 0th bucket. */ v = 0; - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == 0); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) == 0); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in group 0, bucket 0. */ @@ -191,9 +196,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ ok1(expand_group(tdb, &h) == 0); @@ -210,7 +215,7 @@ int main(int argc, char *argv[]) /* Should be happy with expansion. */ ok1(tdb_check(tdb, NULL, NULL) == 0); - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == 0); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) == 0); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in group 0, bucket 0. */ @@ -222,15 +227,16 @@ int main(int argc, char *argv[]) /* We should be able to add it now. */ /* Allocate a new record. */ - new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, false); - ok1(new_off != TDB_OFF_ERR); + new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, + TDB_USED_MAGIC, false); + ok1(!TDB_OFF_IS_ERR(new_off)); ok1(add_to_hash(tdb, &h, new_off) == 0); /* Make sure we fill it in for later finding. */ off = new_off + sizeof(struct tdb_used_record); - ok1(!tdb->methods->write(tdb, off, key.dptr, key.dsize)); + ok1(!tdb->methods->twrite(tdb, off, key.dptr, key.dsize)); off += key.dsize; - ok1(!tdb->methods->write(tdb, off, dbuf.dptr, dbuf.dsize)); + ok1(!tdb->methods->twrite(tdb, off, dbuf.dptr, dbuf.dsize)); /* We should be able to unlock that OK. */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, @@ -241,7 +247,8 @@ int main(int argc, char *argv[]) /* Should be able to find it. */ v = 0; - ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec) == new_off); + ok1(find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL) + == new_off); /* Should have created correct hash. */ ok1(h.h == tdb_hash(tdb, key.dptr, key.dsize)); /* Should have located space in expanded group 0, bucket 0. */