summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2017-08-30 17:04:44 +1000
committerMartin Schwenke <martins@samba.org>2017-09-21 08:53:26 +0200
commit7d034fe1399ecb7305c91e16e114a63c67f5a983 (patch)
tree16856141edbd9e90440b10c5aa67f121b1f2426b
parentc480cc0152f3afc8ea81e2bc72c31deed1e0ca71 (diff)
downloadsamba-7d034fe1399ecb7305c91e16e114a63c67f5a983.tar.gz
ctdb-tests: Implement control CHECK_PID_SRVID in fake daemon
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>
-rw-r--r--ctdb/tests/src/fake_ctdbd.c47
1 files changed, 44 insertions, 3 deletions
diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c
index b09e80d70d0..8b3a0c44887 100644
--- a/ctdb/tests/src/fake_ctdbd.c
+++ b/ctdb/tests/src/fake_ctdbd.c
@@ -1651,9 +1651,6 @@ static void control_deregister_srvid(TALLOC_CTX *mem_ctx,
reply.status = 0;
reply.errmsg = NULL;
- client_send_control(req, header, &reply);
- return;
-
fail:
client_send_control(req, header, &reply);
}
@@ -2787,6 +2784,46 @@ fail:
client_send_control(req, header, &reply);
}
+static void control_check_pid_srvid(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 client_state *cstate;
+ struct ctdb_reply_control reply;
+ int ret;
+
+ reply.rdata.opcode = request->opcode;
+
+ cstate = client_find(ctdb, request->rdata.data.pid_srvid->pid);
+ if (cstate == NULL) {
+ reply.status = -1;
+ reply.errmsg = "No client for PID";
+ } else {
+ ret = srvid_exists(ctdb->srv,
+ request->rdata.data.pid_srvid->srvid,
+ cstate);
+ if (ret != 0) {
+ reply.status = -1;
+ reply.errmsg = "No client for PID and SRVID";
+ } else {
+ ret = kill(cstate->pid, 0);
+ if (ret != 0) {
+ reply.status = ret;
+ reply.errmsg = strerror(errno);
+ } else {
+ reply.status = 0;
+ reply.errmsg = NULL;
+ }
+ }
+ }
+
+ client_send_control(req, header, &reply);
+}
+
static bool fake_control_failure(TALLOC_CTX *mem_ctx,
struct tevent_req *req,
struct ctdb_req_header *header,
@@ -3376,6 +3413,10 @@ static void client_process_control(struct tevent_req *req,
control_get_nodes_file(mem_ctx, req, &header, &request);
break;
+ case CTDB_CONTROL_CHECK_PID_SRVID:
+ control_check_pid_srvid(mem_ctx, req, &header, &request);
+ break;
+
default:
if (! (request.flags & CTDB_CTRL_FLAG_NOREPLY)) {
control_error(mem_ctx, req, &header, &request);