Rusty Russell [Fri, 24 Sep 2010 05:24:46 +0000 (14:54 +0930)]
tdb: TDB_INCOMPATIBLE_HASH, to allow safe changing of default hash.
This flag to tdb_open/tdb_open_ex effects creation of a new database:
1) Uses the Jenkins lookup3 hash instead of the old gdbm hash if none is
specified,
2) Places a non-zero field in header->rwlocks, so older versions of TDB will
refuse to open it.
This means that the caller (ie Samba) can set this flag to safely
change the hash function. Versions of TDB from this one on will either
use the correct hash or refuse to open (if a different hash is specified).
Older TDB versions will see the nonzero rwlocks field and refuse to open
it under any conditions.
Rusty Russell [Fri, 24 Sep 2010 04:59:42 +0000 (14:29 +0930)]
tdb: automatically identify Jenkins hash tdbs
If the caller to tdb_open_ex() doesn't specify a hash, and tdb_old_hash
doesn't match, try tdb_jenkins_hash.
This makes life simpler, especially with the upcoming TDB_INCOMPATIBLE_HASH
flag.
Rusty Russell [Fri, 24 Sep 2010 04:07:04 +0000 (13:37 +0930)]
tdb: add Bob Jenkins lookup3 hash as helper hash.
This is a better hash than the default: shipping it with tdb makes it easy
for callers to use it as the hash by passing it to tdb_open_ex().
Rusty Russell [Thu, 23 Sep 2010 07:20:30 +0000 (16:50 +0930)]
tdb: add mktdb tool.
Rusty Russell [Thu, 23 Sep 2010 05:43:03 +0000 (15:13 +0930)]
tally: new module for tallying numbers.
Rusty Russell [Tue, 14 Sep 2010 11:06:48 +0000 (20:36 +0930)]
tools: restore -Wmissing-prototypes -Wmissing-declarations
Rusty Russell [Tue, 14 Sep 2010 11:06:12 +0000 (20:36 +0930)]
tdb: fix test helper to include own header, fix function definition.
Rusty Russell [Tue, 14 Sep 2010 11:05:34 +0000 (20:35 +0930)]
tdb2: add missing prototype, move tdb_firstkey/tdb_nextkey to traverse.c
Rusty Russell [Tue, 14 Sep 2010 10:36:17 +0000 (20:06 +0930)]
tdb2: implement tdb_firstkey/tdb_nextkey.
Rusty Russell [Tue, 14 Sep 2010 01:08:30 +0000 (10:38 +0930)]
tdb2: add tdb_errorstr(), clean up error codes.
Also remove TDB_DISALLOW_NESTING flag, since that's the default now.
Rusty Russell [Tue, 14 Sep 2010 00:36:04 +0000 (10:06 +0930)]
tdb2: update design doc.
Rusty Russell [Mon, 13 Sep 2010 10:12:34 +0000 (19:42 +0930)]
tdb: put example hashes into header, so we notice incorrect hash_fn.
This is Stefan Metzmacher <metze@samba.org>'s patch with minor
changes:
1) Use the TDB_MAGIC constant so both hashes aren't of strings.
2) Check the hash in tdb_check (paranoia, really).
3) Additional check in the (unlikely!) case where both examples hash to 0.
4) Cosmetic changes to var names and complaint message.
Rusty Russell [Mon, 13 Sep 2010 09:17:14 +0000 (18:47 +0930)]
tdb: fix tdb_check() on other-endian tdbs.
We must not endian-convert the magic string, just the rest.
Rusty Russell [Mon, 13 Sep 2010 09:08:20 +0000 (18:38 +0930)]
tdb: fix tdb_check() on read-only TDBs to actually work.
But make sure we can still do tdb_check() inside a transaction (weird,
but we previously allowed it).
Rusty Russell [Mon, 13 Sep 2010 07:53:29 +0000 (17:23 +0930)]
tdb: support tdb_check() on r/o databases.
(Imported from SAMBA commit
bc1c82ea137e1bf6cb55139a666c56ebb2226b23)
Author: Jeremy Allison <jra@samba.org>
Date: Wed Jul 28 05:15:40 2010 -0700
Fix tdb_check() to work with read-only tdb databases. The function tdb_lockall() uses F_WRLCK internally, which doesn't work on a fd opened with O_RDONLY. Use tdb_lockall_read() instead.
Jeremy.
Rusty Russell [Mon, 13 Sep 2010 07:32:47 +0000 (17:02 +0930)]
alloc: No need for tiny.c to be executable.
Rusty Russell [Mon, 13 Sep 2010 06:31:32 +0000 (16:01 +0930)]
ccanlint: append NULL terminator to generated dependencies.
Interestingly, valgrind didn't even notice. But it crashed on (some) PowerPC.
Rusty Russell [Mon, 13 Sep 2010 04:29:15 +0000 (13:59 +0930)]
tdb2: fix remapping inside tdb_traverse_read
Because we (temporarily!) marked the tdb read_only=true, any remap would
mmap PROT_READ, and the next store would SEGV.
Pulled in more test infrastructure from tdb.
Rusty Russell [Sun, 12 Sep 2010 11:51:25 +0000 (21:21 +0930)]
tdb: missing files from checkin.
Rusty Russell [Sat, 11 Sep 2010 02:43:14 +0000 (12:13 +0930)]
tdb: unify logging code in test dir.
Rusty Russell [Sat, 11 Sep 2010 02:23:42 +0000 (11:53 +0930)]
tdb: make check more robust against recovery failures.
We can end up with dead areas when we die during transaction commit;
tdb_check() fails on such a (valid) database.
This is particularly noticable now we no longer truncate on recovery;
if the recovery area was at the end of the file we used to remove it
that way.
Rusty Russell [Sat, 11 Sep 2010 02:17:37 +0000 (11:47 +0930)]
tdb: rewrite external agent for testing.
For locking and transaction tests, we need an external process to probe the
tdb. This code was a mess, and unreliable (occasional failures). Rewrite
it so that instead of blocking and using SIGALRM, we mug fcntl and force
non-blocking locks. We use a special return to day "I couldn't because
the lock wasn't available".
I also made the operations clearer and more orthogonal rather than "what
we needed for each test" which was really hard to understand.
It turns out those occasional failures weren't spurious. Next patch!
Rusty Russell [Fri, 10 Sep 2010 03:59:54 +0000 (13:29 +0930)]
tdb: enforce hashing, via example hash in old rwlocks entry in header.
This means that older code will not be able to open new TDBs with
a non-default hash, *even* if they are using the correct hash.
Non-default hashes were unusual, but now SAMBA is considering using
a non-default hash, and avoiding corruption seems more important
than backwards compatibility for an obscure case.
Rusty Russell [Fri, 10 Sep 2010 03:20:16 +0000 (12:50 +0930)]
tdb: test that new-style TDBs with non-default hashes can't be opened.
We currently allow opening of a TDB without any idea if we're using the
right hash function. Since most people use the default, this hasn't been
a big issue.
The next change will put an example hash value in the rwlocks field in
the header: current TDB already refuses to open a TDB with this field
non-zero. This commit simply adds tests that that occurs.
Rusty Russell [Fri, 10 Sep 2010 03:06:26 +0000 (12:36 +0930)]
ccanlint: use familiar names for temporary files, show them with -vv.
Rusty Russell [Fri, 10 Sep 2010 03:05:37 +0000 (12:35 +0930)]
ccanlint: don't run valgrind tests in test dir.
We changed other tests to run in our tmpdir, missed this one.
Rusty Russell [Thu, 9 Sep 2010 14:08:36 +0000 (23:38 +0930)]
ccanlint: print out compile targets for -vv.
Rusty Russell [Thu, 9 Sep 2010 11:08:52 +0000 (20:38 +0930)]
ccanlint: allow _info file to specify tests not to bother with.
I also changed -x to be specified multiple times rather than using , separators.
Rusty Russell [Thu, 9 Sep 2010 11:08:13 +0000 (20:38 +0930)]
tdb: new command openjh for tdbtool (to use Jenkins hash)
Rusty Russell [Thu, 9 Sep 2010 10:40:39 +0000 (20:10 +0930)]
tdb2: don't hold access to tdb mmap during traverse.
Rusty Russell [Thu, 9 Sep 2010 09:29:18 +0000 (18:59 +0930)]
tdb2: change to using a hash tree.
As the locking issues with enlarging a hash were so nasty, we switch to a
tree structure for the entries. It's a hash which expands to point to
sub-hashes when it fills.
This means we no longer have a 'volatile' header: the top hash cannot move.
In fact, we no longer store a copy of the header in the tdb_context; we only
need hash_seed.
New helper functions for accessing writable areas and committing the results
(if they had to be copied). New debug test to make sure we don't hold access
while we're doing something which could cause us to unmap/remap.
Find becomes more complicated: we need to track where we found (or didn't
find) an entry so we can easily add/delete it.
Traverse becomes more complicated: we need to track where we were in the
hash tree.
Rusty Russell [Thu, 9 Sep 2010 07:25:43 +0000 (16:55 +0930)]
tdb2: update documentation.
Rusty Russell [Fri, 3 Sep 2010 13:03:40 +0000 (22:33 +0930)]
Makefile: separate out junkpages target.
Rusty Russell [Fri, 3 Sep 2010 12:58:43 +0000 (22:28 +0930)]
tdb2: make valgrind happier.
Rusty Russell [Fri, 3 Sep 2010 12:52:08 +0000 (22:22 +0930)]
tdb2: expand lock now nests inside other locks.
This eliminates all the "drop lock and retry" logic: we expand inside alloc().
Rusty Russell [Fri, 3 Sep 2010 12:39:40 +0000 (22:09 +0930)]
tdb2: use immobile free buckets, rename tests to show some ordering.
We put the free lists at the beginning of a zone; this means no record
can be larger than a zone, but means they cannot move. Once we change
hashes to be expanding, they won't move either and the result should be
simpler.
Rusty Russell [Fri, 3 Sep 2010 12:39:14 +0000 (22:09 +0930)]
tdb2: document problems with moving or enlarging hash table.
Rusty Russell [Fri, 3 Sep 2010 12:37:40 +0000 (22:07 +0930)]
tdb2: traversal test.
Rusty Russell [Thu, 2 Sep 2010 10:11:40 +0000 (19:41 +0930)]
junkcode: new addition.
Rusty Russell [Mon, 30 Aug 2010 13:14:54 +0000 (22:44 +0930)]
tdb2: fix valgrind warnings.
The unreserved headers were a real bug; the others could cause a false error too.
Rusty Russell [Mon, 30 Aug 2010 13:10:04 +0000 (22:40 +0930)]
ccanlint: fix valgrind test.
We were not actually recording valgrind failures in ccanlint!
Rusty Russell [Mon, 30 Aug 2010 13:09:51 +0000 (22:39 +0930)]
ccanlint: fix compiler warning about return value of symlink.
Rusty Russell [Mon, 30 Aug 2010 13:09:04 +0000 (22:39 +0930)]
tools: only print out creating directory the first time.
Rusty Russell [Mon, 30 Aug 2010 12:55:15 +0000 (22:25 +0930)]
tdb2: traverse and chainlock support.
These tests revealed more bugs with delete (rewritten) and hash enlargement.
Rusty Russell [Mon, 30 Aug 2010 09:39:06 +0000 (19:09 +0930)]
tdb2: tdb_append implemented, beef up tests.
Rusty Russell [Mon, 30 Aug 2010 06:54:48 +0000 (16:24 +0930)]
tdb2: more common code
Use hash_add() when resizing hash, too.
Rusty Russell [Mon, 30 Aug 2010 06:51:23 +0000 (16:21 +0930)]
tdb2: fix argument order for tdb_gradual_lock.
This explains why most of tdb_gradual_lock was not tested: thanks gcov!
Rusty Russell [Mon, 30 Aug 2010 06:33:52 +0000 (16:03 +0930)]
tdb2: extract common hashing code.
Rusty Russell [Mon, 30 Aug 2010 05:29:34 +0000 (14:59 +0930)]
tdb2: fixes and test for hash enlargement.
Rusty Russell [Mon, 30 Aug 2010 04:59:08 +0000 (14:29 +0930)]
tdb2: more tests, hash collision fixes, attribute support.
Rusty Russell [Mon, 30 Aug 2010 03:14:15 +0000 (12:44 +0930)]
ccanlint: fix abort on "-d ..".
Rusty Russell [Mon, 30 Aug 2010 03:06:23 +0000 (12:36 +0930)]
tests: now we run in tmp dir, always create temporary files in this dir.
Rusty Russell [Mon, 30 Aug 2010 01:21:48 +0000 (10:51 +0930)]
ccanlint: use up to three -v to mean more verbosity.
eg. -v dumps percentage of coverage, -vv dumps per-line data, -vvv dumps every command executed.
Rusty Russell [Mon, 30 Aug 2010 01:21:33 +0000 (10:51 +0930)]
tools: add build_verbose to show every command executed.
Rusty Russell [Mon, 30 Aug 2010 01:11:57 +0000 (10:41 +0930)]
tdb: fix lock-tracking test code after gradual lock changes.
Rusty Russell [Sat, 28 Aug 2010 11:06:22 +0000 (20:36 +0930)]
tdb2: new tests, and new fixes.
Rusty Russell [Sat, 28 Aug 2010 11:05:39 +0000 (20:35 +0930)]
tdb2: check that records are of sufficient length in tdb_check.
Rusty Russell [Fri, 27 Aug 2010 05:33:41 +0000 (15:03 +0930)]
tdb2: split expand into functions and test separately.
Rusty Russell [Fri, 27 Aug 2010 05:01:11 +0000 (14:31 +0930)]
Update main page.
Rusty Russell [Fri, 27 Aug 2010 04:27:23 +0000 (13:57 +0930)]
ccanlint: chdir to temporary dir so gcov files land there.
This means parallel "make check" works again.
Rusty Russell [Fri, 27 Aug 2010 04:15:16 +0000 (13:45 +0930)]
ccanlint: use gcov to rate test coverage (score out of 5)
Rusty Russell [Fri, 27 Aug 2010 04:14:49 +0000 (13:44 +0930)]
ccanlint: clean up code which outputs results, handle partial failure.
Rusty Russell [Fri, 27 Aug 2010 04:08:58 +0000 (13:38 +0930)]
tap: don't _exit on success
This prevents us from writing out gcov files.
Rusty Russell [Thu, 26 Aug 2010 14:38:34 +0000 (00:08 +0930)]
tdb2: more fixes and tests for enlarging hash.
- Neaten I/O function
- Don't use fill in zero_out: it's only for low-level ops.
- Don't mangle arg in tdb_write_convert: it broke write_header.
- More use of tdb_access_read, make it optionally converting.
- Rename unlock_range to unlock_lists.
- Lots of fixes to enlarge_hash now it's being tested.
- More expansion cases tested.
Rusty Russell [Thu, 26 Aug 2010 12:27:32 +0000 (21:57 +0930)]
tdb2: delete and fetch now work.
Rusty Russell [Thu, 26 Aug 2010 12:18:28 +0000 (21:48 +0930)]
tdb2: clean up locking a little bit, fix hash wrap problem.
Rusty Russell [Thu, 26 Aug 2010 10:27:56 +0000 (19:57 +0930)]
tdb2: now we can store a key!
Rusty Russell [Thu, 26 Aug 2010 07:36:47 +0000 (17:06 +0930)]
tdb2: tdb_expand on empty database now tested.
Rusty Russell [Thu, 26 Aug 2010 05:07:18 +0000 (14:37 +0930)]
tdb2: now checking a new empty database works.
Rusty Russell [Thu, 26 Aug 2010 04:29:20 +0000 (13:59 +0930)]
hash: 64-bit hash functions should take 64-bit base.
Rusty Russell [Thu, 26 Aug 2010 03:23:55 +0000 (12:53 +0930)]
tdb2: update config.h with more defines.
Rusty Russell [Thu, 26 Aug 2010 03:22:59 +0000 (12:52 +0930)]
tdb2: initial commit (doesn't work, still writing tests)
Rusty Russell [Mon, 16 Aug 2010 06:19:09 +0000 (15:49 +0930)]
Makefile: don't hide what we're doing, user can use -s.
Rusty Russell [Mon, 16 Aug 2010 06:07:19 +0000 (15:37 +0930)]
hash: 64 bit variants.
Rusty Russell [Fri, 13 Aug 2010 05:37:16 +0000 (15:07 +0930)]
tdb: use tdb_lockall_gradual by default.
This has the advantage the transactions will also use it, preventing them
from blocking.
Rusty Russell [Fri, 13 Aug 2010 05:19:59 +0000 (14:49 +0930)]
tdb: test and resolultion for tdb_lockall starvation.
Rusty Russell [Sat, 7 Aug 2010 03:11:24 +0000 (12:41 +0930)]
web: handle symlinks in bzrbrowse.cgi, fix images.
Rusty Russell [Fri, 6 Aug 2010 13:34:27 +0000 (23:04 +0930)]
web: make sure to include symlinks in tarballs
Rusty Russell [Fri, 6 Aug 2010 13:08:02 +0000 (22:38 +0930)]
Add author and maintainer fields.
Rusty Russell [Fri, 6 Aug 2010 13:01:23 +0000 (22:31 +0930)]
Add licences/ dir and symlinks for a bit more clarity.
Rusty Russell [Thu, 29 Jul 2010 00:49:01 +0000 (10:19 +0930)]
alloc: speed up tiny allocator
Rusty Russell [Wed, 28 Jul 2010 13:44:28 +0000 (23:14 +0930)]
alloc: remove unused debugging function.
Rusty Russell [Wed, 28 Jul 2010 13:40:58 +0000 (23:10 +0930)]
alloc: reduce number of large pages to 256.
This reduces the number of huge allocs, which drops test time from 6 minutes to 57 seconds.
Rusty Russell [Wed, 28 Jul 2010 13:05:08 +0000 (22:35 +0930)]
alloc: implement huge allocations
Inefficient scheme for allocations > 1/8192 of the pool size.
Rusty Russell [Tue, 27 Jul 2010 05:32:02 +0000 (15:02 +0930)]
alloc: fix bug in tiny allocator.
Rusty Russell [Tue, 20 Jul 2010 22:51:08 +0000 (08:21 +0930)]
alloc: fix typo which can cause false assertion
Rusty Russell [Thu, 15 Jul 2010 08:40:47 +0000 (18:10 +0930)]
alloc: fix bug in tiny allocator
We can have a 0 byte in the *middle* of an encoding.
Rusty Russell [Mon, 12 Jul 2010 23:42:49 +0000 (09:12 +0930)]
alloc: remove encode limit arg, and implement free array cache.
Rusty Russell [Mon, 12 Jul 2010 13:52:30 +0000 (23:22 +0930)]
alloc: first cut of tiny allocator (down to 2 bytes!)
Rusty Russell [Tue, 15 Jun 2010 10:10:44 +0000 (19:40 +0930)]
typesafe_cb: fix fallout from API changes.
Rusty Russell [Tue, 15 Jun 2010 10:02:55 +0000 (19:32 +0930)]
typesafe_cb: expose _exact and _def variants.
We can't allow NULL with the new variant (needed by talloc's set_destructor
for example), so document that and expose all three variants for different
uses.
Rusty Russell [Fri, 11 Jun 2010 03:36:40 +0000 (13:06 +0930)]
typesafe_cb: fix promotable types being incorrectly accepted by cast_if_type.
cast_if_type() should not try to degrade the expression using 1?(test):0,
as that promotes bool to int, as well as degrading functions to function
pointers: it should be done by the callers.
In particular, this fixes sparse_bsearch.
Rusty Russell [Wed, 9 Jun 2010 14:33:04 +0000 (00:03 +0930)]
alloc: reduce page header further, go down to 64k minimum.
This means we can't have more than 2^25 elements per page; that's
a maximum small page size of about 2^24 (with >8 objects per small page
we move to large pages), meaning a poolsize max of 4G.
We have a tighter limit at the moment anyway, but we should remove it
once we fix this. In particular count all-zero and all-one words in
the used field (that's what we care about: full or empty) would give us
another factor of 64 (we only care about larger pool sizes on 64-bit
platforms).
We can also restore the larger number of pages and greater inter-page
spacing once we implement the alternative tiny allocator.
Rusty Russell [Wed, 9 Jun 2010 14:22:54 +0000 (23:52 +0930)]
alloc: make small_page_bits() function rather than large_page_bits()
Turns out that now we use page numbers, this is more fundamental.
Rusty Russell [Wed, 9 Jun 2010 14:16:03 +0000 (23:46 +0930)]
alloc: use page numbers in lists to reduce overhead.
Rusty Russell [Wed, 9 Jun 2010 13:05:21 +0000 (22:35 +0930)]
alloc: implement alloc_visualize().
Rusty Russell [Wed, 9 Jun 2010 13:04:44 +0000 (22:34 +0930)]
alloc: fix page header size calculation bug, increase type safety.
Rusty Russell [Wed, 9 Jun 2010 06:44:48 +0000 (16:14 +0930)]
idtree: add examples, particularly the low-id-reuse example.
Rusty Russell [Tue, 8 Jun 2010 03:57:06 +0000 (13:27 +0930)]
alloc: first cut of new Tridge-inspired allocator
This version has limitations: pools must be at least 1MB, and allocations
are restricted to 1/1024 of the total pool size.
Rusty Russell [Mon, 7 Jun 2010 07:57:15 +0000 (17:27 +0930)]
ccanlint: don't setpgid on running commands: we want ^C to work!