ctdb-tests: Implement STOP_NODE and CONTINUE_NODE controls in fake_ctdbd
authorMartin Schwenke <martin@meltin.net>
Wed, 20 Jul 2016 11:34:05 +0000 (21:34 +1000)
committerAmitay Isaacs <amitay@samba.org>
Mon, 25 Jul 2016 19:29:47 +0000 (21:29 +0200)
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/tests/src/fake_ctdbd.c

index cae6c23c6db7379e8a5e6e96701bd6320b2da28c..5deacb6c923dabb3f99bf0cfc02bcda715300686 100644 (file)
@@ -1681,6 +1681,51 @@ done:
        client_send_control(req, header, &reply);
 }
 
+static void control_stop_node(TALLOC_CTX *mem_ctx,
+                             struct tevent_req *req,
+                             struct ctdb_req_header *header,
+                             struct ctdb_req_control *request)
+{
+       struct client_state *state = tevent_req_data(
+               req, struct client_state);
+       struct ctdbd_context *ctdb = state->ctdb;
+       struct ctdb_reply_control reply;
+
+       reply.rdata.opcode = request->opcode;
+
+       DEBUG(DEBUG_INFO, ("Stopping node\n"));
+       ctdb->monitoring_mode = CTDB_MONITORING_DISABLED;
+       ctdb->node_map->node[header->destnode].flags |= NODE_FLAGS_STOPPED;
+
+       reply.status = 0;
+       reply.errmsg = NULL;
+
+       client_send_control(req, header, &reply);
+       return;
+}
+
+static void control_continue_node(TALLOC_CTX *mem_ctx,
+                                 struct tevent_req *req,
+                                 struct ctdb_req_header *header,
+                                 struct ctdb_req_control *request)
+{
+       struct client_state *state = tevent_req_data(
+               req, struct client_state);
+       struct ctdbd_context *ctdb = state->ctdb;
+       struct ctdb_reply_control reply;
+
+       reply.rdata.opcode = request->opcode;
+
+       DEBUG(DEBUG_INFO, ("Continue node\n"));
+       ctdb->node_map->node[header->destnode].flags &= ~NODE_FLAGS_STOPPED;
+
+       reply.status = 0;
+       reply.errmsg = NULL;
+
+       client_send_control(req, header, &reply);
+       return;
+}
+
 static void control_get_ifaces(TALLOC_CTX *mem_ctx,
                               struct tevent_req *req,
                               struct ctdb_req_header *header,
@@ -2272,6 +2317,14 @@ static void client_process_control(struct tevent_req *req,
                control_get_reclock_file(mem_ctx, req, &header, &request);
                break;
 
+       case CTDB_CONTROL_STOP_NODE:
+               control_stop_node(mem_ctx, req, &header, &request);
+               break;
+
+       case CTDB_CONTROL_CONTINUE_NODE:
+               control_continue_node(mem_ctx, req, &header, &request);
+               break;
+
        case CTDB_CONTROL_GET_IFACES:
                control_get_ifaces(mem_ctx, req, &header, &request);
                break;