2015-10-06 68 views
0

ETCD允許客戶端安全地等待各個k/V節點的變化,通過提供一個節點的最後已知索引到等待命令。 etcd還允許等待(「遞歸地」)對某個父節點下的子節點進行的任何更改。ETCD:改變彈性遞歸等待

現在的問題是:是否有可能遞歸地等待這樣一個父節點上,以保證沒有子節點改變以往由客戶端錯過了什麼?在這種情況下父節點索引是沒有用的,因爲它在子節點修改時不會改變。

+0

我認爲如果其中的任何一個孩子發生了變化,父母的索引就會改變。過了一段時間,因爲我搞砸了,但我認爲是這樣。通過創建一個目錄,一些子節點,並且查看父目錄的索引是否總是> =它的子目錄的索引,應該很容易進行測試。 –

+0

@Oliver否,目錄更改索引不反映對其子項的更改。實際上,看起來etcd沒有任何機制可以在整個目錄層次中傳播更改事件 - 它本身就是每個關鍵。 – oakad

回答

0

如果你剛剛起步的時候,想必你剛纔檢索你正在觀看的子樹。答覆有一個etcd_index字段。以此爲起點。

否則,您的等待包含更改的修改索引。用它作爲下一次調用的起點。

您可能必須增加這些值的一個或兩個,以確保你沒有得到重複回覆。我不記得哪些是我需要特意增加的;代碼需要測試以確保每次更改都精確到一次,所以我根據這些值進行了調整。

+0

這不是問題所在。請再讀一遍。 – oakad

+0

那麼你試圖解決什麼問題*,如果這個答案沒有幫助? 您可以通過閱讀樹開始觀察初始索引,如果您隨後觀察其中的更改,則大概您無論如何都會這樣做。如果沒有,請將您讀取的索引存儲到某個位置(例如,在所討論的樹上的「_upto_here」節點中)。 在任何情況下,都不能有絕對的保證,因爲etcd只存儲最近的1000次更改。 –