[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/