forked from myelin/zookeeper_client
-
Notifications
You must be signed in to change notification settings - Fork 4
/
zookeeper_lib.h
151 lines (117 loc) · 3.95 KB
/
zookeeper_lib.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#ifndef ZOOKEEPER_LIB_H
#define ZOOKEEPER_LIB_H
#include "ruby.h"
#include "c-client-src/zookeeper.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define ZK_TRUE 1
#define ZK_FALSE 0
#define ZKRB_GLOBAL_REQ -1
extern int ZKRBDebugging;
struct zkrb_data_completion {
char *data;
struct Stat *stat;
};
struct zkrb_stat_completion {
struct Stat *stat;
};
struct zkrb_void_completion {
};
struct zkrb_string_completion {
char *value;
};
struct zkrb_strings_completion {
struct String_vector *values;
};
struct zkrb_strings_stat_completion {
struct String_vector *values;
struct Stat *stat;
};
struct zkrb_acl_completion {
struct ACL_vector *acl;
struct Stat *stat;
};
struct zkrb_watcher_completion {
int type;
int state;
char *path;
};
typedef struct {
int64_t req_id;
int rc;
enum {
ZKRB_DATA = 0,
ZKRB_STAT = 1,
ZKRB_VOID = 2,
ZKRB_STRING = 3,
ZKRB_STRINGS = 4,
ZKRB_STRINGS_STAT = 5,
ZKRB_ACL = 6,
ZKRB_WATCHER = 7
} type;
union {
struct zkrb_data_completion *data_completion;
struct zkrb_stat_completion *stat_completion;
struct zkrb_void_completion *void_completion;
struct zkrb_string_completion *string_completion;
struct zkrb_strings_completion *strings_completion;
struct zkrb_strings_stat_completion *strings_stat_completion;
struct zkrb_acl_completion *acl_completion;
struct zkrb_watcher_completion *watcher_completion;
} completion;
} zkrb_event_t;
struct zkrb_event_ll_t {
zkrb_event_t *event;
struct zkrb_event_ll_t *next;
};
typedef struct {
struct zkrb_event_ll_t *head;
struct zkrb_event_ll_t *tail;
} zkrb_queue_t;
zkrb_queue_t * zkrb_queue_alloc(void);
zkrb_event_t * zkrb_event_alloc(void);
void zkrb_event_free(zkrb_event_t *ptr);
/* push/pop is a misnomer, this is a queue */
void zkrb_enqueue(zkrb_queue_t *queue, zkrb_event_t *elt);
zkrb_event_t * zkrb_peek(zkrb_queue_t *queue);
zkrb_event_t * zkrb_dequeue(zkrb_queue_t *queue);
void zkrb_print_stat(const struct Stat *s);
typedef struct {
int64_t req_id;
zkrb_queue_t *queue;
} zkrb_calling_context;
void zkrb_print_calling_context(zkrb_calling_context *ctx);
zkrb_calling_context *zkrb_calling_context_alloc(int64_t req_id, zkrb_queue_t *queue);
/*
default process completions that get queued into the ruby client event queue
*/
void zkrb_state_callback(
zhandle_t *zh, int type, int state, const char *path, void *calling_ctx);
void zkrb_data_callback(
int rc, const char *value, int value_len, const struct Stat *stat, const void *calling_ctx);
void zkrb_stat_callback(
int rc, const struct Stat *stat, const void *calling_ctx);
void zkrb_string_callback(
int rc, const char *string, const void *calling_ctx);
void zkrb_strings_callback(
int rc, const struct String_vector *strings, const void *calling_ctx);
void zkrb_strings_stat_callback(
int rc, const struct String_vector *strings, const struct Stat* stat, const void *calling_ctx);
void zkrb_void_callback(
int rc, const void *calling_ctx);
void zkrb_acl_callback(
int rc, struct ACL_vector *acls, struct Stat *stat, const void *calling_ctx);
VALUE zkrb_event_to_ruby(zkrb_event_t *event);
VALUE zkrb_acl_to_ruby(struct ACL *acl);
VALUE zkrb_acl_vector_to_ruby(struct ACL_vector *acl_vector);
VALUE zkrb_id_to_ruby(struct Id *id);
VALUE zkrb_string_vector_to_ruby(struct String_vector *string_vector);
VALUE zkrb_stat_to_rarray(const struct Stat *stat);
VALUE zkrb_stat_to_rhash(const struct Stat* stat);
struct ACL_vector * zkrb_ruby_to_aclvector(VALUE acl_ary);
struct ACL_vector * zkrb_clone_acl_vector(struct ACL_vector * src);
struct String_vector * zkrb_clone_string_vector(struct String_vector * src);
struct ACL zkrb_ruby_to_acl(VALUE rubyacl);
struct Id zkrb_ruby_to_id(VALUE rubyid);
#endif /* ZOOKEEPER_LIB_H */