Skip to content
zit zit 0.1.3
Login

zit 0.1.3

zit 0.1.3 is a serving release over 0.1.2. It keeps the same Fossil RFC revision-00 scope. Where 0.1.2 made a repository of real size and history cloneable, 0.1.3 makes serving one fast and lean: a large repository now comes up for serving immediately and holds a fraction of the memory it used to.

Highlights

Coming up for serving

Serving primed an in-memory snapshot of the whole repository before opening the listener socket. That prime is proportional to the store, so past a few tens of thousands of artifacts it outran the client's readiness probe and the client reported that the server never came up — the store could be served, just never reached in time.

The bring-up is reordered: bind the listener first, announce it, then prime, then accept. A connection that arrives during the prime queues in the kernel accept backlog and is answered once the prime completes, so the readiness window starts at the bind rather than after the read. The per-connection deadline is armed only on accept, so priming is never charged to a client's budget. On a 254,469-artifact repository a connection is accepted within milliseconds of the server starting, against a prime measured in seconds.

A push made the served snapshot stale, and the rebuild used to run inside the pushing round's own reply deadline — an O(store) rebuild charged to the request that caused it, which on a large store could exceed the deadline and drop the connection for a push that had actually landed. The rebuild now runs from a maintenance hook between connections, with no connection open to charge it to.

Serving through an index, not a copy

Priming copied every artifact's stored container out of the append-only log into an in-memory store and held them there for the server's lifetime. The log had already been scanned and every frame checksum-verified to build the record table, so the copy was a second full read whose only product was resident bytes.

The served snapshot is now a log-backed store: an index of content hash to log location, with container bytes read from the log on demand as a round emits them and released after the round. Persisted order is preserved so a clone streams correctly, and a read fault after the initial scan is reported as a server storage error so a clone is never silently truncated. Measured on a 67,499-artifact repository in ReleaseSafe, a clone taken from the indexed server materialises all 983 files of the trunk check-in byte-identical to a clone from the previous copy-based server, while peak resident memory to serve fell from about 157 MB to about 32 MB.

Also in this release

Qualification

Each published native binary is built from the same checksum-pinned source archive with Zig 0.16.0 in ReleaseSafe mode. The platform battery comprises:

The release manifest records the exact artifact checksums, the source identity, and the qualification performed for each target.

Compatibility

The command-line version string is:

zit 0.1.3 (targets Fossil RFC rev 00)

The feature scope and deliberate limitations remain those documented for 0.1.0. No repository written by 0.1.2 needs conversion.