From: Amitay Isaacs Date: Wed, 30 Aug 2017 06:59:16 +0000 (+1000) Subject: ctdb-tests: Reimplement message handlers using srvid abstraction X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=c480cc0152f3afc8ea81e2bc72c31deed1e0ca71;p=metze%2Fsamba%2Fwip.git ctdb-tests: Reimplement message handlers using srvid abstraction BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042 This is required for CHECK_PID_SRVID control implementation. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke --- diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c index 4d51dc54ddf2..b09e80d70d0c 100644 --- a/ctdb/tests/src/fake_ctdbd.c +++ b/ctdb/tests/src/fake_ctdbd.c @@ -40,6 +40,7 @@ #include "common/system.h" #include "common/logging.h" #include "common/tunable.h" +#include "common/srvid.h" #include "ipalloc_read_known_ips.h" @@ -95,12 +96,6 @@ struct database_map { struct database *db; }; -struct srvid_register_state { - struct srvid_register_state *prev, *next; - struct ctdbd_context *ctdb; - uint64_t srvid; -}; - struct fake_control_failure { struct fake_control_failure *prev, *next; enum ctdb_controls opcode; @@ -121,7 +116,7 @@ struct ctdbd_context { struct interface_map *iface_map; struct vnn_map *vnn_map; struct database_map *db_map; - struct srvid_register_state *rstate; + struct srvid_context *srv; int num_clients; struct timeval start_time; struct timeval recovery_start_time; @@ -898,6 +893,7 @@ static struct ctdbd_context *ctdbd_setup(TALLOC_CTX *mem_ctx) struct ctdbd_context *ctdb; char line[1024]; bool status; + int ret; ctdb = talloc_zero(mem_ctx, struct ctdbd_context); if (ctdb == NULL) { @@ -924,6 +920,11 @@ static struct ctdbd_context *ctdbd_setup(TALLOC_CTX *mem_ctx) goto fail; } + ret = srvid_init(ctdb, &ctdb->srv); + if (ret != 0) { + goto fail; + } + while (fgets(line, sizeof(line), stdin) != NULL) { char *t; @@ -1590,10 +1591,9 @@ fail: } -static int srvid_register_state_destructor(struct srvid_register_state *rstate) +static void srvid_handler(uint64_t srvid, TDB_DATA data, void *private_data) { - DLIST_REMOVE(rstate->ctdb->rstate, rstate); - return 0; + printf("Received a message for SRVID 0x%"PRIx64"\n", srvid); } static void control_register_srvid(TALLOC_CTX *mem_ctx, @@ -1605,24 +1605,19 @@ static void control_register_srvid(TALLOC_CTX *mem_ctx, req, struct client_state); struct ctdbd_context *ctdb = state->ctdb; struct ctdb_reply_control reply; - struct srvid_register_state *rstate; + int ret; reply.rdata.opcode = request->opcode; - rstate = talloc_zero(ctdb, struct srvid_register_state); - if (rstate == NULL) { + ret = srvid_register(ctdb->srv, state, request->srvid, + srvid_handler, state); + if (ret != 0) { reply.status = -1; reply.errmsg = "Memory error"; goto fail; } - rstate->ctdb = ctdb; - rstate->srvid = request->srvid; - talloc_set_destructor(rstate, srvid_register_state_destructor); - - DLIST_ADD_END(ctdb->rstate, rstate); - - DEBUG(DEBUG_INFO, ("Register srvid 0x%"PRIx64"\n", rstate->srvid)); + DEBUG(DEBUG_INFO, ("Register srvid 0x%"PRIx64"\n", request->srvid)); reply.status = 0; reply.errmsg = NULL; @@ -1640,24 +1635,18 @@ static void control_deregister_srvid(TALLOC_CTX *mem_ctx, req, struct client_state); struct ctdbd_context *ctdb = state->ctdb; struct ctdb_reply_control reply; - struct srvid_register_state *rstate = NULL; + int ret; reply.rdata.opcode = request->opcode; - for (rstate = ctdb->rstate; rstate != NULL; rstate = rstate->next) { - if (rstate->srvid == request->srvid) { - break; - } - } - - if (rstate == NULL) { + ret = srvid_deregister(ctdb->srv, request->srvid, state); + if (ret != 0) { reply.status = -1; reply.errmsg = "srvid not registered"; goto fail; } - DEBUG(DEBUG_INFO, ("Deregister srvid 0x%"PRIx64"\n", rstate->srvid)); - talloc_free(rstate); + DEBUG(DEBUG_INFO, ("Deregister srvid 0x%"PRIx64"\n", request->srvid)); reply.status = 0; reply.errmsg = NULL; @@ -1666,7 +1655,6 @@ static void control_deregister_srvid(TALLOC_CTX *mem_ctx, return; fail: - TALLOC_FREE(rstate); client_send_control(req, header, &reply); }