CSW Common Software is a reimplementation/refactoring of the prototype CSW code here developed during the CSW design phase with changes to make the code and public APIs more robust and resilient and to improve its usability and performance for use at the TMT Observatory.
The product is in a new repository: csw.
All notable changes to this project will be documented in this file.
This is patch release over v3.0.0 of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software.
- Added migration guide for v2.0 -> v3.0
- Reference paradox documentation: https://tmtsoftware.github.io/csw/3.0.1/
- Scaladoc: https://tmtsoftware.github.io/csw/3.0.1/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/3.0.1/api/java/index.html
This is the third major release of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software.
->
method on a Key now takes a single parameter instead of varargs. For varargs, please useset
method.1->
method on a Key that took an array of values has been removed. Please usesetAll
method instead.1- Removed usage of client-roles in favor of realm-roles in location server and config server HTTP routes.1
- Contract change for Location Service API for
registration
andlocation
models to incorporate metadata.Metadata
is additional information associated withregistration
.1 - Removed
RegistrationFactory
fromlocation-server
module. Instead, the following should be used by Scala and Java users to instantiateAkkaRegistration
1- For Scala, use
AkkaRegistrationFactory
. It has an API change to expect anactorRef
instead of the URI ofactorRef
- For Java, use the new
JAkkaRegistrationFactory
.
- For Scala, use
- Contract change for ComponentHandlers
initialize
andonShutdown
methods, where the return type was changed fromFuture[Unit]
toUnit
i.e. from non-blocking to blocking.1 - Changed the installation of
csw-apps
. Thecoursier
program to be used to install applications instead of downloading apps from release page.2 logging-aggregator-<some-version>.zip
will be available on the release page.2- Added new restrictions on Parameter Key naming. It cannot have
[
,]
or/
characters in the key name.2 - Changed naming convention for network interface names from
Public
andPrivate
toOutside
andInside
respectively.2 - Minor fixes in STIL pipeline3
- Ensured test report is generated for multi-jvm tests4
- Fixed incorrect story id label in test4
- Removed obsolete requirement linkage for DEOPSCSW-2054
- Added support for test story report generation in multi jvm test plugin5
- Scala version upgrade to 2.13.3
- SBT version upgrade to 1.4.2
- Borer version upgrade to 1.6.2
- Akka version upgrade 2.6.10
- Akka-http version upgrade 10.2.1
- Keycloak version upgrade 11.0.2
- Lettuce version upgrade 6.0.1.RELEASE
- Reference paradox documentation: https://tmtsoftware.github.io/csw/3.0.0/
- Scaladoc: https://tmtsoftware.github.io/csw/3.0.0/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/3.0.0/api/java/index.html
1: CSW v3.0.0-M1 - 2020-11-10
2: CSW v3.0.0-RC1 - 2020-12-08
3: CSW v3.0.0-RC2 - 2020-09-24
4: CSW v3.0.0-RC3 - 2020-12-19
5: CSW v3.0.0-RC4 - 2020-12-23
This is a First minor release post Second major release of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software.
- Updated giter8 template
- Reference paradox documentation: https://tmtsoftware.github.io/csw/2.0.1/
- Scaladoc: https://tmtsoftware.github.io/csw/2.0.1/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/2.0.1/api/java/index.html
This is the Second major release of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software. Migration guide for v2.0.0 can be found here.
- Simplified CommandResponseManager and removed auto-completion of commands1
- Prefix has Subsystem in constructor1
- Log statements have subsystem and prefix along with componentName1
- AlarmKey and ComponentKey is constructed from prefix instead of string1
- TcpLocation and HttpLocation has prefix along with AkkaLocation1
- ComponentType is displayed to snake_case from lowercase1
- Subsystem is displayed in uppercase instead of lowercase1
- ArrayData and MatrixData does not require classtag for creation1
- Admin routes for setting log level and getting log level are now available via gateway1
- JSON contracts for location and command service added in paradox documentation1
- Internal implementation of csw-services.sh script has changed. It is now based on Coursier and newly created
csw-services
sbt module. To start all the CSW services, runcsw-services.sh start
command.csw-services.sh
runs all services in the foreground, pressingctr+c
will stop all the services.2
- Scala version upgrade to 2.13.1
- SBT version upgrade to 1.3.7
- Akka version upgrade to 2.6.3
- Kafka version upgrade to 2.4.0
- Borer version upgrade to 1.4.0
- Reference paradox documentation: https://tmtsoftware.github.io/csw/2.0.0/
- Scaladoc: https://tmtsoftware.github.io/csw/2.0.0/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/2.0.0/api/java/index.html
1: CSW v2.0.0-RC1 - 2020-02-06
2: CSW v2.0.0-RC2 - 2020-02-26
3: CSW v2.0.0-RC3 - 2020-03-03
This is the release candidate 1 for the release 1.1.0 of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software.
- Simplified CommandResponseManager and removed auto-completion of commands
- Prefix has Subsystem in constructor
- Log statements have subsystem and prefix along with componentName
- AlarmKey and ComponentKey is constructed from prefix instead of string
- TcpLocation and HttpLocation has prefix along with AkkaLocation
- ComponentType is displayed to snake_case from lowercase
- Subsystem is displayed in uppercase instead of lowercase
- ArrayData and MatrixData does not require classtag for creation
- Admin routes for setting log level and getting log level are now available via gateway
- JSON contracts for location and command service added in paradox documentation
- Scala version upgrade to 2.13.1
- SBT version upgrade to 1.3.7
- Akka version upgrade to 2.6.3
- Kafka version upgrade to 2.4.0
- Borer version upgrade to 1.4.0
- Reference paradox documentation: https://tmtsoftware.github.io/csw/1.1.0-RC1/
- Scaladoc: https://tmtsoftware.github.io/csw/1.1.0-RC1/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/1.1.0-RC1/api/java/index.html
This is the first major release of the TMT Common Software for project stakeholders. See here for a detailed documentation of this version of the CSW software.
- Replaced Kryo serialization with Borer-CBOR for Akka actor messages1
- Replaced Play-JSON with Borer-JSON in Location service, Configuration Service and Admin Service1
- Made Location, Config, Logging and Alarm service models to be cross compilable for ScalaJs2
- Removed
BAD
andTEST
subsystems1 - Added SequencerCommandService and docs for it1
- Separated Command service docs technical from Framework docs3
- CommandService
Prefix
creation will throwNoSuchElementException
if invalid subsystem is provided1- Replaced
ActorRef
with ActorRefURI
inAkkaRegistration
2
- Scala version upgrade to 2.13.0
- Reference paradox documentation: https://tmtsoftware.github.io/csw/1.0.0/
- Scaladoc: https://tmtsoftware.github.io/csw/1.0.0/api/scala/index.html
- Javadoc: https://tmtsoftware.github.io/csw/1.0.0/api/java/index.html
1: CSW v1.0.0-RC1 - 2019-08-07
2: CSW v1.0.0-RC2 - 2019-08-12
3: CSW v1.0.0-RC3 - 2019-08-27
4: CSW v1.0.0-RC4 - 2019-08-28
This is the fourth release of the TMT Common Software for project stakeholders. This release includes Time Service, Authentication and Authorization Service, Database Service and Logging Aggregator Service. See here for a detailed documentation of this version of the CSW software.
- Time Service: Provides APIs to access time in different timescales (UTC and TAI) with up to nano-second precision. Also provides scheduling APIs.1
- Authentication and Authorization Service: Suite of libraries/adapters provided to help build an ecosystem of client & server side applications that enforce authentication & authorization policies for TMT1
- Database Service: Provides a TMT-standard relational database and connection library1
- Logging Aggregator Service: Provides recommendation and configurations for aggregating logs from TMT applications written in Scala, java, Python, C, C++, system logs, Redis logs, Postgres logs, Elasticsearch logs, Keycloak logs for developer and production setup.1
- Replaced Protobuf serialisation by CBOR
- Added Technical documentation for all the services
- Support Unlocking of a component by Admin1
- Added authentication and authorization to config service admin rest endpoints1
- Integration of time service with event service and alarm service.1
- Added new APIs to
EventPublisher
allowing to providestartTime
ineventGenerator
APIs1 - Changed
EventPublisher
APIs witheventGenerator
to allow optional publishing of events1
- Migration to AdoptOpenJDK 11
- Akka version upgrade to 2.5.23
- Get route of config server with path for empty config file gives 404 instead of 200 (DEOPSCSW-626)1
1: CSW v0.7.0-RC1 - 2019-03-25
This is the version 0.6.0 release of the TMT Common Software for project stakeholders. This release includes csw test-kit, ordering guarantee in event publish api, enhancements to command service query api and bug fixes.
See here for a detailed documentation of this version of the CSW software. See also the csw release page.
-
GitHub Repository Renamed
- The GitHub repository has been renamed from
csw-prod
to csw, while the old csw repository was renamed tocsw-prototype
.
- The GitHub repository has been renamed from
-
Package Name Changes
- The top level package in all modules has changed from
csw.services
tocsw
.
- The top level package in all modules has changed from
-
Command Service
-
ComponentHandlers
(Implementation classes for HCDs and Assemblies) now receive a singleCswContext
object containing references to all the CSW services (Previously the services were passed as separate arguments). -
CommandService.submit()
now returns a future with the final response. Previously it returned the initial response, which could beAccepted
for a long running command. In csw-0.6.0 you can callCommandService.query()
to get an initialStarted
response, if needed, after the call tosubmit()
. -
CommandService.query()
now waits for the initial command response, if it has not yet been received. Previously it returnedCommandNotAvailable
if called too early. -
There are now separate response types for submit, validation and query (Previously all used
CommandResponse
). A long running submit command now responds withStarted
(wasAccepted
). -
The API for
ComponentHandlers
has changed. NowonSubmit()
returns eitherStarted
for a long running command that will complete later, or it can complete the command immediately and return the response, such asCompleted
orError
. -
The
csw-messages
dependency was renamed tocsw-params
and is now compiled for both the JVM and ScalaJS.
-
-
Location Service
-
It is no longer necessary for components (HCDs, assemblies) and applications to join the location service cluster and no need to define any environment variables or system properties before starting the components or applications (Previously
CLUSTER_SEEDS
andINTERFACE_NAME
had to be defined). -
Location service access is now via an HTTP server running on each host (The HTTP servers form a cluster).
-
Command line applications now use the HTTP API for location service, resulting in much faster startup times.
-
-
Event Service
- The event service has been updated to make sure events are published in order, even if the caller does not wait for the returned future to complete before publishing again.
-
Alarm Service
- The Alarm Service API is now complete.
-
New Template for Component Builders
- Updated giter8 template. You can create a new HCD or assembly project with
sbt new tmtsoftware/csw.g8
.
- Updated giter8 template. You can create a new HCD or assembly project with
-
Test Kits
- Test kits are now available that can start and stop CSW services inside tests so that
there is no need to run csw-services.sh before running the tests.
See
ScalaTestFrameworkTestKit
andFrameworkTestKit
(for Java).
- Test kits are now available that can start and stop CSW services inside tests so that
there is no need to run csw-services.sh before running the tests.
See
1: CSW v0.6.0-RC1 - 2018-10-23
2: CSW v0.6.0-RC2 - 2018-11-15
3: CSW v0.6.0-RC3 - 2018-11-21
This is version 0.5 the second release of the TMT Common Software for project stakeholders. This release includes Event Service. See here for a detailed documentation of this version of the CSW software.
- Event Service
- API and programming documentation, updated examples
- Command Line Interface for testing
- Updated giter8 template
- Prefix missing in Akka location (CSW-11)
- Protobuf serde fails for Java keys/parameters (DEOPSCSW-495)
- CurrentState missing StateName (CSW-1)
- CurrentState pubsub by StateName
- Akka update to typed actors may require your source to be updated - if you have problems, use tmt-scw-programming slack channel for help
- Inclusion of Event Service requires an update to any Top Level Actor
- Alarm Service including Examples, API and programming documentation
1: CSW v0.5.0-RC1 - 2018-08-01
2: CSW v0.5.0-RC2 - 2018-08-24
This is the first early release of the TMT Common Software for project stakeholders. See here for a detailed description of this version of the CSW software.
- Updated Location Service implementation is now based on Akka cluster for higher performance and proper operation in all required scenarios
- New Command Service APIs - FDR version was based on Akka messages
- Significant updates to Configuration Service implementation with some API changes
- New Logging APIs
- Updated to use latest Scala and Java versions and dependencies
- Event Service
- Alarm Service
1: CSW v0.4.0-RC1 - 2018-04-04
This prototype version was provided as part of the CSW Final Design Review
-
Added Java APIs and tests
-
Added vslice and vsliceJava: detailed, vertical slice examples in Scala and Java
-
Added AlarmService
-
Added Scala and Java DSLs for working with configurations
-
Added csw-services.sh startup script
-
Changed the APIs for HcdController, AssemblyController, Supervisor
-
Changed APIs for working with configurations in Scala and Java
-
Changed the Location Service APIs
-
Updated all dependency versions, Akka version
-
Changed APIs for Event and Telemetry Service
-
Added BlockingConfigManager (a blocking API to the Config Service)
-
Added PrefixedActorLogging to use in place of ActorLogging, to include a component's subsystem and prefix in log messages (subsystem is part of a component's prefix)
-
Added HcdControllerClient and AssemblyControllerClient classes, as an alternative API that makes clear which methods can be call (or which messages can be sent to the actor)
-
Add
get(path, date)
method to ConfigManager and all Config Service APIs, so that you can get the version of a file for a given date -
Added new Alarm Service and command line app. An Alarm Service Java API is also available.
-
Added a Request message to AssemblyController that does something based on the contents of the configuration argument and returns a status and optional value (also a SetupConfig). The main difference between Request and Submit is that Request can return a value, while Submit only returns a status.
-
Added Java APIs for most services (See the javacsw and util subprojects)
-
Renamed the earlier Hornetq based
event
project to event_old and renamed the Redis basedkvs
project to events. Classes with KeyValueStore in the name have been renamed to use EventService. -
Renamed Config Service Java interfaces to start with I instead of J, to be more like the other Java APIs
-
Reimplemented parts of the configuration classes, adding Scala and Java DSLs (See util)
-
Changed most log messages to debug level, rather than info
-
Reimplemented the configuration classes, adding type-safe APIs for Scala and Java, JSON I/O, serialization (See util)
-
Changes the install.sh script to generate Scala and Java docs in the ../install/doc/{java,scala} directories
-
Changed the Configuration Service to use svn internally by default instead of git. In the svn implementation there is only one repository, rather than a local and a main repository..
-
Reimplemented the Command and Control Service and component packaging classes: New HcdController, AssemblyController traits. No longer using the Redis based StateVariableStore to post state changes: The new version inherits a PublisherActor trait. You can subscribe to state/status messages from HCDs and assemblies.
-
Changed the design of the Location Service APIs.
This prototype version was provided as part of the CSW Preliminary Design Review