天天看點

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:由調用者傳入的指針,調用者可以通過該指針向回調函數傳入自定義的參數,開發人員需要負責此指針所指向記憶體的釋放。