Here's an update on the HAMMER work!
Current status:
* Passes all standard filesystem stress tests and buildworld will
run with a HAMMER /usr/obj. Large histories are able to accumulate
without effecting performance.
* Pruning and reblocking code is in and partially tested, but now needs
more stringent testing.
* Full historical access appears to be working but needs testing.
Note that a sync is still needed to flush dirty cached data prior
to acquiring a timestamp for the 'snapshot' to be set in stone.
(dirty data cached in-memory has no historical tags and must be
committed to physical disk before it can be accessed historically).
Current bugs:
* There is one known bug in the standard operations code paths
that results in an assertion in HAMMER's I/O subsystem.
* There are probably bugs in the reblocking and/or pruning code. More
likely in the reblocking code.
There are two big-ticket and several little-ticket items left. HAMMER
will officially go Alpha when the big-ticket items are done, and beta
when we get a few of the little-ticket items done.
Big ticket items left:
* UNDO (crash recovery) code. Currently it writes out undo records but
they are not yet sequenced, buffer writes are not yet ordered, and
there is no mount-time recovery code yet.
This is the last item needed before HAMMER can go operational.
* Filesystem full handling. Currently no space is reserved for dirty
cached data so it is possible to create/write files and for HAMMER
to not have sufficient space left on-disk to flush it.
Little ticket items:
* Automated reblocking (currently these functions are manually
initialized via the hammer utility).
* I/O clustering and preliminary BMAP op when writing out large files.
* CRC checking (CRC fields are reserved but not entirely generated yet
and not yet checke...