Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
934a83c
remove FIXME
junhaoliao Aug 24, 2025
5bf23c2
Merge branch 'main' into docker-compose
junhaoliao Aug 24, 2025
83cc9d1
reformat
junhaoliao Aug 24, 2025
82abc07
reformat
junhaoliao Aug 24, 2025
0fb2294
Update garbage collector logs directory mapping
junhaoliao Aug 24, 2025
c8ffb94
Remove unused component argument parsers
junhaoliao Aug 24, 2025
83e902a
Remove unused component argument parsers
junhaoliao Aug 24, 2025
5f2e5cd
Refactor dependency checks to include docker-compose status validation
junhaoliao Aug 24, 2025
edfa9c9
Refactor log directory handling to use constant path definitions
junhaoliao Aug 24, 2025
7b3965e
Add constants for archive and stream directory paths
junhaoliao Aug 24, 2025
cd84be8
remove unused component groups and functions
junhaoliao Aug 24, 2025
aa12bdb
Remove unused CONTROLLER_TARGET_NAME constant from start_clp.py
junhaoliao Aug 24, 2025
5365722
fix staging dirs
junhaoliao Aug 24, 2025
21ef703
fix: update command to check if Docker Compose is running
junhaoliao Aug 24, 2025
d2cdfbc
add AWS env credentials support
junhaoliao Aug 24, 2025
4f56709
Merge branch 'main' into docker-compose
junhaoliao Aug 25, 2025
f0db07f
Update container image name in start_clp.py
junhaoliao Aug 26, 2025
655600d
Merge remote-tracking branch 'origin/main' into docker-compose
junhaoliao Sep 3, 2025
5f24ce7
add support for configurable CLP WebUI rate limiting
junhaoliao Sep 3, 2025
3df20fc
update WebUI server path in start_clp.py and docker-compose configura…
junhaoliao Sep 3, 2025
c6f81ad
copy docker-compose.yml in package task
junhaoliao Sep 3, 2025
db9c20f
use absolute paths in archive and stream storage configurations
junhaoliao Sep 3, 2025
ea03e17
refactor: centralize environment variable management and enhance vali…
junhaoliao Sep 4, 2025
60994ee
fix: use List[str] type hint for command parameter in start_clp.py
junhaoliao Sep 4, 2025
7e25d75
refactor: remove `dump_to_env_vars_dict` methods and centralize envir…
junhaoliao Sep 4, 2025
3e24e4e
lint
junhaoliao Sep 4, 2025
cbb9ce1
refactor: modularize and simplify start_clp.py by introducing DockerC…
junhaoliao Sep 4, 2025
3eb8dfe
refactor: remove obsolete node-specific directory configuration comments
junhaoliao Sep 4, 2025
669fa9c
refactor: remove redundant `conf_dir` parameter and use centralized c…
junhaoliao Sep 4, 2025
acee071
refactor: rename `controllers` module to `controller` and update impo…
junhaoliao Sep 4, 2025
3c45cfa
refactor: make `validate_log_directory` private and update references…
junhaoliao Sep 4, 2025
ed20110
refactor: rename `conf_dir` to `_conf_dir` and update references to r…
junhaoliao Sep 4, 2025
4d1f5aa
refactor: make `get_ip_from_hostname` private and update all references
junhaoliao Sep 4, 2025
3a698bb
refactor: extract `transform_for_container_config` method to simplify…
junhaoliao Sep 4, 2025
cca84f4
refactor: centralize and simplify path definitions and container conf…
junhaoliao Sep 4, 2025
537398a
refactor: streamline container service configuration with `transform_…
junhaoliao Sep 4, 2025
42442b8
fix imports
junhaoliao Sep 4, 2025
a3288ae
reorganize imports
junhaoliao Sep 4, 2025
5b36779
fix: adjust volume path formatting in docker-compose
junhaoliao Sep 4, 2025
93882af
fix: correct typo in comment for scheduler healthcheck in docker-compose
junhaoliao Sep 4, 2025
a4d8e1f
refactor: unify volume path definitions and remove redundant staging …
junhaoliao Sep 4, 2025
63e6d72
remove comment
junhaoliao Sep 4, 2025
0531a7b
feat: implement `stop` method in `DockerComposeController` and update…
junhaoliao Sep 4, 2025
f93aec7
refactor: reorder volume definitions in docker-compose for consistenc…
junhaoliao Sep 4, 2025
6a20628
revert error message in start_clp.py
junhaoliao Sep 4, 2025
0935658
refactor: standardize logger messages from "Initializing" to "Provisi…
junhaoliao Sep 4, 2025
ad6192a
remove comment
junhaoliao Sep 4, 2025
9469db4
docs: update multi-node deployment guide and add Docker Compose desig…
junhaoliao Sep 4, 2025
110e9fa
docs: refine Docker Compose design doc for clarity and consistency
junhaoliao Sep 4, 2025
045dde6
refactor: update CLP container configuration to use execution contain…
junhaoliao Sep 4, 2025
fa87d92
refactor(controller): move directory creation logic from `_provision`…
junhaoliao Sep 4, 2025
b6ac2c6
feat(controller): add function to dump shared container configuration…
junhaoliao Sep 4, 2025
bfd8c7b
lint
junhaoliao Sep 4, 2025
2b7959b
refactor(clp-py-utils): update staging directory handling in S3 stora…
junhaoliao Sep 4, 2025
f9eb88c
docs(design): Enhance Docker Compose design doc with diagrams and det…
junhaoliao Sep 4, 2025
0f5bd45
fix title case
junhaoliao Sep 4, 2025
0656928
Update references to docker-compose.yml to docker-compose.yaml.
junhaoliao Sep 4, 2025
66dcbb2
feat(docker): add project name to docker-compose and enhance running …
junhaoliao Sep 10, 2025
09ef298
fix lint
junhaoliao Sep 10, 2025
d3b6a67
fix(taskfile): update default task to `docker-images:package`
junhaoliao Sep 10, 2025
6148a65
feat: reset default ports for container configs.
junhaoliao Sep 17, 2025
0ab99f0
fix(docker): update MongoDB connection string to use internal port
junhaoliao Sep 17, 2025
263be6f
fix(controller): update webui configuration to use container-specific…
junhaoliao Sep 17, 2025
51d1b55
add ownership management for data and logs directories when running a…
junhaoliao Sep 17, 2025
0066386
fix(controller, docker-compose): update user and group ID handling fo…
junhaoliao Sep 17, 2025
bc9ab99
fix(search): enable direct connection for MongoDB client in search.py
junhaoliao Sep 20, 2025
8008138
revert direct connection option for MongoDB client in search.py
junhaoliao Sep 20, 2025
34b60bd
refactor(controller): rename provision methods to set_up_env_for_* to…
junhaoliao Sep 22, 2025
9f63481
reorder private functions
junhaoliao Sep 22, 2025
2344db9
add documentation
junhaoliao Sep 22, 2025
2ba93d7
change visibility of `set_up_env_for` function from public to private…
junhaoliao Sep 22, 2025
ce94225
Improve type hints.
junhaoliao Sep 22, 2025
5225870
docs(clp-package-utils): add docstring for is_docker_compose_running …
junhaoliao Sep 22, 2025
cecf5b2
docs(clp-package-utils): add docstring for check_docker_dependencies …
junhaoliao Sep 22, 2025
0c0c562
docs(clp-package-utils): add docstring for _validate_log_directory fu…
junhaoliao Sep 22, 2025
762884b
remove `None` return type annotation from _validate_log_directory fun…
junhaoliao Sep 22, 2025
fc515db
Rename transform_for_container_config to transform_for_container; add…
junhaoliao Sep 22, 2025
268c144
add docs for x-service-defaults & x-healthcheck-defaults in docker-co…
junhaoliao Sep 22, 2025
c1d7b23
Merge branch 'main' into docker-compose
junhaoliao Sep 24, 2025
fc7aae3
remove garbage-collector's dependency condition on query-scheduler.
junhaoliao Sep 24, 2025
cda0348
Split base services into a separate docker-compose.base.yaml; Launch …
junhaoliao Sep 24, 2025
e506f6d
feat(controller): Add instance ID support for Docker Compose project …
junhaoliao Sep 24, 2025
93034fe
remove network to use default network with bridge driver
junhaoliao Sep 24, 2025
7ebdbb6
Merge branch 'main' into docker-compose
junhaoliao Sep 25, 2025
ca62009
fix(controller): update clp_home to be private variable.
junhaoliao Sep 25, 2025
82cc48c
Use unique ids to launch dev clp package.
junhaoliao Sep 25, 2025
8f6ba1b
remove trailing space
junhaoliao Sep 25, 2025
2aff301
remove `execution_container` field from clp-config.yml template
junhaoliao Sep 25, 2025
5c91bf3
fix(docker-compose): update `include` array syntax to use [] format.
junhaoliao Sep 25, 2025
049e269
update service name from `db` to `database`.
junhaoliao Sep 25, 2025
fc70c05
fix(docker-compose, controller): correct configuration file variable …
junhaoliao Sep 25, 2025
2cb1807
add _HOST postfix to path env var names for consistency
junhaoliao Sep 25, 2025
08472d1
Merge branch 'main' into docker-compose
junhaoliao Sep 25, 2025
09658e5
Merge branch 'main' into docker-compose
junhaoliao Sep 26, 2025
e657feb
fix: the webui service should depend on db-table-creator rather than …
junhaoliao Sep 26, 2025
c79259a
Merge branch 'main' into docker-compose
junhaoliao Oct 1, 2025
af96fc8
lint
junhaoliao Oct 1, 2025
320dd11
Merge branch 'main' into docker-compose
junhaoliao Oct 2, 2025
08644f4
Merge branch 'main' into docker-compose
junhaoliao Oct 2, 2025
dd56d04
fix: Replace container_name with hostname for services to avoid name …
junhaoliao Oct 2, 2025
5298540
refactor(docker-compose): move image definition to service defaults.
junhaoliao Oct 2, 2025
140187f
refactor(docker-compose): Remove image entry from reducer service.
junhaoliao Oct 2, 2025
68586f0
refactor(docker-compose): add default fallback for image and storage …
junhaoliao Oct 2, 2025
cba044a
improve docs
junhaoliao Oct 3, 2025
8a6790f
Merge branch 'main' into docker-compose
junhaoliao Oct 3, 2025
f41e22a
refactor(docker-compose): use list syntax for healthcheck test command.
junhaoliao Oct 3, 2025
da6c17f
Merge branch 'main' into docker-compose
junhaoliao Oct 6, 2025
02fcbe7
fix(docker-compose): revert workers log level to hardcoded "warning".
junhaoliao Oct 6, 2025
6b0e1f2
fix(docker-compose): Fix environment variable name for results cache …
junhaoliao Oct 6, 2025
ddcf760
refactor(clp-package-utils): Move EnvVarsDict type alias below imports.
junhaoliao Oct 6, 2025
4134b1a
refactor(clp-package-utils): Rename LOGS_FILE_MODE to LOG_FILE_ACCESS…
junhaoliao Oct 6, 2025
f483abd
reflow comments to 100 char per line
junhaoliao Oct 6, 2025
7d4f47d
refactor(clp-package-utils): Rename deploy method to start and adjust…
junhaoliao Oct 6, 2025
064f365
refactor(clp-package-utils): Rename _provision method to _set_up_env …
junhaoliao Oct 6, 2025
7beb199
docs(clp-package-utils): Update docstrings to use “sets up” phrasing.
junhaoliao Oct 6, 2025
3507a1b
docs(clp-package-utils): Standardize return docstrings; Remove return…
junhaoliao Oct 6, 2025
eb2754a
refactor(clp-package-utils): Add spacing before log and data director…
junhaoliao Oct 6, 2025
cae66df
refactor(clp-package-utils): Move logs directory assignment after dat…
junhaoliao Oct 6, 2025
dffc2f2
refactor(clp-package-utils): Rename logs_file -> log_file
junhaoliao Oct 6, 2025
c0ef4ff
refactor(clp-package-utils): Rename LOGS_FILE variables to LOG_FILE i…
junhaoliao Oct 6, 2025
95404d0
refactor(clp-package-utils): Remove redundant flush after writing ins…
junhaoliao Oct 6, 2025
e1db192
Clarify resolving to IPv4 in the docstring - Apply suggestions from c…
junhaoliao Oct 6, 2025
630329b
Remove redundant param description in `_get_ip_from_hostname()` - App…
junhaoliao Oct 6, 2025
d9da763
refactor(clp-package-utils): Rename db logging config variable and en…
junhaoliao Oct 6, 2025
c200502
use long form `:readonly` instead of short form `:ro` in binding moun…
junhaoliao Oct 6, 2025
5751ddf
revert unintentional change
junhaoliao Oct 6, 2025
3e9734e
chore(deployment): Add local logging driver to service defaults.
junhaoliao Oct 6, 2025
ab64f4a
Improve docs - Apply suggestions from code review
junhaoliao Oct 7, 2025
2d9906f
chore(deployment): Adjust healthcheck defaults (start interval, perio…
junhaoliao Oct 7, 2025
3635883
refactor(deployment): Use long form volume definitions and use bind o…
junhaoliao Oct 7, 2025
5e0d0d2
refactor(deployment): Use long form port definitions; fix CLP_RESULTS…
junhaoliao Oct 7, 2025
e771800
refactor(deployment): Reorder port definitions to long form order.
junhaoliao Oct 7, 2025
6e878cf
refactor(clp-package-utils): Replace deprecated Pydantic (V2) copy() …
junhaoliao Oct 7, 2025
f2b0967
feat(deployment): Add support for configurable logs input directory m…
junhaoliao Oct 7, 2025
01558ba
lint
junhaoliao Oct 7, 2025
8a3985b
refactor(deployment): Remove secrets usage; replace with environment …
junhaoliao Oct 7, 2025
c691735
docs(design): Add health check defaults.
junhaoliao Oct 7, 2025
787c7d7
refactor(clp-package-utils): Improve error handling for config loadin…
junhaoliao Oct 7, 2025
323cb58
Merge branch 'main' into docker-compose
junhaoliao Oct 9, 2025
8b97bc2
refactor(deployment): Remove outdated comment in reducer healthcheck …
junhaoliao Oct 9, 2025
ccb8f66
refactor(deployment): Remove duplicated docstring from docker-compose…
junhaoliao Oct 9, 2025
40b88a0
docs(design): Remove health check defaults section; add comments to h…
junhaoliao Oct 9, 2025
e58512a
docs(quick-start): Add required containerd, Docker CE, CLI, and compo…
junhaoliao Oct 10, 2025
d7b40b0
Merge branch 'main' into docker-compose
junhaoliao Oct 10, 2025
37a0a8a
restore verbose logging option to start_clp script.
junhaoliao Oct 10, 2025
3cdf245
Merge remote-tracking branch 'origin/main' into docker-compose
junhaoliao Oct 14, 2025
95d900a
refactor(clp-py-utils): Use DEFAULT_PORT for WebUi port configuration.
junhaoliao Oct 14, 2025
f6cbc7f
apply docs suggestions
junhaoliao Oct 15, 2025
5bf0887
refactor(controller): Rename clp_config -> _clp_config for consistent…
junhaoliao Oct 15, 2025
26dfaca
refactor(deployment): Rename Redis environment variables for improved…
junhaoliao Oct 15, 2025
99e983f
Apply suggestions - Reformat multiline statements and remove unnecess…
junhaoliao Oct 15, 2025
0b028dc
Apply suggestions - Rename UID/GID environment variables for improved…
junhaoliao Oct 15, 2025
f11963c
Apply suggestions - Use constants for jobs table names.
junhaoliao Oct 15, 2025
91cb9fc
refactor(controller): Remove redundant `stderr` redirection from subp…
junhaoliao Oct 15, 2025
1d57a89
docs: move high-level comments to individual blocks
junhaoliao Oct 15, 2025
f4254fa
docs(controller): reference issue for revisiting worker count logic
junhaoliao Oct 15, 2025
932c334
refactor(controller): add `--wait` flag to `docker compose up` comman…
junhaoliao Oct 15, 2025
a8cee64
refactor(controller): replace `Dict` with a custom `EnvVarsDict` for …
junhaoliao Oct 16, 2025
f0e1740
lint
junhaoliao Oct 16, 2025
6679c2d
use local variable in assignment in _update_settings_object()
junhaoliao Oct 16, 2025
416c31a
refactor(controller): remove redundant try-except blocks around `subp…
junhaoliao Oct 16, 2025
9ab85d2
add warning log for failed Docker dependency check before attempting …
junhaoliao Oct 16, 2025
1345de3
refactor(controller): add explicit return type annotations for all me…
junhaoliao Oct 16, 2025
25c3812
Merge branch 'main' into docker-compose
junhaoliao Oct 16, 2025
3c3e23d
refactor(scripts): move `instance_id` assignment inside `try` block i…
junhaoliao Oct 16, 2025
7c43aad
revert `--config` argument removal in `stop_clp` to allow specifying …
junhaoliao Oct 16, 2025
63c700a
refactor(config): Rename CLP_DEFAULT_ARCHIVE_* -> CLP_DEFAULT_ARCHIVE…
junhaoliao Oct 16, 2025
0f7c78c
apply docs suggestions
junhaoliao Oct 16, 2025
5e07756
docs(clp-package-utils): Update docstrings for clarity and consistency.
junhaoliao Oct 16, 2025
ff4f06c
remove return type from dump_shared_container_config()
junhaoliao Oct 16, 2025
e381c3d
refactor(clp-package-utils): Rename base_config -> component_config i…
junhaoliao Oct 16, 2025
f426c82
Simplify raised error message for missing configuration file: redis
junhaoliao Oct 16, 2025
73ec68f
Apply suggestion - To alphabetize
junhaoliao Oct 16, 2025
4e707ae
Remove individual log file paths and use shared logging volume
junhaoliao Oct 16, 2025
6f53877
fix(controller): revert removal of "ClpQueryEngine" in server_setting…
junhaoliao Oct 16, 2025
e7addd3
refactor(clp-package-utils): Rename CLP_PACKAGE_CONTAINER -> CLP_PACK…
junhaoliao Oct 16, 2025
d4e81f3
fix(docker-compose): use `:?error` syntax to mark required non-empty …
junhaoliao Oct 16, 2025
a5a497d
disallow empty `username` and `password` in `Database` because our db…
junhaoliao Oct 16, 2025
0dd11ce
fix(docker-compose): Update default database image to mariadb:10-jammy.
junhaoliao Oct 16, 2025
d27a0b1
fix(docker-compose): Add stop_grace_period for compression-worker and…
junhaoliao Oct 16, 2025
a6478e6
apply docs suggestions
junhaoliao Oct 16, 2025
7bbd134
refactor(docker-compose): Rename volume_root_logs_readonly -> volume_…
junhaoliao Oct 16, 2025
04e56f0
ensure `healthcheck` goes after `command`
junhaoliao Oct 16, 2025
0fc91d7
fix(docker-compose): Add AWS credentials environment variables in web…
junhaoliao Oct 16, 2025
f307d94
fix(docker-compose): Update environment variables for archive and str…
junhaoliao Oct 16, 2025
e5a90dd
Replace "docker-compose" (usually refer to v1) with "Docker Compose" …
junhaoliao Oct 16, 2025
3015ec4
lint
junhaoliao Oct 16, 2025
ff43c78
refactor(clp-package-utils): Reorder functions and rename is_docker_c…
junhaoliao Oct 16, 2025
699979a
fix(docker-compose): Add mounts for archive and stream output in garb…
junhaoliao Oct 16, 2025
092a86c
refactor(clp-package-utils): Rename _is_docker_compose_running -> _is…
junhaoliao Oct 16, 2025
8d75171
fix(docker-compose): Rename CLP_AWS_ACCESS_KEY_ID -> CLP_STREAM_OUTPU…
junhaoliao Oct 16, 2025
f53339f
fix(docker-compose): Break long volume mount lines for improved reada…
junhaoliao Oct 16, 2025
18d1109
lint
junhaoliao Oct 16, 2025
9d9bd46
refactor(clp-package-utils): Rename should_compose_run -> should_comp…
junhaoliao Oct 18, 2025
225c6c5
Merge branch 'main' into docker-compose
junhaoliao Oct 18, 2025
127aacc
refactor(clp-package-utils): Reorder private functions
junhaoliao Oct 18, 2025
f5ea3e2
Replace EnvironmentError with OSError as per Ruff os-error-alias (UP024)
junhaoliao Oct 18, 2025
22593d8
refactor(general): Improve error handling for Docker and Docker Compose
junhaoliao Oct 18, 2025
bc69b26
refactor(general): Update dump_container_config call to remove return…
junhaoliao Oct 18, 2025
1d2ab61
refactor(docs): Update exception documentation to use 'raise' format
junhaoliao Oct 18, 2025
d4c921a
add missing `f` in f-string
junhaoliao Oct 18, 2025
e6bb002
Add retention periods check for garbage collector and disable the ser…
junhaoliao Oct 20, 2025
90ee7da
Merge branch 'main' into docker-compose
junhaoliao Oct 20, 2025
b0d0bcc
refactor(clp-package-utils): Remove unused `pass` statements from abs…
junhaoliao Oct 21, 2025
955a0ac
refactor(clp-config): Remove unused typing import 'Set'.
junhaoliao Oct 21, 2025
106fdda
apply doc suggestions
junhaoliao Oct 21, 2025
7a1ea6e
refactor(docker-compose): Update environment variable error messages …
junhaoliao Oct 21, 2025
a732939
Adjust volume bindings to fix directory mappings when CLP_STAGED_ARCH…
junhaoliao Oct 21, 2025
c687f78
fix string indents
junhaoliao Oct 21, 2025
19e8a9d
apply doc suggestions
junhaoliao Oct 21, 2025
c53c0f1
apply doc suggestions
junhaoliao Oct 21, 2025
a2fa02c
fix(clp-package-utils): Remove extra space in `.env` file comment.
junhaoliao Oct 21, 2025
05810be
apply doc suggestions
junhaoliao Oct 21, 2025
2a02ecb
apply doc suggestions
junhaoliao Oct 21, 2025
678de80
Update comment for `_get_num_workers` method - apply doc suggestion
junhaoliao Oct 21, 2025
c30adae
Simplify log message for CLP start action - apply suggestion
junhaoliao Oct 21, 2025
07d1e35
Update comments for consistency in `controller.py`.
junhaoliao Oct 21, 2025
0bf6b70
feat(clp-package-utils): Add custom exceptions for Docker dependency …
junhaoliao Oct 21, 2025
2986082
fix(clp-package-utils): Use `docker --version` to check docker availa…
junhaoliao Oct 21, 2025
e499443
Avoid mapping ~/.aws on host when CLP_AWS_CONFIG_DIR_HOST is undefined
junhaoliao Oct 21, 2025
b788c33
alphabetize mounts
junhaoliao Oct 21, 2025
6fc219c
Do not map logs input dir when CLP_LOGS_INPUT_DIR_HOST is undefined
junhaoliao Oct 21, 2025
0926180
lint
junhaoliao Oct 21, 2025
e2daf32
lint
junhaoliao Oct 21, 2025
736c805
Merge remote-tracking branch 'origin/main' into docker-compose
junhaoliao Oct 21, 2025
4956106
fix: Add AWS config directory mount to garbage collector
junhaoliao Oct 21, 2025
91cacb0
fix(clp-package-utils): Add return type annotations to custom excepti…
junhaoliao Oct 21, 2025
3ad7f70
Merge branch 'main' into docker-compose
junhaoliao Oct 21, 2025
e8e4d58
Merge branch 'main' into docker-compose
junhaoliao Oct 22, 2025
c208942
Rename CLP_DB_IMAGE to CLP_DB_CONTAINER_IMAGE_REF.
kirkrodrigues Oct 22, 2025
6cea88b
Simplify package start/stop logs.
kirkrodrigues Oct 22, 2025
8c5a167
Refactor new Docker exceptions.
kirkrodrigues Oct 22, 2025
f02aff4
general.py: Minor refactoring.
kirkrodrigues Oct 22, 2025
667d753
Rename CLP_GC_LOGGING_LEVEL to CLP_GARBAGE_COLLECTOR_LOGGING_LEVEL.
kirkrodrigues Oct 22, 2025
930a2dd
Put operator on next line of multiline statement.
kirkrodrigues Oct 22, 2025
340a5e7
Use term 'config' instead of less common 'params'; Add required newli…
kirkrodrigues Oct 22, 2025
2bc2d2b
Correct AWS profile mount for webui - Apply suggestions from code review
junhaoliao Oct 22, 2025
f0fa5ae
Bump stop grace periods for various services.
junhaoliao Oct 22, 2025
26c3e32
Rewrite design doc.
kirkrodrigues Oct 23, 2025
164e27e
Rename design document file.
kirkrodrigues Oct 23, 2025
7759c5b
Lint.
kirkrodrigues Oct 23, 2025
0fdf31c
Split notes.
kirkrodrigues Oct 23, 2025
7447fef
Tell readers how to find the instance ID.
kirkrodrigues Oct 23, 2025
5227292
Rename Databases to Shared data stores.
kirkrodrigues Oct 23, 2025
a8ca533
Merge branch 'main' into docker-compose
junhaoliao Oct 23, 2025
ed25fc3
Update docs/src/dev-docs/design-deployment-orchestration.md
kirkrodrigues Oct 23, 2025
4926450
building-package.md: Minor fixes.
kirkrodrigues Oct 23, 2025
127cb79
Remove other details from multi-node doc until we add multi-node supp…
kirkrodrigues Oct 23, 2025
649276f
Add comment to explain the `+/tmp` hack.
kirkrodrigues Oct 23, 2025
7139740
docs(design-deployment): Rename "Shared data stores" subgraph to "Dat…
junhaoliao Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
813 changes: 813 additions & 0 deletions components/clp-package-utils/clp_package_utils/controller.py

