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