[Date Prev][Date Next]
mdb meta pages
Could writing a word/byte to the current meta page break someting?
While I'm asking, why are metas separate pages, instead of simply
a fixed 256 or so bytes apart to keep them in separate cachelines?
The only reason I can think of is if a write gets garbled, the
other meta page is safe - but mdb assumes correct filesystem
This is for a "syncdelay <count>" feature to replace "dbnosync".
The latter can break DB consistency after a system crash: Without
fdatasync(), the OS can reorder writes, leaving meta pages to
refer to trees with not written or overwritten data pages.
syncdelay <count> will only sync every <count> or maybe <count>/2
commit. It'll need 4 meta pages, of which 2 may refer to unsynced
data pages. mdb_env_sync() may then need to write a "synced" flag
to the current meta page, or do a dummy write transaction which
sets with a "synced data pages" flag in its meta page. The latter
would have to wait out any existing/pending write transactions.