2012-04-26 9 views
5

Hacer una simple llamada al método create() en ZooKeeper parece incrementarse en dos en lugar del normal. Si bien esto está realmente en consonancia con JavaDoc, que solo especifica que la secuencia sea "monótonamente creciente" sin referencia a la cantidad de incremento, no estoy seguro de por qué esto ha comenzado a suceder.Zookeeper PERSISTENT_SEQUENTIAL incrementando en dos

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

termino con "key-V-0000000056" y luego "key-V-0000000058" ... ¿Dónde han ido 57?

Respuesta

3

¿Está borrando key-v-0000000056 antes de crear la siguiente clave? La identificación secuencial es solo la conversión del nodo primario, y la eliminación/creación de elementos secundarios en el elemento primario incrementará la conversión.

6

Creación o eliminación de cualquier znode hijo incrementa la conversión del znode padre. Dado que en ZooKeeper 3.3.3, que parece que está utilizando, el contador utilizado para la creación znode secuencial es la propia conversión, cualquier creación/eliminación "espuria" entre dos creaciones secuenciales es la razón más probable del comportamiento que está experimentando.

Tenga en cuenta que en ZooKeeper 3.4.x las eliminaciones ya no afectan al contador de secuencia principal: un DataNode contiene internamente un PersistedStat en el que la conversión representa exactamente el número de creaciones; por el contrario, la conversión del Stat que obtiene al consultar el nodo todavía representa el número de cambios de hijos: Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren.

0

En los documentos oficiales, que dice:

si se establece el indicador ZOO_SEQUENCE, un número único de secuencia monótona creciente se añade al nombre de ruta "

que garantizaba el número es. en orden creciente, pero no seguramente continuo.

+1

Es por eso que dije que estaba bien según JavaDoc, simplemente no sabía que las eliminaciones también incrementaban la conversión. – MattMcKnight

Cuestiones relacionadas