add_library(ALIAS)used${target_lib}instead of${target}: The alias target name expanded todds-user-defaults::(empty suffix) becausetarget_libwas never defined. Fixed to use the correct variable${target}→dds-user-defaults::dds_user_defaults_lib.
${PROJECT_BINARY_DIR/src}→${PROJECT_BINARY_DIR}/src: The/srcwas inside the CMake variable braces, causing the expression to evaluate to an empty string. Affected:dds-submit-ssh,dds-submit-localhost,dds-submit-slurm,dds-submit-pbs,dds-submit-lsf.
dds_misc_liblisted twice indds-commander,dds-submit-ssh, anddds-submit-localhost— removed the duplicates.
- Fixed regex pattern from
/libto/lib$: The original pattern incorrectly matched paths ending with/lib64or similar, preventing the symlink creation. The exact match anchor ensures the symlink is only created when the lib directory is truly outside the standard location.
- macOS ARM64 vs Linux aarch64: Added platform-specific architecture strings for ARM builds. macOS uses
arm64while Linux usesaarch64for the same architecture family. This ensures precompiled worker binaries are correctly identified and deployed on both platforms.
- Removed
processfrom Boost component search:Boost.Processv1 is a header-only library, so it must not be listed as a compiled component infind_package(Boost ... COMPONENTS ...). The previous configuration caused CMake to search for alibboost_processbinary that does not exist, along with a fallback alias workaround. - Cleaned up
dds-misc-liblink libraries:Boost::processremoved fromtarget_link_librariesindds-misc-lib. Include paths are already provided through theBoost::boostheader-only interface target, so Boost.Process v1 headers remain fully accessible without any explicit link target.
- Locale generation: Added en_US.UTF-8 locale generation to the dev container. This is required by Boost.Process and
std::localefor proper string and process handling in the containerized environment. - Git configuration: Added
postStartCommandto mark the workspace as a safe directory for git operations, resolving ownership mismatches between the mounted workspace (owned by root) and the container user (dds). - Dependency cleanup: Replaced openssh-client with libxml2-utils in the Dockerfile, and removed extensive SSH-agent forwarding documentation from devcontainer.json as it's no longer needed.
- Removed
MiscCommon_LOCATION: Variable pointed to a non-existent directory and was never referenced by any CMakeLists.txt. - Removed
IS_SET_DDS_INSTALL_PREFIX: Cache variable was set but never read anywhere in the project. - Consolidated
CMAKE_MODULE_PATH: Merged two separateset()calls (where the second silently overwrote the first) into a single assignment including all three search directories.
- Self-assignment warning in
Process.h: Replaced the no-op self-assignment_filterForRealUserID = _filterForRealUserIDwith(void)_filterForRealUserIDto silence the unused-argument warning cleanly (-Wself-assign) - Deprecated
boost::asio::deadline_timer: Replaced all uses of the deprecateddeadline_timer/boost::posix_timeAPI withboost::asio::system_timer/std::chronoinProcess.handBaseChannelImpl.h(-Wdeprecated-declarations) [[nodiscard]]warnings in Protobuf calls: Cast the return values ofUnpackTo()(dds-commander) andPackFrom()(dds-submit-slurm) tovoidto suppress-Wunused-result
dds_tools_lib-session-testslink failure: Removed a redundant#include <boost/process.hpp>fromTestSession.cpp. On Boost 1.90 the top-level header pulls inboost/process/v2/error.hppandboost/process/v2/shell.hpp, which contain static initializers that require the compiledlibboost_process(v2) library — a library that is not linked in this project. Thebpnamespace alias was already provided byProcess.hviaboost/process/v1.hpp.
- New
.devcontainer/configuration: Added a reproducible VS Code Dev Container based ondebian:bookworm-slimwith a multi-stage Dockerfile- Stage 1 (builder): Compiles Boost 1.90.0, abseil-cpp 20240722.1, and Protobuf v34.0 from source
- Stage 2 (dev): Ships only the pre-built artifacts alongside Clang/LLVM 21 (compiler, clangd, clang-format, lld), CMake 4.2.3, ccache, git and make
- Supports
linux/amd64andlinux/arm64viaTARGETARCH - ccache persisted in a named Docker volume (
dds-ccache) for fast incremental rebuilds postCreateCommandautomatically runs CMake configure (with ccache launchers) on first container open- VS Code extensions:
vscode-clangd(replaces the C/C++ IntelliSense engine) andcmake-toolspre-installed
- Automatic Lightweight Mode: Tools API now automatically detects and respects the
DDS_LIGHTWEIGHT_PACKAGEenvironment variable - No More
make wn_bin: When using lightweight mode, you no longer need to build the worker binary package withmake wn_bin- a huge time saver! - Simplified API Usage: Users no longer need to manually set the
enable_lightweightflag when the environment variable is set - Consistent Behavior: Tools API now behaves consistently with command-line tools (
dds-sessionanddds-submit) - Smaller Packages: Worker packages reduced from ~15MB to ~50KB in lightweight mode
- Job Submission Failure: Fixed critical bug in SLURM plugin that caused job submissions to fail with "No partition specified or system default partition" error when using lightweight mode
- Root Cause: The job script template incorrectly placed executable validation code before #SBATCH directives, violating SLURM's parsing requirements. SLURM stops processing #SBATCH options when it encounters the first executable line, causing all subsequent directives (including
--partition) to be ignored - Template Bug: The placeholder
#DDS_LIGHTWEIGHT_VALIDATIONappeared in both a comment line and the code section. Theboost::replace_all()function replaced both occurrences, breaking the comment syntax and injecting executable code before #SBATCH directives - Resolution:
- Removed lightweight validation code from the job script template entirely
- Eliminated blank lines between #SBATCH directive placeholders
- Validation logic moved to worker nodes where it's actually needed (DDSWorker.sh)
- Impact: SLURM now correctly parses all #SBATCH directives including partition specifications, resource requirements, and job options
- DDSWorker.sh Logic Error: Fixed inverted logic bug that caused worker package deployment to fail when pre-compiled binaries were present
- Impact: This bug prevented users from deploying full worker packages (with binaries) even though the binaries were correctly packaged
- Resolution: The script now correctly:
- Extracts and uses binaries when they exist (full package mode)
- Validates lightweight mode requirements when binaries are absent (lightweight package mode)
If you experienced SLURM job submission failures with errors like:
Batch job submission failed: No partition specified or system default partition
This was caused by a critical bug in the SLURM plugin template that placed executable code before #SBATCH directives. SLURM stopped parsing directives when it encountered this code, ignoring your partition specifications and other settings.
The fix requires rebuilding DDS:
cd /path/to/DDS/build
make
make installAfter rebuilding, your SLURM submissions with lightweight mode will work correctly, and all #SBATCH directives (including partition, CPU requirements, etc.) will be properly recognized.
Before this fix, you had to explicitly set the lightweight flag:
submitInfo.setFlag(SSubmitRequestData::ESubmitRequestFlags::enable_lightweight, true);Now, simply set the environment variable before running your application:
export DDS_LIGHTWEIGHT_PACKAGE=1
./my_dds_appThe Tools API will automatically:
- Start sessions with
--lightweightflag - Configure submit requests for lightweight mode
If you previously encountered errors like:
Error: Can't find WN pre-compiled bin.: /path/to/dds-wrk-bin-3.14-Linux-x86_64.tar.gz
This was caused by the DDSWorker.sh bug and is now fixed. Your worker packages will deploy correctly regardless of whether they contain pre-compiled binaries or are in lightweight mode.
For a complete list of all changes, see CHANGELOG.md.
- Comprehensive Component Documentation: Added detailed README files for core DDS components including DDS Agent, DDS Intercom Library, and DDS Protocol Library with practical examples and usage patterns
- DDS Agent Architecture Guide: New comprehensive documentation covering shared memory transport, task lifecycle management, and internal architecture
- Intercom Library Examples: Added practical examples for master-worker coordination, pipeline processing, and event-driven coordination patterns
- Protocol Library Guide: Detailed explanation of protocol components, transport layers, and implementation examples
- Session Management: Enhanced documentation for lightweight worker package mode and environment variable configuration
- Submit Tool Improvements: Better documentation for the
--pathoption and improved command descriptions
- dds-agent: New comprehensive README with architecture details and usage examples
- dds-intercom-lib: Complete API documentation with real-world coordination patterns
- dds-protocol-lib: In-depth protocol documentation with transport layer explanations
- dds-session: Enhanced README with lightweight session examples and configuration guides
- dds-submit: Improved documentation including new
--pathoption details
- Optimized Tarball: System libraries (libc, libm, ld-linux) are now excluded from the tarball to reduce package size and avoid conflicts with system installations
These documentation improvements make DDS much easier to understand and use:
- New users can quickly get started with comprehensive guides
- Advanced users can leverage detailed examples for complex coordination patterns
- System administrators have better understanding of architecture and deployment options
For a complete list of all changes, see CHANGELOG.md.
Stay tuned for the official release which will include these documentation enhancements to improve your DDS experience.
- Faster Deployments: New lightweight worker package mode reduces package size from ~15MB to ~50KB when DDS is pre-installed on worker nodes
- Efficient Resource Usage: Significantly improved deployment efficiency for large-scale distributed computing environments
- dds-session: Added
--lightweightoption andDDS_LIGHTWEIGHT_PACKAGEenvironment variable support - dds-submit: New lightweight mode with command-line and environment variable configuration
- Enhanced Compatibility: Fixed boost::process compatibility with Boost 1.89+ while maintaining backward compatibility
- Boost Compatibility: Resolved compatibility issues with Boost 1.89+ using conditional compilation
- Worker Package Validation: Improved startup logic to handle missing worker packages gracefully
None in this release.
For a complete list of all changes, see CHANGELOG.md.
- Download the latest DDS release
- Follow standard installation procedures
- Use new
--lightweightflag withdds-sessionanddds-submitwhen DDS is pre-installed on worker nodes
See GitHub Issues for current known issues.