What's new in v2.13.0
BP4/BP5 readers no longer wait on files left open by a killed writer
A BP4 or BP5 writer marks its file as being written until it closes it. A writer that
is killed (for example at the end of a batch job's time limit) leaves that mark
behind, and readers used to wait forever in BeginStep() for steps that would
never come. BP4 and BP5 readers now ignore the mark by default (new parameter
IgnoreActiveFlag, default true): they read the steps that are present and
then get EndOfStream. BP5's OpenTimeoutSecs now also defaults to 0 in
Read mode (as BP4's already did), so opening a file that does not exist
fails right away instead of waiting for up to an hour.
This changes how a file that is still being written can be followed. Use the
FileStream engine, which sets IgnoreActiveFlag=false and waits up to an
hour for the file to appear, or set IgnoreActiveFlag=false (and an
OpenTimeoutSecs) on a BP4 or BP5 reader. adios_reorganize keeps following
files that are being written; it now warns when such a file stops producing
steps, and --ignore-active-flag makes it process the steps that are present.
Native DAOS engine
The DAOS engine now keeps all bulk data in DAOS objects, reading and writing
through the DAOS array API rather than through POSIX files on a dfuse mount.
Earlier releases shipped only a prototype that placed metadata in DAOS and wrote
data as files. Each writer rank writes its own DAOS array, with no cross-rank
aggregation, and issues asynchronous writes as its buffer fills, so transfers
overlap the remaining Put calls of the step. Per-rank, per-step metadata is
stored in DAOS as well; only the small rank-0 index and format files remain in
the dataset directory. On reads, a selection that does not match the writer's
decomposition fetches only the bytes it needs, batched into a few large DAOS
requests. Select it with io.SetEngine("daos"), and set DAOS_POOL and
DAOS_CONT on every rank. See the DAOS engine documentation for build
requirements, parameters and current limitations.
Campaign HDF5 reads over HTTPS and S3
The Campaign Reader can now read HDF5 dataset values from HTTPS and S3
objects without downloading the complete object. A read-only HDF5 virtual file
driver maps HDF5 byte requests to ADIOS2 transports, while the HDF5 metadata
surrogate embedded in the campaign remains the primary file for discovery and
small values. Individual HDF5 objects and HDF5 members in indexed TAR objects
are supported, including multistep and hyperslab selections.
Leaner default build for packagers
Several rarely used, unmaintained engines are now off by default:
DataMan, MHS, SSC, and DataSpaces, along with the DDN IME
transport. SSC gains a dedicated ADIOS2_USE_SSC option (previously it
was always built alongside MPI); the others switch from AUTO to OFF.
ZeroMQ, required only by the DataMan engine, is likewise off by default,
so a default build no longer probes for or links it. Any of these can still be
enabled explicitly (for example -DADIOS2_USE_MHS=ON). See the new "Notes for
Packagers" section of the README for the recommended feature tiers.
Thread-Safe Get with GetContext
A new GetContext API extends the Selection-based Get() to support
concurrent read pipelines on a single engine. Each caller allocates its own
GetContext via Engine::NewGetContext() and uses it as the first
argument to Get() and PerformGets(); per-context queues mean two
threads can drive independent Get batches against the same open engine
without racing.
auto ctx = engine.NewGetContext();
if (ctx) {
engine.Get(*ctx, var, data, adios2::Selection::BoundingBox(start, count));
engine.PerformGets(*ctx);
}NewGetContext() returns nullptr when the engine does not support
concurrent contexts; callers feature-probe with the null check. Currently
only the BP5 reader supports them, and only when opened in
Mode::ReadRandomAccess with a reentrant file transport (POSIX). See the
Selection chapter for full details.
Collective reader engine selection
When a reader does not set an engine explicitly, the engine type is
auto-detected from the filesystem. That probing now happens on rank 0 and is
broadcast, instead of every rank issuing its own stat() calls. If nothing
exists at the given location, IO::Open now fails collectively with a clear
error (and a hint to call SetEngine for a stream that has not been created
yet) rather than selecting BP3 and hanging the non-root MPI ranks.
SST Mercury Data Plane
A new Mercury data plane for SST uses the Mercury/margo RPC framework
to carry data, supporting multiple network backends through a single
implementation: cxi:// for HPE-Cray Slingshot (Frontier, Perlmutter),
ofi+tcp / ofi+verbs for libfabric-based fabrics, bmi+tcp, and
na+sm for shared memory. The backend is selected at runtime via the
MercuryProtocol engine parameter, with an SST_MERCURY_PROTOCOL
environment-variable fallback. On Slingshot, the required OFI auth key is
supplied automatically from SLINGSHOT_VNIS. See the SST engine
documentation for details.
Reader-defined derived variables
A read IO can now define a derived expression over a file's variables that were
never marked derived at write time: IO::DefineReaderDerivedVariable(name, expression), then InquireVariable/Get after Open. The reader computes
it from the file data. BP5 only; inputs must be same-shaped global arrays.
C++, C, Fortran, Python.
Derived expressions: attribute and scalar inputs
Derived expressions can now use single-value (scalar) variables and numeric
attributes alongside array inputs. A scalar variable broadcasts its per-step
value across the array inputs (pressure * dt). @name references the
single-element numeric attribute name; its current value is read at each
evaluation, so modifiable attributes take effect step by step. A binding with
a numeric right-hand side defines a named constant (c = 2.99792458e8).
Variable names containing special characters are referenced through binding
lines (x = sim/data.Ux) or inline backticks (`sim/Ux` + 1), and
/ in a formula always means division.
JIT fusion for derived expressions
Element-wise derived expressions over float or double arrays (+, -,
*, /, negate, sqrt, including ^2 by strength reduction) can be
JIT-compiled into a single fused vector loop via the bundled dill library's
new 128-bit vector API, typically 3-4x faster than the interpreter and within
a few percent of natively compiled code. Results are bit-identical to the
interpreter. Opt-in for now via the DerivedFuse environment variable;
expressions the fuser cannot handle fall back to the interpreter, as do
builds without dill >= 4.0.
Missing min/max reported as N/A
Variables stored without statistics (StatsLevel=0) now report an unset
range (Min() > Max()) instead of a misleading 0/0; bpls prints
N/A.
Pull requests included
- pip: enable curl and openssl by @vicentebolea in #4964
- Use finite timeout in RDMA progress thread to fix shutdown hang by @eisenhauer in #4959
- Fix BP5 when compression is applied to memory selections by @eisenhauer in #4967
- Remove pthread_cancel from RDMA progress thread shutdown by @eisenhauer in #4969
- Suppress GCC 14 false positive -Wstringop-overflow in ReverseCopyFrom… by @eisenhauer in #4974
- Korvo upstream by @eisenhauer in #4981
- Fixes to derived expression parsing by @eisenhauer in #4978
- vectorize min/max in BP5 by @eisenhauer in #4985
- Rework derived variable compute functions and type system by @eisenhauer in #4984
- minimum reads for reader-side derived variables by @eisenhauer in #4986
- Turn derived variables off by @eisenhauer in #4990
- Improve SST ctest time by @eisenhauer in #4991
- Evpath transport modules off by @eisenhauer in #4989
- build(deps): bump the all-actions group across 1 directory with 4 updates by @dependabot[bot] in #4988
- evpath,pip: use internal transport libs by @vicentebolea in #4993
- pip: enable curl by @vicentebolea in #4995
- pip: enable curl by @vicentebolea in #4997
- build(deps): bump the all-actions group with 2 updates by @dependabot[bot] in #5000
- Dill arm64 linux -- release branch by @eisenhauer in #5006
- ci: add ubuntu aarch64 jobs by @vicentebolea in #5007
- typo by @ordinary-slim in #5008
- Add "Scream" option to PerfMetaData by @eisenhauer in #5009
- SST: invalidate NFS dcache between readContactInfo retries by @eisenhauer in #5010
- Add Mercury data plane for SST by @eisenhauer in #5011
- whatsnew: note SST Mercury data plane by @eisenhauer in #5013
- build(deps): bump github/codeql-action from 4.35.1 to 4.35.2 in the all-actions group by @dependabot[bot] in #5014
- Make MGARD lossless type configurable by @rtobar in #5015
- Backport #4985 to release_212 by @ornladios-robot in #5016
- Backport #5008 to release_212 by @ornladios-robot in #5018
- Backport #5010 to release_212 by @ornladios-robot in #5019
- Backport #5015 to release_212 by @ornladios-robot in #5020
- Complete MGARD Lossless spec, do docs for MGARD only (not MGARDcomplex) by @eisenhauer in #5021
- better CXI Slingshot error messages by @eisenhauer in #5022
- Backport #5022 to release_212 by @ornladios-robot in #5024
- Fix printing double values in bpls min/max and the Min and Max string… by @pnorbert in #5025
- Bump version to v2.12.1 by @vicentebolea in #5027
- Backport #5025 to release_212 by @ornladios-robot in #5028
- backport: apply one by one commit by @vicentebolea in #5029
- build(deps): bump github/codeql-action from 4.35.2 to 4.35.3 in the all-actions group by @dependabot[bot] in #5031
- dependabot: fix asignee group by @vicentebolea in #5032
- dependabot: set automerge by @vicentebolea in #5033
- DAOS engine: per-rank array data path with async writes by @eisenhauer in #5034
- XRootD HTTP: more path-encode changes by @eisenhauer in #5035
- BP5: drain shm on aggregator write error + iotest rank-prefixed FATAL by @eisenhauer in #5037
- build(deps): bump the all-actions group with 2 updates by @dependabot[bot] in #5039
- EncryptionOperator: allow key loading via env vars by @vicentebolea in #5040
- Update ReadMe.md by @vicentebolea in #5042
- docs: explain ADIOS2_USE_SealKeygen by @vicentebolea in #5043
- docs: overhaul ReadMe and clean up docs intro by @vicentebolea in #5044
- docs: show introduction content on ReadTheDocs home page by @vicentebolea in #5045
- DAOS engine: per-rank metadata, engine autodetect, and scaling fixes by @eisenhauer in #5041
- Add mhd orszag tang example by @dpugmire in #5036
- build(deps): bump github/codeql-action from 4.35.4 to 4.35.5 in the all-actions group by @dependabot[bot] in #5046
- Add OpenChain() to NullTransport so that BP5 can use it. by @pnorbert in #5047
- BP5: Rerouting improvements by @scottwittenburg in #4983
- build(deps): bump the all-actions group with 2 updates by @dependabot[bot] in #5049
- Refactor to drop TransportMan where we can (not bp3/4) by @eisenhauer in #5048
- BP5: thread-safe context-bearing Get/PerformGets pipeline by @eisenhauer in #5050
- Dill Upstream by @eisenhauer in #5052
- Dill upstream (release branch) by @eisenhauer in #5054
- Update latest release version in ReadMe.md by @vicentebolea in #5056
- BP5: add per-file id to index header by @eisenhauer in #5057
- XRootD: add per-request access log by @eisenhauer in #5058
- build(deps): bump the all-actions group with 2 updates by @dependabot[bot] in #5059
- BP5/XRootD: identity/version/byte-order checks on remote reads by @eisenhauer in #5060
- Fix ADIOS2_FEATURE_LIST generation and engine reporting by @eisenhauer in #5062
- XRootD plugin: byte-swap remote responses to the client's order by @eisenhauer in #5064
- Remote response size check by @eisenhauer in #5066
- build(deps): bump the all-actions group with 2 updates by @dependabot[bot] in #5065
- ci: fix Windows 2025 jobs (vs2026) and pin cibuildwheel v3 by @vicentebolea in #5071
- codeowners: use codeowner instead of assignees in dependabot by @vicentebolea in #5067
- ci: bump cibuildwheel to v4.0.0, drop cp313t free-threaded wheels by @vicentebolea in #5072
- deps: set min ver of libsodium to 1.0.4 by @vicentebolea in #5077
- cmake: remove old not used findX.cmake by @vicentebolea in #5079
- wheels: enable sodium by @vicentebolea in #5080
- Drop unused configure-time copy of iotest-config into the build tree by @eisenhauer in #5076
- cmake: fix SQLite3 target name for CMake >= 4.3 by @vicentebolea in #5081
- Remote: XrdCl HTTP backend by @eisenhauer in #5078
- ci: backport CI to release_212 by @vicentebolea in #5083
- build(deps): bump pypa/cibuildwheel from 4.0.0 to 4.1.0 in the all-actions group by @dependabot[bot] in #5090
- Remove unnecessary includes in FileAWSSDK by @SunBlack in #5092
- Do not process datasets/replicas that are officially deleted from the… by @pnorbert in #5094
- Make reader engine selection collective and fail cleanly by @eisenhauer in #5099
- cmake: honor the ADIOS2_USE_SysVShMem option by @eisenhauer in #5096
- Cleanup: Separate XrdCl fetch from promise handling by @eisenhauer in #5102
- Lean defaults: turn legacy engines/transports off by default by @eisenhauer in #5109
- build(deps): bump the all-actions group across 1 directory with 7 updates by @dependabot[bot] in #5110
- fix dumping a file with local arrays over time (-t -d option). by @pnorbert in #5112
- DAOS: zero-copy data-path counters + cold-buffer warmth guard by @eisenhauer in #5107
- FileStream writes BP5; mode-aware append; block-aware Variable::Start() by @eisenhauer in #5113
- One EVPathRemote per remote file open by @eisenhauer in #5116
- FileStream: detect BP version from md.idx header, race-free by @eisenhauer in #5118
- Fix deallocation of internal buffers in InlineWriter by @lahwaacz in #5111
- Python docs: read semantics and deferred reads by @eisenhauer in #5124
- build(deps): bump the all-actions group with 4 updates by @dependabot[bot] in #5126
- DAOS: chunk bulk transfers, fix Close handle race, tune array chunk_size by @eisenhauer in #5125
- Release MGARD-X cache to free retained GPU memory in the MGARD operator by @gqian-coder in #5127
- Test: Attribute-Only Steps by @ax3l in #5122
- build(deps): bump the all-actions group across 1 directory with 6 updates by @dependabot[bot] in #5131
- BP5: 32 Bit Crashes Fixed, 32bit-32bit Round-Trips by @ax3l in #5104
- Support reading HDF5 files from TAR file. by @pnorbert in #5132
- build(deps): bump the all-actions group with 6 updates by @dependabot[bot] in #5135
- BP5: stop zero-filling the per-thread read scratch by @eisenhauer in #5136
- build(deps): bump the all-actions group with 4 updates by @dependabot[bot] in #5138
- ci: tighten GITHUB_TOKEN permissions (Scorecard Token-Permissions) by @vicentebolea in #5141
- gh-actions: add apptainer image job by @vicentebolea in #5139
- gh-actions: push apptainer SIF to its own GHCR package by @vicentebolea in #5142
- build(deps): bump the all-actions group with 4 updates by @dependabot[bot] in #5143
- Reader-defined derived variables (local BP5 path) by @eisenhauer in #5133
- adding new operator ceasar by @E53klasky in #5129
- ci: bump clang sanitizer to 22 by @vicentebolea in #5150
- ci: bump rocm to 6.4.2 in frontier by @vicentebolea in #5151
- BP5: 32<->64 Bit roundtrip by @ax3l in #5121
- build(deps): bump the all-actions group with 3 updates by @dependabot[bot] in #5155
- ci: use gh-gl-sync component for spack ci by @vicentebolea in #5156
- XRootD HTTP client: configurable URL path prefix via hosts.yaml serve… by @eisenhauer in #5144
- Avoid linking to uninstalled TARGET_OBJECTS by @kmorel in #5157
- ci: automate backporting with korthout/backport-action by @vicentebolea in #5152
- Derived vector JIT compilation by @eisenhauer in #5160
- Derived expression grammar rework by @eisenhauer in #5161
- Fix bug related to campaigns, metadata from BP5 stored as in-memory-… by @pnorbert in #5163
- Remote server: exit directly on idle timeout by @eisenhauer in #5165
- Fix pointing to the TAR file instead of individual file name on S3 … by @pnorbert in #5168
- Bp5 truncated/corrupt file recovery by @eisenhauer in #5166
- fix macos jobs by @vicentebolea in #5173
- Add configurable HTTPS campaign access by @pnorbert in #5174
- testing: make XRootD HTTPS cleanup reliable by @pnorbert in #5172
- Hdf5 s3 https transports by @pnorbert in #5175
- build(deps): bump the all-actions group across 1 directory with 3 updates by @dependabot[bot] in #5159
- build(deps): bump pypa/cibuildwheel from 4.2.0 to 4.2.1 in the all-actions group by @dependabot[bot] in #5178
- ci: enable codeql coverage for gh actions by @vicentebolea in #5179
- docs: add LFX Insights badges to ReadMe by @vicentebolea in #5051
- Update version support notation in SECURITY.md by @vicentebolea in #5180
- Python: accept int8 or uint8 buffers for char variables in Get by @eisenhauer in #5181
- campaign: prepare simple-file reads for XRootD by @pnorbert in #5176
- Fix Python detection for MPI pip builds by @shimwell in #5183
- Upstream EVPath and FFS by @eisenhauer in #5185
- build(deps): bump the all-actions group with 3 updates by @dependabot[bot] in #5184
- Remote: reject wrong-size responses, admin unknown command is 404 by @eisenhauer in #5186
- Add missing std library header by @kuberry in #5188
- Fix NoTestRerun flakes by @eisenhauer in #5189
- SST UCX fix: retain remote key until get completion by @Aaron-Hsieh-0129 in #5191
- build(deps): bump the all-actions group with 3 updates by @dependabot[bot] in #5187
- PR and AI-agent policy, update other stuff (CI, formatting, typos) by @eisenhauer in #5193
- Tests: separate ZfpComplex MPI file name, re-enable Sz/ZfpComplex by @eisenhauer in #5196
- Tests: exact data checks in BPJoinedArray and HeatMap6D (#4738) by @eisenhauer in #5195
- CI: re-enable excluded Python tests on Windows (#4276, #4278, #4279) by @eisenhauer in #5197
- BP5: per-step joined array shape in ReadRandomAccess (#5198) by @eisenhauer in #5199
- Upstream ATL 2.4.0 by @eisenhauer in #5201
- Upstream ATL and EVPath by @eisenhauer in #5203
- MyGetTotalSize() local function to sum a vector of mgard_x::SIZE inst… by @pnorbert in #5206
- SST/UCX fix: create writer endpoints on demand and handle connection failures by @Aaron-Hsieh-0129 in #5208
- ci: build and upload macOS wheels by @vicentebolea in #5200
- bp4dbg/bp5dbg: reject files of the other BP version by @eisenhauer in #5209
- Remove SST's peer-based communication pattern by @eisenhauer in #5207
- fix macos ci by @vicentebolea in #5214
- Migrate kwsys SystemTools file/env/dynamic-loading to C++17 by @vicentebolea in #5147
- Update code since memory space for SYCL cannot be detected automatically by @anagainaru in #5213
- Replace kwsys CommandLineArguments in bpls with CLI11 by @vicentebolea in #5149
- SST: send string array attributes by @vicentebolea in #5218
- thirdparty: trim kwsys by @vicentebolea in #5221
- SST: remove legacy marshaling and deliver attributes reliably by @eisenhauer in #5226
- update latest gtest by @vicentebolea in #5224
- Blosc2: accept 3.x, and ON requires Blosc2 by @eisenhauer in #5210
- Modernize FindZeroMQ.cmake and fix some ZeroMQ related compile bugs by @SunBlack in #5091
- thirdparty: replace mingw-64 getopts usage for cli11 by @vicentebolea in #5223
- Add adios2-mpi Linux wheels by @vicentebolea in #5227
- SST: fix fallthrough in RoundRobin step distribution by @eisenhauer in #5232
- BP5 enhance direct read to application memory by @eisenhauer in #5220
- BP5 Reader - ignore active flag by @eisenhauer in #5228
- Fix destination sizing and placement for explicit Selection reads by @eisenhauer in #5233
- Add ADIOS2_USE_MGARD_MDR option by @kmorel in #5236
- BP5: Get() in Mode::Read outside BeginStep/EndStep throws by @eisenhauer in #5231
- DAOS: rework the reader for strided and large reads, fix write-side data loss by @eisenhauer in #5230
- Add CAESAR 3D–5D compression support, correction methods, tests, and documentation by @E53klasky in #5235
- Define numpy 8-bit arrays by their own signedness by @eisenhauer in #5244
- Selection cleanup by @eisenhauer in #5240
New Contributors
- @ordinary-slim made their first contribution in #5008
- @rtobar made their first contribution in #5015
- @dpugmire made their first contribution in #5036
- @SunBlack made their first contribution in #5092
- @E53klasky made their first contribution in #5129
- @shimwell made their first contribution in #5183
- @kuberry made their first contribution in #5188
- @Aaron-Hsieh-0129 made their first contribution in #5191
Full Changelog: v2.12.0...v2.13.0-rc1