[Sheepdog] [zookeeper][PATCH 1/2] Rewatch znode in /sheepdog/member after it changed
Yunkai Zhang
yunkai.me at gmail.com
Fri Apr 6 11:58:03 CEST 2012
If we not rewatch znode in /sheepdog/member after it changed, we
will lose all events of it in the future, such as DELETE event.
Signed-off-by: Yunkai Zhang <qiushu.zyk at taobao.com>
---
sheep/cluster/zookeeper.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/sheep/cluster/zookeeper.c b/sheep/cluster/zookeeper.c
index 49a8ade..fedb5a9 100644
--- a/sheep/cluster/zookeeper.c
+++ b/sheep/cluster/zookeeper.c
@@ -581,7 +581,7 @@ static void watcher(zhandle_t *zh, int type, int state, const char *path, void*
eventfd_t value = 1;
const clientid_t *cid;
char str[256], *p;
- int ret, i;
+ int ret, rc, i;
dprintf("path:%s, type:%d\n", path, type);
@@ -595,6 +595,14 @@ static void watcher(zhandle_t *zh, int type, int state, const char *path, void*
if (type < 0 || type == ZOO_CHILD_EVENT)
return;
+ if (type == ZOO_CHANGED_EVENT) {
+ ret = sscanf(path, MEMBER_ZNODE "/%s", str);
+ if (ret == 1) {
+ rc = zk_exists(zh, path, 1, NULL);
+ dprintf("watch path:%s, exists:%d\n", path, (rc==ZOK));
+ }
+ }
+
if (type == ZOO_DELETED_EVENT) {
ret = sscanf(path, MEMBER_ZNODE "/%s", str);
if (ret != 1) {
--
1.7.7.6
More information about the sheepdog
mailing list