Thanks. Looks like it’s working fine with Curator 2.5.0. Will do some more testing. Will respond if it fails with 2.5.0.
Thanks, Puru. From: Jordan Zimmerman <[email protected]<mailto:[email protected]>> Date: Tuesday, June 24, 2014 at 6:38 PM To: Purshotam Shah <[email protected]<mailto:[email protected]>>, "[email protected]<mailto:[email protected]>" <[email protected]<mailto:[email protected]>> Subject: Re: DistributedAtomicLong fails in multithread env. This sounds like https://issues.apache.org/jira/browse/CURATOR-108 - Curator 2.5.0 added a new method, initialize(), to work around this issue. Please try that and let me know. -Jordan From: Purshotam Shah [email protected]<mailto:[email protected]> Reply: [email protected]<mailto:[email protected]> [email protected]<mailto:[email protected]> Date: June 24, 2014 at 8:20:18 PM To: [email protected]<mailto:[email protected]> [email protected]<mailto:[email protected]> Subject: DistributedAtomicLong fails in multithread env. We are using DistributedAtomicLong to use job sequenceID in ZK. We noticed that getZKId in multithread env fails. value.preValue() and value.postValue() value = 0 and succeeded = false. If we synchronized the function it works fine, but I don't think it's a right approach. Other approach is to retry multiple time, but how many times. We need to make sure that getZKId return sequence. What is the best approach? DistributedAtomicLong atomicIdGenerator; PromotedToLock.Builder lockBuilder = PromotedToLock.builder() .lockPath(getPromotedLock()).retryPolicy(ZKUtils.getRetryPloicy()) .timeout(Service.lockTimeout, TimeUnit.MILLISECONDS); atomicIdGenerator = new DistributedAtomicLong(zk.getClient(), ZK_SEQUENCE_PATH, ZKUtils.getRetryPloicy(), lockBuilder.build()); private long getZKId( ) { if (atomicIdGenerator == null) { throw new RuntimeException("Sequence generator can't be null. Path : " + ZK_SEQUENCE_PATH); } AtomicValue<Long> value = null; try { value = atomicIdGenerator.increment(); } catch (Exception e) { throw new RuntimeException("Exception incrementing UID for session ", e); } finally { if (value != null && value.succeeded()) { return value.preValue(); } else { throw new RuntimeException("Exception incrementing UID for session "); } } }
