ctdb-client: Add a disconnect callback for ctdb client
[sfrench/samba-autobuild/.git] / ctdb / client / client.h
1 /*
2    CTDB client code
3
4    Copyright (C) Amitay Isaacs  2015
5
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.
10
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.
15
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/>.
18 */
19
20 #ifndef __CTDB_CLIENT_H__
21 #define __CTDB_CLIENT_H__
22
23 #include <talloc.h>
24 #include <tevent.h>
25
26 #include "protocol/protocol.h"
27 #include "common/srvid.h"
28
29 struct ctdb_client_context;
30 struct ctdb_db_context;
31 struct ctdb_record_handle;
32
33 typedef void (*ctdb_client_callback_func_t)(void *private_data);
34
35 /* from client/client_connect.c */
36
37 int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
38                      const char *sockpath, struct ctdb_client_context **ret);
39
40 void ctdb_client_set_disconnect_callback(struct ctdb_client_context *client,
41                                          ctdb_client_callback_func_t func,
42                                          void *private_data);
43
44 uint32_t ctdb_client_pnn(struct ctdb_client_context *client);
45
46 void ctdb_client_wait(struct tevent_context *ev, bool *done);
47
48 struct tevent_req *ctdb_recovery_wait_send(TALLOC_CTX *mem_ctx,
49                                            struct tevent_context *ev,
50                                            struct ctdb_client_context *client);
51
52 bool ctdb_recovery_wait_recv(struct tevent_req *req, int *perr);
53
54 /* from client/client_call.c */
55
56 struct tevent_req *ctdb_client_call_send(TALLOC_CTX *mem_ctx,
57                                          struct tevent_context *ev,
58                                          struct ctdb_client_context *client,
59                                          struct ctdb_req_call *request);
60
61 bool ctdb_client_call_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
62                            struct ctdb_reply_call **reply, int *perr);
63
64
65 /* from client/client_message.c */
66
67 struct tevent_req *ctdb_client_message_send(TALLOC_CTX *mem_ctx,
68                                             struct tevent_context *ev,
69                                             struct ctdb_client_context *client,
70                                             uint32_t destnode,
71                                             struct ctdb_req_message *message);
72
73 bool ctdb_client_message_recv(struct tevent_req *req, int *perr);
74
75 int ctdb_client_message(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
76                         struct ctdb_client_context *client,
77                         uint32_t destnode, struct ctdb_req_message *message);
78
79 int ctdb_client_set_message_handler(TALLOC_CTX *mem_ctx,
80                                     struct tevent_context *ev,
81                                     struct ctdb_client_context *client,
82                                     uint64_t srvid, srvid_handler_fn handler,
83                                     void *private_data);
84
85 int ctdb_client_remove_message_handler(TALLOC_CTX *mem_ctx,
86                                        struct tevent_context *ev,
87                                        struct ctdb_client_context *client,
88                                        uint64_t srvid, void *private_data);
89
90 /* from client/client_message_sync.c */
91
92 int ctdb_message_recd_update_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
93                                 struct ctdb_client_context *client,
94                                 int destnode, struct ctdb_public_ip *pubip);
95
96 int ctdb_message_mem_dump(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
97                           struct ctdb_client_context *client,
98                           int destnode, struct ctdb_srvid_message *msg);
99
100 int ctdb_message_reload_nodes(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
101                               struct ctdb_client_context *client,
102                               int destnode);
103
104 int ctdb_message_takeover_run(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
105                               struct ctdb_client_context *client,
106                               int destnode, struct ctdb_srvid_message *msg);
107
108 int ctdb_message_rebalance_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
109                                 struct ctdb_client_context *client,
110                                 int destnode, uint32_t pnn);
111
112 int ctdb_message_disable_takeover_runs(TALLOC_CTX *mem_ctx,
113                                        struct tevent_context *ev,
114                                        struct ctdb_client_context *client,
115                                        int destnode,
116                                        struct ctdb_disable_message *disable);
117
118 int ctdb_message_disable_recoveries(TALLOC_CTX *mem_ctx,
119                                     struct tevent_context *ev,
120                                     struct ctdb_client_context *client,
121                                     int destnode,
122                                     struct ctdb_disable_message *disable);
123
124 int ctdb_message_disable_ip_check(TALLOC_CTX *mem_ctx,
125                                   struct tevent_context *ev,
126                                   struct ctdb_client_context *client,
127                                   int destnode, uint32_t timeout);
128
129 /* from client/client_control.c */
130
131 struct tevent_req *ctdb_client_control_send(TALLOC_CTX *mem_ctx,
132                                             struct tevent_context *ev,
133                                             struct ctdb_client_context *client,
134                                             uint32_t destnode,
135                                             struct timeval timeout,
136                                             struct ctdb_req_control *request);
137
138 bool ctdb_client_control_recv(struct tevent_req *req, int *perr,
139                               TALLOC_CTX *mem_ctx,
140                               struct ctdb_reply_control **preply);
141
142 struct tevent_req *ctdb_client_control_multi_send(
143                                 TALLOC_CTX *mem_ctx,
144                                 struct tevent_context *ev,
145                                 struct ctdb_client_context *client,
146                                 uint32_t *pnn_list, int count,
147                                 struct timeval timeout,
148                                 struct ctdb_req_control *request);
149
150 bool ctdb_client_control_multi_recv(struct tevent_req *req, int *perr,
151                                     TALLOC_CTX *mem_ctx, int **perr_list,
152                                     struct ctdb_reply_control ***preply);
153
154 int ctdb_client_control_multi_error(uint32_t *pnn_list, int count,
155                                     int *err_list, uint32_t *pnn);
156
157 int ctdb_client_control(TALLOC_CTX *mem_ctx,
158                         struct tevent_context *ev,
159                         struct ctdb_client_context *client,
160                         uint32_t destnode,
161                         struct timeval timeout,
162                         struct ctdb_req_control *c,
163                         struct ctdb_reply_control **preply);
164
165 int ctdb_client_control_multi(TALLOC_CTX *mem_ctx,
166                               struct tevent_context *ev,
167                               struct ctdb_client_context *client,
168                               uint32_t *pnn_list, int count,
169                               struct timeval timeout,
170                               struct ctdb_req_control *request,
171                               int **perr,
172                               struct ctdb_reply_control ***preply);
173
174 /* from client/client_control_sync.c */
175
176 int ctdb_ctrl_process_exists(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
177                              struct ctdb_client_context *client,
178                              int destnode, struct timeval timeout,
179                              pid_t pid, int *status);
180
181 int ctdb_ctrl_statistics(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
182                          struct ctdb_client_context *client,
183                          int destnode, struct timeval timeout,
184                          struct ctdb_statistics **stats);
185
186 int ctdb_ctrl_ping(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
187                    struct ctdb_client_context *client,
188                    int destnode, struct timeval timeout,
189                    int *num_clients);
190
191 int ctdb_ctrl_getdbpath(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
192                         struct ctdb_client_context *client,
193                         int destnode, struct timeval timeout,
194                         uint32_t db_id, const char **db_path);
195
196 int ctdb_ctrl_getvnnmap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
197                         struct ctdb_client_context *client,
198                         int destnode, struct timeval timeout,
199                         struct ctdb_vnn_map **vnnmap);
200
201 int ctdb_ctrl_getdebug(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
202                        struct ctdb_client_context *client,
203                        int destnode, struct timeval timeout,
204                        uint32_t *loglevel);
205
206 int ctdb_ctrl_setdebug(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
207                        struct ctdb_client_context *client,
208                        int destnode, struct timeval timeout,
209                        uint32_t loglevel);
210
211 int ctdb_ctrl_get_dbmap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
212                         struct ctdb_client_context *client,
213                         int destnode, struct timeval timeout,
214                         struct ctdb_dbid_map **dbmap);
215
216 int ctdb_ctrl_pull_db(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
217                       struct ctdb_client_context *client, int destnode,
218                       struct timeval timeout, struct ctdb_pulldb *pulldb,
219                       struct ctdb_rec_buffer **recbuf);
220
221 int ctdb_ctrl_push_db(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
222                       struct ctdb_client_context *client, int destnode,
223                       struct timeval timeout, struct ctdb_rec_buffer *recbuf);
224
225 int ctdb_ctrl_get_recmode(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
226                           struct ctdb_client_context *client,
227                           int destnode, struct timeval timeout,
228                           int *recmode);
229
230 int ctdb_ctrl_set_recmode(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
231                           struct ctdb_client_context *client,
232                           int destnode, struct timeval timeout,
233                           int recmode);
234
235 int ctdb_ctrl_statistics_reset(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
236                                struct ctdb_client_context *client,
237                                int destnode, struct timeval timeout);
238
239 int ctdb_ctrl_db_attach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
240                         struct ctdb_client_context *client,
241                         int destnode, struct timeval timeout,
242                         const char *db_name, uint32_t tdb_flags,
243                         uint32_t *db_id);
244
245 int ctdb_ctrl_traverse_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
246                              struct ctdb_client_context *client,
247                              int destnode, struct timeval timeout,
248                              struct ctdb_traverse_start *traverse);
249
250 int ctdb_ctrl_register_srvid(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
251                              struct ctdb_client_context *client,
252                              int destnode, struct timeval timeout,
253                              uint64_t srvid);
254
255 int ctdb_ctrl_deregister_srvid(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
256                                struct ctdb_client_context *client,
257                                int destnode, struct timeval timeout,
258                                uint64_t srvid);
259
260 int ctdb_ctrl_get_dbname(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
261                          struct ctdb_client_context *client,
262                          int destnode, struct timeval timeout,
263                          uint32_t db_id, const char **db_name);
264
265 int ctdb_ctrl_enable_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
266                             struct ctdb_client_context *client,
267                             int destnode, struct timeval timeout,
268                             uint32_t db_id);
269
270 int ctdb_ctrl_update_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
271                             struct ctdb_client_context *client,
272                             int destnode, struct timeval timeout,
273                             uint32_t db_id);
274
275 int ctdb_ctrl_dump_memory(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
276                           struct ctdb_client_context *client,
277                           int destnode, struct timeval timeout,
278                           const char **mem_str);
279
280 int ctdb_ctrl_get_pid(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
281                       struct ctdb_client_context *client,
282                       int destnode, struct timeval timeout,
283                       pid_t *pid);
284
285 int ctdb_ctrl_get_recmaster(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
286                             struct ctdb_client_context *client,
287                             int destnode, struct timeval timeout,
288                             uint32_t *recmaster);
289
290 int ctdb_ctrl_set_recmaster(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
291                             struct ctdb_client_context *client,
292                             int destnode, struct timeval timeout,
293                             uint32_t recmaster);
294
295 int ctdb_ctrl_freeze(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
296                      struct ctdb_client_context *client,
297                      int destnode, struct timeval timeout,
298                      int priority);
299
300 int ctdb_ctrl_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
301                    struct ctdb_client_context *client,
302                    int destnode, struct timeval timeout,
303                    int priority);
304
305 int ctdb_ctrl_get_pnn(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
306                       struct ctdb_client_context *client,
307                       int destnode, struct timeval timeout,
308                       uint32_t *pnn);
309
310 int ctdb_ctrl_shutdown(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
311                        struct ctdb_client_context *client,
312                        int destnode, struct timeval timeout);
313
314 int ctdb_ctrl_get_monmode(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
315                           struct ctdb_client_context *client,
316                           int destnode, struct timeval timeout,
317                           int *mon_mode);
318
319 int ctdb_ctrl_tcp_add(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
320                       struct ctdb_client_context *client,
321                       int destnode, struct timeval timeout,
322                       struct ctdb_connection *conn);
323
324 int ctdb_ctrl_tcp_remove(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
325                          struct ctdb_client_context *client,
326                          int destnode, struct timeval timeout,
327                          struct ctdb_connection *conn);
328
329 int ctdb_ctrl_set_tunable(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
330                           struct ctdb_client_context *client,
331                           int destnode, struct timeval timeout,
332                           struct ctdb_tunable *tunable);
333
334 int ctdb_ctrl_get_tunable(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
335                           struct ctdb_client_context *client,
336                           int destnode, struct timeval timeout,
337                           const char *var, uint32_t *value);
338
339 int ctdb_ctrl_list_tunables(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
340                             struct ctdb_client_context *client,
341                             int destnode, struct timeval timeout,
342                             struct ctdb_var_list **var_list);
343
344 int ctdb_ctrl_modify_flags(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
345                            struct ctdb_client_context *client,
346                            int destnode, struct timeval timeout,
347                            uint32_t pnn, uint32_t old_flags,
348                            uint32_t new_flags);
349
350 int ctdb_ctrl_get_all_tunables(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
351                                struct ctdb_client_context *client,
352                                int destnode, struct timeval timeout,
353                                struct ctdb_tunable_list **tun_list);
354
355 int ctdb_ctrl_kill_tcp(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
356                        struct ctdb_client_context *client,
357                        int destnode, struct timeval timeout,
358                        struct ctdb_connection *conn);
359
360 int ctdb_ctrl_get_tcp_tickle_list(TALLOC_CTX *mem_ctx,
361                                   struct tevent_context *ev,
362                                   struct ctdb_client_context *client,
363                                   int destnode, struct timeval timeout,
364                                   ctdb_sock_addr *addr,
365                                   struct ctdb_tickle_list **tickles);
366
367 int ctdb_ctrl_set_tcp_tickle_list(TALLOC_CTX *mem_ctx,
368                                   struct tevent_context *ev,
369                                   struct ctdb_client_context *client,
370                                   int destnode, struct timeval timeout,
371                                   struct ctdb_tickle_list *tickles);
372
373 int ctdb_ctrl_register_server_id(TALLOC_CTX *mem_ctx,
374                                  struct tevent_context *ev,
375                                  struct ctdb_client_context *client,
376                                  int destnode, struct timeval timeout,
377                                  struct ctdb_client_id *cid);
378
379 int ctdb_ctrl_unregister_server_id(TALLOC_CTX *mem_ctx,
380                                    struct tevent_context *ev,
381                                    struct ctdb_client_context *client,
382                                    int destnode, struct timeval timeout,
383                                    struct ctdb_client_id *cid);
384
385 int ctdb_ctrl_check_server_id(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
386                               struct ctdb_client_context *client,
387                               int destnode, struct timeval timeout,
388                               struct ctdb_client_id *cid);
389
390 int ctdb_ctrl_get_server_id_list(TALLOC_CTX *mem_ctx,
391                                  struct tevent_context *ev,
392                                  struct ctdb_client_context *client,
393                                  int destnode, struct timeval timeout,
394                                  struct ctdb_client_id_map **cid_map);
395
396 int ctdb_ctrl_db_attach_persistent(TALLOC_CTX *mem_ctx,
397                                    struct tevent_context *ev,
398                                    struct ctdb_client_context *client,
399                                    int destnode, struct timeval timeout,
400                                    const char *db_name, int tdb_flags,
401                                    uint32_t *db_id);
402
403 int ctdb_ctrl_send_gratuitous_arp(TALLOC_CTX *mem_ctx,
404                                   struct tevent_context *ev,
405                                   struct ctdb_client_context *client,
406                                   int destnode, struct timeval timeout,
407                                   struct ctdb_addr_info *addr_info);
408
409 int ctdb_ctrl_transaction_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
410                                 struct ctdb_client_context *client,
411                                 int destnode, struct timeval timeout,
412                                 uint32_t tid);
413
414 int ctdb_ctrl_transaction_commit(TALLOC_CTX *mem_ctx,
415                                  struct tevent_context *ev,
416                                  struct ctdb_client_context *client,
417                                  int destnode, struct timeval timeout,
418                                  uint32_t tid);
419
420 int ctdb_ctrl_wipe_database(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
421                             struct ctdb_client_context *client,
422                             int destnode, struct timeval timeout,
423                             uint32_t db_id, uint32_t tid);
424
425 int ctdb_ctrl_uptime(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
426                      struct ctdb_client_context *client,
427                      int destnode, struct timeval timeout,
428                      struct ctdb_uptime **uptime);
429
430 int ctdb_ctrl_start_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
431                              struct ctdb_client_context *client,
432                              int destnode, struct timeval timeout);
433
434 int ctdb_ctrl_end_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
435                            struct ctdb_client_context *client,
436                            int destnode, struct timeval timeout);
437
438 int ctdb_ctrl_reload_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
439                                 struct ctdb_client_context *client,
440                                 int destnode, struct timeval timeout);
441
442 int ctdb_ctrl_enable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
443                              struct ctdb_client_context *client,
444                              int destnode, struct timeval timeout);
445
446 int ctdb_ctrl_disable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
447                               struct ctdb_client_context *client,
448                               int destnode, struct timeval timeout);
449
450 int ctdb_ctrl_add_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
451                             struct ctdb_client_context *client,
452                             int destnode, struct timeval timeout,
453                             struct ctdb_addr_info *addr_info);
454
455 int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
456                             struct ctdb_client_context *client,
457                             int destnode, struct timeval timeout,
458                             struct ctdb_addr_info *addr_info);
459
460 int ctdb_ctrl_run_eventscripts(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
461                                struct ctdb_client_context *client,
462                                int destnode, struct timeval timeout,
463                                const char *event);
464
465 int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
466                                struct ctdb_client_context *client,
467                                int destnode, struct timeval timeout,
468                                uint32_t *caps);
469
470 int ctdb_ctrl_release_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
471                          struct ctdb_client_context *client,
472                          int destnode, struct timeval timeout,
473                          struct ctdb_public_ip *pubip);
474
475 int ctdb_ctrl_takeover_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
476                           struct ctdb_client_context *client,
477                           int destnode, struct timeval timeout,
478                           struct ctdb_public_ip *pubip);
479
480 int ctdb_ctrl_get_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
481                              struct ctdb_client_context *client,
482                              int destnode, struct timeval timeout,
483                              struct ctdb_public_ip_list **pubip_list);
484
485 int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
486                           struct ctdb_client_context *client,
487                           int destnode, struct timeval timeout,
488                           struct ctdb_node_map **nodemap);
489
490 int ctdb_ctrl_get_event_script_status(TALLOC_CTX *mem_ctx,
491                                       struct tevent_context *ev,
492                                       struct ctdb_client_context *client,
493                                       int destnode, struct timeval timeout,
494                                       enum ctdb_event event,
495                                       struct ctdb_script_list **slist);
496
497 int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
498                             struct ctdb_client_context *client,
499                             int destnode, struct timeval timeout,
500                             struct ctdb_traverse_start *traverse);
501
502 int ctdb_ctrl_get_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
503                                struct ctdb_client_context *client,
504                                int destnode, struct timeval timeout,
505                                const char **reclock_file);
506
507 int ctdb_ctrl_set_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
508                                struct ctdb_client_context *client,
509                                int destnode, struct timeval timeout,
510                                const char *reclock_file);
511
512 int ctdb_ctrl_stop_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
513                         struct ctdb_client_context *client,
514                         int destnode, struct timeval timeout);
515
516 int ctdb_ctrl_continue_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
517                             struct ctdb_client_context *client,
518                             int destnode, struct timeval timeout);
519
520 int ctdb_ctrl_set_natgwstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
521                              struct ctdb_client_context *client,
522                              int destnode, struct timeval timeout,
523                              uint32_t natgw_role);
524
525 int ctdb_ctrl_set_lmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
526                               struct ctdb_client_context *client,
527                               int destnode, struct timeval timeout,
528                               uint32_t lmaster_role);
529
530 int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
531                                 struct ctdb_client_context *client,
532                                 int destnode, struct timeval timeout,
533                                 uint32_t recmaster_role);
534
535 int ctdb_ctrl_enable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
536                             struct ctdb_client_context *client,
537                             int destnode, struct timeval timeout,
538                             const char *script);
539
540 int ctdb_ctrl_disable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
541                              struct ctdb_client_context *client,
542                              int destnode, struct timeval timeout,
543                              const char *script);
544
545 int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
546                             struct ctdb_client_context *client,
547                             int destnode, struct timeval timeout,
548                             struct ctdb_ban_state *ban_state);
549
550 int ctdb_ctrl_get_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
551                             struct ctdb_client_context *client,
552                             int destnode, struct timeval timeout,
553                             struct ctdb_ban_state **ban_state);
554
555 int ctdb_ctrl_set_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
556                               struct ctdb_client_context *client,
557                               int destnode, struct timeval timeout,
558                               uint32_t db_id, int priority);
559
560 int ctdb_ctrl_get_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
561                               struct ctdb_client_context *client,
562                               int destnode, struct timeval timeout,
563                               uint32_t db_id, uint32_t *priority);
564
565 int ctdb_ctrl_transaction_cancel(TALLOC_CTX *mem_ctx,
566                                  struct tevent_context *ev,
567                                  struct ctdb_client_context *client,
568                                  int destnode, struct timeval timeout,
569                                  uint32_t tid);
570
571 int ctdb_ctrl_register_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
572                               struct ctdb_client_context *client,
573                               int destnode, struct timeval timeout,
574                               struct ctdb_notify_data *notify);
575
576 int ctdb_ctrl_deregister_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
577                                 struct ctdb_client_context *client,
578                                 int destnode, struct timeval timeout,
579                                 uint64_t srvid);
580
581 int ctdb_ctrl_trans3_commit(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
582                             struct ctdb_client_context *client,
583                             int destnode, struct timeval timeout,
584                             struct ctdb_rec_buffer *recbuf);
585
586 int ctdb_ctrl_get_db_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
587                             struct ctdb_client_context *client,
588                             int destnode, struct timeval timeout,
589                             uint32_t db_id, uint64_t *seqnum);
590
591 int ctdb_ctrl_db_set_healthy(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
592                              struct ctdb_client_context *client,
593                              int destnode, struct timeval timeout,
594                              uint32_t db_id);
595
596 int ctdb_ctrl_db_get_health(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
597                             struct ctdb_client_context *client,
598                             int destnode, struct timeval timeout,
599                             uint32_t db_id, const char **reason);
600
601 int ctdb_ctrl_get_public_ip_info(TALLOC_CTX *mem_ctx,
602                                  struct tevent_context *ev,
603                                  struct ctdb_client_context *client,
604                                  int destnode, struct timeval timeout,
605                                  ctdb_sock_addr *addr,
606                                  struct ctdb_public_ip_info **ipinfo);
607
608 int ctdb_ctrl_get_ifaces(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
609                          struct ctdb_client_context *client,
610                          int destnode, struct timeval timeout,
611                          struct ctdb_iface_list **iface_list);
612
613 int ctdb_ctrl_set_iface_link_state(TALLOC_CTX *mem_ctx,
614                                    struct tevent_context *ev,
615                                    struct ctdb_client_context *client,
616                                    int destnode, struct timeval timeout,
617                                    struct ctdb_iface *iface);
618
619 int ctdb_ctrl_tcp_add_delayed_update(TALLOC_CTX *mem_ctx,
620                                      struct tevent_context *ev,
621                                      struct ctdb_client_context *client,
622                                      int destnode, struct timeval timeout,
623                                      struct ctdb_connection *conn);
624
625 int ctdb_ctrl_get_stat_history(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
626                                struct ctdb_client_context *client,
627                                int destnode, struct timeval timeout,
628                                struct ctdb_statistics_list **stats_list);
629
630 int ctdb_ctrl_schedule_for_deletion(TALLOC_CTX *mem_ctx,
631                                     struct tevent_context *ev,
632                                     struct ctdb_client_context *client,
633                                     int destnode, struct timeval timeout,
634                                     struct ctdb_key_data *key);
635
636 int ctdb_ctrl_set_db_readonly(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
637                               struct ctdb_client_context *client,
638                               int destnode, struct timeval timeout,
639                               uint32_t db_id);
640
641 int ctdb_ctrl_check_srvids(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
642                            struct ctdb_client_context *client,
643                            int destnode, struct timeval timeout,
644                            uint64_t *srvid, int count, uint8_t **result);
645
646 int ctdb_ctrl_traverse_start_ext(TALLOC_CTX *mem_ctx,
647                                  struct tevent_context *ev,
648                                  struct ctdb_client_context *client,
649                                  int destnode, struct timeval timeout,
650                                  struct ctdb_traverse_start_ext *traverse);
651
652 int ctdb_ctrl_get_db_statistics(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
653                                 struct ctdb_client_context *client,
654                                 int destnode, struct timeval timeout,
655                                 uint32_t db_id,
656                                 struct ctdb_db_statistics **dbstats);
657
658 int ctdb_ctrl_set_db_sticky(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
659                             struct ctdb_client_context *client,
660                             int destnode, struct timeval timeout,
661                             uint32_t db_id);
662
663 int ctdb_ctrl_reload_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
664                                 struct ctdb_client_context *client,
665                                 int destnode, struct timeval timeout);
666
667 int ctdb_ctrl_ipreallocated(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
668                             struct ctdb_client_context *client,
669                             int destnode, struct timeval timeout);
670
671 int ctdb_ctrl_get_runstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
672                            struct ctdb_client_context *client,
673                            int destnode, struct timeval timeout,
674                            enum ctdb_runstate *runstate);
675
676 int ctdb_ctrl_db_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
677                         struct ctdb_client_context *client,
678                         int destnode, struct timeval timeout,
679                         uint32_t db_id);
680
681 int ctdb_ctrl_get_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
682                              struct ctdb_client_context *client,
683                              int destnode, struct timeval timeout,
684                              struct ctdb_node_map **nodemap);
685
686 int ctdb_ctrl_db_freeze(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
687                         struct ctdb_client_context *client,
688                         int destnode, struct timeval timeout, uint32_t db_id);
689
690 int ctdb_ctrl_db_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
691                       struct ctdb_client_context *client,
692                       int destnode, struct timeval timeout, uint32_t db_id);
693
694 int ctdb_ctrl_db_transaction_start(TALLOC_CTX *mem_ctx,
695                                    struct tevent_context *ev,
696                                    struct ctdb_client_context *client,
697                                    int destnode, struct timeval timeout,
698                                    struct ctdb_transdb *transdb);
699
700 int ctdb_ctrl_db_transaction_commit(TALLOC_CTX *mem_ctx,
701                                     struct tevent_context *ev,
702                                     struct ctdb_client_context *client,
703                                     int destnode, struct timeval timeout,
704                                     struct ctdb_transdb *transdb);
705
706 int ctdb_ctrl_db_transaction_cancel(TALLOC_CTX *mem_ctx,
707                                     struct tevent_context *ev,
708                                     struct ctdb_client_context *client,
709                                     int destnode, struct timeval timeout,
710                                     uint32_t db_id);
711
712 /* from client/client_db.c */
713
714 struct tevent_req *ctdb_attach_send(TALLOC_CTX *mem_ctx,
715                                     struct tevent_context *ev,
716                                     struct ctdb_client_context *client,
717                                     struct timeval timeout,
718                                     const char *db_name, uint8_t db_flags);
719
720 bool ctdb_attach_recv(struct tevent_req *req, int *perr,
721                       struct ctdb_db_context **out);
722
723 int ctdb_attach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
724                 struct ctdb_client_context *client,
725                 struct timeval timeout,
726                 const char *db_name, uint8_t db_flags,
727                 struct ctdb_db_context **out);
728
729 int ctdb_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
730                 struct ctdb_client_context *client,
731                 struct timeval timeout, uint32_t db_id);
732
733 uint32_t ctdb_db_id(struct ctdb_db_context *db);
734
735 int ctdb_db_traverse(struct ctdb_db_context *db, bool readonly,
736                      bool extract_header,
737                      ctdb_rec_parser_func_t parser, void *private_data);
738
739 struct tevent_req *ctdb_fetch_lock_send(TALLOC_CTX *mem_ctx,
740                                         struct tevent_context *ev,
741                                         struct ctdb_client_context *client,
742                                         struct ctdb_db_context *db,
743                                         TDB_DATA key, bool readonly);
744
745 struct ctdb_record_handle *ctdb_fetch_lock_recv(struct tevent_req *req,
746                                                 struct ctdb_ltdb_header *header,
747                                                 TALLOC_CTX *mem_ctx,
748                                                 TDB_DATA *data, int *perr);
749
750 int ctdb_fetch_lock(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
751                     struct ctdb_client_context *client,
752                     struct ctdb_db_context *db, TDB_DATA key, bool readonly,
753                     struct ctdb_record_handle **out,
754                     struct ctdb_ltdb_header *header, TDB_DATA *data);
755
756 int ctdb_store_record(struct ctdb_record_handle *h, TDB_DATA data);
757
758 int ctdb_delete_record(struct ctdb_record_handle *h);
759
760 struct tevent_req *ctdb_g_lock_lock_send(TALLOC_CTX *mem_ctx,
761                                          struct tevent_context *ev,
762                                          struct ctdb_client_context *client,
763                                          struct ctdb_db_context *db,
764                                          const char *keyname,
765                                          struct ctdb_server_id *sid,
766                                          bool readonly);
767
768 bool ctdb_g_lock_lock_recv(struct tevent_req *req, int *perr);
769
770 struct tevent_req *ctdb_g_lock_unlock_send(TALLOC_CTX *mem_ctx,
771                                            struct tevent_context *ev,
772                                            struct ctdb_client_context *client,
773                                            struct ctdb_db_context *db,
774                                            const char *keyname,
775                                            struct ctdb_server_id sid);
776
777 bool ctdb_g_lock_unlock_recv(struct tevent_req *req, int *perr);
778
779 struct tevent_req *ctdb_transaction_start_send(TALLOC_CTX *mem_ctx,
780                                                struct tevent_context *ev,
781                                                struct ctdb_client_context *client,
782                                                struct timeval timeout,
783                                                struct ctdb_db_context *db,
784                                                bool readonly);
785
786 struct ctdb_transaction_handle *ctdb_transaction_start_recv(
787                                         struct tevent_req *req,
788                                         int *perr);
789
790 int ctdb_transaction_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
791                            struct ctdb_client_context *client,
792                            struct timeval timeout,
793                            struct ctdb_db_context *db, bool readonly,
794                            struct ctdb_transaction_handle **out);
795
796 int ctdb_transaction_fetch_record(struct ctdb_transaction_handle *h,
797                                   TDB_DATA key,
798                                   TALLOC_CTX *mem_ctx, TDB_DATA *data);
799
800 int ctdb_transaction_store_record(struct ctdb_transaction_handle *h,
801                                   TDB_DATA key, TDB_DATA data);
802
803 int ctdb_transaction_delete_record(struct ctdb_transaction_handle *h,
804                                    TDB_DATA key);
805
806 struct tevent_req *ctdb_transaction_commit_send(
807                                         TALLOC_CTX *mem_ctx,
808                                         struct tevent_context *ev,
809                                         struct ctdb_transaction_handle *h);
810
811 bool ctdb_transaction_commit_recv(struct tevent_req *req, int *perr);
812
813 int ctdb_transaction_commit(struct ctdb_transaction_handle *h);
814
815 int ctdb_transaction_cancel(struct ctdb_transaction_handle *h);
816
817 /* from client/client_util.c */
818
819 int list_of_nodes(struct ctdb_node_map *nodemap,
820                   uint32_t flags_mask, uint32_t exclude_pnn,
821                   TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
822
823 int list_of_active_nodes(struct ctdb_node_map *nodemap, uint32_t exclude_pnn,
824                          TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
825
826 int list_of_connected_nodes(struct ctdb_node_map *nodemap,
827                             uint32_t exclude_pnn,
828                             TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
829
830 int ctdb_ctrl_modflags(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
831                        struct ctdb_client_context *client,
832                        uint32_t destnode, struct timeval timeout,
833                        uint32_t set, uint32_t clear);
834
835 bool ctdb_server_id_equal(struct ctdb_server_id *sid1,
836                           struct ctdb_server_id *sid2);
837
838 int ctdb_server_id_exists(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
839                           struct ctdb_client_context *client,
840                           struct ctdb_server_id *sid, bool *exists);
841
842 #endif /* __CTDB_CLIENT_H__ */