Following is a proposal to ensure that a client of store can verify the
validity of a RowLocation. A RowLocation has become invalid if a store
operation has caused it to point to another row or to a non-existent
position (deleted row or non-existing page/record-id).
I think we need a mechanism to detect that a RowLocation has become
invalid in order to implement *holdable* SUR.
To do this, I would propose:
- The RowLocation object should contain a version number for the page.
- A version number should be stored in the header for a Page
- Whenever an operation which may invalidate row-locations is executed,
the version number for the page is updated. These operations include
online/offline compress.
- When navigating to a RowLocation which has invalid version number, the
store may fail (i.e return false)
The page header for a stored page, currently has a number of fields
which are intended for future use, and it seems that it is possible to
use these fields without breaking backward compatibility.
I noticed one of the fields in the header is named "generation" (from
StoredPage.java):
* 4 bytes integer generation generation number of this
page(FUTURE USE)
* 4 bytes integer prevGeneration previous generation of page
(FUTURE USE)
Could I use the generation field for this, or has it been reserved for
something else ? Alternatively, I could use one of the other long fields
reserved for future use.
Any comments ?
Thanks
--Andreas