Skip to content

ChronoLog 3.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:14
· 189 commits to main since this release

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.h5 to <archive>/<chronicle>/<story>/<start>.<group>.<grapher start>.<incarnation>.<sequence>.vlen.h5. Names such as a.b/c and a/b.c no 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_ip and a remote visor now listens on and announces its own address. Before, every reader announced 127.0.0.1:5557, and one could block in Connect.
  • 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_secs and archive_window_secs are 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 nocto on player nodes, and keep acdirmax below 70 s with the template settings (the NFS default, 60 s, is fine). lookupcache=positive is no longer needed. deploy_cluster.sh --start warns 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 -c and deploy_cluster.sh -c remove 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_interaction reads through the Python client's ReplayStory, 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