Skip to content

Releases: hmcts/cp-event-store

17.105.0-M14

13 Mar 10:13

Choose a tag to compare

17.105.0-M14 Pre-release
Pre-release

[17.105.0-M14] - 2026-03-013

Changed

  • The JMX commands CATCHUP, INDEXER_CATCHUP, REPLAY_EVENT_TO_EVENT_INDEXER,
    REPLAY_EVENT_TO_EVENT_LISTENER and VERIFY_CATCHUP are now disabled if
    the pull mechanism is enabled. Calling them will result in a command not found

17.105.0-M11

05 Mar 13:29

Choose a tag to compare

17.105.0-M11 Pre-release
Pre-release

[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 Feb 13:19

Choose a tag to compare

17.105.0-M8 Pre-release
Pre-release

[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.retries
    • event.publishing.stream.processing.retry.delay.milliseconds
    • event.publishing.stream.processing.retry.delay.multiplier

17.105.0-M7

06 Feb 12:45

Choose a tag to compare

17.105.0-M7 Pre-release
Pre-release

[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

05 Feb 14:22

Choose a tag to compare

17.105.0-M6 Pre-release
Pre-release

[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

04 Feb 14:37

Choose a tag to compare

17.105.0-M5 Pre-release
Pre-release

[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

03 Feb 11:10

Choose a tag to compare

release-17.105.0-M4 Pre-release
Pre-release

[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

02 Feb 13:15

Choose a tag to compare

17.105.0-M2 Pre-release
Pre-release

[17.105.0-M2] - 2026-02-02

Added

  • New method on DatabaseCleaner test helper class to set latest_event_id from event_subscription_status table to NULL

Changed

  • Insert of position into stream_status table changed into an upsert
  • Discovery now records latest event id after each run

Removed

  • Removed latest_known_position from event_subscription_status table

17.105.0-M1

29 Jan 14:08

Choose a tag to compare

17.105.0-M1 Pre-release
Pre-release

[17.105.0-M1] - 2026-01-29

Added

  • New table event_subscription_status that 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.milliseconds that defines how often the new TimerBean runs
  • New Wildfly extension EventDiscoveryBootstrapWildflyExtension that will prime the event_subscription_status table

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.topic set to false

17.104.0

29 Jan 14:09

Choose a tag to compare

[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 --commandRuntimeId switch.
    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.publish to 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_number on event_log table
  • New column is_published on event_log table
  • New index idx_event_log_not_sequenced on event_log(date_created)
  • New index idx_event_log_not_published on event_log(date_created)
  • New index idx_event_log_global_sequence on event_log(previous_event_number,event_number);
  • New column previous_event_number on event_log table
  • New column is_published on event_log table
  • New index idx_event_log_not_sequenced on event_log(date_created)
  • New index idx_event_log_not_published on event_log(date_created)
  • New index idx_event_log_global_sequence on event_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-version that contains a maven generated json file that has this project's version number

Security

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_published flag in event_log table is now true by default.
  • is_published flag 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 LOCKED when 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
      • PublishedEvent renamed to LinkedEvent and fetched directly from event_log table
      • published_event table to be deprecated
      • Runs of EventLinkingTimerBean now configured using new jndi values:
        • event.linking.worker.start.wait.milliseconds
        • event.linking.worker.timer.interval.milliseconds
        • event.linking.worker.time.between.runs.milliseconds
      • Runs of EventPublishingTimerBean now configured using new jndi values:
        • event.publishing.worker.start.wait.milliseconds
        • event.publishing.worker.timer.interval.milliseconds
        • event.publishing.worker.time.between.runs.milliseconds
    • New jndi values are no longer global can can be configured per context

Removed

  • Removed AnsiSQLEventInsertionStrategy and EventInsertionStrategyProducer
  • Removed event_sequence_seq database sequence as it's no longer used
  • Removed pre_publish_queue table from event_store database
  • Removed old jndi values used to configure publishing (and replaced with the above)
    • pre.publish.start.wait.milliseconds
    • pre.publish.timer.interval.milliseconds
    • pre.publish.timer.max.runtime.milliseconds
    • event.dequer.start.wait.milliseconds
    • event.dequer.timer.interval.milliseconds
    • event.dequer.timer.max.runtime.milliseconds
  • Removed JMX commands:
    • Removed REBUILD jmx command and associated classes
    • Removed VERIFY_REBUILD jmx command and associated classes
    • Removed ENABLE_PUBLISHING jmx command and associated classes
    • Removed DISABLE_PUBLISHING jmx command and associated classes
    • Removed VALIDATE_EVENTS jmx command and associated classes