2 ctdb database library: old client interface
4 Copyright (C) Andrew Tridgell 2006
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program 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
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 #ifndef _CTDB_CLIENT_H
21 #define _CTDB_CLIENT_H
23 #include "common/srvid.h"
24 #include "ctdb_protocol.h"
26 enum control_state {CTDB_CONTROL_WAIT, CTDB_CONTROL_DONE, CTDB_CONTROL_ERROR, CTDB_CONTROL_TIMEOUT};
28 struct ctdb_client_control_state {
29 struct ctdb_context *ctdb;
33 enum control_state state;
35 struct ctdb_req_control *c;
37 /* if we have a callback registered for the completion (or failure) of
39 if a callback is used, it MUST talloc_free the cb_data passed to it
42 void (*fn)(struct ctdb_client_control_state *);
47 struct tevent_context;
50 initialise ctdb subsystem
52 struct ctdb_context *ctdb_init(struct tevent_context *ev);
57 void ctdb_set_flags(struct ctdb_context *ctdb, unsigned flags);
59 int ctdb_set_socketname(struct ctdb_context *ctdb, const char *socketname);
60 const char *ctdb_get_socketname(struct ctdb_context *ctdb);
63 attach to a ctdb database
65 struct ctdb_db_context *ctdb_attach(struct ctdb_context *ctdb,
66 struct timeval timeout,
71 int ctdb_detach(struct ctdb_context *ctdb, uint32_t db_id);
73 /* a ctdb call function */
74 typedef int (*ctdb_fn_t)(struct ctdb_call_info *);
77 setup a ctdb call function
79 int ctdb_set_call(struct ctdb_db_context *ctdb_db, ctdb_fn_t fn, uint32_t id);
84 make a ctdb call. The associated ctdb call function will be called on the DMASTER
87 int ctdb_call(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
89 /* return pnn of this node */
90 uint32_t ctdb_get_pnn(struct ctdb_context *ctdb);
92 /* setup a handler for ctdb messages */
93 typedef void (*ctdb_msg_fn_t)(struct ctdb_context *, uint64_t srvid,
94 TDB_DATA data, void *);
95 int ctdb_client_set_message_handler(struct ctdb_context *ctdb, uint64_t srvid,
96 srvid_handler_fn handler,
98 int ctdb_client_remove_message_handler(struct ctdb_context *ctdb,
99 uint64_t srvid, void *private_data);
100 int ctdb_client_check_message_handlers(struct ctdb_context *ctdb,
101 uint64_t *ids, uint32_t num,
104 int ctdb_call(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
105 struct ctdb_client_call_state *ctdb_call_send(struct ctdb_db_context *ctdb_db, struct ctdb_call *call);
106 int ctdb_call_recv(struct ctdb_client_call_state *state, struct ctdb_call *call);
108 /* send a ctdb message */
109 int ctdb_client_send_message(struct ctdb_context *ctdb, uint32_t pnn,
110 uint64_t srvid, TDB_DATA data);
114 Fetch a ctdb record from a remote node
115 . Underneath this will force the
116 dmaster for the record to be moved to the local node.
118 struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
119 TDB_DATA key, TDB_DATA *data);
121 struct ctdb_record_handle *ctdb_fetch_readonly_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx, TDB_DATA key, TDB_DATA *data, int read_only);
123 int ctdb_record_store(struct ctdb_record_handle *h, TDB_DATA data);
125 int ctdb_fetch(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
126 TDB_DATA key, TDB_DATA *data);
129 struct ctdb_statistics;
130 int ctdb_ctrl_statistics(struct ctdb_context *ctdb, uint32_t destnode, struct ctdb_statistics *status);
131 int ctdb_ctrl_dbstatistics(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
132 TALLOC_CTX *mem_ctx, struct ctdb_db_statistics **dbstat);
134 int ctdb_ctrl_shutdown(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
137 int ctdb_ctrl_getvnnmap(struct ctdb_context *ctdb,
138 struct timeval timeout, uint32_t destnode,
139 TALLOC_CTX *mem_ctx, struct ctdb_vnn_map **vnnmap);
140 int ctdb_ctrl_setvnnmap(struct ctdb_context *ctdb,
141 struct timeval timeout, uint32_t destnode,
142 TALLOC_CTX *mem_ctx, struct ctdb_vnn_map *vnnmap);
144 int ctdb_ctrl_getdbmap(struct ctdb_context *ctdb,
145 struct timeval timeout, uint32_t destnode,
146 TALLOC_CTX *mem_ctx, struct ctdb_dbid_map **dbmap);
149 struct ctdb_node_map;
151 int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb,
152 struct timeval timeout, uint32_t destnode,
153 TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap);
155 int ctdb_ctrl_getnodesfile(struct ctdb_context *ctdb,
156 struct timeval timeout, uint32_t destnode,
157 TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap);
159 int ctdb_ctrl_reload_nodes_file(struct ctdb_context *ctdb,
160 struct timeval timeout, uint32_t destnode);
162 struct ctdb_key_list {
166 struct ctdb_ltdb_header *headers;
170 int ctdb_ctrl_pulldb(
171 struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
172 uint32_t lmaster, TALLOC_CTX *mem_ctx,
173 struct timeval timeout, TDB_DATA *outdata);
175 struct ctdb_client_control_state *ctdb_ctrl_pulldb_send(
176 struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid,
177 uint32_t lmaster, TALLOC_CTX *mem_ctx, struct timeval timeout);
179 int ctdb_ctrl_pulldb_recv(
180 struct ctdb_context *ctdb,
181 TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state,
184 int ctdb_ctrl_getdbpath(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t dbid, TALLOC_CTX *mem_ctx, const char **path);
185 int ctdb_ctrl_getdbname(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t dbid, TALLOC_CTX *mem_ctx, const char **name);
186 int ctdb_ctrl_getdbhealth(struct ctdb_context *ctdb,
187 struct timeval timeout,
189 uint32_t dbid, TALLOC_CTX *mem_ctx,
190 const char **reason);
191 int ctdb_ctrl_getdbseqnum(struct ctdb_context *ctdb, struct timeval timeout,
192 uint32_t destnode, uint32_t dbid, uint64_t *seqnum);
193 int ctdb_ctrl_createdb(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, const char *name, bool persistent);
195 int ctdb_ctrl_process_exists(struct ctdb_context *ctdb, uint32_t destnode, pid_t pid);
197 int ctdb_ctrl_ping(struct ctdb_context *ctdb, uint32_t destnode);
199 int ctdb_ctrl_get_runstate(struct ctdb_context *ctdb,
200 struct timeval timeout,
204 int ctdb_ctrl_get_debuglevel(struct ctdb_context *ctdb, uint32_t destnode, int32_t *level);
205 int ctdb_ctrl_set_debuglevel(struct ctdb_context *ctdb, uint32_t destnode, int32_t level);
208 change dmaster for all keys in the database to the new value
210 int ctdb_ctrl_setdmaster(struct ctdb_context *ctdb,
211 struct timeval timeout, uint32_t destnode,
212 TALLOC_CTX *mem_ctx, uint32_t dbid, uint32_t dmaster);
215 get the recovery mode of a remote node
217 int ctdb_ctrl_getrecmode(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, uint32_t *recmode);
219 struct ctdb_client_control_state *ctdb_ctrl_getrecmode_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode);
221 int ctdb_ctrl_getrecmode_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *recmode);
225 set the recovery mode of a remote node
227 int ctdb_ctrl_setrecmode(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmode);
229 get the monitoring mode of a remote node
231 int ctdb_ctrl_getmonmode(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *monmode);
234 set the monitoring mode of a remote node to active
236 int ctdb_ctrl_enable_monmode(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
239 set the monitoring mode of a remote node to disabled
241 int ctdb_ctrl_disable_monmode(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
245 get the recovery master of a remote node
247 int ctdb_ctrl_getrecmaster(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, uint32_t *recmaster);
249 struct ctdb_client_control_state *ctdb_ctrl_getrecmaster_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode);
251 int ctdb_ctrl_getrecmaster_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *recmaster);
256 set the recovery master of a remote node
258 int ctdb_ctrl_setrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmaster);
260 uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
261 struct timeval timeout,
263 uint32_t *num_nodes);
265 int ctdb_statistics_reset(struct ctdb_context *ctdb, uint32_t destnode);
267 typedef int (*ctdb_traverse_func)(TDB_DATA, TDB_DATA, void *);
268 int ctdb_traverse(struct ctdb_db_context *ctdb_db, ctdb_traverse_func fn, void *private_data);
270 struct ctdb_dump_db_context {
271 struct ctdb_context *ctdb;
273 bool printemptyrecords;
277 bool printrecordflags;
280 int ctdb_dumpdb_record(TDB_DATA key, TDB_DATA data, void *p);
281 int ctdb_dump_db(struct ctdb_db_context *ctdb_db,
282 struct ctdb_dump_db_context *ctx);
285 get the pid of a ctdb daemon
287 int ctdb_ctrl_getpid(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *pid);
289 int ctdb_ctrl_freeze(struct ctdb_context *ctdb, struct timeval timeout,
291 int ctdb_ctrl_freeze_priority(struct ctdb_context *ctdb, struct timeval timeout,
292 uint32_t destnode, uint32_t priority);
294 struct ctdb_client_control_state *
295 ctdb_ctrl_freeze_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
296 struct timeval timeout, uint32_t destnode,
299 int ctdb_ctrl_freeze_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
300 struct ctdb_client_control_state *state);
302 int ctdb_ctrl_thaw_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t priority);
303 int ctdb_ctrl_thaw(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
305 int ctdb_ctrl_getpnn(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
307 int ctdb_ctrl_get_tunable(struct ctdb_context *ctdb,
308 struct timeval timeout,
310 const char *name, uint32_t *value);
312 int ctdb_ctrl_set_tunable(struct ctdb_context *ctdb,
313 struct timeval timeout,
315 const char *name, uint32_t value);
317 int ctdb_ctrl_list_tunables(struct ctdb_context *ctdb,
318 struct timeval timeout,
321 const char ***list, uint32_t *count);
323 int ctdb_ctrl_modflags(struct ctdb_context *ctdb,
324 struct timeval timeout,
326 uint32_t set, uint32_t clear);
328 int ctdb_ctrl_register_server_id(struct ctdb_context *ctdb,
329 struct timeval timeout,
330 struct ctdb_server_id *id);
331 int ctdb_ctrl_unregister_server_id(struct ctdb_context *ctdb,
332 struct timeval timeout,
333 struct ctdb_server_id *id);
334 int ctdb_ctrl_check_server_id(struct ctdb_context *ctdb,
335 struct timeval timeout, uint32_t destnode,
336 struct ctdb_server_id *id, uint32_t *status);
337 int ctdb_ctrl_get_server_id_list(struct ctdb_context *ctdb,
339 struct timeval timeout, uint32_t destnode,
340 struct ctdb_server_id_list **svid_list);
342 int ctdb_socket_connect(struct ctdb_context *ctdb);
345 get the uptime of a remote node
347 int ctdb_ctrl_uptime(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, struct ctdb_uptime **uptime);
349 struct ctdb_client_control_state *ctdb_ctrl_uptime_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode);
351 int ctdb_ctrl_uptime_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, struct ctdb_uptime **uptime);
353 int ctdb_ctrl_end_recovery(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
355 int ctdb_ctrl_getreclock(struct ctdb_context *ctdb,
356 struct timeval timeout, uint32_t destnode,
357 TALLOC_CTX *mem_ctx, const char **reclock);
358 int ctdb_ctrl_setreclock(struct ctdb_context *ctdb,
359 struct timeval timeout, uint32_t destnode,
360 const char *reclock);
362 struct ctdb_node_capabilities {
364 uint32_t capabilities;
367 /* Retrieve capabilities for all connected nodes. The length of the
368 * returned array can be calculated using talloc_array_length(). */
369 struct ctdb_node_capabilities *
370 ctdb_get_capabilities(struct ctdb_context *ctdb,
372 struct timeval timeout,
373 struct ctdb_node_map *nodemap);
375 /* Get capabilities for specified node, NULL if not found */
377 ctdb_get_node_capabilities(struct ctdb_node_capabilities *caps,
380 /* True if the given node has all of the required capabilities */
381 bool ctdb_node_has_capabilities(struct ctdb_node_capabilities *caps,
383 uint32_t capabilities_required);
385 uint32_t *list_of_nodes(struct ctdb_context *ctdb,
386 struct ctdb_node_map *node_map,
390 uint32_t *list_of_connected_nodes(struct ctdb_context *ctdb,
391 struct ctdb_node_map *node_map,
394 uint32_t *list_of_active_nodes(struct ctdb_context *ctdb,
395 struct ctdb_node_map *node_map,
398 uint32_t *list_of_vnnmap_nodes(struct ctdb_context *ctdb,
399 struct ctdb_vnn_map *vnn_map,
403 int ctdb_read_pnn_lock(int fd, int32_t pnn);
406 get capabilities of a remote node
408 int ctdb_ctrl_getcapabilities(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *capabilities);
410 struct ctdb_client_control_state *ctdb_ctrl_getcapabilities_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode);
412 int ctdb_ctrl_getcapabilities_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct ctdb_client_control_state *state, uint32_t *capabilities);
414 struct ctdb_transaction_handle *ctdb_transaction_start(struct ctdb_db_context *ctdb_db,
415 TALLOC_CTX *mem_ctx);
416 int ctdb_transaction_fetch(struct ctdb_transaction_handle *h,
418 TDB_DATA key, TDB_DATA *data);
419 int ctdb_transaction_store(struct ctdb_transaction_handle *h,
420 TDB_DATA key, TDB_DATA data);
421 int ctdb_transaction_commit(struct ctdb_transaction_handle *h);
422 int ctdb_transaction_cancel(struct ctdb_transaction_handle *h);
424 int ctdb_ctrl_recd_ping(struct ctdb_context *ctdb);
426 int switch_from_server_to_client(struct ctdb_context *ctdb, const char *fmt,
429 int ctdb_ctrl_getscriptstatus(struct ctdb_context *ctdb,
430 struct timeval timeout, uint32_t destnode,
431 TALLOC_CTX *mem_ctx, enum ctdb_eventscript_call type,
432 struct ctdb_scripts_wire **script_status);
435 int ctdb_ctrl_stop_node(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
436 int ctdb_ctrl_continue_node(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
438 int ctdb_ctrl_setnatgwstate(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t natgwstate);
439 int ctdb_ctrl_setlmasterrole(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t lmasterrole);
440 int ctdb_ctrl_setrecmasterrole(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmasterrole);
442 int ctdb_ctrl_enablescript(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, const char *script);
443 int ctdb_ctrl_disablescript(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, const char *script);
445 int ctdb_ctrl_set_ban(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, struct ctdb_ban_time *bantime);
446 int ctdb_ctrl_get_ban(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, struct ctdb_ban_time **bantime);
448 int ctdb_ctrl_set_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, struct ctdb_db_priority *db_prio);
449 int ctdb_ctrl_get_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t db_id, uint32_t *priority);
451 int ctdb_ctrl_getstathistory(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, TALLOC_CTX *mem_ctx, struct ctdb_statistics_wire **stats);
455 struct ctdb_client_control_state *
456 ctdb_ctrl_updaterecord_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, struct ctdb_db_context *ctdb_db, TDB_DATA key, struct ctdb_ltdb_header *header, TDB_DATA data);
458 int ctdb_ctrl_updaterecord_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state);
461 ctdb_ctrl_updaterecord(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx, struct timeval timeout, uint32_t destnode, struct ctdb_db_context *ctdb_db, TDB_DATA key, struct ctdb_ltdb_header *header, TDB_DATA data);
464 struct ctdb_client_control_state *
465 ctdb_ctrl_set_db_readonly_send(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid);
466 int ctdb_ctrl_set_db_readonly_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state);
467 int ctdb_ctrl_set_db_readonly(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid);
469 struct ctdb_client_control_state *
470 ctdb_ctrl_set_db_sticky_send(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid);
471 int ctdb_ctrl_set_db_sticky_recv(struct ctdb_context *ctdb, struct ctdb_client_control_state *state);
472 int ctdb_ctrl_set_db_sticky(struct ctdb_context *ctdb, uint32_t destnode, uint32_t dbid);
474 #endif /* _CTDB_CLIENT_H */