Releases: hmcts/cp-event-store
Releases · hmcts/cp-event-store
17.105.0-M14
[17.105.0-M14] - 2026-03-013
Changed
- The JMX commands
CATCHUP,INDEXER_CATCHUP,REPLAY_EVENT_TO_EVENT_INDEXER,
REPLAY_EVENT_TO_EVENT_LISTENERandVERIFY_CATCHUPare now disabled if
the pull mechanism is enabled. Calling them will result in a command not found
17.105.0-M11
[17.105.0-M11] - 2026-03-05
Changed
- Demand-driven worker scaling: StreamProcessingCoordinator spawns workers based on stream_status demand
- Extract session-level advisory lock handling into StreamSessionLockManager, see stream-processing-advisory-locks-summary for more details
17.105.0-M8
[17.105.0-M8] - 2026-02-17
Changed
- EventDiscoveryBootstrapper should only create entries for event listener and indexers
- bump parent-pom to 17.105.0-M1
- 'stream_error_retry' table is incremented on every failed event.
- Delete retry from 'stream_error_retry' table if event is successful
- Find next stream to process after considering remaining retry count
- Rename stream_status column 'updated_at' to 'discovered_at'
- Move 'occurred_at' column from stream_error_retry to stream_error table
- markSameErrorHappened now updates stream_error.occurred_at instead of stream_status.updated_at
Added
- New stream_error_retry table in viewstore to allow for tracking how many times an event is retried before we give up
- New JNDI values to control number of retry attempts and backoff when processing events of a stream:
event.publishing.stream.processing.max.event.retriesevent.publishing.stream.processing.retry.delay.millisecondsevent.publishing.stream.processing.retry.delay.multiplier
17.105.0-M7
[17.105.0-M7] - 2026-02-06
Changed
- Introduce concurrency to stream processing through JNDI value 'stream.processing.max.workers'
- Continue processing next stream on error of current stream processing
Fixed
- Removed test-utils-core.jar from the main classpath
17.105.0-M6
[17.105.0-M6] - 2026-02-05
Added
- Add concurrency to stream processing
Changed
- Rename streamprocessing timer config class
Fixed
- Fix for NewSubscriptionManager enable/disable pull mechanism
17.105.0-M5
[17.105.0-M5] - 2026-02-04
Changed
- EventDiscoveryTimerBean now starts new TimerBean instances for each source/component pair
Fixed
- Errors in event discovery no longer fail the entire discovery process
- JNDI value 'event.processing.by.pull.mechanism.enabled' check is moved to NewSubscriptionManager.
release-17.105.0-M4
[17.105.0-M4] - 2026-02-03
Changed
- Event Discovery and Stream Processing only now only runs for EVENT_LISTENER and EVENT_INDEXER components, and ignores EVENT_PROCESSOR components
17.105.0-M2
[17.105.0-M2] - 2026-02-02
Added
- New method on
DatabaseCleanertest helper class to setlatest_event_idfromevent_subscription_statustable to NULL
Changed
- Insert of
positionintostream_statustable changed into an upsert - Discovery now records latest event id after each run
Removed
- Removed
latest_known_positionfromevent_subscription_statustable
17.105.0-M1
[17.105.0-M1] - 2026-01-29
Added
- New table
event_subscription_statusthat will contain the latest events for each source/component pair - New Timer Bean 'EventDiscoveryTimerBean' that kicks of the discovery process
- Discovery in event store will return the latest positions for streams
- New JNDI value
event.discovery.timer.interval.millisecondsthat defines how often the new TimerBean runs - New Wildfly extension
EventDiscoveryBootstrapWildflyExtensionthat will prime theevent_subscription_statustable
Changed
- No events written to processed_event table if the new pull mechanism is running. Controlled by JNDI value
events.publishing.process.events.from.event.topicset to false
17.104.0
[17.104.0] - 2025-12-16
Added
- Added framework E rollout and rollback SQLs document
- Catchup can now be run with the id of the event you wish to run catchup from. Catchup
will ignore events before this event and only catchup this event and events with higher
event numbers. The event id should be sent to jmx using the--commandRuntimeIdswitch.
If no eventId is sent then catchup will run from the first event as normal - Re-introduced the event-number database sequence in case we need to roll back, in which case the
sequence will be up to date - Event publishing now also saves events into deprecated published_event table for compatibility with previous event publishing
- New JNDI value
event.publishing.add.event.to.published.event.table.on.publishto control whether event is also inserted into published_event table. This value is true by default. - New index on date_created in event_log
- New column
previous_event_numberonevent_logtable - New column
is_publishedonevent_logtable - New index
idx_event_log_not_sequencedonevent_log(date_created) - New index
idx_event_log_not_publishedonevent_log(date_created) - New index
idx_event_log_global_sequenceonevent_log(previous_event_number,event_number); - New column
previous_event_numberonevent_logtable - New column
is_publishedonevent_logtable - New index
idx_event_log_not_sequencedonevent_log(date_created) - New index
idx_event_log_not_publishedonevent_log(date_created) - New index
idx_event_log_global_sequenceonevent_log(previous_event_number,event_number); - New REST endpoint that will serve json showing the various framework project versions on the path
/internal/framework/versions - New module
framework-libraries-versionthat contains a maven generated json file that has this project's version number
Security
- Updated to latest common-bom for latest third party security fixes:
- Update commons.beanutils version to 1.11.0 to fix security vulnerability CVE-2025-48734
Detail: https://cwe.mitre.org/data/definitions/284.html - Update resteasy version to 3.15.5.Final to fix security vulnerability CVE-2023-0482
Detail: https://cwe.mitre.org/data/definitions/378.html - Update classgraph version to 4.8.112 to fix security vulnerability CVE-2021-47621
Detail: https://cwe.mitre.org/data/definitions/611.html - Update commons-lang version to 3.18.0 to fix security vulnerability CVE-2025-48924
Detail: https://cwe.mitre.org/data/definitions/674.html
- Update commons.beanutils version to 1.11.0 to fix security vulnerability CVE-2025-48734
Changed
- Fixed CATCHUP will run from specific event_number correctly when the event_id is provided
- Liquibase is_published is not true by default
- Liquibase event_status is now VARCHAR(64)
- Catchup will now ignore events on inactive streams and events that are not marked as
HEALTHY - EntityManagerFlushInterceptor will now only flush the EntityManager if a transaction is active
- TransactionHandler will now roll back except if transaction is
STATUS_NO_TRANSACTION - The
is_publishedflag in event_log table is now true by default. is_publishedflag in event_log now set to false when the event is first inserted. Will be set
to true once publishing has sent the event to the event topic- Save of ProcessedEvent will now throw ProcessedEventTrackingException if eventNumber, source or component are not unique
- ReplaySingleEvent JMX commands can now take an optional commandRuntimeString of the component name
to work with MI contexts - Configure timeouts for releasing transactional advisory locks in event linking
- Inserts of new events into event_log now explicitly set event_number and previous_event_number
to NULL, for rollback purposes - Refactor JsonObject usages to more proper api
- Fix HttpClient lifecycle.
- published_events insertion moved to EventNumberLinker from LinkedEventPublisher
- Catchup now calculates previousEventNumber for each event from the previous row in
the event_log table rather than the previous_event_number column.
This is to allow catchup to run with the new publishing where the previous_event_number
has not yet been migrated and inserted - The event-number sequence is clicked forward by one each time we publish a new event
- use popNextEventIdFromPublishQueue to pop event number from publish_queue table
- Used JsonFactory instead of Json.create methods as per jakartaee/jsonp-api#154
- 'is_published' flag on event_log now set to true once an event has been successfully published
- Refactored event publishing;
- Event numbers now calculated in EventLinkingTimerBean rather that on the insert of the event into event log
- Advisory locks are used during the calculation of event numbers rather than SELECT FOR UPDATE
- Metadata in event_log does not contain event numbers. These are added when the event is sent to the event listeners
- Catchup changed to add event numbers to event on publishing
- ReplayEventToEventListener changed to add event numbers to event on publishing
- Event numbers no longer use a database sequence but are calculated from the highest published event number
- removed
SKIP LOCKEDwhen querying for earliest unlinked event in event_log table - Locking of stream_status table when publishing events, no longer calls error tables updates on locking errors
- Refactor of event publishing:
- New timer bean worker and database access for linking events (previous and current event numbers in event_log table)
- previous_event_number and event_number moved to event_log table
- Events now exist solely in event_log table, removing the need for published_event
- Publish queue now reads directly from event_log table and ignores published_event
PublishedEventrenamed toLinkedEventand fetched directly from event_log table- published_event table to be deprecated
- Runs of
EventLinkingTimerBeannow configured using new jndi values:event.linking.worker.start.wait.millisecondsevent.linking.worker.timer.interval.millisecondsevent.linking.worker.time.between.runs.milliseconds
- Runs of
EventPublishingTimerBeannow configured using new jndi values:event.publishing.worker.start.wait.millisecondsevent.publishing.worker.timer.interval.millisecondsevent.publishing.worker.time.between.runs.milliseconds
- New jndi values are no longer global can can be configured per context
Removed
- Removed
AnsiSQLEventInsertionStrategyandEventInsertionStrategyProducer - Removed
event_sequence_seqdatabase sequence as it's no longer used - Removed
pre_publish_queuetable from event_store database - Removed old jndi values used to configure publishing (and replaced with the above)
pre.publish.start.wait.millisecondspre.publish.timer.interval.millisecondspre.publish.timer.max.runtime.millisecondsevent.dequer.start.wait.millisecondsevent.dequer.timer.interval.millisecondsevent.dequer.timer.max.runtime.milliseconds
- Removed JMX commands:
- Removed
REBUILDjmx command and associated classes - Removed
VERIFY_REBUILDjmx command and associated classes - Removed
ENABLE_PUBLISHINGjmx command and associated classes - Removed
DISABLE_PUBLISHINGjmx command and associated classes - Removed
VALIDATE_EVENTSjmx command and associated classes
- Removed