lmdb: iterate_range implementation
[sfrench/samba-autobuild/.git] / ctdb / client / client_control_sync.c
index 0050b745d5ff66bbe9a678da75359c026c5e5d33..e56a2b2f18d506f2db5782db4f7c821f916c696f 100644 (file)
 #include <tevent.h>
 #include <tdb.h>
 
+#include "common/logging.h"
+
 #include "lib/util/debug.h"
-#include "ctdb_logging.h"
 
 #include "protocol/protocol.h"
 #include "protocol/protocol_api.h"
 #include "client/client_private.h"
 #include "client/client.h"
+#include "client/client_sync.h"
 
 int ctdb_ctrl_process_exists(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                             struct ctdb_client_context *client,
@@ -182,7 +184,7 @@ int ctdb_ctrl_getvnnmap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 int ctdb_ctrl_getdebug(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                       struct ctdb_client_context *client,
                       int destnode, struct timeval timeout,
-                      uint32_t *loglevel)
+                      int *loglevel)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
@@ -211,7 +213,7 @@ int ctdb_ctrl_getdebug(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 int ctdb_ctrl_setdebug(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                       struct ctdb_client_context *client,
                       int destnode, struct timeval timeout,
-                      uint32_t loglevel)
+                      int loglevel)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
@@ -413,14 +415,13 @@ int ctdb_ctrl_statistics_reset(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 int ctdb_ctrl_db_attach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                        struct ctdb_client_context *client,
                        int destnode, struct timeval timeout,
-                       const char *db_name, uint32_t tdb_flags,
-                       uint32_t *db_id)
+                       const char *db_name, uint32_t *db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_db_attach(&request, db_name, tdb_flags);
+       ctdb_req_control_db_attach(&request, db_name);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
@@ -759,35 +760,6 @@ int ctdb_ctrl_freeze(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
        return 0;
 }
 
