summaryrefslogtreecommitdiff
path: root/lib/tdb2/test
AgeCommit message (Collapse)AuthorFilesLines
2012-06-19TDB2: Goodbye TDB2, Hello NTDB.Rusty Russell67-6358/+0
This renames everything from tdb2 to ntdb: importantly, we no longer use the tdb_ namespace, so you can link against both ntdb and tdb if you want to. This also enables building of standalone ntdb by the autobuild script. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-06-19TDB2: more internal cleanups after TDB1 compatibility removal.Rusty Russell5-17/+17
This eliminates the separate tdb2 substructure, and makes some tdb1-required functions static. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-06-19TDB2: remove TDB1 compatibility.Rusty Russell69-2239/+74
This rips out all the TDB1 compatibility from tdb2. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-06-09tdb2: use ccan/err instead of err.hRusty Russell29-29/+4
Solaris has no err.h, so use CCAN replacement. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Autobuild-User(master): Rusty Russell <rusty@rustcorp.com.au> Autobuild-Date(master): Sat Jun 9 12:07:15 CEST 2012 on sn-devel-104
2012-03-22lib/tdb2: fix -Wcast-qual warnings.Rusty Russell14-55/+28
We use tdb_mkdata() to get rid of many of them from the tests, and explicit cast_const() in a few places. tlist_for_each() still causes a warning, but that needs to be fixed in CCAN. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Autobuild-User: Rusty Russell <rusty@rustcorp.com.au> Autobuild-Date: Thu Mar 22 03:29:32 CET 2012 on sn-devel-104
2012-03-22lib/tdb2: fix -Wshadow warnings.Rusty Russell4-20/+20
These warnings clutter things up, even though they're of marginal utility. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-03-22lib/tdb2: fix OpenBSD incoherent mmap (tdb1 version)Rusty Russell1-4/+23
This is a direct port of the previous patch, to the TDB2 codebase. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-03-14lib/tdb2: remove unneccessary _FILE_OFFSET_BITS define in test/.Rusty Russell1-2/+0
This was a relic from testing; it can interfere with compile. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-03-07lib/tdb2: adapt unit tests to SAMBA environment.Rusty Russell89-147/+234
This means changing headers, implementing a simple tap-like wrapper, and also splitting out the helpers into those which are linked with the api* tests (which can't use non-public tdb2 functions) and those linked with the run* tests (which can). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2011-12-05tdb2: tlist: remove type arg from tlist_top(), tlist_tail()Rusty Russell1-1/+1
With the type canary, it's unnecessary. Though the implementation is a bit more awkward since they longer map directly through to list_top/tail. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit a6b5111fe6948e51114c33aa34785c9fd0d403e6) Autobuild-User: Rusty Russell <rusty@rustcorp.com.au> Autobuild-Date: Mon Dec 5 12:13:08 CET 2011 on sn-devel-104
2011-12-05tdb2: display capability information in tdb_summary()Rusty Russell1-1/+55
This means we know they're there in future, and what restrictions they carry. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit b3ca95351517e76b635347b39382b059a66f8388)
2011-12-05tdb2: add a capability list from the header.Rusty Russell6-15/+304
This allows even more extensibility in future: in particular, the top bits of each capability tell us what to do if we don't understand it: fail the open, fail to open for write, or don't try to check the format. tdb_check needs to understand the capability list so it can know to skip over it: each element in the list is prefixed with the type tag and the length. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 35f198de1851a7d57064546b7ced677b6fabee27)
2011-12-05tdb2: provide tdb_layout_write() rather than implying it by new_tdb_layout arg.Rusty Russell4-32/+47
Neater API. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 79d603a5f73dfbb655d8d08f67eecb5f2da542d5)
2011-12-05tdb2: suppress failtest more than once on mmap.Rusty Russell1-0/+5
Now we test failing mmap, ccanlint -v time has increased from 200 to 330 seconds. Worse, tests no time out on my laptop. Fix this, by preventing us from going down that particular rabbit hole. ccanlint -v now takes 201 seconds again. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit fbae37ba91ec230e34be564084099726cc3a9d47)
2011-12-05tdb2: simplify failtest helper.Rusty Russell2-31/+3
failtest now culls duplicates for itself (and more efficiently), so don't replicate the logic here. It changes things a bit, because failtest uses backtraces rather than a simple call point to find duplicates. Also, fix one case (in run-11-simple-fetch.c) where we simply exited rather than using failtest_exit(). We got away with it before, because we never hit that particular failure pattern. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 3d99c9334fe3067c88772547b9c06acec21616ea)
2011-12-05tdb2: failtest: use a linked list for history, not an array.Rusty Russell2-30/+26
This avoids a silly realloc, but more importantly it gets us closer to being runtime extensible, as each history element can be a different size. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 9571a41e8494f3135557e3ec50c2de856392173e)
2011-12-05tdb2: consolidate testing failtest suppression routines.Rusty Russell8-72/+14
Less cut & paste means less patching as failtest changes. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 1819a36a3e69565bd7b853503fceb846558a45bd)
2011-12-05tdb2: fix intermittant failure in run-50-multiple-freelists-fail.cRusty Russell4-10/+18
layout.c's TDB creation functions were incorrect in case of a hash collision, causing occasional failure. Make it always use the (previously-failing) seed value, and fix it. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 60a487d57979e4364e70c837079f3cf083ddc9c7)
2011-11-02tdb2: don't be fascist when TDB_VERSION1 is specified.Rusty Russell1-0/+38
We currently insist that a tdb file be a version1 file if tdb_open() is passed the TDB_VERSION1 flag; we fail if it's actually a tdb2. But that makes generic wrappers harder, and is unlikely to be what the user wants: if they do, they can check tdb_get_flags() & TDB_VERSION1 after opening. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 9691464a16ef22d6acadfef209666381dfe22b2f) Autobuild-User: Rusty Russell <rusty@rustcorp.com.au> Autobuild-Date: Wed Nov 2 08:38:38 CET 2011 on sn-devel-104
2011-09-14tdb2: make tests work in parallel.Rusty Russell6-6/+6
Lazy cut & paste of tdb names causes failure when we run in parallel. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 380372e733416c2b348d5307f536d0a0807e95df)
2011-09-14tdb2: delete old tdb1 tests.Rusty Russell2-394/+0
These two tdb1-specific tests have been superceded by the TDB_VERSION1 flags used in the main tests. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit e42097b73f6cd509aa17a48487a707401a2d4bd0)
2011-09-14tdb2: test: Speed up run-01-new_database.Rusty Russell2-7/+78
Don't run tdb_check with failtest on, since it is very slow. Do the tdb_check w/ failtest in a new test, but skip MMAP suppression which doesn't add much and slows down valgrind a lot. Before this change run-01-new_database took 40 seconds (under valgrind), after it takes 8 seconds, and run-12-check takes 3 seconds). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit b3ae89992ecaffed31dcc2e912539c289478801a)
2011-09-14tdb2: speed up testing.Rusty Russell2-5/+7
The time to run tests under valgrind has become excessive; particularly the failure tests which fork(). Thus we cut down testing: 1) api-94-repack: reduce from 234 seconds to 2 seconds by cutting iterations, despite adding TDB_VERSION1 tests. 2) api-missing-entries: reduce from 17 seconds to under 1 second by not checking db inside loop, but at end. This reduces the total ccanlint time from 729 to 489 seconds. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit a99c2ccf97465d47c3277d997ea93f20ff97ad4d)
2011-09-14tdb2: test: convert (non-invasive) run tests to api tests.Rusty Russell23-23/+115
This reduces compilation time, since these are merely linked with the pre-built module, rather than recompiling it into the test (which allows for fancy things like failtest). This reduces the test compile time down from about 62 seconds to 45 seconds. Since ccanlint compiles tests three times (once normally, once with coverage, and once with reduced config.h) this makes a difference: we go from 780 seconds to 729 seconds. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit c4ca9f54301c0367891be6330f59fdd5dcdd51d1)
2011-09-14tdb2: test: fix run-57-die-during-transaction.c to be more efficient.Rusty Russell3-3/+18
We track malloc and free, but we didn't catch the free() inside external_agent, which means that our list of allocations keeps growing. Particularly under valgrind, which re-uses memory less than the glibc allocator. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit d9cbd7d4454ae35e4e2f6d18a9469bf26948e4b9)
2011-09-14tdb2: test: try (almost) all tests with TDB_VERSION1 flag.Rusty Russell33-128/+364
There are some minor changes required, in particular: 1) Make sure lockcheck understands tdb1 allrecord lock upgrades. 2) Handle tdb1 sequence number jumps: various operations increment the sequence number twice, especually tdb_append. 3) Don't test fail on unlock, since it gets triggered with traversal on the tdb1 backend (we didn't actually ever test this case for tdb2). 4) Move clear_if_first to offset 4, to match tdb1. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 818ed29730b030ce79855fc35c212b51adff3180)
2011-09-14tdb2: return TDB_ERR_RDONLY from transactions on R/O databases, log nestingRusty Russell1-2/+3
Rather than rturning TDB_ERR_EINVAL, return TDB_ERR_RDONLY, and log when we fail due to nesting. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 27647f94668040d91de377849dce87dabd72be69)
2011-09-14tdb2: add tdb_attribute_tdb1_max_deadRusty Russell2-2/+1
This allows us to simulate the old "volatile" flag for tdb1. It's not necessary for tdb2. As this is the last function in tdb1.h, we remove that file. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit b8e64e9346793164651a36eccb3c205077e5c91b)
2011-09-14tdb2: tdb_repackRusty Russell1-0/+76
Move the tdb1_repack() code into the core, make it general, rename to tdb_repack(). It's generic code: copy database into temporary, wipe it, copy back. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit e487983a4099b6f760056ff7182f2ff543e6da71)
2011-09-14tdb2: unify tdb1_get_seqnum/tdb1_increment_seqnum into ↵Rusty Russell1-0/+39
tdb_get_seqnum/tdb_inc_seqnum Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 57359c26e9626aa986ee0538efd13a44a466f39d)
2011-09-14tdb2: unify tdb1_check and tdb1_summary into tdb_check and tdb_summary.Rusty Russell7-29/+29
Switch on the TDB_VERSION1 flag. Also, change tdb1_check's checkfn argument to return an error code (and set tdb->last_error accordingly). Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit ef92843f2c74ab9d4fa7f167a2182e5e8955df91)
2011-09-14tdb2: unify tdb1_transaction_start etc. into tdb_transaction_start.Rusty Russell7-24/+24
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 6bc8ea012391198bc3898ae2937558b60dd55906)
2011-09-14tdb2: unify tdb1_chainlock et al. into tdb_chainlockRusty Russell1-7/+7
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit ceb2f3eacbad917ee990afbc3dd800bfb0607887)
2011-09-14tdb2: unify tdb1_traverse into tdb_traverseRusty Russell4-11/+13
Switch on the TDB_VERSION1 flag; we now only do a tdb1_traverse_read on a read-only database, as there is no tdb2 equivalent. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit cc2d609dfca7192305ad477b8c2b52cfdc1aa9be)
2011-09-14tdb2: unify tdb1_store into tdb_storeRusty Russell1-4/+4
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 2bba2a856a6cfdb93085b701557850bc1da99587)
2011-09-14tdb2: unify tdb1_delete into tdb_delete.Rusty Russell4-8/+8
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit acb26c9c3ee054c8b2141db25c9bd7be064e425c)
2011-09-14tdb2: unify tdb1_append into tdb_appendRusty Russell1-2/+2
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 8bc38cb177928ef739440c32e33a8eaf23a5dd22)
2011-09-14tdb2: unify tdb1_fetch into tdb_fetchRusty Russell7-24/+22
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 08c05da588018c6b76834e57b66d525546643708)
2011-09-14tdb2: unify tdb1_store into tdb_storeRusty Russell16-35/+35
Switch on the TDB_VERSION1 flag. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 98c754ffe65bc335f66161d6cc8705d4ea2710ec)
2011-09-14tdb2: unify tdb1_open into tdb_openRusty Russell22-184/+179
Finally, we gut tdb1_open() to the tdb1-specific parts, and call it from tdb_open if they specify the TDB_VERSION1 flag or the version is a TDB1. We also unify tdb_close(), based on the TDB_VERSION1 flag. Note that tdb_open(TDB_VERSION1) will fail on an existing tdb if it's a TDB2. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit c8c3b3568677e8b0105f84e4ab068c580faf4591)
2011-09-14tdb2: disallow SEED attribute with TDB_VERSION1.Rusty Russell1-1/+1
It also only makes sense with O_CREAT. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit fc44729c471bcdc7ab0410448d991a65e74cec3d)
2011-09-14tdb2: add TDB_ATTRIBUTE_TDB1_HASHSIZERusty Russell22-75/+204
This replaces the tdb1_open "hash_size" argument. It will only be valid when you call tdb_open() with O_CREAT in open_flags, and TDB_VERSION1 in tdb_flags. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 49475d68deecd0b31597ed6094229171d2699b11)
2011-09-14tdb2: make tdb1_open use attributes for logging, hash function.Rusty Russell22-177/+189
This brings it closer to tdb_open(), so we can unify more easily. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit a446f1d4d161d66bbb19ba2551cf6429a4865964)
2011-09-14tdb2: make jenkins_hash function non-static, rename to tdb_jenkins_hash.Rusty Russell2-4/+4
We're going to need access to it from tdb1_open, so expose it now. It's better in hash.c anyway. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit c8f6f8c2dea76042f74c02eff048847e62adcca6)
2011-09-14tdb2: merge tdb1_context into tdb_context.Rusty Russell26-54/+54
Finally, we split out the tdb2-specific parts of tdb_context, and put them into a "tdb2" sub-struct; the tdb1 parts go into a "tdb1" sub-struct. We get rido of tdb1_context and use tdb_context everywhere. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit bbeb528e74c0e234e1f724ac8d54be404cfc6f9a)
2011-09-14tdb2: use tdb->flags & TDB_RDONLY instead of tdb->read_only for TDB1 code.Rusty Russell1-1/+1
There's also a semantic change here: for tdb1, being read-only meant no locking, and it was an error to try to lock a r/o database. For TDB2, you'd need to specify TDB_NOLOCK, which suppresses locking silently. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 4dc29a338fadeac805b369b4b0851c02f1b152c7)
2011-09-14tdb2: Make TDB1 use the same tdb_hash() wrapper as TDB2Rusty Russell3-11/+16
This means converting the tdb1 inbuilt hash functions to the tdb2-style, so they return 64 bit. We truncate to 32 bit everywhere but in tdb_check() which needs to do so explicitly. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 3e46dde21261966941469a6c75e1b45cd2d26324)
2011-09-14tdb2: Make tdb1 use the tdb_file structure.Rusty Russell3-9/+9
Because tdb2 allows multiple opens of the same TDB, we separate out the file information from the struct tdb_context. Do the same for tdb1. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 60210a73ec08a7b34ba637ad19e6749cf6dc1952)
2011-09-14tdb2: Make TDB1 code use TDB2's open flags.Rusty Russell17-45/+29
This means getting rid of TDB_VOLATILE (perhaps we should use an attribute for that?), TDB_INCOMPATIBLE_HASH (use the tdb_attribute_hash for that) and TDB_CLEAR_IF_FIRST (use the tdb_attribute_openhook for that). We also get rid of TDB_DISALLOW_NESTING: that's the default for TDB2. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 22d0e0dc59fc9d7e0046fec6971ef478c2d604fd)
2011-09-14tdb2: approximate INCOMPATIBLE_HASH flag with tdb1_incompatible_hash()Rusty Russell3-22/+46
Rather than leak TDB_INCOMPATIBLE_HASH through to the TDB2 API, we make it that if they use the tdb1_incompatible_hash function as their hash, then we treat it as if they had specified the TDB_INCOMPATIBLE_HASH flag (ie. we mark the header so it's unusable by tdb < 1.2.6). This precludes the possibility of using TDB_INCOMPATIBLE_HASH with a custom hash function: that used to allow the user to ensure that old TDB versions couldn't open the TDB file (and recent ones check the header to ensure they're using the right hash). But that's a small loss. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 3004f7e89a5978064b4fb29c1027e6d0d39e9418)