cb765884b6cceefefb556d1a91a5b7983f3e5810
[kamenim/samba.git] / source4 / cluster / ctdb / include / ctdb.h
1 /* 
2    ctdb database library
3
4    Copyright (C) Andrew Tridgell  2006
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2 of the License, or (at your option) any later version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #ifndef _CTDB_H
22 #define _CTDB_H
23
24 #define CTDB_IMMEDIATE_MIGRATION        0x00000001
25 struct ctdb_call {
26         int call_id;
27         TDB_DATA key;
28         TDB_DATA call_data;
29         TDB_DATA reply_data;
30         uint32_t status;
31         uint32_t flags;
32 };
33
34 /*
35   structure passed to a ctdb call backend function
36 */
37 struct ctdb_call_info {
38         TDB_DATA key;          /* record key */
39         TDB_DATA record_data;  /* current data in the record */
40         TDB_DATA *new_data;    /* optionally updated record data */
41         TDB_DATA *call_data;   /* optionally passed from caller */
42         TDB_DATA *reply_data;  /* optionally returned by function */
43         uint32_t status;       /* optional reply status - defaults to zero */
44 };
45
46 #define CTDB_ERR_INVALID 1
47 #define CTDB_ERR_NOMEM 2
48
49 /*
50   ctdb flags
51 */
52 #define CTDB_FLAG_SELF_CONNECT (1<<0)
53 #define CTDB_FLAG_TORTURE      (1<<1)
54
55
56 /* 
57    a message handler ID meaning "give me all messages"
58  */
59 #define CTDB_SRVID_ALL 0xFFFFFFFF
60
61 struct event_context;
62
63 /*
64   initialise ctdb subsystem
65 */
66 struct ctdb_context *ctdb_init(struct event_context *ev);
67
68 /*
69   choose the transport
70 */
71 int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport);
72
73 /*
74   set the directory for the local databases
75 */
76 int ctdb_set_tdb_dir(struct ctdb_context *ctdb, const char *dir);
77
78 /*
79   set some flags
80 */
81 void ctdb_set_flags(struct ctdb_context *ctdb, unsigned flags);
82
83 /*
84   clear some flags
85 */
86 void ctdb_clear_flags(struct ctdb_context *ctdb, unsigned flags);
87
88 /*
89   set max acess count before a dmaster migration
90 */
91 void ctdb_set_max_lacount(struct ctdb_context *ctdb, unsigned count);
92
93 /*
94   tell ctdb what address to listen on, in transport specific format
95 */
96 int ctdb_set_address(struct ctdb_context *ctdb, const char *address);
97
98 /*
99   tell ctdb what nodes are available. This takes a filename, which will contain
100   1 node address per line, in a transport specific format
101 */
102 int ctdb_set_nlist(struct ctdb_context *ctdb, const char *nlist);
103
104 /*
105   start the ctdb protocol
106 */
107 int ctdb_start(struct ctdb_context *ctdb);
108
109 /*
110   attach to a ctdb database
111 */
112 struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb, const char *name, int tdb_flags, 
113                                     int open_flags, mode_t mode);
114
115 /*
116   find an attached ctdb_db handle given a name
117  */
118 struct ctdb_db_context *ctdb_db_handle(struct ctdb_context *ctdb, const char *name);
119
120 /*
121   error string for last ctdb error
122 */
123 const char *ctdb_errstr(struct ctdb_context *);
124
125 /* a ctdb call function */
126 typedef int (*ctdb_fn_t)(struct ctdb_call_info *);
127
128 /*
129   setup a ctdb call function
130 */
131 int ctdb_set_call(struct ctdb_db_context *ctdb_db, ctdb_fn_t fn, int id);
132
133
134
135 /*
136   make a ctdb call. The associated ctdb call function will be called on the DMASTER
137   for the given record
138 */
139 int ctdb_call(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
140
141 /*
142   wait for all nodes to be connected - useful for test code
143 */
144 void ctdb_connect_wait(struct ctdb_context *ctdb);
145
146 /*
147   initiate an ordered ctdb cluster shutdown
148   this function will never return
149 */
150 void ctdb_shutdown(struct ctdb_context *ctdb);
151
152 /* return vnn of this node */
153 uint32_t ctdb_get_vnn(struct ctdb_context *ctdb);
154
155 /*
156   return the number of nodes
157 */
158 uint32_t ctdb_get_num_nodes(struct ctdb_context *ctdb);
159
160 /* setup a handler for ctdb messages */
161 typedef void (*ctdb_message_fn_t)(struct ctdb_context *, uint32_t srvid, 
162                                   TDB_DATA data, void *);
163 int ctdb_set_message_handler(struct ctdb_context *ctdb, uint32_t srvid, 
164                              ctdb_message_fn_t handler,
165                              void *private_data);
166
167
168 int ctdb_call(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
169 struct ctdb_client_call_state *ctdb_call_send(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
170 int ctdb_call_recv(struct ctdb_client_call_state *state, struct ctdb_call *call);
171
172 /* send a ctdb message */
173 int ctdb_send_message(struct ctdb_context *ctdb, uint32_t vnn,
174                       uint32_t srvid, TDB_DATA data);
175
176
177 /* 
178    Fetch a ctdb record from a remote node
179  . Underneath this will force the
180    dmaster for the record to be moved to the local node. 
181
182 */
183 struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx, 
184                                            TDB_DATA key, TDB_DATA *data);
185
186
187 /*
188   do a fetch lock from a client to the local daemon
189 */
190 #define FETCH_LOCK_SUCCESS              0
191 #define FETCH_LOCK_LOCKFAILED           1
192 #define FETCH_LOCK_FETCHFAILED          2
193 #define FETCH_LOCK_DMASTERFAILED        3
194
195 int ctdb_client_fetch_lock(struct ctdb_db_context *ctdb_db, 
196                                                   TALLOC_CTX *mem_ctx, 
197                                                   TDB_DATA key, TDB_DATA *data);
198
199
200 int ctdb_record_store(struct ctdb_record_handle *h, TDB_DATA data);
201
202 int ctdb_register_message_handler(struct ctdb_context *ctdb, 
203                                   TALLOC_CTX *mem_ctx,
204                                   uint32_t srvid,
205                                   ctdb_message_fn_t handler,
206                                   void *private_data);
207
208 struct ctdb_db_context *find_ctdb_db(struct ctdb_context *ctdb, uint32_t id);
209
210
211 struct ctdb_context *ctdb_cmdline_client(struct event_context *ev, const char *ctdb_socket);
212
213 struct ctdb_status;
214 int ctdb_status(struct ctdb_context *ctdb, struct ctdb_status *status);
215
216 #endif