[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#7789) Unreliable mdb_env_set_mapsize()
Hallvard Breien Furuseth wrote:
> Should have enclosed a test program. Here:
> http://folk.uio.no/hbf/testsize.c
> Output:
> 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.
>
Fixed now in mdb.master
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/