Sergey proposed a few approaches. Could you tells me how you implement it, Thawan, please?
-Flavio On Jul 8, 2013, at 10:39 PM, Thawan Kooburat <[email protected]> wrote: > I have this functionality in our internal branch. > > I can post the patch but it is likely to conflict with ZOOKEEPER-1346, so > it will be good to know the timeline of that patch. > > > -- > Thawan Kooburat > > > > > > On 7/8/13 11:48 AM, "Sergey Maslyakov" <[email protected]> wrote: > >> I think I'd answer my own question. Apparently, if lastZxid does not >> change >> between two takeSnapshot() calls, they both will try to write into the >> same >> file. This is likely to explode when you try to read this snapshot back... >> So, the protection is needed. >> >> >> /Sergey >> >> >> On Mon, Jul 8, 2013 at 12:03 PM, Sergey Maslyakov <[email protected]> >> wrote: >> >>> From looking at the 3.4.5 code, it seems like >>> ZooKeeperServer.takeSnapshot() method does not have protection against >>> being invoked twice by different threads. There is some protection >>> against >>> spawning two snapshot threads from SyncRequestProcessor.run() but this >>> is >>> just about it. >>> >>> Is there any inherent danger in having two >>> ZooKeeperServer.takeSnapshot() >>> overlapping their execution in time? Is it a thread to data integrity >>> or is >>> it just a possible performance issue? >>> >>> I'm thinking of adding a new four-letter command to force a snapshot >>> creation by a command from outside before snapCount threshold is >>> reached. >>> Is it safe to invoke ZooKeeperServer.takeSnapshot() from a four-word >>> command handler or does it need to be submitted as a Request object into >>> the pipeline of Request Processors? >>> >>> >>> Regards, >>> /Sergey >>> >