Large diffs are not rendered by default.

236 changes: 149 additions & 87 deletions components/clp-package-utils/clp_package_utils/general.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import enum
import errno
import json
import os
import pathlib
import re
Expand All @@ -15,6 +16,9 @@
CLP_DEFAULT_CREDENTIALS_FILE_PATH,
CLP_SHARED_CONFIG_FILENAME,
CLPConfig,
CONTAINER_AWS_CONFIG_DIRECTORY,
CONTAINER_CLP_HOME,
CONTAINER_INPUT_LOGS_ROOT_DIR,
DB_COMPONENT_NAME,
QueryEngine,
QUEUE_COMPONENT_NAME,
Expand Down Expand Up @@ -42,15 +46,50 @@
EXTRACT_IR_CMD = "i"
EXTRACT_JSON_CMD = "j"

# Paths
Copy link
Member Author

Choose a reason for hiding this comment

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

had to move this to clp_config.py to avoid circular import

CONTAINER_AWS_CONFIG_DIRECTORY = pathlib.Path("/") / ".aws"
CONTAINER_CLP_HOME = pathlib.Path("/") / "opt" / "clp"
CONTAINER_INPUT_LOGS_ROOT_DIR = pathlib.Path("/") / "mnt" / "logs"
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH = pathlib.Path("etc") / "clp-config.yml"

