-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Reconciliation
-
Storage Engines, Storage Engines - Persistence
-
None
-
None
The disaggregated storage implementation in WiredTiger has introduced a new block manager. The new block manager tracks more metadata per page that is written, and WiredTiger keeps that in a data structure called WT_PAGE_BLOCK_META, which is currently defined in src/include/btmem.h. It really should belong in a block-manager specific location, and the content there needs to be carefully considered - since it belongs to one of two block managers access and sharing should be considered to ensure layering makes sense.
A specific example (and it would be fine for it to be the purview of this ticket), is in the WT_PAGE_MODIFY data structure. On of the things the page modify structure holds is a reference to the most recent reconciled version of the page. This takes one of two forms a WT_MULTI structure if the reconciliation resulted in multiple reconciled pages, or an embedded mod_replace if a single page was generated. At the moment, each entry in a WT_MULTI structure keeps a WT_PAGE_BLOCK_META, but for a replace reconciliation no WT_PAGE_BLOCK_META is kept. I suspect what happens is that the page->block_meta is replaced with the one associated with the reconciled page, but I haven't dug deep enough to find out.
The WT_PM_REC_REPLACE and WT_PM_REC_MULTI should keep the associated WT_PAGE_BLOCK_META in similar ways.