How to work without transactions

Fedora has no concept of transactions. There are situations where this is simply not good enough for the DOMS system. To get around this, we have built a system which gives us the most nessesary benefits of transactions.

Each data object must have a STATE datastream. This datastream has just one element, having one of three values.

The STATE datastream, present in all data objects are the key. To emulate a transaction, follow these steps:

  1. Ingest any new objects, with STATE=draft
  2. change the STATE of all involved objects with STATE=published to STATE=intermediate
  3. Perform all changes that must be performed
  4. Change the objects back to STATE=published. This will provoke a validation of the objects by the DOMS system. If the objects failed the validation, the STATE will not change

DOMS only try to enforce a structure on objects with STATE=published. By marking objects as intermediate, the system will disregard them, without losing the relations to them.