-int ctdb_ctrl_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                  struct ctdb_client_context *client,
-                  int destnode, struct timeval timeout,
-                  int priority)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_thaw(&request, priority);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control THAW failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_thaw(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control THAW failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
 int ctdb_ctrl_get_pnn(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                      struct ctdb_client_context *client,
                      int destnode, struct timeval timeout,
@@ -845,35 +817,6 @@ int ctdb_ctrl_shutdown(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
        return 0;
 }
 
-int ctdb_ctrl_get_monmode(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                         struct ctdb_client_context *client,
-                         int destnode, struct timeval timeout,
-                         int *mon_mode)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_get_monmode(&request);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control GET_MONMODE failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_get_monmode(reply, mon_mode);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control GET_MONMODE failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
 int ctdb_ctrl_tcp_add(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                      struct ctdb_client_context *client,
                      int destnode, struct timeval timeout,
@@ -1083,35 +1026,6 @@ int ctdb_ctrl_get_all_tunables(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
        return 0;
 }
 
-int ctdb_ctrl_kill_tcp(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                      struct ctdb_client_context *client,
-                      int destnode, struct timeval timeout,
-                      struct ctdb_connection *conn)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_kill_tcp(&request, conn);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control KILL_TCP failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_kill_tcp(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control KILL_TCP failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
 int ctdb_ctrl_get_tcp_tickle_list(TALLOC_CTX *mem_ctx,
                                  struct tevent_context *ev,
                                  struct ctdb_client_context *client,
@@ -1173,1798 +1087,1632 @@ int ctdb_ctrl_set_tcp_tickle_list(TALLOC_CTX *mem_ctx,
        return 0;
 }
 
-int ctdb_ctrl_register_server_id(TALLOC_CTX *mem_ctx,
-                                struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                struct ctdb_client_id *cid)
+int ctdb_ctrl_db_attach_persistent(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct ctdb_client_context *client,
+                                  int destnode, struct timeval timeout,
+                                  const char *db_name, uint32_t *db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_register_server_id(&request, cid);
+       ctdb_req_control_db_attach_persistent(&request, db_name);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control REGISTER_SERVER_ID failed to node %u, ret=%d\n",
+                     ("Control DB_ATTACH_PERSISTENT failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_register_server_id(reply);
+       ret = ctdb_reply_control_db_attach_persistent(reply, db_id);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control REGISTER_SERVER_ID failed, ret=%d\n", ret));
+                     ("Control DB_ATTACH_PERSISTENT failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_unregister_server_id(TALLOC_CTX *mem_ctx,
-                                  struct tevent_context *ev,
-                                  struct ctdb_client_context *client,
-                                  int destnode, struct timeval timeout,
-                                  struct ctdb_client_id *cid)
+int ctdb_ctrl_send_gratuitous_arp(TALLOC_CTX *mem_ctx,
+                                 struct tevent_context *ev,
+                                 struct ctdb_client_context *client,
+                                 int destnode, struct timeval timeout,
+                                 struct ctdb_addr_info *addr_info)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_unregister_server_id(&request, cid);
+       ctdb_req_control_send_gratuitous_arp(&request, addr_info);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control UNREGISTER_SERVER_ID failed to node %u, ret=%d\n",
+                     ("Control SEND_GRATUITOUS_ARP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_unregister_server_id(reply);
+       ret = ctdb_reply_control_send_gratuitous_arp(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control UNREGISTER_SERVER_ID failed, ret=%d\n", ret));
+                     ("Control SEND_GRATUITOUS_ARP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_check_server_id(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout,
-                             struct ctdb_client_id *cid)
+int ctdb_ctrl_wipe_database(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           uint32_t db_id, uint32_t tid)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
+       struct ctdb_transdb transdb;
        int ret;
 
-       ctdb_req_control_check_server_id(&request, cid);
+       transdb.db_id = db_id;
+       transdb.tid = tid;
+
+       ctdb_req_control_wipe_database(&request, &transdb);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CHECK_SERVER_ID failed to node %u, ret=%d\n",
+                     ("Control WIPE_DATABASE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_check_server_id(reply);
+       ret = ctdb_reply_control_wipe_database(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CHECK_SERVER_ID failed, ret=%d\n", ret));
+                     ("Control WIPE_DATABASE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_server_id_list(TALLOC_CTX *mem_ctx,
-                                struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                struct ctdb_client_id_map **cid_map)
+int ctdb_ctrl_uptime(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                    struct ctdb_client_context *client,
+                    int destnode, struct timeval timeout,
+                    struct ctdb_uptime **uptime)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_server_id_list(&request);
+       ctdb_req_control_uptime(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_SERVER_ID_LIST failed to node %u, ret=%d\n",
+                     ("Control UPTIME failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_server_id_list(reply, mem_ctx, cid_map);
+       ret = ctdb_reply_control_uptime(reply, mem_ctx, uptime);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_SERVER_ID_LIST failed, ret=%d\n", ret));
+                     ("Control UPTIME failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_db_attach_persistent(TALLOC_CTX *mem_ctx,
-                                  struct tevent_context *ev,
-                                  struct ctdb_client_context *client,
-                                  int destnode, struct timeval timeout,
-                                  const char *db_name, int tdb_flags,
-                                  uint32_t *db_id)
+int ctdb_ctrl_start_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                            struct ctdb_client_context *client,
+                            int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_db_attach_persistent(&request, db_name, tdb_flags);
+       ctdb_req_control_start_recovery(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_ATTACH_PERSISTENT failed to node %u, ret=%d\n",
+                     ("Control START_RECOVERY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_db_attach_persistent(reply, db_id);
+       ret = ctdb_reply_control_start_recovery(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_ATTACH_PERSISTENT failed, ret=%d\n", ret));
+                     ("Control START_RECOVERY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_send_gratuitous_arp(TALLOC_CTX *mem_ctx,
-                                 struct tevent_context *ev,
-                                 struct ctdb_client_context *client,
-                                 int destnode, struct timeval timeout,
-                                 struct ctdb_addr_info *addr_info)
+int ctdb_ctrl_end_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                          struct ctdb_client_context *client,
+                          int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_send_gratuitous_arp(&request, addr_info);
+       ctdb_req_control_end_recovery(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SEND_GRATUITOUS_ARP failed to node %u, ret=%d\n",
+                     ("Control END_RECOVERY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_send_gratuitous_arp(reply);
+       ret = ctdb_reply_control_end_recovery(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SEND_GRATUITOUS_ARP failed, ret=%d\n", ret));
+                     ("Control END_RECOVERY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_transaction_start(TALLOC_CTX *mem_ctx,
-                               struct tevent_context *ev,
+int ctdb_ctrl_reload_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                                struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout,
-                               uint32_t tid)
+                               int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_transaction_start(&request, tid);
+       ctdb_req_control_reload_nodes_file(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_START failed to node %u, ret=%d\n",
+                     ("Control RELOAD_NODES_FILE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_transaction_start(reply);
+       ret = ctdb_reply_control_reload_nodes_file(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_START failed, ret=%d\n", ret));
+                     ("Control RELOAD_NODES_FILE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_transaction_commit(TALLOC_CTX *mem_ctx,
-                                struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                uint32_t tid)
+int ctdb_ctrl_add_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           struct ctdb_addr_info *addr_info)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_transaction_commit(&request, tid);
+       ctdb_req_control_add_public_ip(&request, addr_info);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_COMMIT failed to node %u, ret=%d\n",
+                     ("Control ADD_PUBLIC_IP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_transaction_commit(reply);
+       ret = ctdb_reply_control_add_public_ip(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_COMMIT failed, ret=%d\n", ret));
+                     ("Control ADD_PUBLIC_IP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_wipe_database(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
                            int destnode, struct timeval timeout,
-                           uint32_t db_id, uint32_t tid)
+                           struct ctdb_addr_info *addr_info)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
-       struct ctdb_transdb transdb;
        int ret;
 
-       transdb.db_id = db_id;
-       transdb.tid = tid;
-
-       ctdb_req_control_wipe_database(&request, &transdb);
+       ctdb_req_control_del_public_ip(&request, addr_info);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control WIPE_DATABASE failed to node %u, ret=%d\n",
+                     ("Control DEL_PUBLIC_IP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_wipe_database(reply);
+       ret = ctdb_reply_control_del_public_ip(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control WIPE_DATABASE failed, ret=%d\n", ret));
+                     ("Control DEL_PUBLIC_IP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_uptime(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                    struct ctdb_client_context *client,
-                    int destnode, struct timeval timeout,
-                    struct ctdb_uptime **uptime)
+int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                              struct ctdb_client_context *client,
+                              int destnode, struct timeval timeout,
+                              uint32_t *caps)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_uptime(&request);
+       ctdb_req_control_get_capabilities(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control UPTIME failed to node %u, ret=%d\n",
+                     ("Control GET_CAPABILITIES failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_uptime(reply, mem_ctx, uptime);
+       ret = ctdb_reply_control_get_capabilities(reply, caps);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control UPTIME failed, ret=%d\n", ret));
+                     ("Control GET_CAPABILITIES failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_start_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout)
+int ctdb_ctrl_release_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                        struct ctdb_client_context *client,
+                        int destnode, struct timeval timeout,
+                        struct ctdb_public_ip *pubip)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_start_recovery(&request);
+       ctdb_req_control_release_ip(&request, pubip);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control START_RECOVERY failed to node %u, ret=%d\n",
+                     ("Control RELEASE_IP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_start_recovery(reply);
+       ret = ctdb_reply_control_release_ip(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control START_RECOVERY failed, ret=%d\n", ret));
+                     ("Control RELEASE_IP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_end_recovery(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                          struct ctdb_client_context *client,
-                          int destnode, struct timeval timeout)
+int ctdb_ctrl_takeover_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                         struct ctdb_client_context *client,
+                         int destnode, struct timeval timeout,
+                         struct ctdb_public_ip *pubip)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_end_recovery(&request);
+       ctdb_req_control_takeover_ip(&request, pubip);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control END_RECOVERY failed to node %u, ret=%d\n",
+                     ("Control TAKEOVER_IP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_end_recovery(reply);
+       ret = ctdb_reply_control_takeover_ip(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control END_RECOVERY failed, ret=%d\n", ret));
+                     ("Control TAKEOVER_IP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_reload_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout)
+int ctdb_ctrl_get_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                            struct ctdb_client_context *client,
+                            int destnode, struct timeval timeout,
+                            bool available_only,
+                            struct ctdb_public_ip_list **pubip_list)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_reload_nodes_file(&request);
+       ctdb_req_control_get_public_ips(&request, available_only);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELOAD_NODES_FILE failed to node %u, ret=%d\n",
+                     ("Control GET_PUBLIC_IPS failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_reload_nodes_file(reply);
+       ret = ctdb_reply_control_get_public_ips(reply, mem_ctx, pubip_list);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELOAD_NODES_FILE failed, ret=%d\n", ret));
+                     ("Control GET_PUBLIC_IPS failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_enable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout)
+int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                         struct ctdb_client_context *client,
+                         int destnode, struct timeval timeout,
+                         struct ctdb_node_map **nodemap)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_enable_monitor(&request);
+       ctdb_req_control_get_nodemap(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control ENABLE_MONITOR failed to node %u, ret=%d\n",
+                     ("Control GET_NODEMAP failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_enable_monitor(reply);
+       ret = ctdb_reply_control_get_nodemap(reply, mem_ctx, nodemap);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control ENABLE_MONITOR failed, ret=%d\n", ret));
+                     ("Control GET_NODEMAP failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_disable_monitor(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout)
+int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           struct ctdb_traverse_start *traverse)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_disable_monitor(&request);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control DISABLE_MONITOR failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_disable_monitor(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control DISABLE_MONITOR failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-int ctdb_ctrl_add_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           struct ctdb_addr_info *addr_info)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_add_public_ip(&request, addr_info);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control ADD_PUBLIC_IP failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_add_public_ip(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control ADD_PUBLIC_IP failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           struct ctdb_addr_info *addr_info)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_del_public_ip(&request, addr_info);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control DEL_PUBLIC_IP failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_del_public_ip(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control DEL_PUBLIC_IP failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-int ctdb_ctrl_run_eventscripts(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                              struct ctdb_client_context *client,
-                              int destnode, struct timeval timeout,
-                              const char *event)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_run_eventscripts(&request, event);
+       ctdb_req_control_traverse_kill(&request, traverse);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RUN_EVENTSCRIPTS failed to node %u, ret=%d\n",
+                     ("Control TRAVERSE_KILL failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_run_eventscripts(reply);
+       ret = ctdb_reply_control_traverse_kill(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RUN_EVENTSCRIPTS failed, ret=%d\n", ret));
+                     ("Control TRAVERSE_KILL failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_get_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                               struct ctdb_client_context *client,
                               int destnode, struct timeval timeout,
-                              uint32_t *caps)
+                              const char **reclock_file)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_capabilities(&request);
+       ctdb_req_control_get_reclock_file(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_CAPABILITIES failed to node %u, ret=%d\n",
+                     ("Control GET_RECLOCK_FILE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_capabilities(reply, caps);
+       ret = ctdb_reply_control_get_reclock_file(reply, mem_ctx, reclock_file);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_CAPABILITIES failed, ret=%d\n", ret));
+                     ("Control GET_RECLOCK_FILE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_release_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                        struct ctdb_client_context *client,
-                        int destnode, struct timeval timeout,
-                        struct ctdb_public_ip *pubip)
+int ctdb_ctrl_stop_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                       struct ctdb_client_context *client,
+                       int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_release_ip(&request, pubip);
+       ctdb_req_control_stop_node(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELEASE_IP failed to node %u, ret=%d\n",
+                     ("Control STOP_NODE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_release_ip(reply);
+       ret = ctdb_reply_control_stop_node(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELEASE_IP failed, ret=%d\n", ret));
+                     ("Control STOP_NODE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_takeover_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                         struct ctdb_client_context *client,
-                         int destnode, struct timeval timeout,
-                         struct ctdb_public_ip *pubip)
+int ctdb_ctrl_continue_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_takeover_ip(&request, pubip);
+       ctdb_req_control_continue_node(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TAKEOVER_IP failed to node %u, ret=%d\n",
+                     ("Control CONTINUE_NODE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_takeover_ip(reply);
+       ret = ctdb_reply_control_continue_node(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TAKEOVER_IP failed, ret=%d\n", ret));
+                     ("Control CONTINUE_NODE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout,
-                            struct ctdb_public_ip_list **pubip_list)
+int ctdb_ctrl_set_lmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                             struct ctdb_client_context *client,
+                             int destnode, struct timeval timeout,
+                             uint32_t lmaster_role)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_public_ips(&request);
+       ctdb_req_control_set_lmasterrole(&request, lmaster_role);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_PUBLIC_IPS failed to node %u, ret=%d\n",
+                     ("Control SET_LMASTERROLE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_public_ips(reply, mem_ctx, pubip_list);
+       ret = ctdb_reply_control_set_lmasterrole(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_PUBLIC_IPS failed, ret=%d\n", ret));
+                     ("Control SET_LMASTERROLE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                         struct ctdb_client_context *client,
-                         int destnode, struct timeval timeout,
-                         struct ctdb_node_map **nodemap)
+int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                               struct ctdb_client_context *client,
+                               int destnode, struct timeval timeout,
+                               uint32_t recmaster_role)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_nodemap(&request);
+       ctdb_req_control_set_recmasterrole(&request, recmaster_role);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_NODEMAP failed to node %u, ret=%d\n",
+                     ("Control SET_RECMASTERROLE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_nodemap(reply, mem_ctx, nodemap);
+       ret = ctdb_reply_control_set_recmasterrole(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_NODEMAP failed, ret=%d\n", ret));
+                     ("Control SET_RECMASTERROLE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_event_script_status(TALLOC_CTX *mem_ctx,
-                                     struct tevent_context *ev,
-                                     struct ctdb_client_context *client,
-                                     int destnode, struct timeval timeout,
-                                     enum ctdb_event event,
-                                     struct ctdb_script_list **slist)
+int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           struct ctdb_ban_state *ban_state)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_event_script_status(&request, event);
+       ctdb_req_control_set_ban_state(&request, ban_state);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_EVENT_SCRIPT_STATUS failed to node %u, ret=%d\n",
+                     ("Control SET_BAN_STATE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_event_script_status(reply, mem_ctx, slist);
+       ret = ctdb_reply_control_set_ban_state(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_EVENT_SCRIPT_STATUS failed, ret=%d\n", ret));
+                     ("Control SET_BAN_STATE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_get_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
                            int destnode, struct timeval timeout,
-                           struct ctdb_traverse_start *traverse)
+                           struct ctdb_ban_state **ban_state)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_traverse_kill(&request, traverse);
+       ctdb_req_control_get_ban_state(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRAVERSE_KILL failed to node %u, ret=%d\n",
+                     ("Control GET_BAN_STATE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_traverse_kill(reply);
+       ret = ctdb_reply_control_get_ban_state(reply, mem_ctx, ban_state);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRAVERSE_KILL failed, ret=%d\n", ret));
+                     ("Control GET_BAN_STATE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                              struct ctdb_client_context *client,
-                              int destnode, struct timeval timeout,
-                              const char **reclock_file)
+int ctdb_ctrl_register_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                             struct ctdb_client_context *client,
+                             int destnode, struct timeval timeout,
+                             struct ctdb_notify_data *notify)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_reclock_file(&request);
+       ctdb_req_control_register_notify(&request, notify);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_RECLOCK_FILE failed to node %u, ret=%d\n",
+                     ("Control REGISTER_NOTIFY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_reclock_file(reply, mem_ctx, reclock_file);
+       ret = ctdb_reply_control_register_notify(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_RECLOCK_FILE failed, ret=%d\n", ret));
+                     ("Control REGISTER_NOTIFY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_reclock_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                              struct ctdb_client_context *client,
-                              int destnode, struct timeval timeout,
-                              const char *reclock_file)
+int ctdb_ctrl_deregister_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                               struct ctdb_client_context *client,
+                               int destnode, struct timeval timeout,
+                               uint64_t srvid)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_reclock_file(&request, reclock_file);
+       ctdb_req_control_deregister_notify(&request, srvid);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_RECLOCK_FILE failed to node %u, ret=%d\n",
+                     ("Control DEREGISTER_NOTIFY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_reclock_file(reply);
+       ret = ctdb_reply_control_deregister_notify(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_RECLOCK_FILE failed, ret=%d\n", ret));
+                     ("Control DEREGISTER_NOTIFY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_stop_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                       struct ctdb_client_context *client,
-                       int destnode, struct timeval timeout)
+int ctdb_ctrl_trans3_commit(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           struct ctdb_rec_buffer *recbuf)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_stop_node(&request);
+       ctdb_req_control_trans3_commit(&request, recbuf);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control STOP_NODE failed to node %u, ret=%d\n",
+                     ("Control TRANS3_COMMIT failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_stop_node(reply);
+       ret = ctdb_reply_control_trans3_commit(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control STOP_NODE failed, ret=%d\n", ret));
+                     ("Control TRANS3_COMMIT failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_continue_node(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_get_db_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout)
+                           int destnode, struct timeval timeout,
+                           uint32_t db_id, uint64_t *seqnum)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_continue_node(&request);
+       ctdb_req_control_get_db_seqnum(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CONTINUE_NODE failed to node %u, ret=%d\n",
+                     ("Control GET_DB_SEQNUM failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_continue_node(reply);
+       ret = ctdb_reply_control_get_db_seqnum(reply, seqnum);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CONTINUE_NODE failed, ret=%d\n", ret));
+                     ("Control GET_DB_SEQNUM failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_natgwstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_db_set_healthy(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                             struct ctdb_client_context *client,
                             int destnode, struct timeval timeout,
-                            uint32_t natgw_role)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_set_natgwstate(&request, natgw_role);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control SET_NATGWSTATE failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_set_natgwstate(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control SET_NATGWSTATE failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-int ctdb_ctrl_set_lmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout,
-                             uint32_t lmaster_role)
-{
-       struct ctdb_req_control request;
-       struct ctdb_reply_control *reply;
-       int ret;
-
-       ctdb_req_control_set_lmasterrole(&request, lmaster_role);
-       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
-                                 &request, &reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control SET_LMASTERROLE failed to node %u, ret=%d\n",
-                      destnode, ret));
-               return ret;
-       }
-
-       ret = ctdb_reply_control_set_lmasterrole(reply);
-       if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control SET_LMASTERROLE failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       return 0;
-}
-
-int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout,
-                               uint32_t recmaster_role)
+                            uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_recmasterrole(&request, recmaster_role);
+       ctdb_req_control_db_set_healthy(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_RECMASTERROLE failed to node %u, ret=%d\n",
+                     ("Control DB_SET_HEALTHY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_recmasterrole(reply);
+       ret = ctdb_reply_control_db_set_healthy(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_RECMASTERROLE failed, ret=%d\n", ret));
+                     ("Control DB_SET_HEALTHY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_enable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_db_get_health(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
                            int destnode, struct timeval timeout,
-                           const char *script)
+                           uint32_t db_id, const char **reason)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_enable_script(&request, script);
+       ctdb_req_control_db_get_health(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control ENABLE_SCRIPT failed to node %u, ret=%d\n",
+                     ("Control DB_GET_HEALTH failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_enable_script(reply);
+       ret = ctdb_reply_control_db_get_health(reply, mem_ctx, reason);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control ENABLE_SCRIPT failed, ret=%d\n", ret));
+                     ("Control DB_GET_HEALTH failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_disable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout,
-                            const char *script)
+int ctdb_ctrl_get_public_ip_info(TALLOC_CTX *mem_ctx,
+                                struct tevent_context *ev,
+                                struct ctdb_client_context *client,
+                                int destnode, struct timeval timeout,
+                                ctdb_sock_addr *addr,
+                                struct ctdb_public_ip_info **ipinfo)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_disable_script(&request, script);
+       ctdb_req_control_get_public_ip_info(&request, addr);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DISABLE_SCRIPT failed to node %u, ret=%d\n",
+                     ("Control GET_PUBLIC_IP_INFO failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_disable_script(reply);
+       ret = ctdb_reply_control_get_public_ip_info(reply, mem_ctx, ipinfo);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DISABLE_SCRIPT failed, ret=%d\n", ret));
+                     ("Control GET_PUBLIC_IP_INFO failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           struct ctdb_ban_state *ban_state)
+int ctdb_ctrl_get_ifaces(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                        struct ctdb_client_context *client,
+                        int destnode, struct timeval timeout,
+                        struct ctdb_iface_list **iface_list)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_ban_state(&request, ban_state);
+       ctdb_req_control_get_ifaces(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_BAN_STATE failed to node %u, ret=%d\n",
+                     ("Control GET_IFACES failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_ban_state(reply);
+       ret = ctdb_reply_control_get_ifaces(reply, mem_ctx, iface_list);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_BAN_STATE failed, ret=%d\n", ret));
+                     ("Control GET_IFACES failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           struct ctdb_ban_state **ban_state)
+int ctdb_ctrl_set_iface_link_state(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct ctdb_client_context *client,
+                                  int destnode, struct timeval timeout,
+                                  struct ctdb_iface *iface)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_ban_state(&request);
+       ctdb_req_control_set_iface_link_state(&request, iface);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_BAN_STATE failed to node %u, ret=%d\n",
+                     ("Control SET_IFACE_LINK_STATE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_ban_state(reply, mem_ctx, ban_state);
+       ret = ctdb_reply_control_set_iface_link_state(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_BAN_STATE failed, ret=%d\n", ret));
+                     ("Control SET_IFACE_LINK_STATE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout,
-                             uint32_t db_id, int priority)
+int ctdb_ctrl_tcp_add_delayed_update(TALLOC_CTX *mem_ctx,
+                                    struct tevent_context *ev,
+                                    struct ctdb_client_context *client,
+                                    int destnode, struct timeval timeout,
+                                    struct ctdb_connection *conn)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
-       struct ctdb_db_priority db_prio;
        int ret;
 
-       db_prio.db_id = db_id;
-       db_prio.priority = priority;
-
-       ctdb_req_control_set_db_priority(&request, &db_prio);
+       ctdb_req_control_tcp_add_delayed_update(&request, conn);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_PRIORITY failed to node %u, ret=%d\n",
+                     ("Control TCP_ADD_DELAYED_UPDATE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_db_priority(reply);
+       ret = ctdb_reply_control_tcp_add_delayed_update(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_PRIORITY failed, ret=%d\n", ret));
+                     ("Control TCP_ADD_DELAYED_UPDATE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_db_priority(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout,
-                             uint32_t db_id, uint32_t *priority)
+int ctdb_ctrl_get_stat_history(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                              struct ctdb_client_context *client,
+                              int destnode, struct timeval timeout,
+                              struct ctdb_statistics_list **stats_list)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_db_priority(&request, db_id);
+       ctdb_req_control_get_stat_history(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_PRIORITY failed to node %u, ret=%d\n",
+                     ("Control GET_STAT_HISTORY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_db_priority(reply, priority);
+       ret = ctdb_reply_control_get_stat_history(reply, mem_ctx, stats_list);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_PRIORITY failed, ret=%d\n", ret));
+                     ("Control GET_STAT_HISTORY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_transaction_cancel(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                uint32_t tid)
+int ctdb_ctrl_schedule_for_deletion(TALLOC_CTX *mem_ctx,
+                                   struct tevent_context *ev,
+                                   struct ctdb_client_context *client,
+                                   int destnode, struct timeval timeout,
+                                   struct ctdb_key_data *key)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_transaction_cancel(&request, tid);
+       ctdb_req_control_schedule_for_deletion(&request, key);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_CANCEL failed to node %u, ret=%d\n",
+                     ("Control SCHEDULE_FOR_DELETION failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_transaction_cancel(reply);
+       ret = ctdb_reply_control_schedule_for_deletion(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANSACTION_CANCEL failed, ret=%d\n", ret));
+                     ("Control SCHEDULE_FOR_DELETION failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_register_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_set_db_readonly(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                              struct ctdb_client_context *client,
                              int destnode, struct timeval timeout,
-                             struct ctdb_notify_data *notify)
+                             uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_register_notify(&request, notify);
+       ctdb_req_control_set_db_readonly(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control REGISTER_NOTIFY failed to node %u, ret=%d\n",
+                     ("Control SET_DB_READONY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_register_notify(reply);
+       ret = ctdb_reply_control_set_db_readonly(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control REGISTER_NOTIFY failed, ret=%d\n", ret));
+                     ("Control SET_DB_READONY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
-
-int ctdb_ctrl_deregister_notify(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout,
-                               uint64_t srvid)
+
+int ctdb_ctrl_traverse_start_ext(TALLOC_CTX *mem_ctx,
+                                struct tevent_context *ev,
+                                struct ctdb_client_context *client,
+                                int destnode, struct timeval timeout,
+                                struct ctdb_traverse_start_ext *traverse)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_deregister_notify(&request, srvid);
+       ctdb_req_control_traverse_start_ext(&request, traverse);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DEREGISTER_NOTIFY failed to node %u, ret=%d\n",
+                     ("Control TRAVERSE_START_EXT failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_deregister_notify(reply);
+       ret = ctdb_reply_control_traverse_start_ext(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DEREGISTER_NOTIFY failed, ret=%d\n", ret));
+                     ("Control TRAVERSE_START_EXT failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_trans3_commit(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           struct ctdb_rec_buffer *recbuf)
+int ctdb_ctrl_get_db_statistics(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                               struct ctdb_client_context *client,
+                               int destnode, struct timeval timeout,
+                               uint32_t db_id,
+                               struct ctdb_db_statistics **dbstats)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_trans3_commit(&request, recbuf);
+       ctdb_req_control_get_db_statistics(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANS3_COMMIT failed to node %u, ret=%d\n",
+                     ("Control GET_DB_STATISTICS failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_trans3_commit(reply);
+       ret = ctdb_reply_control_get_db_statistics(reply, mem_ctx, dbstats);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRANS3_COMMIT failed, ret=%d\n", ret));
+                     ("Control GET_DB_STATISTICS failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_db_seqnum(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_set_db_sticky(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
                            int destnode, struct timeval timeout,
-                           uint32_t db_id, uint64_t *seqnum)
+                           uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_db_seqnum(&request, db_id);
+       ctdb_req_control_set_db_sticky(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_SEQNUM failed to node %u, ret=%d\n",
+                     ("Control SET_DB_STICKY failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_db_seqnum(reply, seqnum);
+       ret = ctdb_reply_control_set_db_sticky(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_SEQNUM failed, ret=%d\n", ret));
+                     ("Control SET_DB_STICKY failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_db_set_healthy(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout,
-                            uint32_t db_id)
+int ctdb_ctrl_reload_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                               struct ctdb_client_context *client,
+                               int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_db_set_healthy(&request, db_id);
+       ctdb_req_control_reload_public_ips(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_SET_HEALTHY failed to node %u, ret=%d\n",
+                     ("Control RELOAD_PUBLIC_IPS failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_db_set_healthy(reply);
+       ret = ctdb_reply_control_reload_public_ips(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_SET_HEALTHY failed, ret=%d\n", ret));
+                     ("Control RELOAD_PUBLIC_IPS failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_db_get_health(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+int ctdb_ctrl_ipreallocated(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                            struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           uint32_t db_id, const char **reason)
+                           int destnode, struct timeval timeout)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_db_get_health(&request, db_id);
+       ctdb_req_control_ipreallocated(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_GET_HEALTH failed to node %u, ret=%d\n",
+                     ("Control IPREALLOCATED failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_db_get_health(reply, mem_ctx, reason);
+       ret = ctdb_reply_control_ipreallocated(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_GET_HEALTH failed, ret=%d\n", ret));
+                     ("Control IPREALLOCATED failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_public_ip_info(TALLOC_CTX *mem_ctx,
-                                struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                ctdb_sock_addr *addr,
-                                struct ctdb_public_ip_info **ipinfo)
+int ctdb_ctrl_get_runstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                          struct ctdb_client_context *client,
+                          int destnode, struct timeval timeout,
+                          enum ctdb_runstate *runstate)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_public_ip_info(&request, addr);
+       ctdb_req_control_get_runstate(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_PUBLIC_IP_INFO failed to node %u, ret=%d\n",
+                     ("Control GET_RUNSTATE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_public_ip_info(reply, mem_ctx, ipinfo);
+       ret = ctdb_reply_control_get_runstate(reply, runstate);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_PUBLIC_IP_INFO failed, ret=%d\n", ret));
+                     ("Control GET_RUNSTATE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_ifaces(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                        struct ctdb_client_context *client,
-                        int destnode, struct timeval timeout,
-                        struct ctdb_iface_list **iface_list)
+int ctdb_ctrl_db_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                       struct ctdb_client_context *client,
+                       int destnode, struct timeval timeout,
+                       uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_ifaces(&request);
+       ctdb_req_control_db_detach(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_IFACES failed to node %u, ret=%d\n",
+                     ("Control DB_DETACH failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_ifaces(reply, mem_ctx, iface_list);
+       ret = ctdb_reply_control_db_detach(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_IFACES failed, ret=%d\n", ret));
+                     ("Control DB_DETACH failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_iface_link_state(TALLOC_CTX *mem_ctx,
-                                  struct tevent_context *ev,
-                                  struct ctdb_client_context *client,
-                                  int destnode, struct timeval timeout,
-                                  struct ctdb_iface *iface)
+int ctdb_ctrl_get_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                            struct ctdb_client_context *client,
+                            int destnode, struct timeval timeout,
+                            struct ctdb_node_map **nodemap)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_iface_link_state(&request, iface);
+       ctdb_req_control_get_nodes_file(&request);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_IFACE_LINK_STATE failed to node %u, ret=%d\n",
+                     ("Control GET_NODES_FILE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_iface_link_state(reply);
+       ret = ctdb_reply_control_get_nodes_file(reply, mem_ctx, nodemap);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_IFACE_LINK_STATE failed, ret=%d\n", ret));
+                     ("Control GET_NODES_FILE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_tcp_add_delayed_update(TALLOC_CTX *mem_ctx,
-                                    struct tevent_context *ev,
-                                    struct ctdb_client_context *client,
-                                    int destnode, struct timeval timeout,
-                                    struct ctdb_connection *conn)
+int ctdb_ctrl_db_freeze(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                       struct ctdb_client_context *client,
+                       int destnode, struct timeval timeout, uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_tcp_add_delayed_update(&request, conn);
+       ctdb_req_control_db_freeze(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TCP_ADD_DELAYED_UPDATE failed to node %u, ret=%d\n",
+                     ("Control DB_FREEZE failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_tcp_add_delayed_update(reply);
+       ret = ctdb_reply_control_db_freeze(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TCP_ADD_DELAYED_UDATE failed, ret=%d\n", ret));
+                     ("Control DB_FREEZE failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_stat_history(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                              struct ctdb_client_context *client,
-                              int destnode, struct timeval timeout,
-                              struct ctdb_statistics_list **stats_list)
+int ctdb_ctrl_db_thaw(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                     struct ctdb_client_context *client,
+                     int destnode, struct timeval timeout, uint32_t db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_stat_history(&request);
+       ctdb_req_control_db_thaw(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_STAT_HISTORY failed to node %u, ret=%d\n",
+                     ("Control DB_THAW failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_stat_history(reply, mem_ctx, stats_list);
+       ret = ctdb_reply_control_db_thaw(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_STAT_HISTORY failed, ret=%d\n", ret));
+                     ("Control DB_THAW failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_schedule_for_deletion(TALLOC_CTX *mem_ctx,
-                                   struct tevent_context *ev,
-                                   struct ctdb_client_context *client,
-                                   int destnode, struct timeval timeout,
-                                   struct ctdb_key_data *key)
+int ctdb_ctrl_db_transaction_start(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct ctdb_client_context *client,
+                                  int destnode, struct timeval timeout,
+                                  struct ctdb_transdb *transdb)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_schedule_for_deletion(&request, key);
+       ctdb_req_control_db_transaction_start(&request, transdb);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SCHEDULE_FOR_DELETION failed to node %u, ret=%d\n",
+                     ("Control DB_TRANSACTION_START failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_schedule_for_deletion(reply);
+       ret = ctdb_reply_control_db_transaction_start(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SCHEDULE_FOR_DELETION failed, ret=%d\n", ret));
+                     ("Control DB_TRANSACTION_START failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_db_readonly(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                             struct ctdb_client_context *client,
-                             int destnode, struct timeval timeout,
-                             uint32_t db_id)
+int ctdb_ctrl_db_transaction_commit(TALLOC_CTX *mem_ctx,
+                                   struct tevent_context *ev,
+                                   struct ctdb_client_context *client,
+                                   int destnode, struct timeval timeout,
+                                   struct ctdb_transdb *transdb)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_db_readonly(&request, db_id);
+       ctdb_req_control_db_transaction_commit(&request, transdb);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_READONY failed to node %u, ret=%d\n",
+                     ("Control DB_TRANSACTION_COMMIT failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_db_readonly(reply);
+       ret = ctdb_reply_control_db_transaction_commit(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_READONY failed, ret=%d\n", ret));
+                     ("Control DB_TRANSACTION_COMMIT failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_check_srvids(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                          struct ctdb_client_context *client,
-                          int destnode, struct timeval timeout,
-                          uint64_t *srvid, int count, uint8_t **result)
+int ctdb_ctrl_db_transaction_cancel(TALLOC_CTX *mem_ctx,
+                                   struct tevent_context *ev,
+                                   struct ctdb_client_context *client,
+                                   int destnode, struct timeval timeout,
+                                   uint32_t db_id)
 {
-       struct ctdb_uint64_array srvid_list;
-       struct ctdb_uint8_array *u8_array;
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       srvid_list.num = count;
-       srvid_list.val = srvid;
-
-       ctdb_req_control_check_srvids(&request, &srvid_list);
+       ctdb_req_control_db_transaction_cancel(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CHECK_SRVIDS failed to node %u, ret=%d\n",
+                     ("Control DB_TRANSACTION_CANCEL failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_check_srvids(reply, &request, &u8_array);
+       ret = ctdb_reply_control_db_transaction_cancel(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control CHECK_SRVIDS failed, ret=%d\n", ret));
-               return ret;
-       }
-
-       if (u8_array->num != count) {
-               DEBUG(DEBUG_ERR,
-                     ("Control CHECK_SRVIDS returned invalid data %d != %d\n",
-                      u8_array->num, count));
+                     ("Control DB_TRANSACTION_CANCEL failed, ret=%d\n", ret));
                return ret;
        }
 
-       *result = talloc_steal(mem_ctx, u8_array->val);
        return 0;
 }
 
-int ctdb_ctrl_traverse_start_ext(TALLOC_CTX *mem_ctx,
-                                struct tevent_context *ev,
-                                struct ctdb_client_context *client,
-                                int destnode, struct timeval timeout,
-                                struct ctdb_traverse_start_ext *traverse)
+int ctdb_ctrl_db_pull(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                     struct ctdb_client_context *client,
+                     int destnode, struct timeval timeout,
+                     struct ctdb_pulldb_ext *pulldb, uint32_t *num_records)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_traverse_start_ext(&request, traverse);
+       ctdb_req_control_db_pull(&request, pulldb);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control TRAVERSE_START_EXT failed to node %u, ret=%d\n",
+                     ("Control DB_PULL failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_traverse_start_ext(reply);
+       ret = ctdb_reply_control_db_pull(reply, num_records);
        if (ret != 0) {
-               DEBUG(DEBUG_ERR,
-                     ("Control TRAVERSE_START_EXT failed, ret=%d\n", ret));
+               DEBUG(DEBUG_ERR, ("Control DB_PULL failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_db_statistics(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout,
-                               uint32_t db_id,
-                               struct ctdb_db_statistics **dbstats)
+int ctdb_ctrl_db_push_start(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           struct ctdb_pulldb_ext *pulldb)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_db_statistics(&request, db_id);
+       ctdb_req_control_db_push_start(&request, pulldb);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_STATISTICS failed to node %u, ret=%d\n",
+                     ("Control DB_PUSH_START failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_db_statistics(reply, mem_ctx, dbstats);
+       ret = ctdb_reply_control_db_push_start(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_DB_STATISTICS failed, ret=%d\n", ret));
+                     ("Control DB_PUSH_START failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_set_db_sticky(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout,
-                           uint32_t db_id)
+int ctdb_ctrl_db_push_confirm(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                             struct ctdb_client_context *client,
+                             int destnode, struct timeval timeout,
+                             uint32_t db_id, uint32_t *num_records)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_set_db_sticky(&request, db_id);
+       ctdb_req_control_db_push_confirm(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_STICKY failed to node %u, ret=%d\n",
+                     ("Control DB_PUSH_CONFIRM failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_set_db_sticky(reply);
+       ret = ctdb_reply_control_db_push_confirm(reply, num_records);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control SET_DB_STICKY failed, ret=%d\n", ret));
+                     ("Control DB_PUSH_CONFIRM failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_reload_public_ips(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct ctdb_client_context *client,
-                               int destnode, struct timeval timeout)
+int ctdb_ctrl_db_open_flags(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                           struct ctdb_client_context *client,
+                           int destnode, struct timeval timeout,
+                           uint32_t db_id, int *tdb_flags)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_reload_public_ips(&request);
+       ctdb_req_control_db_open_flags(&request, db_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELOAD_PUBLIC_IPS failed to node %u, ret=%d\n",
+                     ("Control DB_OPEN_FLAGS failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_reload_public_ips(reply);
+       ret = ctdb_reply_control_db_open_flags(reply, tdb_flags);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control RELOAD_PUBLIC_IPS failed, ret=%d\n", ret));
+                     ("Control DB_OPEN_FLAGS failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_ipreallocated(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                           struct ctdb_client_context *client,
-                           int destnode, struct timeval timeout)
+int ctdb_ctrl_db_attach_replicated(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct ctdb_client_context *client,
+                                  int destnode, struct timeval timeout,
+                                  const char *db_name, uint32_t *db_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_ipreallocated(&request);
+       ctdb_req_control_db_attach_replicated(&request, db_name);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control IPREALLOCATED failed to node %u, ret=%d\n",
-                      destnode, ret));
+                     ("Control DB_ATTACH_REPLICATED failed to node %u,"
+                      " ret=%d\n", destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_ipreallocated(reply);
+       ret = ctdb_reply_control_db_attach_replicated(reply, db_id);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control IPREALLOCATED failed, ret=%d\n", ret));
+                     ("Control DB_ATTACH_REPLICATED failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_runstate(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                          struct ctdb_client_context *client,
-                          int destnode, struct timeval timeout,
-                          enum ctdb_runstate *runstate)
+int ctdb_ctrl_check_pid_srvid(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                             struct ctdb_client_context *client,
+                             int destnode, struct timeval timeout,
+                             struct ctdb_pid_srvid *pid_srvid, int *status)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_runstate(&request);
+       ctdb_req_control_check_pid_srvid(&request, pid_srvid);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_RUNSTATE failed to node %u, ret=%d\n",
+                     ("Control CHECK_PID_SRVID failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_runstate(reply, runstate);
+       ret = ctdb_reply_control_check_pid_srvid(reply, status);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_RUNSTATE failed, ret=%d\n", ret));
+                     ("Control CHECK_PID_SRVID failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_db_detach(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                       struct ctdb_client_context *client,
-                       int destnode, struct timeval timeout,
-                       uint32_t db_id)
+int ctdb_ctrl_tunnel_register(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                             struct ctdb_client_context *client,
+                             int destnode, struct timeval timeout,
+                             uint64_t tunnel_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_db_detach(&request, db_id);
+       ctdb_req_control_tunnel_register(&request, tunnel_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_DETACH failed to node %u, ret=%d\n",
+                     ("Control TUNNEL_REGISTER failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_db_detach(reply);
+       ret = ctdb_reply_control_tunnel_register(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control DB_DETACH failed, ret=%d\n", ret));
+                     ("Control TUNNEL_REGISTER failed, ret=%d\n", ret));
                return ret;
        }
 
        return 0;
 }
 
-int ctdb_ctrl_get_nodes_file(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                            struct ctdb_client_context *client,
-                            int destnode, struct timeval timeout,
-                            struct ctdb_node_map **nodemap)
+int ctdb_ctrl_tunnel_deregister(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+                               struct ctdb_client_context *client,
+                               int destnode, struct timeval timeout,
+                               uint64_t tunnel_id)
 {
        struct ctdb_req_control request;
        struct ctdb_reply_control *reply;
        int ret;
 
-       ctdb_req_control_get_nodes_file(&request);
+       ctdb_req_control_tunnel_deregister(&request, tunnel_id);
        ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
                                  &request, &reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_NODES_FILE failed to node %u, ret=%d\n",
+                     ("Control TUNNEL_DEREGISTER failed to node %u, ret=%d\n",
                       destnode, ret));
                return ret;
        }
 
-       ret = ctdb_reply_control_get_nodes_file(reply, mem_ctx, nodemap);
+       ret = ctdb_reply_control_tunnel_deregister(reply);
        if (ret != 0) {
                DEBUG(DEBUG_ERR,
-                     ("Control GET_NODES_FILE failed, ret=%d\n", ret));
+                     ("Control TUNNEL_DEREGISTER failed, ret=%d\n", ret));
                return ret;
        }