Releases: GMLC-TDC/HELICS
v2.7.0
This release includes a major change internally for filters. Testing and usage revealed some scenarios which could cause deadlock or acausal message arrival. These scenarios were not common so the release was delayed until a fix was in place. As of the 2.7.0 release all the identified issues related to the initial bug have been resolved. There remains some outstanding cases that fail rarely in the CI systems specifically related to rerouting filters that are separate from both the location they are rerouting from and to. The resolution of these is uncertain but will be available in a patch release when resolved. Additional changes include major changes to the CI builds due to changing support of Travis CI and other CI services.
NOTE There are some known issues with using remote rerouting filters in the timing, which can under some conditions allow messages to be delivered after the the time the message was supposed to be delivered. Though most issues have been resolved in this release there remain a few tests in the CI build which are subject to sporadic failures that have yet to be resolved. It is expected these will be resolved in a future release hopefully 2.7.1
Changed
- Update spdlog, fmtlib, filesystem, asio, and units libraries to latest releases (#1798, #1802, #1803)
- Default
HELICS_USE_ZMQ_STATIC_LIB
toON
if only the static library is found in the search path #1845 - Primary CI systems are now on azure instead of travis #1819
- Only a very limited CI test set is run on formatting PR's #1761
Fixed
- Tests and fixes allowing multiple filters on the same endpoint #1852
- Fixed some failing broker server tests related to input arguments #1825
- Fixed an issue with barrier and maxTime requests #1788
- Fixed a timing bug when using offset and some specific time requests immediately after the enterExecutingMode #1759
- Several fixes and changes to CI systems related to changes in CI infrastructure #1754, #1790, #1828, #1744, #1739
- Fixed deadlock caused when querying a disconnected HELICS object #1705
- Fixed major timing bug with the use of filters #1717
- Fixed issue when sending messages before execution time #1717
Added
- Support for ZMQ 4.3.4 (this will become default in the next version) #1841
- Added a
global_flush
query to sweep the internal action message queues #1832 - A vcpkg manifest file for some vcpkg support #1835
- Added an event triggered flag to better handle timing on federates that are primarily or exclusively triggered by events like filters #1804
- Added ordered queries which allow queries to run on the normal vs priority pathways for queries that are desired to be synchronous with the other helics messages #1793
- Added github workflow to compress images #1626
- Additional and clearer warning messages when a message is sent to an unknown destination #1702
v3.0.0-alpha.2
HELICS 3.0 is a major update to HELICS. The major features that have been added are the command interface and targeted Endpoints. Internally major changes include updating the minimum compiler to C++17, and updates to internal libraries. The binary serialization protocol was shifted from Cereal to a custom format that embeds the data type so is more suitable to HELICS data types. The initial release is an alpha release for some initial testing. The full change log will be filled out as the release progresses from alpha to beta to final release. The migrating 2 to 3 page includes some specific details on migrating from HELICS 2 to 3.
Changes expected for beta.1 which will be the next pre-release
- matlab interface built and tested again (It is likely a new matlab API will be coming again)
- more test cases for targetedEndpoints
- docker image build working
This is an early alpha release it includes all the major new features and nearly complete API changes(baring bug reports) please use for testing and report any issues.
Changed
- Data serialization moved to a custom protocol specific to HELICS.
- Minimum build requirements to C++17
- Many of the API functions now use
string_view
instead ofconst std::string &
- Several API calls for messages have been updated for clarity and consistency.
Fixed
Added
- Command interface
- Targeted Endpoints
Removed
- Message structure from C API
- Deprecated functions from HELICS 2
v2.6.1
Several small bug fixes and minor enhancements to query operations
Changed
- In
helics_enum.h
flags were separated into separate enums with the same symbols splitting up flags specific to federates, cores, and those applicable to all entities - CMAKE 3.18 was tested and verified and used as the baseline version when available.
- Default libzmq was updated to 4.3.3
Fixed
- A few flags were unable to be queried through
getOptionFlag
operations #1655 - The index values for some flags were not able to be retrieved via getFlagIndex operations #1645
- In some cases specifying a custom port of a number less than the default ports led to federates being unable to bind the appropriate port #1648
- Duplicate target specification and warnings were improved #1639
- Certain property strings did not generate the correct property index #1642
- For large packets in the TCP core on particular operating systems partial buffers may be sent and this was not handled property in the tcp core #1600
- Boost 1.74 deprecated some interfaces used in the webserver. The code was updated to support the latest release of boost. #1629
- The requested_time field in the
current_time
query for federates was missing #1619 - Some broker queries did not reset properly when changes in the federation occurred #1617
- Handle cases of empty install prefix #1577
Added
- The C api now has a query callback method for responding to federate specific queries. #1634
- Some tutorials for the hello_world example on visual studio #1621
- A
helicsMessageClear
method was added to the C API for clearing the data from a message object #1622 - A
global_state
query to actively query the current state of all objects in a federation. #1614 - A strict config checking flag to generate errors on potentially incorrect configuration files #1607
v3.0.0-alpha.1
HELICS 3.0 is a major update to HELICS. The major features that have been added are the command interface and targeted Endpoints. Internally major changes include updating the minimum compiler to C++17, and updates to internal libraries. The binary serialization protocol was shifted from Cereal to a custom format that embeds the data type so is more suitable to HELICS data types. The initial release is an alpha release for some initial testing. The full change log will be filled out as the release progresses from alpha to beta to final release. The migrating 2 to 3 page includes some specific details on migrating from HELICS 2 to 3.
Changes expected for alpha.2
- travis-ci builds operational
- more test cases for targetedEndpoints
- octave build working
- docker image build working
This is an early alpha release it includes all the major new features and nearly complete API changes(baring bug reports) please use for testing and report any issues.
Changed
- Data serialization moved to a custom protocol specific to HELICS.
- Minimum build requirements to C++17
- Many of the API functions now use
string_view
instead ofconst std::string &
Fixed
Added
- Command interface
- Targeted Endpoints
Removed
- Message structure from C API
- Deprecated functions from HELICS 2
v2.6.0
Bug fixes and major logging update
Changed
- The build flag function now returns correct debug or release flags depending on the build
- The debug postfix
d
is no longer added to the interface libraries - Spdlog is now being used for logging inside HELICS and the old logger has been removed this results in fewer thread being generated by HELICS.
- CMake will now error if the install directory is set to the build directory
- Some argument names in the C API have been changed for consistency
- Output a more descriptive error message for mismatched data sizes when converting types #1521
- Some C++98 API functions were added and changed for consistency, specifically endpoint get type no returns a
char *
instead of std::string, and agetCurrentTime
function was added toFederate
- logging level properties from a federateInfo structure will be inherited by a core for the first registered federate
Fixed
- String with negative numerical values were not acknowledging the negation Issue #1306
- Config file parsing was not acknowledging "unit" string #1512
- A performance issue with the tcpss and tcp cores in some cases has been resolved by setting the no_delay option
- Inconsistency in type returned by endpoint getType in C++98 API #1523
- a potential segmentation fault when calling some methods in the C shared library after calling helicsCloseLibrary
Added
- Flags for
dumplog
andforce_logging_flush
were added to the C API - Added missing C++98 call to
getCurrentTime
- Added
closeLibrary
function to the C++98 API - Added a Python benchmark file
- An option to install the benchmark executables has been added
- Data logging output for both send and receive of messages
- A GitHub Actions workflow to build packages for Linux with the benchmark executables
Removed
- The previous logger including logger.h has been replaced with spdlog
v2.5.2
Bug fix release for some build issues and a fix to the wait_for_current_time
flag
Fixed
- Bug in the timing subsystem that was preventing the
wait_for_current_time
flag from functioning properly - Fixed some oddities in the java tests, that were doing confusing things and happened to work because of the bug in the timing subsystem
- A build system issue that caused the automated generation of python packages to fail on the 2.5.1 release. This was caused by overriding the output build location in all cases, when it should have been limited if the python interface is getting built separately.
- A few cppcheck issue from the new check (#1414)
Added
- Add print_systeminfo flag to root helics_benchmark command (#1417)
- Added cppcheck github action for PR's
v2.5.1
Changed
- All ZeroMQ related files are now located in the network library and under a single namespace
- Use Python 3.8 instead of 3.6 for any release build installers that include a copy of the Python interface (
pip
oranaconda
are the recommended ways to install the Python interface) - Update units library to include some typical natural gas units and conversions
- Use a separate action for automated pr generation
- Update the CLI11 library
- The setOption/getOption functions now take an int32_t as a value instead of a boolean. This does not change the API since in the C library the
helics_bool
was already an int. - In the case of multiple sources,
getInjectionType
, andgetInjectionUnits
now will return a json string vector. - The CMake build generation now uses a central location for all build artifacts instead of individual directories.
- Updated the ASIO library to 1-16
- Minor updates to the clang-format to allow better alignment and comment reflow
- Numerous code refactorings to simplify and clean up code
- Move all ZMQ related items to the network library
- Updated Python packages DLL load failed error to suggest installing the latest Visual C++ Runtime
Fixed
- Sporadic failures in the Webserver and websocket tests
- A bug in the translation of vectors to complex vectors
- A bug in the copying of vectors into the C shared library
- Numerous clang-tidy identified issues mostly for code readability
- Some issues with the exists query not working in certain circumstances and for cores and brokers
- The nonlings test would fail if the branch name had
error
in it. A check was put into eliminate this false negative test failure. - A few sporadic failure cases in the http and websocket tests
- A build generation issue with disabling the ZMQ core
- An error from the config interpreter where some flags were not getting correctly propagated to the Federate configuration.
Added
- A helics::zmq target was added for linking with zeromq if using HELICS as a subproject
- A
HELICS_BENCHMARK_SHIFT_FACTOR
CMake option was added to allow the benchmarks to scale depending on computational resources - "version" and "version_all" queries to get the local version string and the version strings of all the cores/brokers in the federation
- A few missing operations to the C++98 interface for Message objects, add
helicsMessageClone
andhelicsEndpointCreateMessage
functions in the C interface. Add a test case for some of the C++98 message operations. helicsQuerySetTarget
andhelicsQuerySetQueryString
operations to modify an existing query in the C interface- A set of reduction operations for multi-input handling on inputs, options for setting input source priority and the number of expected connections
- A Watts-Strogatz like benchmark
- A few more parameters that can be handled in the Webserver and support for use of uuid instead of name
- A few missing message operators to the C++98 API, such as
data
,append
,setFlag
,checkFlag
,sendMessageZeroCopy
- Made the Message class return a self Reference for the setters
- A test to run the helics-broker executable as part of the CI tests
- A bug in the helics_broker that no longer ran correct defaults
- A "version_all" query, to retrieve the version of HELICS in use for all cores/brokers, and a "version" query to retrieve the version of a specific target.
- A series of checks for markdown, spelling, shellcheck, python formatting, cpplint, end-of-line and automated generation of PR scripts for the formatting updates.
- Some level of automated scaling for benchmarks for small systems
- API functions for retrieving the build flags used to generate the library
- Some additional message interpreters to aid in debugging
- A test using the standalone
helics_broker
to run an example
v2.5.0
Some library reorganization, additional static analysis(CppLint and clang-tidy), multiBroker, updates to the webserver including some new capabilities for creating and destroying brokers.
Note: the helics_broker
has a bug when using the implicit default core type; as a temporary workaround either run it with the --coretype
argument or use the helics_app broker
subcommand.
Changed
- Split the HELICS core library into a separate core and network library
- Update FMT library to version 6.2.0
- The core and broker Factories use a map instead of a fixed list which is a step toward allowing user defined cores
- Updated CLI11 included code to customized version to allow configuration of cores and brokers through Json files
- The ordering of the helics_error_types enum is in ascending order
- Refactored the Matlab and Java swig interface builds to enable standalone builds
Fixed
- Added CPPlint and fixed a number of issues that check identified.
Added
helicsEndpointSendMessageObjectZeroCopy
to allow transferring messages with minimal copying.helics<Interface>IsValid
functions to the C APIhelicscpp::cleanHelicsLibrary
to the C++98 API.- A Comm factory to the Core to enable constructing Comm interfaces directly from the type.
- The REST API in the webserver was updated to include ability to create and destroy brokers.
- A websocket server similar to the REST API but will respond to JSON queries.
- A test suite for the HTTP and websocket servers.
- A Multibroker that can allow multiple communication types to interact together.
- Support for
HELICS_BUILD_CONFIGURATION
cmake variable for building on unique platforms. The only supported one right now is "PI" for building on raspberry pi platforms.
Deprecated
- in the C shared library
helicsFederateGetMessage
,helicsEndpointGetMessage
, andhelicsEndpointSendMessage
are deprecated in favor of the object version These will be removed in HELICS 3.0 - deprecated
helicsEndpointClearMessage
this function does nothing right now, all messages are on a federate level. - Deprecated error functions in the C++ Federate API in favor of localError and globalError.
v2.4.2
Increased code coverage and additional bug fixes.
On March 31, 2020 support for installing HELICS using the Spack develop branch was added
Changed
- Update toml11 library to 3.3.1 with some warning fixes for C++17
- The query handling in the core library was cleaned up to be more extensible and uniform
Fixed
- MacOS build with python 2.7 failure
- Fixed some issues with the build/test process if the
ENABLE_ZMQ_CORE=OFF
- Fixed a potential issue with queries if they are triggered before the connection ack
- An issue with host name resolution on some systems with restricted DNS lookup
- Allow camelCase in file parameters from JSON
- Fixed linking error with default OpenMPI Spack package
- Fixed timing benchmark federate name
Added
- A series of tests for MessageFederate.cpp to increase coverage on that file to 100%
- Callbacks for custom filters in the C shared library
- A series of tests for CoreApp, BrokerApp, and FederateInfo and a few fixes for them
- A few additional tests of helics supports types and conversions
- CoreApp has a connect() and reset() method and constructor from a Core shared pointer
- BrokerApp has a connect() method and constructor from a Broker shared pointer
- Added a data_flow_graph query which gets all the connections in a federation
v2.4.1
Increased code coverage and additional bug fixes. The error propagation in HELICS was improved such that local errors can be escalated to global errors, and a federate can define errors coming from the federate that are handled appropriately and can halt a co-simulation.
Note for macOS users there is a bug that will be fixed in the next release that prevents building the Python interface with SWIG -- this mostly impacts the small number of users on Python 2.7.
Changed
- The helics webserver will build by default if the conditions are met
- Update filesystem library to v1.3.0
- The behavior of the
Federate*Complete
operations is slightly modified to be uniform and consistent, no API changes - Configuration of flags and targets for interfaces in JSON and TOML files can be done in multiple sections
- The benchmark federates have been changed to use a common base benchmark federate class for more consistent behavior
- Switched to including netif as a git submodule
- the
error
Function in the C++ API is now the same aslocalError
previously it was primary useful for logging and didn't do much, and will be deprecated in the next minor release. - Updated the GitHub actions (clang-format, swig interface updates, and release builds) to use actions/checkout@v2
- Cleaned up the Windows installer (better component names/descriptions and groups, link to Gitter, and require installing Headers to install SWIG)
- Updated the HELICS apps manpages with new options
Fixed
- Issue with iterative requests that were not being honored if the federate was acting in isolation
- A few pathways which would allow segmentation faults if a federate was disconnected and particular functions were called
- ValueFederate
addIndexedTargets
, the function template would not work as was written and was unusable, it is now tested and operational.
Added
HELICS_DISABLE_WEBSERVER
option to turn off building of the webserver. It will build by default if Boost is enabled and is version 1.70 or higher; otherwise it is disabled.- A series of tests for Federate.cpp to increase coverage on that file to 100%
- A series of tests for ValueFederate.*pp to increase coverage on that file to 100%
- Docker image for a helics builder which includes build tools and the helics installation
- helics can be installed on MSYS2 using pacman.
- Standalone benchmark federates for use in multinode benchmark runs
- A FreeBSD 12.1 CI build using Cirrus CI
- Sending an event from GitHub Actions release builds to trigger updating additional HELICS packages when a new release is made
localError
, andGlobalError
function calls the Federate API and in the C++ and sharedLibrary.helics_terminate_on_error
flag to escalate what would be a local error into a global one that will halt the co-simulation. This flag can be specified through the flag to federates or to brokers and cores through a command line option--terminate_on_error
addDependency
function was added to the C++ Federate API and shared library API, it can add a direct dependency between federates manually.- A 32-bit Windows zip install archive for releases
- "global_time", "current_time", and "state" queries for brokers and cores, and "current_time" query for federates.
- Support for a 'helics-release-build' event trigger to the release build GitHub Actions workflow
Deprecated
Removed
HELICS_ENABLE_WEBSERVER
option to enable the webserver. This option was added as experimental in 2.4.0- VS2015 Windows Server 2012 CI build is removed. Azure Pipelines is removing the image because it is outdated and sees little use. VS2015 is still tested through Appveyor for the time being.