]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ctdb-protocol: Add marshalling for control ECHO_DATA
authorVolker Lendecke <vl@samba.org>
Tue, 7 Apr 2020 15:26:26 +0000 (17:26 +0200)
committerRalph Boehme <slow@samba.org>
Tue, 28 Apr 2020 09:08:39 +0000 (09:08 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
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/UNIT/cunit/protocol_test_101.sh
ctdb/tests/src/protocol_common_ctdb.c
ctdb/tests/src/protocol_ctdb_test.c

index c2cd4a762897029d3a9b2890a9fe117989e80c25..bdb4bc0e2ea874f3c19339bf7e5b698868708dcb 100644 (file)
@@ -611,6 +611,10 @@ void ctdb_req_control_db_vacuum(struct ctdb_req_control *request,
                                struct ctdb_db_vacuum *db_vacuum);
 int ctdb_reply_control_db_vacuum(struct ctdb_reply_control *reply);
 
+void ctdb_req_control_echo_data(struct ctdb_req_control *request,
+                               struct ctdb_echo_data *echo_data);
+int ctdb_reply_control_echo_data(struct ctdb_reply_control *reply);
+
 /* From protocol/protocol_debug.c */
 
 void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
index 6c5180d6d6d39a3c265e25bee073f1609042f060..cde544feb5279d19fdde32fca05895facbc9c3cd 100644 (file)
@@ -2385,3 +2385,27 @@ int ctdb_reply_control_db_vacuum(struct ctdb_reply_control *reply)
 
        return reply->status;
 }
+
+/* CTDB_CONTROL_ECHO_DATA */
+
+void ctdb_req_control_echo_data(struct ctdb_req_control *request,
+                               struct ctdb_echo_data *echo_data)
+{
+       request->opcode = CTDB_CONTROL_ECHO_DATA;
+       request->pad = 0;
+       request->srvid = 0;
+       request->client_id = 0;
+       request->flags = 0;
+
+       request->rdata.opcode = CTDB_CONTROL_ECHO_DATA;
+       request->rdata.data.echo_data = echo_data;
+}
+
+int ctdb_reply_control_echo_data(struct ctdb_reply_control *reply)
+{
+       if (reply->rdata.opcode != CTDB_CONTROL_ECHO_DATA) {
+               return EPROTO;
+       }
+
+       return reply->status;
+}
index a25c9b1cfe0ae40bb1820f07570155b292cb0cd5..4fd5a5a7d4d251328541c698fd9376de7c834f61 100644 (file)
@@ -415,6 +415,10 @@ static size_t ctdb_req_control_data_len(struct ctdb_req_control_data *cd)
        case CTDB_CONTROL_DB_VACUUM:
                len = ctdb_db_vacuum_len(cd->data.db_vacuum);
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               len = ctdb_echo_data_len(cd->data.echo_data);
+               break;
        }
 
        return len;
@@ -698,6 +702,10 @@ static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
        case CTDB_CONTROL_DB_VACUUM:
                ctdb_db_vacuum_push(cd->data.db_vacuum, buf, &np);
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               ctdb_echo_data_push(cd->data.echo_data, buf, &np);
+               break;
        }
 
        *npush = np;
@@ -1035,6 +1043,14 @@ static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
                                          &cd->data.db_vacuum,
                                          &np);
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               ret = ctdb_echo_data_pull(buf,
+                                         buflen,
+                                         mem_ctx,
+                                         &cd->data.echo_data,
+                                         &np);
+               break;
        }
 
        if (ret != 0) {
@@ -1398,6 +1414,10 @@ static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
 
        case CTDB_CONTROL_DB_VACUUM:
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               len = ctdb_echo_data_len(cd->data.echo_data);
+               break;
        }
 
        return len;
