2012-04-26 7 views
5

ZooKeeper에서 간단한 create() 메서드 호출을하는 것이 일반적인 것 대신에 2 씩 증가하는 것처럼 보입니다. 이것은 실제로 증분량을 참조하지 않고 시퀀스가 ​​"단조롭게 증가"하도록 지정하는 JavaDoc과 일치하지만, 왜 이것이 시작되었는지 확실하지 않습니다.Zookeeper PERSISTENT_SEQUENTIAL이 2 씩 증가합니다.

zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); 

내가 "키-V-0000000056"다음에 결국 "키-V-0000000058"... 어디 (57)는 어디에 있습니까?

답변

3

다음 키를 만들기 전에 key-v-0000000056을 삭제 하시겠습니까? 순차적 인 id는 단지 부모 노드의 cversion이며, 부모 노드에서 자식을 삭제/생성하면 cversion이 증가합니다.

6

을 작성하거나 삭제하면 하위 znode가 상위 z 노드의 cversion을 증가시킵니다. ZooKeeper 3.3.3에서는 연속 ZNode 생성에 사용되는 카운터가 cversion 자체이므로 두 개의 순차 생성간에 "잘못된"생성/삭제가 발생하는 가장 큰 이유입니다.

ZooKeeper 3.4.x에서는 더 이상 상위 시퀀스 카운터에 영향을주지 않습니다. DataNode은 내부적으로 PersistedStat을 보유하고 있으며 cversion은 생성 횟수를 정확하게 나타냅니다. 반대로 노드를 쿼리하여 얻은 Stat의 변환은 여전히 ​​자식 변경 수를 나타냅니다 : Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren. 공식 문서에서

0

, 그것은 말한다 다음 ZOO_SEQUENCE 플래그가 설정되어

경우, 고유 일정하게 증가하는 시퀀스 번호가 경로 이름에 추가됩니다 "수를 보장

입니다. 증가 순서대로 진행하지만 확실하지는 않습니다.

+1

그렇기 때문에 JavaDoc에 따르면 괜찮 았고, 삭제는 또한 cversion을 증가시키는 것을 알지 못했습니다. – MattMcKnight

관련 문제