DOCKER_MOUNT_TYPE_STRINGS = ["bind"]


class DockerDependencyError(OSError):
"""Base class for errors related to Docker dependencies."""


class DockerNotAvailableError(DockerDependencyError):
"""Raised when Docker or Docker Compose is unavailable."""

def __init__(self, base_message: str, process_error: subprocess.CalledProcessError) -> None:
message = base_message
output_chunks: list[str] = []
for stream in (process_error.stdout, process_error.stderr):
if stream is None:
continue
if isinstance(stream, bytes):
text = stream.decode(errors="replace")
else:
text = str(stream)
text = text.strip()
if text:
output_chunks.append(text)
if len(output_chunks) > 0:
message = "\n".join([base_message, *output_chunks])
super().__init__(errno.ENOENT, message)


class DockerComposeProjectNotRunningError(DockerDependencyError):
"""Raised when a Docker Compose project is not running but should be."""

def __init__(self, project_name: str) -> None:
super().__init__(errno.ESRCH, f"Docker Compose project '{project_name}' is not running.")


class DockerComposeProjectAlreadyRunningError(DockerDependencyError):
"""Raised when a Docker Compose project is already running but should not be."""

def __init__(self, project_name: str) -> None:
super().__init__(
errno.EEXIST, f"Docker Compose project '{project_name}' is already running."
)


