Repository navigation
ChronoLog 3.3.0
Highlights
Manifest-indexed archive (#721). ChronoPlayer used to find archive files by listing the archive directory. On NFS a listing can be as old as the directory cache, so a replay issued after the keepers freed a late-written window could return CL_SUCCESS without its events. Now each ChronoGrapher records every file it publishes and every story it destroys in its own log under <archive>/%manifest/, before the keepers may free the chunk, and players find files only through those records.
- One directory per story. Files move from
<archive>/<chronicle>.<story>.<start>.vlen.h5to<archive>/<chronicle>/<story>/<start>.<group>.<grapher start>.<incarnation>.<sequence>.vlen.h5. Names such asa.b/canda/b.cno longer share files, names may contain/, and file names stay unique across grapher restarts. - Destroy on a shared file system. A destroy deletes the story's files but keeps its directories, so a cached "not found" on another NFS client cannot hide the files of a story created again.
- Replay keeps its group (#724). A story's recording group is chosen from its story id, so a story released and acquired again returns to the same group and its replay no longer misses recent events.
- Reader clients on several hosts (#723). A reader with a loopback
ClientQueryService.service_ipand a remote visor now listens on and announces its own address. Before, every reader announced127.0.0.1:5557, and one could block inConnect. - Docs and tests. A new HDF5 Archive page, NFS guidance in the multi-node guide, and updated contributor pages. The distributed pipeline runs the archive tests on an NFS export (#726), and the unit suite grows from 384 to 480 tests.
Upgrading from 3.2
- Start on a new archive directory. 3.3.0 does not read or delete archives written by earlier releases, and there is no migration tool. Delete, move or copy
%manifest/only together with the story directories. - Clients. The protocol version stays 3, so 3.2.0 clients still connect. Rebuild C++ clients and reinstall the Python wheel to get the reader address fix.
- Configuration. The player's
archive_scan_interval_secsandarchive_window_secsare removed (ignored if present). - Clocks. Grapher hosts and the archive's file server must stay within 120 s of each other.
- NFS. Do not mount the archive with
noctoon player nodes, and keepacdirmaxbelow 70 s with the template settings (the NFS default, 60 s, is fine).lookupcache=positiveis no longer needed.deploy_cluster.sh --startwarns about both. See the multi-node deployment guide.
Behavior changes
- A grapher exits at startup if it cannot open its manifest log. A window whose record cannot be appended is a failed write, and the keepers send the chunk again.
deploy_local.sh -canddeploy_cluster.sh -cremove only the archive's own files, through the manifest; other data in the output directory stays.- A destroy refuses a chronicle or story directory that is a symlink.
- A client with no login name (started by
docker exec, for example) logs the effective user's name instead of uninitialized memory (#727). - chrono-mcp:
retrieve_interactionreads through the Python client'sReplayStory, so it also returns events still on the keepers.
Known issues
- Deleting one RPC client unregisters the RPC for every other client on the engine: #707.
- A failed story start leaves the story bound to its group, and its events are lost: #725.
- Two reader-mode clients on one host both bind port 5557: #719.
- A grapher that is down during a destroy keeps that story's files from its last 120 s, and they are replayed once the story is created again. Manifest logs only grow (about 190 bytes per file).
- Other open items: #708, #709 (failed archive writes), #711, #712, #715 (resource use), #716, #717, #718 (deployment).
Full Changelog: v3.2.0...v3.3.0