@@ -1558,6 +1578,10 @@ static void ctdb_reply_control_data_push(struct ctdb_reply_control_data *cd,
 
        case CTDB_CONTROL_DB_VACUUM:
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               ctdb_echo_data_push(cd->data.echo_data, buf, &np);
+               break;
        }
 
        *npush = np;
@@ -1748,6 +1772,14 @@ static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen,
 
        case CTDB_CONTROL_DB_VACUUM:
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               ret = ctdb_echo_data_pull(buf,
+                                         buflen,
+                                         mem_ctx,
+                                         &cd->data.echo_data,
+                                         &np);
+               break;
        }
 
        if (ret != 0) {
index 3fe78b131620dc764127d071133176ffe919413f..56f14e32b0965739036124acd4dc8d79d33c9c41 100644 (file)
@@ -244,6 +244,7 @@ static void ctdb_opcode_print(uint32_t opcode, FILE *fp)
                { CTDB_CONTROL_TUNNEL_DEREGISTER, "TUNNEL_DEREGISTER" },
                { CTDB_CONTROL_VACUUM_FETCH, "VACUUM_FETCH" },
                { CTDB_CONTROL_DB_VACUUM, "DB_VACUUM" },
+               { CTDB_CONTROL_ECHO_DATA, "ECHO_DATA" },
                { MAP_END, "" },
        };
 
index 6b07dc017bac8abdd6178b04274ec85f990987ee..79dfabeb80111e122b2e42115d5b462db191f908 100755 (executable)
@@ -2,7 +2,7 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-last_control=155
+last_control=156
 
 generate_control_output ()
 {
index 6989010cd6f2ac3316ed5f2c3836fe3e53cd5e46..f1d662f0e1d86e8f983bd1e641b75cb5d86475ba 100644 (file)
@@ -600,6 +600,12 @@ void fill_ctdb_req_control_data(TALLOC_CTX *mem_ctx,
                assert(cd->data.db_vacuum != NULL);
                fill_ctdb_db_vacuum(mem_ctx, cd->data.db_vacuum);
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               cd->data.echo_data = talloc(mem_ctx, struct ctdb_echo_data);
+               assert(cd->data.echo_data != NULL);
+               fill_ctdb_echo_data(mem_ctx, cd->data.echo_data);
+               break;
        }
 }
 
@@ -994,6 +1000,10 @@ void verify_ctdb_req_control_data(struct ctdb_req_control_data *cd,
        case CTDB_CONTROL_DB_VACUUM:
                verify_ctdb_db_vacuum(cd->data.db_vacuum, cd2->data.db_vacuum);
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               verify_ctdb_echo_data(cd->data.echo_data, cd2->data.echo_data);
+               break;
        }
 }
 
@@ -1393,6 +1403,12 @@ void fill_ctdb_reply_control_data(TALLOC_CTX *mem_ctx,
 
        case CTDB_CONTROL_DB_VACUUM:
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               cd->data.echo_data = talloc(mem_ctx, struct ctdb_echo_data);
+               assert(cd->data.echo_data != NULL);
+               fill_ctdb_echo_data(mem_ctx, cd->data.echo_data);
+               break;
        }
 }
 
@@ -1733,6 +1749,10 @@ void verify_ctdb_reply_control_data(struct ctdb_reply_control_data *cd,
 
        case CTDB_CONTROL_DB_VACUUM:
                break;
+
+       case CTDB_CONTROL_ECHO_DATA:
+               verify_ctdb_echo_data(cd->data.echo_data, cd2->data.echo_data);
+               break;
        }
 }
 
index b13cd5491d1ea3f97836a6e1ab8105abbe6df2f7..6a9a8a4aef6e5cd534d633bffbed77f1a9f640b0 100644 (file)
@@ -284,7 +284,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   156
+#define NUM_CONTROLS   157
 
 PROTOCOL_CTDB2_TEST(struct ctdb_req_control_data, ctdb_req_control_data);
 PROTOCOL_CTDB2_TEST(struct ctdb_reply_control_data, ctdb_reply_control_data);