class DockerMountType(enum.IntEnum):
BIND = 0

Expand Down Expand Up @@ -98,13 +137,6 @@ def __init__(self, clp_home: pathlib.Path, docker_clp_home: pathlib.Path):
self.generated_config_file: Optional[DockerMount] = None


def _validate_data_directory(data_dir: pathlib.Path, component_name: str) -> None:
try:
validate_path_could_be_dir(data_dir)
except ValueError as ex:
raise ValueError(f"{component_name} data directory is invalid: {ex}")


def get_clp_home():
# Determine CLP_HOME from an environment variable or this script's path
clp_home = None
Expand Down Expand Up @@ -132,63 +164,30 @@ def generate_container_name(job_type: str) -> str:
return f"clp-{job_type}-{str(uuid.uuid4())[-4:]}"


def check_dependencies():
def check_docker_dependencies(should_compose_project_be_running: bool, project_name: str):
"""
Checks if Docker and Docker Compose are installed, and whether a Docker Compose project is
running.

:param should_compose_project_be_running:
:param project_name: The Docker Compose project name to check.
:raise DockerNotAvailableError: If any Docker dependency is not installed.
:raise DockerComposeProjectNotRunningError: If the project isn't running when it should be.
:raise DockerComposeProjectAlreadyRunningError: If the project is running when it shouldn't be.
"""
try:
subprocess.run(
"command -v docker",
shell=True,
stdout=subprocess.PIPE,
subprocess.check_output(
["docker", "--version"],
stderr=subprocess.STDOUT,
Copy link
Member

Choose a reason for hiding this comment

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

Since we're concatenating the output in the exception anyway, do we still need to pipe stderr to stdout?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, if we keep using check_output().

https://docs.python.org/3/library/subprocess.html#subprocess.check_output:~:text=To%20also%20capture,%3E%3E%3E

To also capture standard error in the result, use stderr=subprocess.STDOUT:

That we read both .stdout (alias of .output) and .stderr of the CalledProcessError is only for safety - i can't be sure if check_output would for sure not include any content in .stderr although the sentence above might have implied so?

If we want to avoid piping stderr to stdout, an alternative is to use run() with capture_output=True instead. (also with check=True so it will be fully equivalent with check_output().) What do you think?

Copy link
Member

Choose a reason for hiding this comment

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

I think the return value of check_output by default will be stdout and what that statement is suggesting is that to also capture stderr, we'd need to pipe stderr to stdout. However, since we're using CalledProcessError to access stdout, we can also use it to access stderr as long as we pipe stderr (i.e., stderr=subprocess.PIPE).

All that said, I think the clearest thing would be to just run subprocess.run(["docker", "--version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True). What do you think?

check=True,
)
except subprocess.CalledProcessError:
raise EnvironmentError("docker is not installed or available on the path")
try:
subprocess.run(
["docker", "ps"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True
)
except subprocess.CalledProcessError:
raise EnvironmentError("docker cannot run without superuser privileges (sudo).")
except subprocess.CalledProcessError as e:
raise DockerNotAvailableError("docker is not installed or available on the path", e) from e


def is_container_running(container_name):
# fmt: off
cmd = [
"docker", "ps",
# Only return container IDs
"--quiet",
"--filter", f"name={container_name}"
]
# fmt: on
proc = subprocess.run(cmd, stdout=subprocess.PIPE)
if proc.stdout.decode("utf-8"):
return True

return False


def is_container_exited(container_name):
# fmt: off
cmd = [
"docker", "ps",
# Only return container IDs
"--quiet",
"--filter", f"name={container_name}",
"--filter", "status=exited"
]
# fmt: on
proc = subprocess.run(cmd, stdout=subprocess.PIPE)
if proc.stdout.decode("utf-8"):
return True

return False


def validate_log_directory(logs_dir: pathlib.Path, component_name: str) -> None:
try:
validate_path_could_be_dir(logs_dir)
except ValueError as ex:
raise ValueError(f"{component_name} logs directory is invalid: {ex}")
is_running = _is_docker_compose_project_running(project_name)
if should_compose_project_be_running and not is_running:
raise DockerComposeProjectNotRunningError(project_name)
if not should_compose_project_be_running and is_running:
raise DockerComposeProjectAlreadyRunningError(project_name)


def validate_port(port_name: str, hostname: str, port: int):
Expand Down Expand Up @@ -309,6 +308,19 @@ def generate_container_config(
return container_clp_config, docker_mounts


def generate_docker_compose_container_config(clp_config: CLPConfig) -> CLPConfig:
Copy link
Member Author

Choose a reason for hiding this comment

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

generate_container_config() should eventually be deprecated when we migrate the other (compress / decompress / search / management) scripts to docker compose

"""
Copies the given config and transforms mount paths and hosts for Docker Compose.

:param clp_config:
:return: The container config.
"""
container_clp_config = clp_config.model_copy(deep=True)
container_clp_config.transform_for_container()

return container_clp_config


def generate_worker_config(clp_config: CLPConfig) -> WorkerConfig:
worker_config = WorkerConfig()
worker_config.package = clp_config.package.model_copy(deep=True)
Expand Down Expand Up @@ -345,17 +357,15 @@ def dump_container_config(
return config_file_path_on_container, config_file_path_on_host


def dump_shared_container_config(
container_clp_config: CLPConfig, clp_config: CLPConfig
) -> Tuple[pathlib.Path, pathlib.Path]:
def dump_shared_container_config(container_clp_config: CLPConfig, clp_config: CLPConfig):
"""
Dumps the given container config to `CLP_SHARED_CONFIG_FILENAME` in the logs directory, so that
it's accessible in the container.

:param container_clp_config:
:param clp_config:
"""
return dump_container_config(container_clp_config, clp_config, CLP_SHARED_CONFIG_FILENAME)
dump_container_config(container_clp_config, clp_config, CLP_SHARED_CONFIG_FILENAME)


def generate_container_start_cmd(
Expand Down Expand Up @@ -431,11 +441,6 @@ def load_config_file(
validate_path_for_container_mount(clp_config.data_directory)
validate_path_for_container_mount(clp_config.logs_directory)

# Make data and logs directories node-specific
Copy link
Member Author

Choose a reason for hiding this comment

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

BREAKING

hostname = socket.gethostname()
clp_config.data_directory /= hostname
clp_config.logs_directory /= hostname

return clp_config


Expand Down Expand Up @@ -488,35 +493,44 @@ def validate_and_load_redis_credentials_file(
clp_config.redis.load_credentials_from_file(clp_config.credentials_file_path)


def validate_db_config(clp_config: CLPConfig, data_dir: pathlib.Path, logs_dir: pathlib.Path):
def validate_db_config(
clp_config: CLPConfig,
component_config: pathlib.Path,
data_dir: pathlib.Path,
logs_dir: pathlib.Path,
):
if not component_config.exists():
raise ValueError(f"{DB_COMPONENT_NAME} configuration file missing: '{component_config}'.")
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add file type validation for component config paths.

All three validation functions (validate_db_config, validate_redis_config, validate_results_cache_config) check component_config.exists() but don't verify it's a file. A directory with the same name would pass validation but cause issues later.

Apply this diff to validate_db_config:

     if not component_config.exists():
         raise ValueError(f"{DB_COMPONENT_NAME} configuration file missing: '{component_config}'.")
+    if not component_config.is_file():
+        raise ValueError(f"{DB_COMPONENT_NAME} configuration at '{component_config}' is not a file.")

Apply the same pattern to validate_redis_config:

     if not component_config.exists():
         raise ValueError(
             f"{REDIS_COMPONENT_NAME} configuration file missing: '{component_config}'."
         )
+    if not component_config.is_file():
+        raise ValueError(
+            f"{REDIS_COMPONENT_NAME} configuration at '{component_config}' is not a file."
+        )

Apply the same pattern to validate_results_cache_config:

     if not component_config.exists():
         raise ValueError(
             f"{RESULTS_CACHE_COMPONENT_NAME} configuration file missing: '{component_config}'."
         )
+    if not component_config.is_file():
+        raise ValueError(
+            f"{RESULTS_CACHE_COMPONENT_NAME} configuration at '{component_config}' is not a file."
+        )

Based on learnings

Also applies to: 487-489, 514-516

🧰 Tools
🪛 Ruff (0.14.0)

467-467: Avoid specifying long messages outside the exception class

(TRY003)

🤖 Prompt for AI Agents
In components/clp-package-utils/clp_package_utils/general.py around lines 467,
487-489, and 514-516, the three validation functions currently only check
component_config.exists(); update each to validate that the path is an actual
file (not a directory) by using Path.is_file() (or checking exists() AND
is_file()) and raise the same ValueError if the check fails so directories won't
pass validation.

_validate_data_directory(data_dir, DB_COMPONENT_NAME)
validate_log_directory(logs_dir, DB_COMPONENT_NAME)
_validate_log_directory(logs_dir, DB_COMPONENT_NAME)

validate_port(f"{DB_COMPONENT_NAME}.port", clp_config.database.host, clp_config.database.port)
Comment on lines +496 to 507
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Add file type validation for component_config.

The function checks component_config.exists() but doesn't verify it's a file. A directory with the same name would pass validation but cause issues later.

Apply this diff:

     if not component_config.exists():
         raise ValueError(f"{DB_COMPONENT_NAME} configuration file missing: '{component_config}'.")
+    if not component_config.is_file():
+        raise ValueError(f"{DB_COMPONENT_NAME} configuration at '{component_config}' is not a file.")
🧰 Tools
🪛 Ruff (0.14.0)

464-464: Avoid specifying long messages outside the exception class

(TRY003)

🤖 Prompt for AI Agents
In components/clp-package-utils/clp_package_utils/general.py around lines 457 to
468, the current validation only checks component_config.exists() which allows
directories to pass; update the check to ensure component_config.is_file() (or
check exists() and is_file()) and if not raise a ValueError stating the
DB_COMPONENT_NAME configuration file is missing or not a file, so directories
are rejected with a clear error before proceeding.



def validate_queue_config(clp_config: CLPConfig, logs_dir: pathlib.Path):
validate_log_directory(logs_dir, QUEUE_COMPONENT_NAME)
_validate_log_directory(logs_dir, QUEUE_COMPONENT_NAME)

validate_port(f"{QUEUE_COMPONENT_NAME}.port", clp_config.queue.host, clp_config.queue.port)


def validate_redis_config(
clp_config: CLPConfig, data_dir: pathlib.Path, logs_dir: pathlib.Path, base_config: pathlib.Path
clp_config: CLPConfig,
component_config: pathlib.Path,
data_dir: pathlib.Path,
logs_dir: pathlib.Path,
):
_validate_data_directory(data_dir, REDIS_COMPONENT_NAME)
validate_log_directory(logs_dir, REDIS_COMPONENT_NAME)

if not base_config.exists():
if not component_config.exists():
raise ValueError(
f"{REDIS_COMPONENT_NAME} base configuration at {str(base_config)} is missing."
f"{REDIS_COMPONENT_NAME} configuration file missing: '{component_config}'."
)
_validate_data_directory(data_dir, REDIS_COMPONENT_NAME)
_validate_log_directory(logs_dir, REDIS_COMPONENT_NAME)

validate_port(f"{REDIS_COMPONENT_NAME}.port", clp_config.redis.host, clp_config.redis.port)
Comment on lines 516 to 529
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add file type validation for component_config.

Same issue as validate_db_config—the function only checks component_config.exists() without verifying it's a file.

Apply this diff:

     if not component_config.exists():
         raise ValueError(
             f"{REDIS_COMPONENT_NAME} configuration file missing: '{component_config}'."
         )
+    if not component_config.is_file():
+        raise ValueError(
+            f"{REDIS_COMPONENT_NAME} configuration at '{component_config}' is not a file."
+        )
🧰 Tools
🪛 Ruff (0.14.0)

487-489: Avoid specifying long messages outside the exception class

(TRY003)

🤖 Prompt for AI Agents
In components/clp-package-utils/clp_package_utils/general.py around lines 480 to
493, the validate_redis_config currently only checks component_config.exists()
but not that it is a regular file; update the check to validate that
component_config.exists() and component_config.is_file(), and if not raise a
ValueError with the same style/message used for missing config files (e.g.,
"{REDIS_COMPONENT_NAME} configuration file missing: '{component_config}'.") so
the function mirrors the validate_db_config behavior and rejects directories.



def validate_reducer_config(clp_config: CLPConfig, logs_dir: pathlib.Path, num_workers: int):
validate_log_directory(logs_dir, REDUCER_COMPONENT_NAME)
_validate_log_directory(logs_dir, REDUCER_COMPONENT_NAME)

for i in range(0, num_workers):
validate_port(
Expand All @@ -527,10 +541,17 @@ def validate_reducer_config(clp_config: CLPConfig, logs_dir: pathlib.Path, num_w


def validate_results_cache_config(
clp_config: CLPConfig, data_dir: pathlib.Path, logs_dir: pathlib.Path
clp_config: CLPConfig,
component_config: pathlib.Path,
data_dir: pathlib.Path,
logs_dir: pathlib.Path,
):
if not component_config.exists():
raise ValueError(
f"{RESULTS_CACHE_COMPONENT_NAME} configuration file missing: '{component_config}'."
)
_validate_data_directory(data_dir, RESULTS_CACHE_COMPONENT_NAME)
validate_log_directory(logs_dir, RESULTS_CACHE_COMPONENT_NAME)
_validate_log_directory(logs_dir, RESULTS_CACHE_COMPONENT_NAME)

validate_port(
f"{RESULTS_CACHE_COMPONENT_NAME}.port",
Expand Down Expand Up @@ -707,3 +728,44 @@ def get_celery_connection_env_vars_list(container_clp_config: CLPConfig) -> List
]

return env_vars


def _is_docker_compose_project_running(project_name: str) -> bool:
"""
Checks if a Docker Compose project is running.

:param project_name:
:return: Whether at least one instance is running.
:raise DockerNotAvailableError: If Docker Compose is not installed or fails. The error message
includes the Docker command's output when available.
"""
cmd = ["docker", "compose", "ls", "--format", "json", "--filter", f"name={project_name}"]
try:
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
running_instances = json.loads(output)
return len(running_instances) >= 1
except subprocess.CalledProcessError as e:
raise DockerNotAvailableError(
"Docker Compose is not installed or not functioning properly.", e
) from e


def _validate_data_directory(data_dir: pathlib.Path, component_name: str) -> None:
try:
validate_path_could_be_dir(data_dir)
except ValueError as ex:
raise ValueError(f"{component_name} data directory is invalid: {ex}")
Comment on lines +753 to +757
Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Add exception chaining to preserve traceback.

Both validation helpers should chain the original exception to preserve the full traceback for debugging.

Apply this diff to _validate_data_directory:

 def _validate_data_directory(data_dir: pathlib.Path, component_name: str) -> None:
     try:
         validate_path_could_be_dir(data_dir)
     except ValueError as ex:
-        raise ValueError(f"{component_name} data directory is invalid: {ex}")
+        raise ValueError(f"{component_name} data directory is invalid: {ex}") from ex

Apply the same pattern to _validate_log_directory:

 def _validate_log_directory(logs_dir: pathlib.Path, component_name: str):
     """
     Validates that the logs directory path for a component is valid.
 
     :param logs_dir:
     :param component_name:
     :raise ValueError: If the path is invalid or can't be a directory.
     """
     try:
         validate_path_could_be_dir(logs_dir)
     except ValueError as ex:
-        raise ValueError(f"{component_name} logs directory is invalid: {ex}")
+        raise ValueError(f"{component_name} logs directory is invalid: {ex}") from ex

Based on learnings

Also applies to: 722-733

🧰 Tools
🪛 Ruff (0.14.0)

719-719: Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling

(B904)


719-719: Avoid specifying long messages outside the exception class

(TRY003)

🤖 Prompt for AI Agents
In components/clp-package-utils/clp_package_utils/general.py around lines
715-719 (and similarly 722-733 for the log directory), the helper currently
re-raises a new ValueError without exception chaining which loses the original
traceback; modify both functions to catch the original ValueError as ex and
re-raise the new ValueError using "raise ValueError(f'{component_name} data/log
directory is invalid: {ex}') from ex" so the original exception is preserved in
the traceback.


Comment on lines +753 to +758
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Preserve traceback and add annotations in validators.

Chain exceptions; add explicit return type on _validate_log_directory.

 def _validate_data_directory(data_dir: pathlib.Path, component_name: str) -> None:
     try:
         validate_path_could_be_dir(data_dir)
-    except ValueError as ex:
-        raise ValueError(f"{component_name} data directory is invalid: {ex}")
+    except ValueError as ex:
+        raise ValueError(f"{component_name} data directory is invalid: {ex}") from ex
@@
-def _validate_log_directory(logs_dir: pathlib.Path, component_name: str):
+def _validate_log_directory(logs_dir: pathlib.Path, component_name: str) -> None:
@@
-    except ValueError as ex:
-        raise ValueError(f"{component_name} logs directory is invalid: {ex}")
+    except ValueError as ex:
+        raise ValueError(f"{component_name} logs directory is invalid: {ex}") from ex

Also applies to: 760-771

🧰 Tools
🪛 Ruff (0.14.1)

757-757: Within an except clause, raise exceptions with raise ... from err or raise ... from None to distinguish them from errors in exception handling

(B904)


757-757: Avoid specifying long messages outside the exception class

(TRY003)

🤖 Prompt for AI Agents
In components/clp-package-utils/clp_package_utils/general.py around lines
753-758 (and also applies to 760-771), update the exception handling to chain
the original exception (use "raise ValueError(...) from ex") so the traceback is
preserved, add missing type annotations to the validator functions where
requested (ensure parameters and return types are explicit), and explicitly add
a return type annotation to _validate_log_directory (e.g., -> None). Ensure all
raised ValueError messages keep the component_name context while using "from ex"
to preserve the original traceback.


def _validate_log_directory(logs_dir: pathlib.Path, component_name: str):
"""
Validates that the logs directory path for a component is valid.

:param logs_dir:
:param component_name:
:raise ValueError: If the path is invalid or can't be a directory.
"""
try:
validate_path_could_be_dir(logs_dir)
except ValueError as ex:
raise ValueError(f"{component_name} logs directory is invalid: {ex}")
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
from clp_py_utils.clp_config import (
CLP_DB_PASS_ENV_VAR_NAME,
CLP_DB_USER_ENV_VAR_NAME,
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
CLP_DEFAULT_DATASET_NAME,
StorageEngine,
StorageType,
)

from clp_package_utils.general import (
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
CLPConfig,
DockerMount,
dump_container_config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
from clp_py_utils.clp_config import (
CLP_DB_PASS_ENV_VAR_NAME,
CLP_DB_USER_ENV_VAR_NAME,
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
CLP_DEFAULT_DATASET_NAME,
StorageEngine,
)
from job_orchestration.scheduler.job_config import InputType

from clp_package_utils.general import (
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
CONTAINER_INPUT_LOGS_ROOT_DIR,
dump_container_config,
generate_container_config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
ARCHIVE_MANAGER_ACTION_NAME,
CLP_DB_PASS_ENV_VAR_NAME,
CLP_DB_USER_ENV_VAR_NAME,
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
StorageEngine,
StorageType,
)
from clp_py_utils.s3_utils import generate_container_auth_options

from clp_package_utils.general import (
CLP_DEFAULT_CONFIG_FILE_RELATIVE_PATH,
dump_container_config,
generate_container_config,
generate_container_name,
Expand Down
Loading
Loading