Skip to content

447: added PlayerRecordingService instantiation & configuration#653

Merged
ibrodkin merged 16 commits into
developfrom
447-player-recording
May 21, 2026
Merged

447: added PlayerRecordingService instantiation & configuration#653
ibrodkin merged 16 commits into
developfrom
447-player-recording

Conversation

@ibrodkin
Copy link
Copy Markdown
Collaborator

Changes for Issue #447

  1. Added PlayerRecordingService configuration to ChronoPlayer configuration
  2. Added PlayerRecordingService instantiation to ChronoPlayer process
  3. Added handling for StartStoryRecording & StopStoryRecording procedures to Player DataAdminService

iameneko and others added 6 commits May 19, 2026 09:44
* Remove legacy Travis CI configuration

Travis CI is fully superseded by GitHub Actions workflows.

* Delete unused ChronoStore/ component

ChronoStore is not linked by any production component; only its own
self-contained unit tests at test/unit/chrono-store/ reference it.

- Remove ChronoStore/ source tree
- Remove test/unit/chrono-store/ unit tests (which tested only the
  removed code)
- Drop add_subdirectory(ChronoStore) from root CMakeLists.txt
- Drop add_subdirectory(chrono-store) from test/unit/CMakeLists.txt
- Update test/README.md to remove ChronoStore from the CTest naming
  table and stale legacy-tree note

* Rename docs-website/ to docs/ and consolidate doc/images/

- Rename docs-website/ -> docs/ (Docusaurus site)
- Merge unique images from doc/images/ into docs/static/img/ and
  docs/static/logos/ (skipping duplicates already present)
- Remove tracked content from doc/ (untracked working-tree files
  are left untouched)
