2015-10-06 54 views
0

ETCD允许客户端安全地等待各个k/V节点的变化,通过提供一个节点的最后已知索引到等待命令。 etcd还允许等待(“递归地”)对某个父节点下的子节点进行的任何更改。ETCD:改变弹性递归等待

现在的问题是:是否有可能递归地等待这样一个父节点上,以保证没有子节点改变以往由客户端错过了什么?在这种情况下父节点索引是没有用的,因为它在子节点修改时不会改变。

+0

我认为如果其中的任何一个孩子发生了变化,父母的索引就会改变。过了一段时间,因为我搞砸了,但我认为是这样。通过创建一个目录,一些子节点,并且查看父目录的索引是否总是> =它的子目录的索引,应该很容易进行测试。 –

+0

@Oliver否,目录更改索引不反映对其子项的更改。实际上,看起来etcd没有任何机制可以在整个目录层次中传播更改事件 - 它本身就是每个关键。 – oakad

回答

0

如果你刚刚起步的时候,想必你刚才检索你正在观看的子树。答复有一个etcd_index字段。以此为起点。

否则,您的等待包含更改的修改索引。用它作为下一次调用的起点。

您可能必须增加这些值的一个或两个,以确保你没有得到重复回复。我不记得哪些是我需要特意增加的;代码需要测试以确保每次更改都精确到一次,所以我根据这些值进行了调整。

+0

这不是问题所在。请再读一遍。 – oakad

+0

那么你试图解决什么问题*,如果这个答案没有帮助? 您可以通过阅读树开始观察初始索引,如果您随后观察其中的更改,则大概您无论如何都会这样做。如果没有,请将您读取的索引存储到某个位置(例如,在所讨论的树上的“_upto_here”节点中)。 在任何情况下,都不能有绝对的保证,因为etcd只存储最近的1000次更改。 –