zookeeper C API
生活随笔
收集整理的這篇文章主要介紹了
zookeeper C API
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);
watch回調函數,兩種watch事件通知方式:
1.legacy:預先實現watch回調函數并將函數指針傳入zookeeper_init,然后使用其他api設置watch。 (即在init函數中設置watcher,然后后邊調用時,設置整型值watch來表明使用或者不使用watcher)
2.watcher object:一個函數指針和一個watcher上下文指針。watch觸發時,兩者結合調用。使用此類型,需使用'w'前綴api,如zoo_awexists、zoo_wget等.(直接使用回調函數)
zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout, const clientid_t *clientid, void *context, int flags);
創建與ZooKeeper服務端通信的句柄和對應于此句柄的會話。會話的創建過程是異步的,收到ZOO_CONNECTED_STATE狀態事件后,確認會話成功建立。 int zookeeper_close(zhandle_t *zh);
關閉句柄,釋放資源。調用函數后,會話將不可用,函數返回前會將未發送完畢的請求發送完,所以可能會引起阻塞。
對一個句柄來說,這個方法只許調用一次,調用多次將產生不確定的結果。對于調用過此方法的句柄,其他句柄操作也將產生不確定的結果。const clientid_t *zoo_client_id(zhandle_t *zh);
返回客戶端會話id,僅在與服務端連接正常時有效int zoo_recv_timeout(zhandle_t *zh);
返回會話超時時間,僅在于服務端連接正常時有效,該值在與服務器重連后可能改變const void *zoo_get_context(zhandle_t *zh);
返回句柄上下文void zoo_set_context(zhandle_t *zh, void *context);
設置句柄上下文watcher_fn zoo_set_watcher(zhandle_t *zh,watcher_fn newFn);
設置watch回調,返回之前的watch回調struct sockaddr* zookeeper_get_connected_host(zhandle_t *zh, struct sockaddr *addr, socklen_t *addr_len);
返回服務端的網絡地址(sockaddr結構),僅在與服務端連接正常是有效int zookeeper_interest(zhandle_t *zh, int *fd, int *interest, struct timeval *tv);
暫時不太理解,可能是返回zookeeper在監聽某個fd的讀或者寫int zookeeper_process(zhandle_t *zh, int events);
暫時不太理解,通知zookeeper監聽的事件發生了typedef void (*void_completion_t)(int rc, const void *data);
函數類型定義,異步調用或連接斷開或連接超時執行的回調類型typedef void (*stat_completion_t)(int rc, const struct Stat *stat, const void *data);
同上,有返回值typedef void (*data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data);
同上,返回詳細數據typedef void (*strings_completion_t)(int rc, const struct String_vector *strings, const void *data);
同上typedef void (*strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data);
同上typedef void (*string_completion_t)(int rc, const char *value, const void *data);
同上typedef void (*acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);
同上int zoo_state(zhandle_t *zh);
返回句柄狀態int zoo_acreate(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, string_completion_t completion, const void *data);
創建一個之前不存在的節點。如果設置ZOO_EPHEMERAL,客戶端會話失效,節點將自動刪除;如果設置ZOO_SEQUENCE,一個唯一的自動增加的序列號附加到路徑名,序列號寬度是10個數字的寬度,不足用0填充int zoo_adelete(zhandle_t *zh, const char *path, int version, void_completion_t completion, const void *data);
刪除一個節點int zoo_aexists(zhandle_t *zh, const char *path, int watch, stat_completion_t completion, const void *data);
檢查一個節點是否存在int zoo_awexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, stat_completion_t completion, const void *data);
檢查一個節點是否存在,它允許指定一個watcher對象(一個函數指針watcher和對應的上下文watcherCtx),在watch解除時,此函數會調用,watcherCtx作為watcher的傳入參數int zoo_aget(zhandle_t *zh, const char *path, int watch, data_completion_t completion, const void *data);
獲取節點數據(legacy方式)。completion是回調函數,其rc參數可能是以下參數:ZOK-完成,ZNONODE-節點不存在,ZNOAUTH-客戶端無權限int zoo_awget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, data_completion_t completion, const void *data);
獲取節點數據(watcher object方式)。int zoo_aset(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, stat_completion_t completion, const void *data);
設置節點數據int zoo_aget_children(zhandle_t *zh, const char *path, int watch, strings_completion_t completion, const void *data);
獲取子節點列表(legacy)int zoo_awget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_completion_t completion, const void *data);
獲取子節點列表(watcher object)int zoo_aget_children2(zhandle_t *zh, const char *path, int watch, strings_stat_completion_t completion, const void *data);
獲取子節點列表,3.3.0版本加入(legacy)int zoo_awget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, strings_stat_completion_t completion, const void *data);
獲取子節點列表,3.3.0版本加入(watcher object)int zoo_async(zhandle_t *zh, const char *path, string_completion_t completion, const void *data);
Flush leader channel. 暫時不明確int zoo_aget_acl(zhandle_t *zh, const char *path, acl_completion_t completion, const void *data);
獲取節點的ACL。ACL描述了操作該節點所需具備的條件,即哪些人(id)具備哪些權限后才允許對節點執行哪些操作。int zoo_aset_acl(zhandle_t *zh, const char *path, int version, struct ACL_vector *acl, void_completion_t, const void *data);
設置節點的ACLint zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results, void_completion_t, const void *data);
以原子方式執行一系列操作const char* zerror(int c);
返回錯誤信息int zoo_add_auth(zhandle_t *zh, const char* scheme, const char* cert, int certLen, void_completion_t completion, const void *data);
為應用程序指定證書。調用此函數用于認證的證書。服務端用scheme指定的安全服務對客戶端連接進行認證。
如果認證失敗,將與服務端斷開連接,watcher觸發,狀態碼是ZOO_AUTH_FAILED_STATEint is_unrecoverable(zhandle_t *zh);
檢查zookeeper連接是否可恢復void zoo_set_debug_level(ZooLogLevel logLevel);
設置調試級別void zoo_set_log_stream(FILE* logStream);
設置用于記錄日志的文件流。默認使用stderr。若logStream為NULL,則使用默認值stderr。void zoo_deterministic_conn_order(int yesOrNo);
用于啟用或停用quarum端點的隨機化排序,通常僅在測試時使用。
如果非0,使得client連接到quarum端按照被初始化的順序。
如果是0,zookeeper_init將變更端點順序,使得client連接分布在更優的端點上。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);
同步建立節點int zoo_delete(zhandle_t *zh, const char *path, int version);
同步刪除節點int zoo_exists(zhandle_t *zh, const char *path, int watch, struct Stat *stat);
同步檢查節點是否存在int zoo_wexists(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct Stat *stat);
同步檢查節點是否存在(watcher object)int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer, int* buffer_len, struct Stat *stat);
同步獲取節點數據(legacy)int zoo_wget(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, char *buffer, int* buffer_len, struct Stat *stat);
同步獲取節點數據(watcher object)int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version);
同步設置節點數據int zoo_set2(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version, struct Stat *stat);
同步設置節點數據并返回當前節點的stat信息int zoo_get_children(zhandle_t *zh, const char *path, int watch, struct String_vector *strings);
同步獲取子節點列表(legacy)int zoo_wget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings);
同步獲取子節點列表(watcher object)int zoo_get_children2(zhandle_t *zh, const char *path, int watch, struct String_vector *strings, struct Stat *stat);
同步獲取子節點列表并返回當前節點的stat信息(legacy),3.3.0版本加入int zoo_wget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings, struct Stat *stat);
同步獲取子節點列表并返回當前節點的stat信息(watcher object),3.3.0版本加入int zoo_get_acl(zhandle_t *zh, const char *path, struct ACL_vector *acl, struct Stat *stat);
同步獲取節點ACLint zoo_set_acl(zhandle_t *zh, const char *path, int version, const struct ACL_vector *acl);
同步設置節點ACLint zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results);
同步以原子方式執行一系列操作
說明:keeper C API 大部分接口可以根據同步和異步特性分為兩類,同步接口以 zoo_* 開頭,異步接口以則以 zoo_a* 開頭。以w開頭的函數表明使用watcher回調函數而不是整型watch和zookeeper中注冊的watcher函數。
轉自 :?http://www.cnblogs.com/caosiyang/archive/2012/11/09/2763190.html
轉載于:https://www.cnblogs.com/catkins/p/5270464.html
總結
以上是生活随笔為你收集整理的zookeeper C API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyUI Combogrid Bug
- 下一篇: 删除临时表