[Date Prev][Date Next]
Re: (ITS#7789) Unreliable mdb_env_set_mapsize()
Should have enclosed a test program. Here:
process #0: open env
process #1: open env
process #0: write txn, mapsize 204800
process #1: write txn, mapsize 40960
process #2: open env, write txn, mapsize 40960
process #3: open env, write txn, mapsize 204800
Summarizing a reply which got sent privately instead of to ITS:
On 2014-01-24 00:07, Howard Chu wrote:
> The doc says the caller of set_mapsize is required to make sure there
> are no active transactions when it is called. As such, X failed this
> requirement, and this sequence of events is explicitly unsupported.
No, I'm talking about X changing the mapsize when there is no txn,
then afterwards doing a write txn so the mapsize gets written.
> If Y doesn't start its write txn until after X finishes, then Y will
> see the new size.
It doesn't, that's the point. Only txn_commit pays attention,
and it checks the size which existed in the wrong metapage.
Come to think of it, set_mapsize(); env_open(); txn begin/end
should do the same. Y will either way not pay attention to
the new mapsize.