f5b8601aa2caadfc35143658ba01b5182710a92b
[sharpe/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                        uint32_t *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                        uint32_t 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_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
340                    struct ctdb_client_context *client,
341                    int destnode, struct timeval timeout,
342                    int priority);
343
344 int ctdb_ctrl_get_pnn(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
345                       struct ctdb_client_context *client,
346                       int destnode, struct timeval timeout,
347                       uint32_t *pnn);
348
349 int ctdb_ctrl_shutdown(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
350                        struct ctdb_client_context *client,
351                        int destnode, struct timeval timeout);
352
353 int ctdb_ctrl_get_monmode(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
354                           struct ctdb_client_context *client,
355                           int destnode, struct timeval timeout,
356                           int *mon_mode);
357
358 int ctdb_ctrl_tcp_add(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_tcp_remove(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
364                          struct ctdb_client_context *client,
365                          int destnode, struct timeval timeout,
366                          struct ctdb_connection *conn);
367
368 int ctdb_ctrl_set_tunable(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
369                           struct ctdb_client_context *client,
370                           int destnode, struct timeval timeout,
371                           struct ctdb_tunable *tunable);
372
373 int ctdb_ctrl_get_tunable(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
374                           struct ctdb_client_context *client,
375                           int destnode, struct timeval timeout,
376                           const char *var, uint32_t *value);
377
378 int ctdb_ctrl_list_tunables(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
379                             struct ctdb_client_context *client,
380                             int destnode, struct timeval timeout,
381                             struct ctdb_var_list **var_list);
382
383 int ctdb_ctrl_modify_flags(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
384                            struct ctdb_client_context *client,
385                            int destnode, struct timeval timeout,
386                            uint32_t pnn, uint32_t old_flags,
387                            uint32_t new_flags);
388
389 int ctdb_ctrl_get_all_tunables(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
390                                struct ctdb_client_context *client,
391                                int destnode, struct timeval timeout,
392                                struct ctdb_tunable_list **tun_list);
393
394 int ctdb_ctrl_get_tcp_tickle_list(TALLOC_CTX *mem_ctx,
395                                   struct tevent_context *ev,
396                                   struct ctdb_client_context *client,
397                                   int destnode, struct timeval timeout,
398                                   ctdb_sock_addr *addr,
399                                   struct ctdb_tickle_list **tickles);
400
401 int ctdb_ctrl_set_tcp_tickle_list(TALLOC_CTX *mem_ctx,
402                                   struct tevent_context *ev,
403                                   struct ctdb_client_context *client,
404                                   int destnode, struct timeval timeout,
405                                   struct ctdb_tickle_list *tickles);
406
407 int ctdb_ctrl_db_attach_persistent(TALLOC_CTX *mem_ctx,
408                                    struct tevent_context *ev,
409                                    struct ctdb_client_context *client,
410                                    int destnode, struct timeval timeout,
411                                    const char *db_name, int tdb_flags,
412                                    uint32_t *db_id);
413
414 int ctdb_ctrl_send_gratuitous_arp(TALLOC_CTX *mem_ctx,
415                                   struct tevent_context *ev,
416                                   struct ctdb_client_context *client,
417                                   int destnode, struct timeval timeout,
418                                   struct ctdb_addr_info *addr_info);
419
420 int ctdb_ctrl_transaction_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
421                                 struct ctdb_client_context *client,
422                                 int destnode, struct timeval timeout,
423                                 uint32_t tid);
424
425 int ctdb_ctrl_transaction_commit(TALLOC_CTX *mem_ctx,
426                                  struct tevent_context *ev,
427                                  struct ctdb_client_context *client,
428                                  int destnode, struct timeval timeout,
429                                  uint32_t tid);
430
431 int ctdb_ctrl_wipe_database(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
432                             struct ctdb_client_context *client,
433                             int destnode, struct timeval timeout,
434                             uint32_t db_id, uint32_t tid);
435
436 int ctdb_ctrl_uptime(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
437                      struct ctdb_client_context *client,
438                      int destnode, struct timeval timeout,
439                      struct ctdb_uptime **uptime);
440
441 int ctdb_ctrl_start_recovery(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_end_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
446                            struct ctdb_client_context *client,
447                            int destnode, struct timeval timeout);
448
449 int ctdb_ctrl_reload_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
450                                 struct ctdb_client_context *client,
451                                 int destnode, struct timeval timeout);
452
453 int ctdb_ctrl_enable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
454                              struct ctdb_client_context *client,
455                              int destnode, struct timeval timeout);
456
457 int ctdb_ctrl_disable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
458                               struct ctdb_client_context *client,
459                               int destnode, struct timeval timeout);
460
461 int ctdb_ctrl_add_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
462                             struct ctdb_client_context *client,
463                             int destnode, struct timeval timeout,
464                             struct ctdb_addr_info *addr_info);
465
466 int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
467                             struct ctdb_client_context *client,
468                             int destnode, struct timeval timeout,
469                             struct ctdb_addr_info *addr_info);
470
471 int ctdb_ctrl_run_eventscripts(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
472                                struct ctdb_client_context *client,
473                                int destnode, struct timeval timeout,
474                                const char *event);
475
476 int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
477                                struct ctdb_client_context *client,
478                                int destnode, struct timeval timeout,
479                                uint32_t *caps);
480
481 int ctdb_ctrl_release_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
482                          struct ctdb_client_context *client,
483                          int destnode, struct timeval timeout,
484                          struct ctdb_public_ip *pubip);
485
486 int ctdb_ctrl_takeover_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
487                           struct ctdb_client_context *client,
488                           int destnode, struct timeval timeout,
489                           struct ctdb_public_ip *pubip);
490
491 int ctdb_ctrl_get_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
492                              struct ctdb_client_context *client,
493                              int destnode, struct timeval timeout,
494                              struct ctdb_public_ip_list **pubip_list);
495
496 int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
497                           struct ctdb_client_context *client,
498                           int destnode, struct timeval timeout,
499                           struct ctdb_node_map **nodemap);
500
501 int ctdb_ctrl_get_event_script_status(TALLOC_CTX *mem_ctx,
502                                       struct tevent_context *ev,
503                                       struct ctdb_client_context *client,
504                                       int destnode, struct timeval timeout,
505                                       enum ctdb_event event,
506                                       struct ctdb_script_list **slist);
507
508 int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
509                             struct ctdb_client_context *client,
510                             int destnode, struct timeval timeout,
511                             struct ctdb_traverse_start *traverse);
512
513 int ctdb_ctrl_get_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
514                                struct ctdb_client_context *client,
515                                int destnode, struct timeval timeout,
516                                const char **reclock_file);
517
518 int ctdb_ctrl_stop_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
519                         struct ctdb_client_context *client,
520                         int destnode, struct timeval timeout);
521
522 int ctdb_ctrl_continue_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
523                             struct ctdb_client_context *client,
524                             int destnode, struct timeval timeout);
525
526 int ctdb_ctrl_set_lmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
527                               struct ctdb_client_context *client,
528                               int destnode, struct timeval timeout,
529                               uint32_t lmaster_role);
530
531 int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
532                                 struct ctdb_client_context *client,
533                                 int destnode, struct timeval timeout,
534                                 uint32_t recmaster_role);
535
536 int ctdb_ctrl_enable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
537                             struct ctdb_client_context *client,
538                             int destnode, struct timeval timeout,
539                             const char *script);
540
541 int ctdb_ctrl_disable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
542                              struct ctdb_client_context *client,
543                              int destnode, struct timeval timeout,
544                              const char *script);
545
546 int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
547                             struct ctdb_client_context *client,
548                             int destnode, struct timeval timeout,
549                             struct ctdb_ban_state *ban_state);
550
551 int ctdb_ctrl_get_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
552                             struct ctdb_client_context *client,
553                             int destnode, struct timeval timeout,
554                             struct ctdb_ban_state **ban_state);
555
556 int ctdb_ctrl_set_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
557                               struct ctdb_client_context *client,
558                               int destnode, struct timeval timeout,
559                               uint32_t db_id, int priority);
560
561 int ctdb_ctrl_get_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
562                               struct ctdb_client_context *client,
563                               int destnode, struct timeval timeout,
564                               uint32_t db_id, uint32_t *priority);
565
566 int ctdb_ctrl_transaction_cancel(TALLOC_CTX *mem_ctx,
567                                  struct tevent_context *ev,
568                                  struct ctdb_client_context *client,
569                                  int destnode, struct timeval timeout,
570                                  uint32_t tid);
571
572 int ctdb_ctrl_register_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
573                               struct ctdb_client_context *client,
574                               int destnode, struct timeval timeout,
575                               struct ctdb_notify_data *notify);
576
577 int ctdb_ctrl_deregister_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
578                                 struct ctdb_client_context *client,
579                                 int destnode, struct timeval timeout,
580                                 uint64_t srvid);
581
582 int ctdb_ctrl_trans3_commit(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
583                             struct ctdb_client_context *client,
584                             int destnode, struct timeval timeout,
585                             struct ctdb_rec_buffer *recbuf);
586
587 int ctdb_ctrl_get_db_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
588                             struct ctdb_client_context *client,
589                             int destnode, struct timeval timeout,
590                             uint32_t db_id, uint64_t *seqnum);
591
592 int ctdb_ctrl_db_set_healthy(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
593                              struct ctdb_client_context *client,
594                              int destnode, struct timeval timeout,
595                              uint32_t db_id);
596
597 int ctdb_ctrl_db_get_health(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
598                             struct ctdb_client_context *client,
599                             int destnode, struct timeval timeout,
600                             uint32_t db_id, const char **reason);
601
602 int ctdb_ctrl_get_public_ip_info(TALLOC_CTX *mem_ctx,
603                                  struct tevent_context *ev,
604                                  struct ctdb_client_context *client,
605                                  int destnode, struct timeval timeout,
606                                  ctdb_sock_addr *addr,
607                                  struct ctdb_public_ip_info **ipinfo);
608
609 int ctdb_ctrl_get_ifaces(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
610                          struct ctdb_client_context *client,
611                          int destnode, struct timeval timeout,
612                          struct ctdb_iface_list **iface_list);
613
614 int ctdb_ctrl_set_iface_link_state(TALLOC_CTX *mem_ctx,
615                                    struct tevent_context *ev,
616                                    struct ctdb_client_context *client,
617                                    int destnode, struct timeval timeout,
618                                    struct ctdb_iface *iface);
619
620 int ctdb_ctrl_tcp_add_delayed_update(TALLOC_CTX *mem_ctx,
621                                      struct tevent_context *ev,
622                                      struct ctdb_client_context *client,
623                                      int destnode, struct timeval timeout,
624                                      struct ctdb_connection *conn);
625
626 int ctdb_ctrl_get_stat_history(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
627                                struct ctdb_client_context *client,
628                                int destnode, struct timeval timeout,
629                                struct ctdb_statistics_list **stats_list);
630
631 int ctdb_ctrl_schedule_for_deletion(TALLOC_CTX *mem_ctx,
632                                     struct tevent_context *ev,
633                                     struct ctdb_client_context *client,
634                                     int destnode, struct timeval timeout,
635                                     struct ctdb_key_data *key);
636
637 int ctdb_ctrl_set_db_readonly(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
638                               struct ctdb_client_context *client,
639                               int destnode, struct timeval timeout,
640                               uint32_t db_id);
641
642 int ctdb_ctrl_check_srvids(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
643                            struct ctdb_client_context *client,
644                            int destnode, struct timeval timeout,
645                            uint64_t *srvid, int count, uint8_t **result);
646
647 int ctdb_ctrl_traverse_start_ext(TALLOC_CTX *mem_ctx,
648                                  struct tevent_context *ev,
649                                  struct ctdb_client_context *client,
650                                  int destnode, struct timeval timeout,
651                                  struct ctdb_traverse_start_ext *traverse);
652
653 int ctdb_ctrl_get_db_statistics(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
654                                 struct ctdb_client_context *client,
655                                 int destnode, struct timeval timeout,
656                                 uint32_t db_id,
657                                 struct ctdb_db_statistics **dbstats);
658
659 int ctdb_ctrl_set_db_sticky(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
660                             struct ctdb_client_context *client,
661                             int destnode, struct timeval timeout,
662                             uint32_t db_id);
663
664 int ctdb_ctrl_reload_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
665                                 struct ctdb_client_context *client,
666                                 int destnode, struct timeval timeout);
667
668 int ctdb_ctrl_ipreallocated(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
669                             struct ctdb_client_context *client,
670                             int destnode, struct timeval timeout);
671
672 int ctdb_ctrl_get_runstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
673                            struct ctdb_client_context *client,
674                            int destnode, struct timeval timeout,
675                            enum ctdb_runstate *runstate);
676
677 int ctdb_ctrl_db_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
678                         struct ctdb_client_context *client,
679                         int destnode, struct timeval timeout,
680                         uint32_t db_id);
681
682 int ctdb_ctrl_get_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
683                              struct ctdb_client_context *client,
684                              int destnode, struct timeval timeout,
685                              struct ctdb_node_map **nodemap);
686
687 int ctdb_ctrl_db_freeze(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
688                         struct ctdb_client_context *client,
689                         int destnode, struct timeval timeout, uint32_t db_id);
690
691 int ctdb_ctrl_db_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
692                       struct ctdb_client_context *client,
693                       int destnode, struct timeval timeout, uint32_t db_id);
694
695 int ctdb_ctrl_db_transaction_start(TALLOC_CTX *mem_ctx,
696                                    struct tevent_context *ev,
697                                    struct ctdb_client_context *client,
698                                    int destnode, struct timeval timeout,
699                                    struct ctdb_transdb *transdb);
700
701 int ctdb_ctrl_db_transaction_commit(TALLOC_CTX *mem_ctx,
702                                     struct tevent_context *ev,
703                                     struct ctdb_client_context *client,
704                                     int destnode, struct timeval timeout,
705                                     struct ctdb_transdb *transdb);
706
707 int ctdb_ctrl_db_transaction_cancel(TALLOC_CTX *mem_ctx,
708                                     struct tevent_context *ev,
709                                     struct ctdb_client_context *client,
710                                     int destnode, struct timeval timeout,
711                                     uint32_t db_id);
712
713 int ctdb_ctrl_db_pull(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
714                       struct ctdb_client_context *client,
715                       int destnode, struct timeval timeout,
716                       struct ctdb_pulldb_ext *pulldb, uint32_t *num_records);
717
718 int ctdb_ctrl_db_push_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
719                             struct ctdb_client_context *client,
720                             int destnode, struct timeval timeout,
721                             struct ctdb_pulldb_ext *pulldb);
722
723 int ctdb_ctrl_db_push_confirm(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
724                               struct ctdb_client_context *client,
725                               int destnode, struct timeval timeout,
726                               uint32_t db_id, uint32_t *num_records);
727
728 /* from client/client_db.c */
729
730 struct tevent_req *ctdb_attach_send(TALLOC_CTX *mem_ctx,
731                                     struct tevent_context *ev,
732                                     struct ctdb_client_context *client,
733                                     struct timeval timeout,
734                                     const char *db_name, uint8_t db_flags);
735
736 bool ctdb_attach_recv(struct tevent_req *req, int *perr,
737                       struct ctdb_db_context **out);
738
739 int ctdb_attach(struct tevent_context *ev,
740                 struct ctdb_client_context *client,
741                 struct timeval timeout,
742                 const char *db_name, uint8_t db_flags,
743                 struct ctdb_db_context **out);
744
745 int ctdb_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
746                 struct ctdb_client_context *client,
747                 struct timeval timeout, uint32_t db_id);
748
749 uint32_t ctdb_db_id(struct ctdb_db_context *db);
750
751 int ctdb_db_traverse(struct ctdb_db_context *db, bool readonly,
752                      bool extract_header,
753                      ctdb_rec_parser_func_t parser, void *private_data);
754
755 struct tevent_req *ctdb_fetch_lock_send(TALLOC_CTX *mem_ctx,
756                                         struct tevent_context *ev,
757                                         struct ctdb_client_context *client,
758                                         struct ctdb_db_context *db,
759                                         TDB_DATA key, bool readonly);
760
761 struct ctdb_record_handle *ctdb_fetch_lock_recv(struct tevent_req *req,
762                                                 struct ctdb_ltdb_header *header,
763                                                 TALLOC_CTX *mem_ctx,
764                                                 TDB_DATA *data, int *perr);
765
766 int ctdb_fetch_lock(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
767                     struct ctdb_client_context *client,
768                     struct ctdb_db_context *db, TDB_DATA key, bool readonly,
769                     struct ctdb_record_handle **out,
770                     struct ctdb_ltdb_header *header, TDB_DATA *data);
771
772 int ctdb_store_record(struct ctdb_record_handle *h, TDB_DATA data);
773
774 struct tevent_req *ctdb_delete_record_send(TALLOC_CTX *mem_ctx,
775                                            struct tevent_context *ev,
776                                            struct ctdb_record_handle *h);
777
778 bool ctdb_delete_record_recv(struct tevent_req *req, int *perr);
779
780 int ctdb_delete_record(struct ctdb_record_handle *h);
781
782 struct tevent_req *ctdb_g_lock_lock_send(TALLOC_CTX *mem_ctx,
783                                          struct tevent_context *ev,
784                                          struct ctdb_client_context *client,
785                                          struct ctdb_db_context *db,
786                                          const char *keyname,
787                                          struct ctdb_server_id *sid,
788                                          bool readonly);
789
790 bool ctdb_g_lock_lock_recv(struct tevent_req *req, int *perr);
791
792 struct tevent_req *ctdb_g_lock_unlock_send(TALLOC_CTX *mem_ctx,
793                                            struct tevent_context *ev,
794                                            struct ctdb_client_context *client,
795                                            struct ctdb_db_context *db,
796                                            const char *keyname,
797                                            struct ctdb_server_id sid);
798
799 bool ctdb_g_lock_unlock_recv(struct tevent_req *req, int *perr);
800
801 struct tevent_req *ctdb_transaction_start_send(TALLOC_CTX *mem_ctx,
802                                                struct tevent_context *ev,
803                                                struct ctdb_client_context *client,
804                                                struct timeval timeout,
805                                                struct ctdb_db_context *db,
806                                                bool readonly);
807
808 struct ctdb_transaction_handle *ctdb_transaction_start_recv(
809                                         struct tevent_req *req,
810                                         int *perr);
811
812 int ctdb_transaction_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
813                            struct ctdb_client_context *client,
814                            struct timeval timeout,
815                            struct ctdb_db_context *db, bool readonly,
816                            struct ctdb_transaction_handle **out);
817
818 int ctdb_transaction_fetch_record(struct ctdb_transaction_handle *h,
819                                   TDB_DATA key,
820                                   TALLOC_CTX *mem_ctx, TDB_DATA *data);
821
822 int ctdb_transaction_store_record(struct ctdb_transaction_handle *h,
823                                   TDB_DATA key, TDB_DATA data);
824
825 int ctdb_transaction_delete_record(struct ctdb_transaction_handle *h,
826                                    TDB_DATA key);
827
828 struct tevent_req *ctdb_transaction_commit_send(
829                                         TALLOC_CTX *mem_ctx,
830                                         struct tevent_context *ev,
831                                         struct timeval timeout,
832                                         struct ctdb_transaction_handle *h);
833
834 bool ctdb_transaction_commit_recv(struct tevent_req *req, int *perr);
835
836 int ctdb_transaction_commit(struct ctdb_transaction_handle *h);
837
838 int ctdb_transaction_cancel(struct ctdb_transaction_handle *h);
839
840 /* from client/client_util.c */
841
842 int list_of_nodes(struct ctdb_node_map *nodemap,
843                   uint32_t flags_mask, uint32_t exclude_pnn,
844                   TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
845
846 int list_of_active_nodes(struct ctdb_node_map *nodemap, uint32_t exclude_pnn,
847                          TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
848
849 int list_of_connected_nodes(struct ctdb_node_map *nodemap,
850                             uint32_t exclude_pnn,
851                             TALLOC_CTX *mem_ctx, uint32_t **pnn_list);
852
853 int ctdb_ctrl_modflags(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
854                        struct ctdb_client_context *client,
855                        uint32_t destnode, struct timeval timeout,
856                        uint32_t set, uint32_t clear);
857
858 struct ctdb_server_id ctdb_client_get_server_id(
859                                 struct ctdb_client_context *client,
860                                 uint32_t task_id);
861
862 bool ctdb_server_id_equal(struct ctdb_server_id *sid1,
863                           struct ctdb_server_id *sid2);
864
865 int ctdb_server_id_exists(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
866                           struct ctdb_client_context *client,
867                           struct ctdb_server_id *sid, bool *exists);
868
869 #endif /* __CTDB_CLIENT_H__ */