ctdb-protocol: Add marshalling for control CHECK_PID_SRVID
authorAmitay Isaacs <amitay@gmail.com>
Wed, 30 Aug 2017 05:13:53 +0000 (15:13 +1000)
committerMartin Schwenke <martins@samba.org>
Thu, 21 Sep 2017 06:53:26 +0000 (08:53 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/protocol/protocol_api.h
ctdb/protocol/protocol_client.c
ctdb/protocol/protocol_control.c
ctdb/protocol/protocol_debug.c
ctdb/tests/cunit/protocol_test_101.sh
ctdb/tests/src/protocol_common_ctdb.c
ctdb/tests/src/protocol_ctdb_test.c

index 67f32a0b8cc875ed3cf12d0772b6309191f993e9..e15bb972e22258c0211364d43ffc977eb63369fc 100644 (file)
@@ -596,6 +596,11 @@ void ctdb_req_control_db_attach_replicated(struct ctdb_req_control *request,
 int ctdb_reply_control_db_attach_replicated(struct ctdb_reply_control *reply,
                                            uint32_t *db_id);
 
+void ctdb_req_control_check_pid_srvid(struct ctdb_req_control *request,
+                                     struct ctdb_pid_srvid *pid_srvid);
+int ctdb_reply_control_check_pid_srvid(struct ctdb_reply_control *reply,
+                                      int *status);
+
 /* From protocol/protocol_debug.c */
 
 void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
index d750260ff8ad7567a8ba5b1d17e6e6e4b81035ca..a741b114dbd6273ce5fafa79378b305b58081eb0 100644 (file)
@@ -2301,3 +2301,31 @@ int ctdb_reply_control_db_attach_replicated(struct ctdb_reply_control *reply,
        }
        return reply->status;
 }
+
+/* CTDB_CONTROL_CHECK_PID_SRVID */
+
+void ctdb_req_control_check_pid_srvid(struct ctdb_req_control *request,
+                                     struct ctdb_pid_srvid *pid_srvid)
+{
+       request->opcode = CTDB_CONTROL_CHECK_PID_SRVID;
+       request->pad = 0;
+       request->srvid = 0;
+       request->client_id = 0;
+       request->flags = 0;
+
+       request->rdata.opcode = CTDB_CONTROL_CHECK_PID_SRVID;
+       request->rdata.data.pid_srvid = pid_srvid;
+}
+
+int ctdb_reply_control_check_pid_srvid(struct ctdb_reply_control *reply,
+                                      int *status)
+{
+       if (reply->rdata.opcode != CTDB_CONTROL_CHECK_PID_SRVID) {
+               return EPROTO;
+       }
+
+       *status = reply->status;
+       reply->status = 0;
+
+       return reply->status;
+}
index f76a1af7228254dc3e2bb3e304fe1e0720d339f6..5abe0379fe0794ebd2a6778cd0eb634551de2482 100644 (file)
@@ -416,6 +416,10 @@ static size_t ctdb_req_control_data_len(struct ctdb_req_control_data *cd)
        case CTDB_CONTROL_DB_ATTACH_REPLICATED:
                len = ctdb_string_len(&cd->data.db_name);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               len = ctdb_pid_srvid_len(cd->data.pid_srvid);
+               break;
        }
 
        return len;
@@ -697,6 +701,10 @@ static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
        case CTDB_CONTROL_DB_ATTACH_REPLICATED:
                ctdb_string_push(&cd->data.db_name, buf, &np);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               ctdb_pid_srvid_push(cd->data.pid_srvid, buf, &np);
+               break;
        }
 
        *npush = np;
@@ -1027,6 +1035,11 @@ static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
                ret = ctdb_string_pull(buf, buflen, mem_ctx,
                                       &cd->data.db_name, &np);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               ret = ctdb_pid_srvid_pull(buf, buflen, mem_ctx,
+                                         &cd->data.pid_srvid, &np);
+               break;
        }
 
        if (ret != 0) {
@@ -1400,6 +1413,9 @@ static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
        case CTDB_CONTROL_DB_ATTACH_REPLICATED:
                len = ctdb_uint32_len(&cd->data.db_id);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               break;
        }
 
        return len;
