Rusty Russell [Tue, 1 Nov 2011 23:04:29 +0000 (09:34 +1030)]
ccanlint: fix uninitialized variables in tests_pass_valgrind.
We weren't initializing the leak_info field when the test was marked
FAIL in _info (as in tdb2).
Rusty Russell [Tue, 1 Nov 2011 23:01:25 +0000 (09:31 +1030)]
ccanlint: fix test link when given no arguments.
Fallout from commit
758ab1f402b4af3cccac09548b709deca17ef930
(ccanlint: drop -d, interpret any arguments as directories...)
Rusty Russell [Wed, 26 Oct 2011 06:26:22 +0000 (16:56 +1030)]
compiler, ilog: IDEMPOTENT "idempotent does not mean what you think it means"
Actually, I don't even think it means that. But rename it to something
which is sane.
Thanks to David Gibson for reporting.
Rusty Russell [Wed, 26 Oct 2011 06:25:50 +0000 (16:55 +1030)]
strset: set errno on strset_add failures.
Rusty Russell [Wed, 26 Oct 2011 06:25:38 +0000 (16:55 +1030)]
strmap: set errno on strmap_add() failures.
Rusty Russell [Mon, 24 Oct 2011 23:50:18 +0000 (10:20 +1030)]
ccanlint: fix creation of example test/run.c
Hasn't worked for a while now. Oops.
Rusty Russell [Wed, 5 Oct 2011 05:23:35 +0000 (15:53 +1030)]
ccanlint: drop -d, interpret any arguments as directories, and allow multiple.
This gets us closer to 'ccanlint *' rather than relying on Makefiles
to test all modules. Unfortunately, because of limited parallelism, it's
currently slower than make -j.
Rusty Russell [Wed, 5 Oct 2011 03:40:29 +0000 (14:10 +1030)]
ccanlint: fix spurious warning errors.
Because we fork children to do compilations, and we use stdio, we need
to flush stdout before the fork otherwise the child will flush
afterwards. The compile tests interpret this output as a compiler
warning.
This shows up if you redirect ccanlint output to a file.
Rusty Russell [Tue, 4 Oct 2011 01:40:09 +0000 (12:10 +1030)]
tdb2: fix valgrind suppression in _info.
Commit
c4ca9f54301c0367 renamed run-83-openhook.c to
api-83-openhook.c, but didn't update the suppression in _info. My
system runs a patched valgrind, which doesn't have this problem.
Rusty Russell [Tue, 4 Oct 2011 01:40:08 +0000 (12:10 +1030)]
short_types: fix example for 64 bit platforms
Use correct printf string.
Rusty Russell [Tue, 4 Oct 2011 01:40:08 +0000 (12:10 +1030)]
opt: increase testing coverage on 64 bit platforms
Help the compiler eliminate untestable code.
Rusty Russell [Tue, 4 Oct 2011 01:40:08 +0000 (12:10 +1030)]
net: fix tests for systems without IPv6 entries in /etc/hosts.
We fake up a dual IPv4/IPv6 response to localhost for testing, but it
assumed localhost6 or ip6-localhost entries. Fall back to "::1" which
should always work.
Rusty Russell [Tue, 4 Oct 2011 01:40:08 +0000 (12:10 +1030)]
jmap: fix _info example for 64 bit systems.
Rusty Russell [Tue, 4 Oct 2011 01:39:45 +0000 (12:09 +1030)]
foreach: make test more accurate, fix for 64-bit gcc 4.4.3
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 on x86_64 uses a different stack
offset for the second call to test_ptr_recursion(), meaning it sees
new iterators. Put it inside a loop to reduce the chance of that
happening.
Rusty Russell [Tue, 4 Oct 2011 01:38:45 +0000 (12:08 +1030)]
asearch: fix example on 64 bit platforms.
Rusty Russell [Tue, 4 Oct 2011 01:37:45 +0000 (12:07 +1030)]
alloc: fix memory leak in tests.
Rusty Russell [Tue, 4 Oct 2011 01:36:45 +0000 (12:06 +1030)]
tdb2: fix test printf for 64 bit.
Very minor fix, since this won't happen unless the test fails.
Rusty Russell [Thu, 29 Sep 2011 03:20:16 +0000 (12:50 +0930)]
web: add pointer to wiki/Contribute.
Rusty Russell [Thu, 29 Sep 2011 03:08:06 +0000 (12:38 +0930)]
Note new URL: ccodearchive.net, and point to new wiki on GitHub.
Rusty Russell [Wed, 28 Sep 2011 02:37:35 +0000 (12:07 +0930)]
strmap: new module for ordered map of strings using a critbit tree.
Rusty Russell [Wed, 28 Sep 2011 02:36:35 +0000 (12:06 +0930)]
tcon: more help, for making strmap.
Rusty Russell [Tue, 27 Sep 2011 06:28:44 +0000 (15:58 +0930)]
htable: benchmark against hsearch(3)
Since that has a fixed hash table size and doesn't support delete, we can't
do a thorough comparison, but we can insert and search.
Rusty Russell [Tue, 27 Sep 2011 06:28:43 +0000 (15:58 +0930)]
likely: use htable_type
Also general cleanups:
(1) Don't assume that strings are folded by the compiler.
(2) Implement likely_stats_reset().
(3) Return non-const string from likely_stats(), as caller must free it.
(4) Don't use struct info indirection (that was from when we used callbacks?)
(5) Close memory leak in run-debug.c
Rusty Russell [Tue, 27 Sep 2011 06:28:41 +0000 (15:58 +0930)]
htable: HTABLE_INITIALIZER() for static initialization.
Unfortunately it's a bit of a pain to use for typed hashtables, but it
works.
Rusty Russell [Tue, 27 Sep 2011 05:07:01 +0000 (14:37 +0930)]
htable: clean up interface, document htable_type better.
We change from htable_new()/htable_free() to htable_init/htable_clear.
We also change HTABLE_DEFINE_TYPE() to be the full name, without automatically
prepending htable_.
Rusty Russell [Tue, 27 Sep 2011 04:56:59 +0000 (14:26 +0930)]
htable: start empty.
There's no real reason to start with 128 entries.
Rusty Russell [Tue, 27 Sep 2011 04:55:59 +0000 (14:25 +0930)]
tap: fix exit status when we have exactly 256 errors.
Rusty Russell [Tue, 27 Sep 2011 03:38:16 +0000 (13:08 +0930)]
tcon: update and enhance documentation.
Rusty Russell [Mon, 26 Sep 2011 11:10:42 +0000 (20:40 +0930)]
htable, strset: benchmarking tools.
This lets us compare hash table vs. strset vs. the example
implementation of critbit trees.
cbspeed 100 runs, min-max(avg):
#01: Initial insert: 236-245(237)
#02: Initial lookup (match): 180-186(180)
#03: Initial lookup (miss): 171-185(172)
#04: Initial lookup (random): 441-457(444)
#05: Initial delete all: 127-132(128)
#06: Initial re-inserting: 219-225(220)
#07: Deleting first half: 101-104(102)
#08: Adding (a different) half: 158-162(159)
#09: Lookup after half-change (match): 202-207(203)
#10: Lookup after half-change (miss): 217-222(218)
#11: Churn 1: 297-302(299)
#12: Churn 2: 297-305(300)
#13: Churn 3: 301-308(303)
#14: Post-Churn lookup (match): 189-195(190)
#15: Post-Churn lookup (miss): 189-193(190)
#16: Post-Churn lookup (random): 499-513(503)
speed 100 runs, min-max(avg):
#01: Initial insert: 211-218(212)
#02: Initial lookup (match): 161-166(162)
#03: Initial lookup (miss): 157-162(158)
#04: Initial lookup (random): 452-460(454)
#05: Initial delete all: 126-135(127)
#06: Initial re-inserting: 193-201(194)
#07: Deleting first half: 99-107(99)
#08: Adding (a different) half: 143-190(144)
#09: Lookup after half-change (match): 183-195(184)
#10: Lookup after half-change (miss): 197-203(198)
#11: Churn 1: 271-278(274)
#12: Churn 2: 280-287(282)
#13: Churn 3: 277-285(279)
#14: Post-Churn lookup (match): 171-175(171)
#15: Post-Churn lookup (miss): 174-178(175)
#16: Post-Churn lookup (random): 525-552(528)
stringspeed 100 runs, min-max(avg):
#01: Initial insert: 300-343(308)
#02: Initial lookup (match): 98-136(99)
#03: Initial lookup (miss): 73-102(75)
#04: Initial lookup (random): 230-282(233)
#05: Initial delete all: 66-102(69)
#06: Initial re-inserting: 62-99(64)
#07: Deleting first half: 43-52(43)
#08: Adding (a different) half: 101-156(106)
#09: Lookup after half-change (match): 114-156(120)
#10: Lookup after half-change (miss): 94-103(95)
#11: Churn 1: 98-105(99)
#12: Churn 2: 96-104(98)
#13: Churn 3: 174-184(176)
#14: Post-Churn lookup (match): 93-112(94)
#15: Post-Churn lookup (miss): 77-107(79)
#16: Post-Churn lookup (random): 229-265(232)
Rusty Russell [Mon, 26 Sep 2011 11:01:17 +0000 (20:31 +0930)]
strset: new module using critbit trees.
Not as fast as using htable, but simple and provides order and prefix
ops.
Rusty Russell [Mon, 26 Sep 2011 10:43:07 +0000 (20:13 +0930)]
str: fix warnings.
Firstly, -Wwrite-strings makes string literals const, secondly, we mustn't
define str_strstr etc in terms of themselves!
Rusty Russell [Mon, 26 Sep 2011 10:42:15 +0000 (20:12 +0930)]
str: relicense to public domain.
LGPL is overkill for trivial wrappers like this.
Rusty Russell [Mon, 26 Sep 2011 09:53:36 +0000 (19:23 +0930)]
ccanlint: more tweaks to example mangling.
Note where previous analysis said the code was outside a function, and
fix double new-line. Also, treat end of comment as end of statement.
Rusty Russell [Sat, 24 Sep 2011 04:31:19 +0000 (14:01 +0930)]
typesafe_cb: fix example macro ordering in typesafe_cb_preargs documentation.
Rusty Russell [Fri, 23 Sep 2011 02:30:49 +0000 (12:00 +0930)]
jmap: use ccan/tcon and always be typesafe.
This handles both pointer and integer types using ccan/tcon.
Rusty Russell [Fri, 23 Sep 2011 02:29:49 +0000 (11:59 +0930)]
jbitset: rename to jset, use ccan/tcon
It's now a completely generic set implementation, and uses ccan/tcon
to always be typesafe. It handles both integer and pointer types.
Rusty Russell [Fri, 23 Sep 2011 02:28:52 +0000 (11:58 +0930)]
tlist: use ccan/tcon
No real change for users.
Rusty Russell [Thu, 22 Sep 2011 06:30:30 +0000 (16:00 +0930)]
tcon: routines for creating typesafe generic containers
Rusty Russell [Thu, 22 Sep 2011 04:30:21 +0000 (14:00 +0930)]
ccanlint: fix output for async commands.
Previously, it was always "", since we left the nul terminator at the
start.
Rusty Russell [Tue, 20 Sep 2011 02:32:43 +0000 (12:02 +0930)]
tdb2: allow readonly changes even while holding locks.
This happens in SAMBA with the TDB_VERSION1, presumably due to a
read-only traverse nested inside a normal traverse (since it doesn't
occur without TDB_VERSION1).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell [Mon, 12 Sep 2011 04:51:40 +0000 (14:21 +0930)]
tdb2: add error conversion functions.
This clarifies the code a little, but also provides a more explicit
mechanism which can be used to debug error handling (by introducing
tdb_err_t and making it a pointer type).
Rusty Russell [Mon, 12 Sep 2011 04:50:40 +0000 (14:20 +0930)]
ccanlint: run tests in parallel
Measuring ccanlint -d ccan/tdb2 on my dual core hyperthread laptop gives:
Before: 5:30
After: 3:31
Rusty Russell [Mon, 12 Sep 2011 04:50:40 +0000 (14:20 +0930)]
tdb2: make tests work in parallel.
Lazy cut & paste of tdb names causes failure when we run in parallel.
Rusty Russell [Mon, 12 Sep 2011 04:50:39 +0000 (14:20 +0930)]
ccanlint: compile tests with coverage in parallel
Measuring ccanlint -d ccan/tdb2 on my dual core hyperthread laptop gives:
Before: 5:59
After: 5:30
Rusty Russell [Mon, 12 Sep 2011 04:50:39 +0000 (14:20 +0930)]
ccanlint: compile tests in parallel
Measuring ccanlint -d ccan/tdb2 on my dual core hyperthread laptop gives:
Before: 6:47
After: 5:59
Rusty Russell [Mon, 12 Sep 2011 04:50:26 +0000 (14:20 +0930)]
ccanlint: infrastructure to run commands async.
We use the lbalance module to figure out how many to run in parallel.
Rusty Russell [Mon, 12 Sep 2011 03:54:34 +0000 (13:24 +0930)]
tools: fix realloc bug.
Reallocing smaller can move the pointer; certainly valgrind detects
it. Found while chasing intermittant errors on "make fastcheck".
Daniel Burke [Fri, 9 Sep 2011 12:29:32 +0000 (21:59 +0930)]
ttxml: zero terminate the buffer after checking it was allocated
Daniel Burke [Mon, 5 Sep 2011 09:36:46 +0000 (19:06 +0930)]
ttxml: covering my shame
Daniel Burke [Mon, 5 Sep 2011 09:24:03 +0000 (18:54 +0930)]
ttxml: modified it to use a smaller buffer during testing
Daniel Burke [Mon, 5 Sep 2011 09:18:04 +0000 (18:48 +0930)]
ttxml: ccanlint fixes finished
Meets all of the requirements of ccanlint.
Code coverage of the tests covers everything except for a malloc() failure.
Added some xml files for the tests to work on.
Daniel Burke [Mon, 5 Sep 2011 07:46:50 +0000 (17:16 +0930)]
ttxml: added drop static keyword
Daniel Burke [Mon, 5 Sep 2011 07:38:46 +0000 (17:08 +0930)]
ttxml: Passes Valgrind now
Removed the last references of the old buffering method. Should be
stable now. Time to write some proper testing.
Daniel Burke [Mon, 5 Sep 2011 01:10:52 +0000 (10:40 +0930)]
ttxml: Rplaced ratchet buffer with regular buffer, 20x speed increase
Rusty Russell [Fri, 2 Sep 2011 06:18:17 +0000 (15:48 +0930)]
tdb2: fix error handling for tdb1_transaction_commit.
tdb_repack() returns an enum TDB_ERROR, whereas
tdb1_transaction_commit is expected to return 0 or -1.
Rusty Russell [Fri, 2 Sep 2011 06:13:20 +0000 (15:43 +0930)]
tdb2: don't return -1 (ie. TDB_ERR_CORRUPT) on transaction write fail.
A left-over -1 return; should be returning ecode (probably TDB_ERR_IO).
Rusty Russell [Fri, 2 Sep 2011 06:06:47 +0000 (15:36 +0930)]
tdb2: fix prototypes which return enum TDB_ERROR.
Since enums and ints are compatible in C, the compiler didn't warn
that our prototypes for these functions disagreed with the
definitions.
Rusty Russell [Fri, 2 Sep 2011 06:03:59 +0000 (15:33 +0930)]
tdb2: set tdb_error() on tdb_transaction_prepare_commit.
Rusty Russell [Wed, 31 Aug 2011 06:09:17 +0000 (15:39 +0930)]
tdb2: enhance tdb1 porting document.
Rusty Russell [Wed, 31 Aug 2011 06:09:17 +0000 (15:39 +0930)]
tdb2: delete old tdb1 tests.
These two tdb1-specific tests have been superceded by the TDB_VERSION1
flags used in the main tests.
Rusty Russell [Wed, 31 Aug 2011 06:09:17 +0000 (15:39 +0930)]
tdb2: test: Speed up run-01-new_database.
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).
Rusty Russell [Wed, 31 Aug 2011 06:09:17 +0000 (15:39 +0930)]
tdb2: speed up testing.
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.
Rusty Russell [Wed, 31 Aug 2011 06:09:16 +0000 (15:39 +0930)]
tdb2: test: convert (non-invasive) run tests to api tests.
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.
Rusty Russell [Wed, 31 Aug 2011 06:09:16 +0000 (15:39 +0930)]
tdb2: test: fix run-57-die-during-transaction.c to be more efficient.
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.
Rusty Russell [Wed, 31 Aug 2011 06:08:53 +0000 (15:38 +0930)]
tdb2: don't continue if tdb1_find fails.
The TDB1 code's tdb1_find() returns 0 on error; the callers should
not assume that the error means that the entry wasn't found, but use
last_error to determine it.
This was found by looking at how long the failure path testing for
test/run-10-simple-store.c was taking under valgrind, ie:
valgrind -q ./run-10-simple-store --show-slowest
This change dropped the time for that test from 53 seconds to 19
seconds.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: test: try (almost) all tests with TDB_VERSION1 flag.
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: log allocation failures in tdb1 backend.
The TDB2 tests are stricter about this; they want every error logged.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: fix bogus error from tdb_unlockall() after fork in tdb1 backend.
We're always allowed to unlock after a fork; by setting the count to 0
before calling the generic unlock function we don't trigger the pid
check.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: check lock owner in tdb1 backend.
This reports errors if we fork() while holding a lock, or misuse a tdb
which we have dual-opened.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: return TDB_ERR_RDONLY from transactions on R/O databases, log nesting
Rather than rturning TDB_ERR_EINVAL, return TDB_ERR_RDONLY, and log
when we fail due to nesting.
Rusty Russell [Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)]
tdb2: add stats to tdb1 backend.
It's actually quite a good fit; we use compare_wrong_bucket for dead
records, which is kind of correct (they should be in the free list).
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: increment seqnum on tdb_wipe_all in tdb1 backend.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: log an error when calling tdb_store() on read-only TDB in tdb1 backend.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: catch errors in tdb1_needs_recovery()
The tdb1 backend simply returns "true" if there's an error determining
if a tdb needs recovery. But this leads failtest down a rabbit hole;
it's better to return the error at this case (and makes for better for
diagnostics, since they will come from the first fault, not later in
tdb1_transaction_recover().
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: add tdb_attribute_tdb1_max_dead
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: expose and document tdb1_incompatible_hash.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: make tdb1_null static.
It's only used in two files, make it static in one and do it manually
in the other.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: tdb_repack
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: unify tdb1_wipe into tdb_wipe.
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: unify tdb1_get_seqnum/tdb1_increment_seqnum into tdb_get_seqnum/tdb_inc_seqnum
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: unify tdb1_firstkey/tdb1_nextkey into tdb_firstkey/tdb_nextkey.
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: unify tdb1_check and tdb1_summary into tdb_check and tdb_summary.
Switch on the TDB_VERSION1 flag. Also, change tdb1_check's checkfn argument
to return an error code (and set tdb->last_error accordingly).
Rusty Russell [Wed, 31 Aug 2011 06:01:07 +0000 (15:31 +0930)]
tdb2: unify tdb1_transaction_start etc. into tdb_transaction_start.
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_parse_record into tdb_parse_record
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_chainlock et al. into tdb_chainlock
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_traverse into tdb_traverse
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_store into tdb_store
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_delete into tdb_delete.
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_append into tdb_append
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_fetch into tdb_fetch
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_store into tdb_store
Switch on the TDB_VERSION1 flag.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: unify tdb1_open into tdb_open
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: disallow SEED attribute with TDB_VERSION1.
It also only makes sense with O_CREAT.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: add TDB_ATTRIBUTE_TDB1_HASHSIZE
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.
Rusty Russell [Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)]
tdb2: make tdb1_open use attributes for logging, hash function.
This brings it closer to tdb_open(), so we can unify more easily.
Rusty Russell [Wed, 31 Aug 2011 06:01:05 +0000 (15:31 +0930)]
tdb2: make jenkins_hash function non-static, rename to tdb_jenkins_hash.
We're going to need access to it from tdb1_open, so expose it now.
It's better in hash.c anyway.
Rusty Russell [Wed, 31 Aug 2011 06:00:16 +0000 (15:30 +0930)]
tdb2: remove double-open detection for TDB1 databases.
This is a percursor to unifying with tdb_open() from tdb2, which handles
this itself.
Rusty Russell [Wed, 31 Aug 2011 05:59:16 +0000 (15:29 +0930)]
tdb2: merge tdb1_context into tdb_context.
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.
Rusty Russell [Wed, 31 Aug 2011 05:58:16 +0000 (15:28 +0930)]
tdb2: use tdb->flags & TDB_RDONLY instead of tdb->read_only for TDB1 code.
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.
Rusty Russell [Wed, 31 Aug 2011 05:57:16 +0000 (15:27 +0930)]
tdb2: Make TDB1 use the same tdb_hash() wrapper as TDB2
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.