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.
CSCPMessage
is nowCSCP1Message
For CSCP commands decorated using
@cscp_requestable
, therequest
parameter is now of typeCSCP1Message
instead ofCSCPMessage
. The message class also moved fromconstellation.core.cscp
toconstellation.core.message.cscp1
.SatelliteState
is now part ofcore.message.cscp1
For CSCP commands checking the current satellite state, the
SatelliteState
object moved fromconstellation.core.fsm
toconstellation.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
CaenHV
satelliteMR!764: Support reconfiguration of the
Sputnik
satelliteMR!762: Fix the expected payload for the
get_temp
command of theLakeShore218
satelliteMR!755: Adds a
get_data_rate
command toDevNullReceiver
satellite to allow for scripted benchmarksMR!709: Adds SWMR (Single Writer Multiple Reader) option to
H5DataWriter
MR!793: Added a
launch_delay
parameter toSputnik
for 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 aConfiguration
object now also works if the underlying value is a single value of the request typeMR!751: Rework of the
exec
library, 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::set
forConfiguration
objectsMR!718: Implements a
StatListener
for telemetryMR!747: Emit the file path as metric for receiver satellites
MR!742: Fix logging thread pool on MacOS
MR!719: Make
_data_transmitters
optional for receiver satellitesMR!727: Fix bug where exceptions in the
running
function 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
ScriptableController
class 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
DataSender
MR!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_state
function to controller for easier scriptingMR!792: Remove obsolete
ConstellationListInterfaces
tool
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.