Franck PORCHER wrote: > > Well, I'm not 100% sure, but I recently switched for MLDBM and got this > problem too. Here is what I found, and did to remedy the situation : > > It *seemed* to me that the physical MLDBM repository was not physically created > until I actually wrote something into it, eventhough it was reported as > correctly open RW. >
This is correct. This is a performance enhancement, with the side effect that write errors will occur at runtime. > So, any ends of my application trying to fetch value during this > transcient stage got this kind of error (I do not remember > precisely which one I got, but very close indeed). > > I solved the problem by doing an awful trick on each RW opening, such as > : > > eval { > tie %hash, "MLDBM::Sync", $storage, O_RDWR | O_CREAT, 0660; > $hash{'__DuMmY__'} = 'OK'; > delete $hash{'__DuMmY__'}; > }; > > That solved the problem in the midtime, waiting for something > much better... > You could also tie %hash, "MLDBM::Sync", $storage, O_RDWR | O_CREAT, 0660; tied(%hash)->Lock; to similar effect, as Lock() will actually force a tie to the dbm on disk. The basic premise of MLDBM::Sync is that the tie/untie actually occur at the reads & writes, so that i/o is flushed correctly. --Josh _________________________________________________________________ Joshua Chamas Chamas Enterprises Inc. NodeWorks Founder Huntington Beach, CA USA http://www.nodeworks.com 1-714-625-4051