@@ -1561,6 +1577,9 @@ static void ctdb_reply_control_data_push(struct ctdb_reply_control_data *cd,
        case CTDB_CONTROL_DB_ATTACH_REPLICATED:
                ctdb_uint32_push(&cd->data.db_id, buf, &np);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               break;
        }
 
        *npush = np;
@@ -1753,6 +1772,9 @@ static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen,
        case CTDB_CONTROL_DB_ATTACH_REPLICATED:
                ret = ctdb_uint32_pull(buf, buflen, &cd->data.db_id, &np);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               break;
        }
 
        if (ret != 0) {
index 9cca76c5107b3765cd0b9c7ae239f4d3fd08722d..5a24d39cfba70c26d21ebe7050519b3600272d27 100644 (file)
@@ -239,6 +239,7 @@ static void ctdb_opcode_print(uint32_t opcode, FILE *fp)
                { CTDB_CONTROL_DB_PUSH_CONFIRM, "DB_PUSH_CONFIRM" },
                { CTDB_CONTROL_DB_OPEN_FLAGS, "DB_OPEN_FLAGS" },
                { CTDB_CONTROL_DB_ATTACH_REPLICATED, "DB_ATTACH_REPLICATED" },
+               { CTDB_CONTROL_CHECK_PID_SRVID, "CHECK_PID_SRVID" },
                { MAP_END, "" },
        };
 
index 800c6b598f7d8d44e195eb5c6124ce4ec9eb8d02..8813e188d06e2b89d93b07b8a68b74dc217d64a2 100755 (executable)
@@ -2,7 +2,7 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-last_control=150
+last_control=151
 
 generate_control_output ()
 {
index 26b1ad65d80a3904c3da1f13b1384adae33897b8..0c3a9a89f2f0f611e9f47a50be5c8426f6dfa657 100644 (file)
@@ -603,6 +603,12 @@ void fill_ctdb_req_control_data(TALLOC_CTX *mem_ctx,
                fill_ctdb_string(mem_ctx, &cd->data.db_name);
                assert(cd->data.db_name != NULL);
                break;
+
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               cd->data.pid_srvid = talloc(mem_ctx, struct ctdb_pid_srvid);
+               assert(cd->data.pid_srvid != NULL);
+               fill_ctdb_pid_srvid(mem_ctx, cd->data.pid_srvid);
+               break;
        }
 }
 
@@ -1005,6 +1011,9 @@ void verify_ctdb_req_control_data(struct ctdb_req_control_data *cd,
                verify_ctdb_string(&cd->data.db_name, &cd2->data.db_name);
                break;
 
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               verify_ctdb_pid_srvid(cd->data.pid_srvid, cd2->data.pid_srvid);
+               break;
        }
 }
 
@@ -1417,6 +1426,8 @@ void fill_ctdb_reply_control_data(TALLOC_CTX *mem_ctx,
                cd->data.db_id = rand32();
                break;
 
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               break;
        }
 }
 
@@ -1762,6 +1773,8 @@ void verify_ctdb_reply_control_data(struct ctdb_reply_control_data *cd,
                assert(cd->data.db_id == cd2->data.db_id);
                break;
 
+       case CTDB_CONTROL_CHECK_PID_SRVID:
+               break;
        }
 }
 
index ade37c2a5529fb5424a7c12c55fe5f1a86842a76..a13901f83634edb425ed5e00809d7a27c41de97a 100644 (file)
@@ -283,7 +283,7 @@ PROTOCOL_CTDB4_TEST(struct ctdb_req_dmaster, ctdb_req_dmaster,
 PROTOCOL_CTDB4_TEST(struct ctdb_reply_dmaster, ctdb_reply_dmaster,
                        CTDB_REPLY_DMASTER);
 
-#define NUM_CONTROLS   151
+#define NUM_CONTROLS   152
 
 PROTOCOL_CTDB2_TEST(struct ctdb_req_control_data, ctdb_req_control_data);
 PROTOCOL_CTDB2_TEST(struct ctdb_reply_control_data, ctdb_reply_control_data);