Skip to main content

Transaction Compensation

As HIP follows a service-oriented architecture, distributed transactions across services are required. The Transaction Compensation feature allows rolling back transactions in accordance with the Saga Pattern.

For this purpose, a REST API can be used by external services to invoke the transaction compensation functions.

The transaction compensation uses the openEHR Contribution objects for the rollback.

note

In combination with multi-tenancy, the transaction compensations are tenant bound.

Parameters / Environment Variables​

The Transaction Compensation feature does not need any parameters to be provided.

REST API​

For rolling back transactions through the REST API checkout the Compensation API Definition

Dealing with Parallel Access​

Before starting the rollback, the ehr_id, contribution_id, and status will be saved in a DB. If there already is an entry with the same ehr_id but status not finished, then the thread will block until it is set to finished or it will time out.

Rollback Algorithm​

The objects in the contribution are rolled back:

  • In a serial way,
  • In inverse order, and
  • In one database transaction.

If at any point an exception representing a 501 or 500 happens, the whole compensation transaction is rolled back. If all objects have been rolled back successfully, the respective contribution object is deleted from the database.