日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Zookeeper C 同步 API 介绍

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zookeeper C 同步 API 介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Zookeeper C API 中與訪問 Zookeeper 服務相關(比如創建、刪除 znode 節點,獲取子節點,設置 znode 數據等)的同步 API 如下:

ZOOAPI int zoo_add_auth(zhandle_t * zh, const char *scheme,const char *cert, int certLen,void_completion_t completion, const void *data);ZOOAPI int zoo_create(zhandle_t * zh, const char *path,const char *value, int valuelen,const struct ACL_vector *acl, int flags,char *path_buffer, int path_buffer_len);ZOOAPI int zoo_delete(zhandle_t * zh, const char *path, int version);ZOOAPI int zoo_exists(zhandle_t * zh, const char *path, int watch,struct Stat *stat);ZOOAPI int zoo_wexists(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct Stat *stat);ZOOAPI int zoo_get(zhandle_t * zh, const char *path, int watch,char *buffer, int *buffer_len, struct Stat *stat);ZOOAPI int zoo_wget(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,char *buffer, int *buffer_len, struct Stat *stat);ZOOAPI int zoo_set(zhandle_t * zh, const char *path,const char *buffer, int buflen, int version);ZOOAPI int zoo_set2(zhandle_t * zh, const char *path,const char *buffer, int buflen, int version,struct Stat *stat);ZOOAPI int zoo_get_children(zhandle_t * zh, const char *path,int watch, struct String_vector *strings);ZOOAPI int zoo_wget_children(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct String_vector *strings);ZOOAPI int zoo_get_children2(zhandle_t * zh, const char *path,int watch, struct String_vector *strings,struct Stat *stat);ZOOAPI int zoo_wget_children2(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct String_vector *strings,struct Stat *stat);ZOOAPI int zoo_get_acl(zhandle_t * zh, const char *path,struct ACL_vector *acl, struct Stat *stat);ZOOAPI int zoo_set_acl(zhandle_t * zh, const char *path, int version,const struct ACL_vector *acl);ZOOAPI int zoo_multi(zhandle_t * zh, int count, const zoo_op_t * ops,zoo_op_result_t * results);

本文將以上同步 API 在此細分為一下幾類:(1). 創建、刪除 znode 節點,(2). 可設置 watch 的 API,(3). 訪問、設置節點 ACL 的 API,(4). 批處理 API

  • 創建、刪除 znode 節點(兩個)
ZOOAPI int zoo_create(zhandle_t * zh, const char *path,const char *value, int valuelen,const struct ACL_vector *acl, int flags,char *path_buffer, int path_buffer_len);ZOOAPI int zoo_delete(zhandle_t * zh, const char *path, int version);
  • 創建 znode 節點:
ZOOAPI int zoo_create(zhandle_t * zh, const char *path,const char *value, int valuelen,const struct ACL_vector *acl, int flags,char *path_buffer, int path_buffer_len);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
value該節點保存的數據。
valuelen該節點保存數據的大小。如果 value 被設置為 NULL(該 znode 節點不包含數據),則 valuelen 應該設置為 -1。
acl該節點初始 ACL,ACL 不能為null 或空。
flags該參數可以設置為 0,或者創建標識符?ZOO_EPHEMERAL,?ZOO_SEQUENCE?的組合或(OR)。
path_buffer用于保存返回節點新路徑(因為設置了?ZOO_SEQUENCE 后 zoo_create 所創建的節點名稱與參數 path?提供的名稱不同,新的節點名稱后面填充了序號),path 字符串以 NULL 結束。path_buffer 可以設置為 NULL,此時 path_buffer_len 等于 0。?
path_buffer_lenpath_buffer 的長度,如果新節點名稱的長度大于path_buffer_len,則節點名稱將會被截斷,而服務器端該節點的名稱不會截斷。
  • 刪除 znode 節點:
ZOOAPI int zoo_delete(zhandle_t * zh, const char *path, int version);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
version節點的版本號,如果該 znode 節點的實際版本號與該參數提供的版本號不一值,則刪除節點失敗,如果 version 為 -1,則不作版本檢查。

?

  • 可設置 watch 的 API(exists(兩個) + get(兩個) + get_children(四個) = 八個)
