|
CAPIO-CL 2.0.1
CAPIO-CL: Cross Application Programmable I/O - Coordination Language
|
| OS / Arch | |||
|---|---|---|---|
| YES | YES | YES | |
| No CI/CD support | YES | N.A. |
CAPIO-CL is a novel I/O coordination language that enables users to annotate file-based workflow data dependencies with synchronization semantics for files and directories. Designed to facilitate transparent overlap between computation and I/O operations, CAPIO-CL allows multiple producer–consumer application modules to coordinate efficiently using a JSON-based syntax.
For detailed documentation and examples, please visit:
The CAPIO Coordination Language (CAPIO-CL) allows applications to declare:
At runtime, CAPIO-CL’s parser and engine components analyze, track, and manage these declared relationships, enabling * *transparent data sharing** and cross-application optimizations.
jsoncons, GoogleTest and pybind11 are fetched automatically by CMake — no manual setup required.
By default, this will:
CAPIO-CL can be included directly into another CMake project using:
When included this way, unit tests and python bindings are not built, keeping integration clean for external projects.
CAPIO-CL now provides native Python bindings built using pybind11.
These bindings expose the core C++ APIs (Engine, Parser and Serializer), directly to Python, allowing the CAPIO-CL logic to be used within python projects.
CAPIO-CL is available on PyPI! Simply run
You can build and install the Python bindings directly from the CAPIO-CL source tree using:
This will build the Python wheel and install it into your current environment using an ad-hoc build environment, which is downloaded, installed, and configured in isolation. A faster way to build and install CAPIO-CL is to use native system packages and then run from within the CAPIO-CL root directory:
This assumes that all build dependencies not fetched by cmake are available.
Runtime behavior is configured with a TOML file loaded into CapioClConfiguration. This is separate from the JSON coordination-language document: the TOML file selects the JSON document, monitor backends, metadata storage, and dynamic API settings.
| Key | Type | Default | Description |
|---|---|---|---|
| capiocl.workflow_name | string | JSON name, or CAPIO without JSON | Overrides the workflow name. |
| capiocl.config_path | string/path | empty | JSON CAPIO-CL document to parse. An empty value creates a runtime-only engine. |
| capiocl.resolve_path | string/path | empty | Prefix applied to relative paths in the JSON document. |
| capiocl.store_all_in_memory | boolean | false | Marks every parsed data path for in-memory storage. |
| capiocl.dynamic_api.enabled | boolean | false | Starts the dynamic configuration API. |
| capiocl.dynamic_api.ip | string | 224.224.224.3 | Multicast address used by the dynamic API. |
| capiocl.dynamic_api.port | integer | 11223 | UDP port used by the dynamic API. |
| capiocl.monitor.filesystem.enabled | boolean | see below | Enables filesystem commit and home-node tokens. |
| capiocl.monitor.filesystem.metadata_dir | string/path | empty | Trusted metadata root for persistent counted ON_CLOSE state. |
| capiocl.monitor.mcast.enabled | boolean | see below | Enables multicast commit and home-node propagation. |
| capiocl.monitor.mcast.delay_ms | integer | 300 | Delay before multicast status operations, in milliseconds. |
| capiocl.monitor.mcast.commit.ip | string | 224.224.224.1 | Multicast group for commit state. |
| capiocl.monitor.mcast.commit.port | integer | 12345 | UDP port for commit state. |
| capiocl.monitor.mcast.homenode.ip | string | 224.224.224.2 | Multicast group for home-node state. |
| capiocl.monitor.mcast.homenode.port | integer | 12345 | UDP port for home-node state. |
Every CAPIO-CL option is under the top-level capiocl table. Other top-level tables may coexist in the same TOML file and are ignored by CAPIO-CL. When parsing a user-provided configuration, omitted capiocl.monitor.filesystem.enabled and capiocl.monitor.mcast.enabled values are false. Engine() and CapioClConfiguration.loadDefaults() use the built-in configuration, which enables both monitors. Set both values explicitly in deployed TOML files to avoid ambiguity.
TOML booleans must be unquoted true or false, and ports/delays must be integers. Relative capiocl.config_path, capiocl.resolve_path, and capiocl.monitor.filesystem.metadata_dir values are interpreted from the process working directory. Unknown keys are retained but ignored by CAPIO-CL.
capiocl.monitor.filesystem.metadata_dir is required only when an ON_CLOSE rule commits after more than one close. It must name a trusted, non-attacker-writable directory unique to the workflow run. CAPIO-CL creates and owns a capiocl subdirectory beneath it. Multi-process and multi-node producers must share that directory through storage providing coherent atomic exclusive file creation, rename, and unlink. Ordinary commit and home-node token operations do not require this option.
Configuration can also be constructed from a string map/dictionary. Values in that form must use their flattened keys and string representations, for example {"capiocl.monitor.filesystem.enabled": "true"}.
A simplified example of CAPIO-CL usage in C++:
The py_capio_cl module provides access to CAPIO-CL’s core functionality through a high-level Python interface.
| Name | Role | Contact |
|---|---|---|
| Marco Edoardo Santimaria | Designer and Maintainer | email | Homepage |
| Iacopo Colonnelli | Workflows Expert and Designer | email | Homepage |
| Massimo Torquati | Designer | email | Homepage |
| Marco Aldinucci | Designer | email | Homepage |
| Name | Role | Contact |
|---|---|---|
| Alberto Riccardo Martinelli | Designer | email | Homepage |