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