This wiki page include discussion for definition of a generic transactional service library.
Participants
- Bob Walters
- Stefan Strasser
- Vicente J. Botet Escriba
Goal Define a common transactional interface for the libraries Boost.Persistent, Boost.STLDB and Boost.STM so the user will get ACID properties while updating data managed by any of these libraries.
Scope For the first release we will concentrate on a intra-process transactional service, letting out of the scope of the library inter-process or inter-node transactional services.
Requirements
- The Transaction library must supports the concept of a transaction. A transaction is a unit of work that has the following (ACID) characteristics:
- A transaction is atomic; if interrupted by failure, all effects are undone (rolled back).
- A transaction produces consistent results; the effects of a transaction preserve invariant properties.
- A transaction is isolated; its intermediate states are not visible to other transactions. Transactions appear to execute serially, even if they are performed concurrently.
- A transaction is durable; the effects of a completed transaction are persistent; they are never lost (except in a catastrophic failure) -- Note that Boost.STM by definition could not provide durable transactions --.
- The Transaction library will define and implement concepts that allow multiple resources with different constraints to cooperate to provide atomicity. These concepts enable the resources to either commit all changes together or to rollback all changes together, even in the presence of (noncatastrophic) failure. It will use for that a two-phase commit protocol
- Support flat transaction and nested transactions
- Support non shared transactions
Nice to have requirements
- Allows to suspend/resume a transaction
- Support shared and non shared transactions
Design rationale
- inter-thread versus intra-thread transactions
This is related to whether the transaction library permits for multiple threads to be associated with the same transaction at the same time.
- Static versus dynamic polymorphism