- Update README.md image references from doc/images/* to docs/static/*
- Update deploy-website.yml path triggers and working-directory
  references to docs/
- Update CMakeLists.txt Doxygen DOXY_FILE path and lint --exclude
  paths from doc/ to docs/

* Move Dockerfile to ci/docker/, rename CI/ -> ci/, fix enviroment typo

- Move .github/docker/dockerfile -> ci/docker/ (alongside existing
  Dockerfiles), delete now-empty .github/docker/
- Rename CI/ -> ci/ for consistent lowercase directory naming
- Fix typo: CI/enviroment/ -> ci/environment/
- Update workflow docker context and hashFiles() references from
  .github/docker/** to ci/docker/** in chronolog-base, create-release,
  and publish-dev-image
- Update README.md install snippet from CI/docker/ to ci/docker/
- Update CMakeLists.txt lint --exclude and CPack comment from CI/ to ci/
- Update ci/installation/install_with_spack.sh path references
  CI/enviroment -> ci/environment

* Move configuration templates into conf/

- Create conf/ directory
- Move default_conf.json.in and default_client_conf.json.in from
  the repo root into conf/
- Update configure_file() and install(FILES ...) calls in
  ChronoVisor/CMakeLists.txt, Client/cpp/CMakeLists.txt,
  tools/cli/CMakeLists.txt, and
  test/integration/keeper-grapher/CMakeLists.txt

* Move CodeStyleFiles/ to .github/code-style/

Keep code-style configuration co-located with GitHub Actions and
tooling configuration.

- Move ChronoLog.clang-format, ChronoLog.xml, pre-commit into
  .github/code-style/ and delete the now-empty CodeStyleFiles/
- Update check-format.yml trigger path, clang-format style args,
  PR comment instructions, and header comment
- Update pre-commit hook internal path references

* Rename test/ to tests/

Align with the target directory layout (tests/ plural).

- Rename test/ -> tests/
- Update add_subdirectory(test) -> add_subdirectory(tests) in root
  CMakeLists.txt (both the standard and performance-only branches)
- Update build path hint in tests/communication/thallium_protocol_test.sh

* Rename Client/ to client/

- Rename Client/ -> client/ for consistent lowercase naming
- Update root CMakeLists.txt: add_subdirectory(Client) -> add_subdirectory(client)
- Update hashFiles() in chronolog-base, publish-dev-image, and
  create-release workflows: Client/spack.yaml -> client/spack.yaml
- Update all CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR Client/ path
  references across component, plugin, test, and tools CMakeLists.txt

* Rename Plugins/ to plugins/ and standardize plugin subdirectory names

- Rename Plugins/ -> plugins/
- Rename chronokvs/ -> chrono-kvs/, chronostream/ -> chrono-stream/,
  chronoviz/ -> chrono-viz/ for consistency with kebab-case
  component naming
- Update root CMakeLists.txt: add_subdirectory(Plugins) -> add_subdirectory(plugins)
- Update plugins/CMakeLists.txt subdirectory names
- Update test include paths for chrono-kvs headers in unit and
  integration tests

* Create src/ and move core server components into it

- Create src/ directory for all server-side ChronoLog components
- Move and rename:
    chrono_common/  -> src/chrono-common/
    ChronoVisor/    -> src/chrono-visor/
    ChronoKeeper/   -> src/chrono-keeper/
    ChronoGrapher/  -> src/chrono-grapher/
    ChronoPlayer/   -> src/chrono-player/
- Update root CMakeLists.txt add_subdirectory() calls for all five
  components
- Update all CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR path references
  across component, client, plugin, test, and tools CMakeLists.txt
- Fix stale path comments in src/chrono-common and src/chrono-player

* style: apply clang-format-18 to files surfaced by the format check

These 23 files have pre-existing format issues that were not caught
on develop because the format check only scans paths that appear in
the PR diff. The directory renames in this PR put every previously
unscanned file back through the check, so the failures appear now.
Content is unchanged — only whitespace, line breaks, and continuation
indentation per .github/code-style/ChronoLog.clang-format.

* ci(distributed-pipeline): run docker exec as --user root where needed

The chronolog-base workflow added \`docker commit --change 'USER grc-iit'\`
in PR #604 (75e0c41), making grc-iit the image's default exec user.
distributed-pipeline.yml was not updated alongside that change: it
relies on \`docker exec\` (no --user) for steps that legitimately
require root — apt-get install, useradd, service ssh start, and chown
of the shared_home volume. Those silently failed under \`|| true\`,
which is why no SSH server was running and the next step's
ssh-keyscan loop tripped \`set -e\`.

The issue stayed hidden on develop because hashFiles('.github/docker/**')
keeps reusing the legacy USER=root cached base image. This PR's rename
to ci/docker/** invalidates that cache, forcing a fresh build that
exposes the bug.

Pass --user root explicitly to the docker exec calls that need it:
- Create grc-iit user and install SSH in containers
- Prepare SSH keys (the final chown/chmod step)
- Copy workspace to containers (the chown step)
- Fix /home/grc-iit ownership
- Prepare hosts files (mkdir + chown step)

* Co-locate client examples with each binding

Move the examples next to the binding they target so each binding
owns its own examples directory, rather than splitting them under a
sibling examples/ folder:

  client/examples/cpp/    -> client/cpp/examples/
  client/examples/python/ -> client/python/examples/

- Drop client/examples/CMakeLists.txt and the
  add_subdirectory(examples) in client/CMakeLists.txt
- Add add_subdirectory(examples) to client/cpp/CMakeLists.txt so the
  C++ example targets are still built and installed
- Python examples stay non-built (matches the previous behavior of
  client/examples/CMakeLists.txt, which only descended into cpp/)

No source or CMake target changes — \${CMAKE_BINARY_DIR}/client/cpp/include
paths used by the example targets remain correct.

* Delete unused tools/deploy/others/

These bringup scripts for Bookkeeper, Kafka, Lustre, MongoDB,
OrangeFS, and Redis are research-comparison artifacts: lab-bound
(env_ares.sh, env_cham.sh, env_hec.sh hard-code cluster paths),
not referenced by any build target, CI workflow, test, plugin,
or product source, and not functionally updated in this repo's
history (last touched only by the tools/ reorganization in #404).

Removing the directory along with its single mention in
tests/README.md. History is preserved in git for anyone who needs
to reproduce a published benchmark.

* Consolidate dynamic_deploy.sh: port -i + resource limits, drop orphan

.github/scripts/dynamic_deploy.sh was added in PR #502 to support
the ci-modular.yml / docker-build-publish.yml workflows, both of
which were later removed. The script has been an orphan since then
(no workflow or script references it) but had picked up two useful
improvements over its ci/docker/ sibling.

- Port -i IMAGE_NAME flag to ci/docker/dynamic_deploy.sh so users
  can target images other than ghcr.io/grc-iit/chronolog:latest
  (e.g. dev tags, local builds)
- Port the compose-level resource caps (mem_limit, mem_reservation,
  cpus, shm_size) to the same script so user-facing runs match the
  resource shape that the orphan version used in CI
- Delete .github/scripts/dynamic_deploy.sh and the now-empty
  .github/scripts/ directory

README.md already points at ci/docker/dynamic_deploy.sh, so the
user-facing entry point is unchanged.

* Remove ci/docker/dynamic_deploy_pearc2025.sh

PEARC 2025 demo script kept only as a frozen snapshot of the deploy
flow at the time of the conference. No workflow, test, or doc
references it; the conference has passed; ci/docker/dynamic_deploy.sh
is the supported alternative for users. History remains in git for
anyone reproducing the PEARC artifact.

* Flatten tools/deploy/ChronoLog/ into tools/deploy/

With tools/deploy/others/ gone, ChronoLog/ is the only subdirectory
under tools/deploy/ — keeping it adds a path level for no benefit.

- Move build.sh, install.sh, deploy_local.sh, deploy_cluster.sh,
  local_single_user_deploy.sh, single_user_deploy.sh up one level
- Update tools/deploy/build.sh internal forwarding comment in
  CMakeLists.txt
- Update install(PROGRAMS ...) rule in CMakeLists.txt that ships the
  deploy-from-install helpers
- Update CPackConfig.cmake comment
- Update tests/README.md fixture reference for end-to-end/data-integrity
- Update plugins/chrono-stream/README.md cd target
- Update internal cross-references in single_user_deploy.sh and
  local_single_user_deploy.sh (they invoke build.sh / install.sh
  via REPO_ROOT)
- Update workflow paths in publish-dev-image.yml, create-release.yml,
  local-pipeline.yml, and distributed-pipeline.yml

* Remove dead ci/installation/, ci/spack/, ci/environment/

All three date back to 0a186a8 (2022-03-01 "Initial commit after
cleanup") and have been untouched since except for the CI/ -> ci/
rename in this branch. None are referenced by any workflow, CMake
target, script, doc, or README outside themselves.

- ci/installation/install_with_spack.sh clones github.com/scs-lab/ChronoLog
  (defunct org — repo moved to grc-iit/ChronoLog years ago) and refers
  to a ci/environment/spack.lock that does not exist in the tree.
- ci/installation/print_env.sh is a 4-line CLion remote-dev helper
  that nothing invokes.
- ci/spack/packages/socketpp/package.py is a 0-byte stub — the
  package was never written. ci/spack/repo.yaml is a 2-line
  namespace declaration with no packages.
- ci/environment/ (spack.yaml listing just [cmake, mpich~fortran,
  boost] and a 2020-era Ubuntu/gcc-9.3 module loads file) was
  consumed only by the dead install_with_spack.sh; orphan once
  installation/ is gone.

The supported install path today is the chronolog-base Docker image
(ci/docker/dockerfile + chronolog-base.yml + root spack.yaml) and
the user-facing tools/deploy/ scripts. ci/ now contains only the
actively used ci/docker/.

* Flatten ci/docker/ to docker/ at the repo root

With ci/installation/, ci/spack/, and ci/environment/ gone, ci/ wrapped
a single child (docker/), and the ci/ label was actively misleading: the
directory contains end-user/product container assets, not CI internals.
dynamic_deploy.sh is the user-facing script the README points at;
chronolog.dockerfile, chronolog-ssh.dockerfile, local.dockerfile, and
distributed.docker-compose.yaml are deployment artifacts.

Promote the directory to docker/ at the repo root — a widely-understood
top-level convention — and drop the empty ci/ wrapper.

- Rename ci/docker/ -> docker/
- Update hashFiles('ci/docker/**') and `context: ci/docker` in the
  chronolog-base, publish-dev-image, and create-release workflows
- Update README.md user-facing wget snippet
- Update CMakeLists.txt lint --exclude path
- Update CPackConfig.cmake comment

* Remove Docusaurus scaffolding leftovers from docs/

The doc site keeps a few files from \`docusaurus init\` that the
ChronoLog content never adopted:

- docs/static/img/undraw_docusaurus_mountain.svg
- docs/static/img/undraw_docusaurus_react.svg
- docs/static/img/undraw_docusaurus_tree.svg
  (default illustrations; no markdown, theme, or config references them)
- docs/src/pages/markdown-page.md
  (scaffolding sample titled \"You don't need React to write simple
  standalone pages\"; mapped to a public /markdown-page route that
  nothing links to)

No theme overrides, no config entries, no doc pages reference these.
Other unused project-specific images are kept on purpose.

* Remove inert unversioned docs/docs/ placeholders

All six pages under docs/docs/ were \"Under Construction — see v2.4.0\"
stubs written when v2.4.0 was the latest release. Three releases
(v2.5.0 / v2.6.0 / v2.7.0) have shipped since, each frozen into its
own versioned_docs/version-X.Y.Z/. With
\`includeCurrentVersion: false\` in docusaurus.config.ts:77, the
unversioned tree is not built or served — the placeholders never
reach readers.

- Delete docs/docs/ (architecture, client, for-developers,
  getting-started, plugins, tutorials)
- Reduce docs/sidebars.ts to an empty SidebarsConfig with a comment
  explaining why (the docs plugin's sidebarPath still has to resolve;
  versioned sidebars under docs/versioned_sidebars/ are unaffected)

If v2.8.0 documentation is later authored, recreate docs/docs/ and
flip \`includeCurrentVersion\` to true in the same change.

* Remove dead docs/src/ files

- docs/src/components/YouTube.tsx: <YouTube id> iframe embed
  component, not imported by any markdown or component in the doc
  site (versioned or unversioned).
- docs/src/theme/Footer/index.tsx: docusaurus swizzle --wrap scaffold
  that imports @theme-original/Footer and re-exports it unchanged.
  Removing it falls back to the built-in Footer, which still
  delegates to the customized overrides under Footer/Layout/ and
  Footer/Links/.

* Fix straggling stale paths missed by the structural rename

Comprehensive path audit caught a handful of references that still
pointed at the old layout. None were build-breaking (all are in docs,
comments, or runtime-path strings that no code actually consumes),
but they would confuse readers.

- cmake/CPackConfig.cmake: source-package exclude pattern
  docs-website/build/ -> docs/build/ (the Docusaurus build dir
  moved when docs-website/ was renamed to docs/)
- plugins/chrono-{viz,stream}/**.md, plugins/chrono-viz/grafana_plugin/README.md,
  plugins/chrono-viz/grafana_backend/{README,TEST_SUMMARY}.md:
  Plugins/chronoviz -> plugins/chrono-viz
  Plugins/chronostream -> plugins/chrono-stream
  (cd <path> instructions in plugin developer docs)
- tests/README.md: drop chrono-store / chrono_store mentions left over
  after ChronoStore was deleted (layout row, install summary, naming
  table component list, sample-files table, installed-executables
  table) and update one build-dir hint from test/ to tests/
- tests/CMakeLists.txt: skip message test/overhead -> tests/overhead
- tests/performance/ares_test.sh: header comment test/performance/ ->
  tests/performance/
- tools/cli/client_cli.cpp: header comment test/performance/ ->
  tests/performance/

* Fix REPO_ROOT in deploy scripts after tools/deploy/ flatten

When tools/deploy/ChronoLog/local_single_user_deploy.sh and
tools/deploy/ChronoLog/single_user_deploy.sh were moved up one level
to tools/deploy/, their REPO_ROOT computation kept the old
\`SCRIPT_DIR/../../../\` (three levels up from the script). At the new
location that resolves to the *parent* of the repo, so the scripts
look for build.sh/install.sh outside the working tree and fail with
\"Error: /home/grc-iit/tools/deploy/build.sh is not executable or
not found.\" in the local-deployment and distributed-deployment
pipelines.

Drop one level of \`..\` so REPO_ROOT resolves to the repo root again.

* Fix REPO_ROOT in build.sh and install.sh after tools/deploy/ flatten

Same root cause as the previous fix to local_single_user_deploy.sh
and single_user_deploy.sh: build.sh and install.sh also compute
REPO_ROOT with three \`..\` segments, which lined up with the old
tools/deploy/ChronoLog/ location but now overshoots into the parent
of the repo. CI surfaces this as:

  ==> Error: No such environment: '/home/grc-iit'
  CMake Error: The source directory \"/home/grc-iit\" does not appear
  to contain CMakeLists.txt.

Drop one level of \`..\` so REPO_ROOT lands on the repo root.
deploy_local.sh and deploy_cluster.sh don't need a change — they're
sourced/called via SCRIPT_DIR by the wrapper scripts and don't
compute REPO_ROOT themselves.

* Address PR 563 review comments after folder-structure refactor

- docker/{local,chronolog}.dockerfile: fix deploy-script path
  (tools/deploy/ChronoLog/ → tools/deploy/) after the flatten.
- CMakeLists.txt: drop the else branch that recursed into
  tests/performance — that directory has no CMakeLists.txt, so
  configure failed with CHRONOLOG_BUILD_TESTING=OFF.
- .gitignore: rename docs-website/ entries to docs/ to match the
  renamed Docusaurus directory.
- plugins/chrono-viz/README.md: update layout diagram from
  chronoviz/ to chrono-viz/.
* Set up website and docs scaffolding for v2.8.0 release

- Add v2.8.0 release entry to website releases page; demote v2.7.0
  (drop Latest badge, point docs link to /docs/2.7.0/)
- Duplicate Docusaurus v2.7.0 docs into version-2.8.0 and bump
  internal version references; register the new version in
  versions.json, navbarSidebarsByVersion, and lastVersion

Content updates for the new v2.8.0 features will follow in
subsequent commits.

Refs #649

* Update v2.8.0 docs for repo restructure and new extraction model

- Translate stale post-#563 paths across all v2.8.0 docs:
  ChronoKeeper/include -> src/chrono-keeper/include and 4 sibling
  components; tools/deploy/ChronoLog/ -> tools/deploy/;
  CodeStyleFiles/ -> .github/code-style/; CI/docker/ -> docker/;
  Client/(cpp|python|spack.yaml) -> client/...; Plugins/chronoX ->
  plugins/chrono-X; test/<subdir>/ -> tests/<subdir>/.
- Drop the ChronoStore unit-test section (component deleted in #563)
  and rephrase architecture diagrams' "the ChronoStore" as
  "the HDF5 archive". Retire Unit_ChronoStore_StoryChunk example.
- Replace v2.7.0 Extractor narrative with the configurable
  ExtractionModule / ExtractionChain introduced in #633: rewrite
  the ChronoKeeper and ChronoGrapher architecture rows; add a full
  ExtractionModule schema section (csv_extractor,
  single_endpoint_rdma_extractor, dual_endpoint_rdma_extractor,
  hdf5_extractor) to server-configuration.md; document
  extraction_stream_count + extractor-chain composition in
  performance-tuning.md.
- Document the IngestionThreadCount knobs added in #636 across
  KeeperRecordingService / KeeperGrapherDrainService /
  PlaybackQueryService, with defaults and tuning guidance.
- Fix the conf/default_conf.json.in link target on the
  configuration page.

Refs #649
…652)

* feat(chronokvs): support config file path in constructors (#470)

ChronoKVS was hardcoded to the ChronoLog client defaults (localhost:5555),
limiting it to local deployments. Add an optional config_path parameter to
ChronoKVS, ChronoKVSMapper and ChronoKVSClientAdapter constructors so callers
can point at a ChronoLog client JSON configuration and connect to remote
deployments. Default-constructed instances keep their previous behavior.

The adapter loads the file via ClientConfiguration::load_from_file() before
connecting and throws std::runtime_error if loading fails, matching the
acceptance criteria in the issue.

The writer/reader examples accept --config/-c (parse_conf_path_arg) so the
plumbing can be exercised end-to-end. Adds a unit test that verifies the
constructor throws on missing or section-less config files without requiring
a running ChronoLog deployment.

* ci(local-pipeline): sanitize branch name for artifact uploads

actions/upload-artifact rejects names containing '/'. Branch names like
'feature/470-...' caused the ctest-results upload step to fail. Compute
a slugified branch name (slashes replaced with dashes) once and reuse it
for both artifact uploads and the job summary references.

* refactor(chronokvs): rename confManager to client_config

Per review feedback on PR #628: confManager is a remnant of the old
ConfigurationManager class. Use a clearer client-facing name.

* refactor(chronokvs): replace throwing constructors with noexcept Create() factory

Per review feedback on PR #628 (Inna): throwing exceptions across a
client-library boundary forces callers to wrap construction in try/catch
without an obvious set of exception types to catch. Convert the public
ChronoKVS API to a factory pattern instead:

- Make ChronoKVS constructors private.
- Add static std::unique_ptr<ChronoKVS> Create(...) noexcept overloads
  that catch any construction-path exception, log it via the configured
  log level, and return nullptr to signal failure.
- Update examples, integration test, and unit tests to use the factory
  and check for nullptr instead of catching std::runtime_error.

Internal layers (ChronoKVSMapper, ChronoKVSClientAdapter) keep using
exceptions for clarity; they are now caught at the library boundary
inside Create() rather than escaping to user code.
@ibrodkin ibrodkin changed the base branch from develop to main May 19, 2026 17:44
@ibrodkin ibrodkin changed the base branch from main to develop May 19, 2026 17:44
@github-actions

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor

@iameneko iameneko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ran a review focused on critical issues; these 4 were found.

Comment thread src/chrono-visor/src/KeeperRegistry.cpp Outdated
Comment thread src/chrono-player/src/ChronoPlayer.cpp
Comment thread src/chrono-visor/src/KeeperRegistry.cpp Outdated
Comment thread src/chrono-player/src/PlayerDataStore.cpp
@github-actions

This comment was marked as resolved.

@ibrodkin ibrodkin requested a review from iameneko May 21, 2026 16:08
Comment thread src/chrono-player/src/PlayerDataStore.cpp Outdated
@ibrodkin ibrodkin merged commit 2fc304e into develop May 21, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ChronoPlayer: Add StartStoryRecording & StopStoryRecording notifications

3 participants