The region allocator marks freed regions "Condemned" before actually freeing them. Condemned regions are associated
with a transaction; before they can be reused / coalesced the transaction that condemned them must complete.
The region allocator used "TisActiveTransaction(xid)" to determine whether a given transaction had completed. The
problem is that Stasis now reuses transaction id's, and condemned regions were never reclaimed in practice. A transaction
fingerprint is a unique identifier (currently transaction id, rec_lsn) that can be used to distinguish transactions that
did not execute concurrently.
I considered an alternative design based upon end-of-transaction actions. This would have worked as well, but would
have been a more invasive change.
- Changed operations to take only two arguments
- No more hacks regarding log argument sizes
- Set pageid = INVALID_PAGE if you want a logical operation
- Ported operation implementations to new api; exposed + fixed a number of concurrency bugs
- More fixes to prepare
- Fixed to nested top actions
- More coherent operations api / recovery implmentation
- TnaiveHash* and Tinstant* are (and were already) broken, and are set for removal
- Removed some instances of fail_unless
- Fixed design flaws in blob implementation.
- New naming convention for operation callback functions.