Constellation Preview Release 0.5#
Last time, we announced the biggest release we had so far. Today, we are happy to announce an even larger release, Constellation version 0.5, named Scutum.
Breaking Changes#
Programs using previous versions of Constellation are not compatible with this version due to the breaking changes to our core protocols.
This release also contains two minor breaking changes for existing Python satellites.
CSCPMessageis nowCSCP1MessageFor CSCP commands decorated using
@cscp_requestable, therequestparameter is now of typeCSCP1Messageinstead ofCSCPMessage. The message class also moved fromconstellation.core.cscptoconstellation.core.message.cscp1.SatelliteStateis now part ofcore.message.cscp1For CSCP commands checking the current satellite state, the
SatelliteStateobject moved fromconstellation.core.fsmtoconstellation.core.message.cscp1.
New Features#
Satellite Roles#
Satellites in a Constellation operate autonomously. This requires additional information on how to react in case of failures or unforeseen situations. Following the decentralized approach of Constellation, this information is provided by each satellite via their heartbeats. Each satellite should defines independently how other satellites in the Constellation should react in case of problems.
Constellation now provides a new framework parameter for satellites called _role, which can be used to determine the
behavior of other satellites in case a of failure. More details can be found in the
operator guide.
Conditional Transitions#
In some cases it can be required to initialize, launch, start or stop satellites in a specific order - they might for example depend on receiving a hardware clock from another satellite that is only available after initializing.
For this purpose, Constellation now provides the _require_<transitional state>_after framework parameters for satellites,
available for each transition (e.g. initializing or launching). More details can be found in the
operator guide.
Scriptable Controller#
The Python implementation now includes a new scriptable controller class which makes it easier to write scripts to control a Constellation:
from constellation.core.controller import ScriptableController
from constellation.core.message.cscp1 import SatelliteState
# Create controller
group_name = "edda"
ctrl = ScriptableController(group_name)
constellation = ctrl.constellation
# Initialize
constllation.initialize({})
ctrl.await_state(SatelliteState.INIT)
More details and a how-to can be found in the operator guide
Detailed Changelog#
The following changes related to protocols are included in this release:
MR!407/MR!743: Implements conditional transitions for satellites. This allows to ensure that satellites are initialized/launched/etc in a specific order while being fully autonomous.
MR!524: Add message flags to CHP. This allows to set roles to specific satellites determining the behavior of other satellites in case they experience a failure.
MR!739: CHIRP now uses UDP multicasts instead of UDP broadcasts. This also fixes network discovery on MacOS.
MR!713: Implements congestion control in CHP. This prevents flooding the network with heartbeats in setups with many satellites.
MR!789: Time parameters in TOML are now properly handled
The following new satellites have been added in this release:
MR!728:
LeCroy, a satellite to store waveforms from a LeCroy scopeMR!750:
FlightRecorder, satellite which can be used to store log messages
The following changes related to satellites are included in this release:
MR!791: Fix the installation instructions for the
CaenHVsatelliteMR!764: Support reconfiguration of the
SputniksatelliteMR!762: Fix the expected payload for the
get_tempcommand of theLakeShore218satelliteMR!755: Adds a
get_data_ratecommand toDevNullReceiversatellite to allow for scripted benchmarksMR!709: Adds SWMR (Single Writer Multiple Reader) option to
H5DataWriterMR!793: Added a
launch_delayparameter toSputnikfor allow testing conditional transitions
The following changes related to the user interfaces are included in this release:
MR!772: Improve run timer in MissionControl to properly display the run time even if a run is started by another instance
MR!720: Minor UI polishing for command dialog
The following improvements for the C++ version are included in this release:
MR!697: Controllers can detect cyclic dependencies in conditional transitions
MR!781: Using
getArray()on aConfigurationobject now also works if the underlying value is a single value of the request typeMR!751: Rework of the
execlibrary, allowing for better selection of network interfaces and simplifies embedding satellites into existing programsMR!746: Better handle restarted satellites after a fatal crash
MR!607: Adds measurement queue class for controllers as a step towards a scan feature in MissionControl
MR!704: Adds setting and getting an
std::setforConfigurationobjectsMR!718: Implements a
StatListenerfor telemetryMR!747: Emit the file path as metric for receiver satellites
MR!742: Fix logging thread pool on MacOS
MR!719: Make
_data_transmittersoptional for receiver satellitesMR!727: Fix bug where exceptions in the
runningfunction were not caughtMR!717: Reduce time in poller during which the mutex is locked
MR!716: Check configuration parameters containing satellites for valid canonical names
MR!708: Store data license tag for transmitters in run metadata
MR!701: Add option to use jemalloc as memory allocator for improved data transmission performance
The following improvements for the Python version are included in this release:
MR!775: Fix Python satellites ignoring other satellites after they failed once
MR!770: Adds a
ScriptableControllerclass which simplifies creating a Python script controlling a ConstellationMR!758: Rework the CLI to allow for easier selection of the network interfaces
MR!744: Implements a dedicated message class for CSCP1 decoding and encoding
MR!748: Improve Python tests
MR!711: Improve BOR and EOR handling in
DataSenderMR!457: Only lower-case CSCP commands, not other CSCP verbs
MR!735: Fix rare
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str'bug during initializationMR!715: Remote tip in IPython controller
MR!714: Add
await_statefunction to controller for easier scriptingMR!792: Remove obsolete
ConstellationListInterfacestool
The following miscellaneous changes are included in this release:
MR!786: Publish new releases to Zenodo
MR!784: Add about section to the website
MR!314: Add Python API docs to the website
MR!740: Update installation instructions for MacOS
MR!732: Fix installation instructions for Alma
MR!731: Add how-to for creating scans using Python
MR!689: Add Qt installation instructions and mention some build options
Notes#
The software is publicly available under the EUPL-1.2 from the DESY GitLab repository. In addition, the Python version is available on PyPI and the C++ version is available on Flathub for Linux.
It should be noted that this is a preview release and some interfaces and protocols might change until the first official major release.