From bdabf7812223dc0c365fd13aa53d35d10edcdece Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 7 Apr 2020 17:26:26 +0200 Subject: [PATCH] ctdb-protocol: Add marshalling for control ECHO_DATA Signed-off-by: Volker Lendecke Reviewed-by: Martin Schwenke --- ctdb/protocol/protocol_api.h | 4 +++ ctdb/protocol/protocol_client.c | 24 ++++++++++++++++ ctdb/protocol/protocol_control.c | 32 ++++++++++++++++++++++ ctdb/protocol/protocol_debug.c | 1 + ctdb/tests/UNIT/cunit/protocol_test_101.sh | 2 +- ctdb/tests/src/protocol_common_ctdb.c | 20 ++++++++++++++ ctdb/tests/src/protocol_ctdb_test.c | 2 +- 7 files changed, 83 insertions(+), 2 deletions(-) diff --git a/ctdb/protocol/protocol_api.h b/ctdb/protocol/protocol_api.h index c2cd4a76289..bdb4bc0e2ea 100644 --- a/ctdb/protocol/protocol_api.h +++ b/ctdb/protocol/protocol_api.h @@ -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); diff --git a/ctdb/protocol/protocol_client.c b/ctdb/protocol/protocol_client.c index 6c5180d6d6d..cde544feb52 100644 --- a/ctdb/protocol/protocol_client.c +++ b/ctdb/protocol/protocol_client.c @@ -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; +} diff --git a/ctdb/protocol/protocol_control.c b/ctdb/protocol/protocol_control.c index a25c9b1cfe0..4fd5a5a7d4d 100644 --- a/ctdb/protocol/protocol_control.c +++ b/ctdb/protocol/protocol_control.c @@ -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) { diff --git a/ctdb/protocol/protocol_debug.c b/ctdb/protocol/protocol_debug.c index 3fe78b13162..56f14e32b09 100644 --- a/ctdb/protocol/protocol_debug.c +++ b/ctdb/protocol/protocol_debug.c @@ -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, "" }, }; diff --git a/ctdb/tests/UNIT/cunit/protocol_test_101.sh b/ctdb/tests/UNIT/cunit/protocol_test_101.sh index 6b07dc017ba..79dfabeb801 100755 --- a/ctdb/tests/UNIT/cunit/protocol_test_101.sh +++ b/ctdb/tests/UNIT/cunit/protocol_test_101.sh @@ -2,7 +2,7 @@ . "${TEST_SCRIPTS_DIR}/unit.sh" -last_control=155 +last_control=156 generate_control_output () { diff --git a/ctdb/tests/src/protocol_common_ctdb.c b/ctdb/tests/src/protocol_common_ctdb.c index 6989010cd6f..f1d662f0e1d 100644 --- a/ctdb/tests/src/protocol_common_ctdb.c +++ b/ctdb/tests/src/protocol_common_ctdb.c @@ -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; } } diff --git a/ctdb/tests/src/protocol_ctdb_test.c b/ctdb/tests/src/protocol_ctdb_test.c index b13cd5491d1..6a9a8a4aef6 100644 --- a/ctdb/tests/src/protocol_ctdb_test.c +++ b/ctdb/tests/src/protocol_ctdb_test.c @@ -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); -- 2.47.3