1. 程式人生 > >Zookeeper C API之回撥函式

Zookeeper C API之回撥函式

監視回撥函式

原型:

Typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path, void *watcherCtx);

監視函式原型的各個引數說明如下:

zh Zookeeper控制代碼(handle)
type 事件型別(event type),_EVENT常量之一
state 連線狀態(connection state),狀態值為
_STATE常量之一
path 觸發監視事件的znode節點的路徑,若為NULL,則事件為ZOO_SESSION_EVENT
watcherCtx 監視器上下文(watcher context)

其它回撥函式

Zookeeper中有幾種在非同步API(一般以zoo_a*開頭的函式)中使用的回撥函式,根據回撥函式處理非同步函式返回值型別的不同分為以下幾類。

// 處理返回 void 型別的回撥函式
typedef void(* void_completion_t)(int rc, const void *data);

// 處理返回 Stat 結構的回撥函式
typedef void(* stat_completion_t)(int rc, const struct Stat *stat, const void *data);

// 處理返回字串的回撥函式
typedef void(* string_completion_t)(int rc, const char *value, const void *data);

// 處理返回資料的回撥函式
typedef void(* data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data);

// 處理返回字串列表(a list of string)的回撥函式
typedef void(* strings_completion_t)(int rc, const struct String_vector *strings, const void *data);

// 同時處理返回字串列表(a list of string)和 Stat 結構的回撥函式
typedef void(* strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data);

// 處理以及返回 ACL 資訊的回撥函式
typedef void(* acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);

處理返回void型別的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* void_completion_t)(int rc, const void *data);

引數說明如下:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數。開發人員需要負責此指標所指向記憶體的釋放。

處理返回Stat結構的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* stat_completion_t)(int rc, const struct Stat *stat, const void *data);

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
stat:指向與該znode節點相關的Stat資訊。如果返回非0值(非同步呼叫函數出錯),stat所指向的區域是未定義的,開發者不負責釋放stat所指向的記憶體空間。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數。開發人員需要負責此指標所指向記憶體的釋放。

處理返回字串的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* string_completion_t)(int rc, const char *value, const void *data)

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
value:返回的字串
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數。開發人員需要負責此指標所指向記憶體的釋放。

處理返回資料的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data);

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
value:非同步呼叫的返回值。如果返回非0,則value所指向的區域是未定義的,開發者不用釋放value所指向的記憶體空間。
value_len:返回value資料位元組數(bytes)
stat:指向該znode節點相關的Stat資訊。如果返回非0值(非同步呼叫函數出錯),stat所指向的區域是未定義的,開發者不負責釋放stat所指向的記憶體空間。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數。開發人員需要負責此指標所指向記憶體的釋放。

處理返回字串列表的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* strings_completion_t)(int rc, const struct String_vector *strings, const void *data);

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
strings:指向包含了某znode節點的所有子節點名稱列表的結構。如果返回非0值,strings所指向的區域是未定義的,開發者不負責釋放strings所指向的記憶體空間。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數。開發人員需要負責此指標所指向記憶體的釋放。

處理返回字串列表和Stat結構的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data);

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
strings:指向包含了某znode節點的所有子節點名稱列表的結構。如果返回非0值,strings所指向的區域是未定義的,開發者不負責釋放strings所指向的記憶體空間。
stat:指向該znode節點相關的Stat資訊。如果返回非0值(非同步呼叫函數出錯),stat所指向的區域是未定義的,開發者不負責釋放stat所指向的記憶體空間。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數,開發人員需要負責此指標所指向記憶體的釋放。

處理返回ACL資訊的回撥函式
一般在非同步API呼叫結束或zookeeper客戶端失去連線時被呼叫,原型如下:

typedef void(* acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);

引數說明:

rc:非同步函式呼叫返回的錯誤碼。連線丟失/超時將觸發該回調函式,並且錯誤碼為ZCONNECTIONLOSS(zookeeper客戶端與伺服器端的連線丟失)或者ZOPERATIONTIMEOUT(連線超時);而與資料相關的事件也會觸發該回調函式,同時置相應的錯誤碼。
acl:指向包含某znode節點ACL資訊的指標。如果返回非0值(非同步呼叫函數出錯),acl所指向的區域是未定義的,開發者不負責釋放acl所指向的記憶體空間。
stat:指向該znode節點相關的Stat資訊。如果返回非0值(非同步呼叫函數出錯),stat所指向的區域是未定義的,開發者不負責釋放stat所指向的記憶體空間。
data:由呼叫者傳入的指標,呼叫者可以通過該指標向回撥函式傳入自定義的引數,開發人員需要負責此指標所指向記憶體的釋放。