【问题标题】:etcd: change resilient recursive waitetcd:改变弹性递归等待
【发布时间】:2016-01-02 18:43:49
【问题描述】:

etcd 允许客户端安全地等待单个 k/v 节点的更改,方法是将节点的最后一个已知索引提供给等待命令。 etcd 还允许等待(“递归”)某个父节点下的子节点的任何更改。

现在,问题是:是否有可能以这样的方式递归地等待父节点,以保证客户端不会错过任何子节点的更改?父节点索引在这种情况下没有用,因为它不会在子节点修改时改变。

【问题讨论】:

  • 我认为如果它的任何孩子发生变化,父母的索引就会改变。自从我弄乱它以来已经有一段时间了,但我认为情况就是这样。通过创建一个目录、一些子节点并查看父节点的索引是否始终 >= 其子节点的索引来进行测试应该很容易。
  • @Oliver 不,目录更改索引不反映对其子项的更改。事实上,似乎 etcd 根本没有机制在整个目录层次结构中传播更改事件 - 它是自身的每个键。

标签: etcd


【解决方案1】:

如果您刚刚开始,大概您刚刚检索到您正在查看的子树。回复有一个 etcd_index 字段。以此为起点。

否则,您的等待包含更改的修改索引。以此作为下一次通话的起点。

您可能需要增加其中的一两个值,以确保不会收到重复的回复。我不记得我需要故意增加哪些;代码需要测试以确保每次更改都只发生一次,因此我根据此调整值。

【讨论】:

  • 这不是问题所在。请再读一遍。
  • 那么,如果这个答案没有帮助,你想解决什么问题?您可以通过阅读树获得需要开始观察的初始索引,如果您随后观察它的变化,您可能还是会这样做。如果没有,请将您已阅读的索引存储到某个地方(例如在相关树上的“_upto_here”节点中)。无论如何,由于 etcd 只存储最近的 1000 次更改,因此不能有绝对的保证。
猜你喜欢
  • 2021-08-28
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多