ZOOAPI int zoo_exists(zhandle_t * zh, const char *path, int watch,struct Stat *stat);ZOOAPI int zoo_wexists(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct Stat *stat);ZOOAPI int zoo_get(zhandle_t * zh, const char *path, int watch,char *buffer, int *buffer_len, struct Stat *stat);ZOOAPI int zoo_wget(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,char *buffer, int *buffer_len, struct Stat *stat);ZOOAPI int zoo_get_children(zhandle_t * zh, const char *path,int watch, struct String_vector *strings);ZOOAPI int zoo_wget_children(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct String_vector *strings);ZOOAPI int zoo_get_children2(zhandle_t * zh, const char *path,int watch, struct String_vector *strings,struct Stat *stat);ZOOAPI int zoo_wget_children2(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct String_vector *strings,struct Stat *stat);
  • 檢查節點狀態 exists(兩個,分別是 zoo_exists() 和 zoo_wexists(),區別是后者可以指定單獨的 watcher_fn(監視器回調函數),而前者只能用 zookeeper_init() 設置的全局監視器回調函數,同時 get 和 get_children兩族函數也一樣,帶有zoo_w* 的函數可以指定單獨的 watcher_fn)。
ZOOAPI int zoo_exists(zhandle_t * zh, const char *path, int watch, struct Stat *stat);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watch如果非 0,則在服務器端設置監視,當節點發生變化時客戶端會得到通知,即使當前指定的節點不存在也會設置監視,這樣該節點被創建時,客戶端也可以得到通知。
stat返回的 Stat 信息。

?

ZOOAPI int zoo_wexists(zhandle_t * zh, const char *path, watcher_fn watcher, void *watcherCtx,struct Stat *stat);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watcher如果不為 NULL 則會在服務器端設置監視,當節點發生變化時客戶端會得到通知,即使當前指定的節點不存在也會設置監視,這樣該節點被創建時,客戶端也可以得到通知。
watcherCtx用戶指定的數據,將被傳入到監視器回調函數中,與由 zookeeper_init() 設置的全局監視器上下文不同,該函數設置的監視器上下文只與當前的監視器相關聯。
stat返回的 Stat 信息。

?

  • 獲取節點數據 get(兩個)
ZOOAPI int zoo_get(zhandle_t * zh, const char *path, int watch,char *buffer, int *buffer_len, struct Stat *stat);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watch如果非0,則在服務器端設置監視,當節點發生變化時客戶端會得到通知。
buffer用于保存從 zookeeper 服務器獲取的節點數據。
buffer_lenbuffer 大小,一旦成功返回該值將會被設置為節點數據的實際大小,如果節點的數據為空,則數據大小為 -1,buffer_len 也為 -1。
stat如果非空,stat 指向的結構將會保存該節點的 Stat 信息。

?

ZOOAPI int zoo_wget(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,char *buffer, int *buffer_len, struct Stat *stat);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watcher如果不為 NULL 則會在服務器端設置監視,當節點發生變化時客戶端會得到通知。
watcherCtx用戶指定的數據,將被傳入到監視器回調函數中,與由 zookeeper_init() 設置的全局監視器上下文不同,該函數設置的監視器上下文只與當前的監視器相關聯。
buffer用于保存從 zookeeper 服務器獲取的節點數據。
buffer_lenbuffer 大小,一旦成功返回該值將會被設置為節點數據的實際大小,如果節點的數據為空,則數據大小為 -1,buffer_len 也為 -1。
stat如果非空,stat 指向的結構將會保存該節點的 Stat 信息。
  • 獲取子節點列表 get_children(四個)
ZOOAPI int zoo_get_children(zhandle_t * zh, const char *path,int watch, struct String_vector *strings);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watch如果非0,則在服務器端設置監視,當節點發生變化時客戶端會得到通知
strings返回各個子節點路徑

?

ZOOAPI int zoo_wget_children(zhandle_t * zh, const char *path, watcher_fn watcher, void *watcherCtx,struct String_vector *strings);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watcher如果不為 NULL 則會在服務器端設置監視,當節點發生變化時客戶端會得到通知。
watcherCtx用戶指定的數據,將被傳入到監視器回調函數中,與由 zookeeper_init() 設置的全局監視器上下文不同,該函數設置的監視器上下文只與當前的監視器相關聯。
strings回各個子節點路徑

