Transactions
When objects are stored in DBOO, they are stored in transactions. All objects committed in the same call will be all committed if the transaction is successful, or none will be committed if it fails.
No objects of a ongoing unfinished transaction are visible until after the transaction completes. Any previous versions of the object will be available for read operations until the end of a write transaction, after which the new versions of the objects will be visible to read operations.
A transaction can fail for a number of reasons:
Concurrent updates - That is a an object has been updated by another client prior to the attempted update.
Disk or file system failure, i.e. failure to write object data, the transaction log or the indices (depending on update mode the transaction can fail after the commit call is returned).
Network/socket failure.
Integrity check of referenced objects fails. All referenced objects must either be part of a transaction or already exist in the database.
Inconsistencies found in the data stream - if checksums in byte stream does not match with data, or positions or sizes does not match with the number of objects or number of bytes expected etc.
There is currently no support for transactions that last over multiple calls to commit.