ChronoGrapher
ChronoGrapher is the component that continues the job of sequencing and merging of the partial StoryChunks created by the ChronoKeepers on the first tier, assembling the complete time-range bound StoryChunks out of them, and archiving the complete StoryChunks into the persistent storage tier.
The ChronoGrapher design follows the StoryPipeline Data Model and mirrors the design of the ChronoKeeper. The ChronoLog deployment allows for only one ChronoGrapher process within the RecordingGroup, and it's usually deployed on the storage node.
| Component | Description |
|---|---|
| Recording Process Registry Client | The client side of RPC communication between the ChronoGrapher process and ChronoVisor's RecordingProcessRegistryService. Used to send register/unregister and periodic heartbeat/statistics messages to ChronoVisor. |
| DataStore Admin Service | Listens to Start/Stop Story recording notifications from ChronoVisor. These notifications trigger instantiation or dismantling of the appropriate StoryPipelines based on client data access requests. |
| Grapher Recording Service | The RPC service that receives partial StoryChunks from ChronoKeeper processes using Thallium RDMA communication. |
| StoryChunk Ingestion Queue | Ensures thread-safe communication between the ingestion threads of the Recording Service and the sequencing threads of the Grapher Data Store. Each active StoryPipeline has a pair of active and passive StoryChunkIngestionHandles to manage StoryChunk processing efficiently. |
| Grapher Data Store | Maintains a StoryPipeline for each active story, merging ingested partial StoryChunks into complete time-range bound StoryChunks and retiring the complete StoryChunks to the Story Chunk Extraction Queue. |
| StoryChunk Extraction Queue | Provides a thread-safe communication boundary between the Grapher Data Store and the ExtractionModule as retired StoryChunks leave their StoryPipelines and wait to be picked up by an extraction stream. |
| ExtractionModule | A configurable pipeline of extractors that consumes retired StoryChunks from the extraction queue and forwards each chunk through every extractor in the chain. The module owns a fixed-size pool of extraction-stream threads (extraction_stream_count) that drain the queue in parallel. The default ChronoGrapher chain contains a single hdf5_extractor that serializes StoryChunks to the HDF5 archive under hdf5_archive_dir. Additional extractor types are available (csv_extractor, single_endpoint_rdma_extractor); the chain is assembled from JSON at startup — see Server Configuration → ExtractionModule. |