?

ZOOAPI int zoo_get_children2(zhandle_t * zh, const char *path, int watch, struct String_vector *strings,struct Stat *stat);

該函數最早出現在 Zookeeper 3.3.0中,該函數功能與 zoo_get_children() 基本一致,但同時還會返回指定節點的 Stat 信息。

zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watch如果非0,則在服務器端設置監視,當節點發生變化時客戶端會得到通知
strings返回各個子節點路徑。
stat返回指定節點的 Stat 信息。

?

ZOOAPI int zoo_wget_children2(zhandle_t * zh, const char *path,watcher_fn watcher, void *watcherCtx,struct String_vector *strings,struct Stat *stat);

該函數最早出現在 Zookeeper 3.3.0中,該函數功能與 zoo_wget_children() 基本一致,但同時還會返回指定節點的 Stat 信息。

zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
watcher如果不為 NULL 則會在服務器端設置監視,當節點發生變化時客戶端會得到通知。
watcherCtx用戶指定的數據,將被傳入到監視器回調函數中,與由 zookeeper_init() 設置的全局監視器上下文不同,該函數設置的監視器上下文只與當前的監視器相關聯。
strings返回各個子節點路徑。
stat返回指定節點的 Stat 信息。
  • 訪問、設置節點 ACL (兩個)
ZOOAPI int zoo_get_acl(zhandle_t * zh, const char *path, struct ACL_vector *acl, struct Stat *stat);ZOOAPI int zoo_set_acl(zhandle_t * zh, const char *path, int version, const struct ACL_vector *acl);
  • 獲取節點 ACL 信息
ZOOAPI int zoo_get_acl(zhandle_t * zh, const char *path, struct ACL_vector *acl, struct Stat *stat);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
acl該函數所返回的指定節點的 ACL 信息。
stat返回指定節點的 Stat 信息。
  • 設置節點 ACL
ZOOAPI int zoo_set_acl(zhandle_t * zh, const char *path, int version, const struct ACL_vector *acl);
zhzookeeper_init()?返回的 zookeeper 句柄。
path節點路徑。
version節點的版本號。
acl需要設置的 ACL 信息。
  • 批處理,即原子性地一次提交多個 Zookeeper 操作。
ZOOAPI int zoo_multi(zhandle_t * zh, int count, const zoo_op_t * ops, zoo_op_result_t * results);
zhzookeeper_init()?返回的 zookeeper 句柄。
count提交操作的個數。
ops包含所提交操作數組。
results包含操作所返回結果的數組。

其中 zoo_op_t 是各種操作(創建、刪除節點,設置節點數據和檢查節點狀態四種操作)一個封裝(聯合體),定義如下:

typedef struct zoo_op {int type;union {// CREATEstruct {const char *path;const char *data;int datalen;char *buf;int buflen;const struct ACL_vector *acl;int flags;} create_op;// DELETE struct {const char *path;int version;} delete_op;// SETstruct {const char *path;const char *data;int datalen;int version;struct Stat *stat;} set_op;// CHECKstruct {const char *path;int version;} check_op;}; } zoo_op_t;

zoo_op_t 一般由以下四個函數初始化:

void zoo_create_op_init(zoo_op_t * op, const char *path, const char *value,int valuelen, const struct ACL_vector *acl,int flags, char *path_buffer, int path_buffer_len);void zoo_delete_op_init(zoo_op_t * op, const char *path, int version);void zoo_set_op_init(zoo_op_t * op, const char *path,const char *buffer, int buflen, int version,struct Stat *stat);void zoo_check_op_init(zoo_op_t * op, const char *path, int version);

zoo_op_result_t 用于保存 zoo_multi 或者 zoo_amulti 返回的其中一個結果,定義如下:

typedef struct zoo_op_result {int err;char *value;int valuelen;struct Stat *stat; } zoo_op_result_t;

?

總結

以上是生活随笔為你收集整理的Zookeeper C 同步 API 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。