ctdb-client: Add client API functions for new controls
authorAmitay Isaacs <amitay@gmail.com>
Fri, 19 Feb 2016 00:14:40 +0000 (11:14 +1100)
committerMartin Schwenke <martins@samba.org>
Fri, 25 Mar 2016 02:26:15 +0000 (03:26 +0100)
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/client/client.h
ctdb/client/client_control_sync.c

index 9d4f73d752508eaeced52098fde17b98e3f3d847..98690041a46bcd9fc65f632432f8eb34091f6036 100644 (file)
@@ -736,6 +736,21 @@ int ctdb_ctrl_db_transaction_cancel(TALLOC_CTX *mem_ctx,
                                    int destnode, struct timeval timeout,
                                    uint32_t db_id);
 
+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);
+
+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);
+
+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);
+
 /* from client/client_db.c */
 
 struct tevent_req *ctdb_attach_send(TALLOC_CTX *mem_ctx,
index 7c3cda2ab6247af8e203f201151e405656cc24dd..75156232c60e62286ae23ead13960b667537dd3f 100644 (file)
@@ -3088,3 +3088,89 @@ int ctdb_ctrl_db_transaction_cancel(TALLOC_CTX *mem_ctx,
 
        return 0;
 }
+
+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_db_pull(&request, pulldb);
+       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
+                                 &request, &reply);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR,
+                     ("Control DB_PULL failed to node %u, ret=%d\n",
+                      destnode, ret));
+               return ret;
+       }
+
+       ret = ctdb_reply_control_db_pull(reply, num_records);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR, ("Control DB_PULL failed, ret=%d\n", ret));
+               return ret;
+       }
+
+       return 0;
+}
+
+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_db_push_start(&request, pulldb);
+       ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
+                                 &request, &reply);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR,
+                     ("Control DB_PUSH failed to node %u, ret=%d\n",
+                      destnode, ret));
+               return ret;
+       }
+
+       ret = ctdb_reply_control_db_push_start(reply);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR,
+                     ("Control DB_PUSH failed, ret=%d\n", ret));
+               return ret;
+       }
+
+       return 0;
+}
+
+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_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 DB_PUSH failed to node %u, ret=%d\n",
+                      destnode, ret));
+               return ret;
+       }
+
+       ret = ctdb_reply_control_db_push_confirm(reply, num_records);
+       if (ret != 0) {
+               DEBUG(DEBUG_ERR,
+                     ("Control DB_PUSH failed, ret=%d\n", ret));
+               return ret;
+       }
+
+       return 0;
+}