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 >
