[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Fri Sep 22 18:59:03 UTC 2017


The branch, master has been updated
       via  4df3dcd ctdb-tests: Add tests for client with multiple connections
       via  90f7e06 ctdb-tests: Add support for multiple ctdb connections in dummy_client
       via  6ed2ed7 ctdb-tests: Check all connections from a process in CHECK_PID_SRVID control
       via  e342f1f ctdb-daemon: Check all connections from a process in CHECK_PID_SRVID control
      from  3a360f5 selftest: Also run smbtorture smb2.compound with aio enabled

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 4df3dcdda692ef65b7d95c4b5623905982b4bd2b
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Sep 22 14:17:59 2017 +1000

    ctdb-tests: Add tests for client with multiple connections
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Fri Sep 22 20:58:46 CEST 2017 on sn-devel-144

commit 90f7e06c2553a13779dd24739aeefea96f55ba3e
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Sep 22 14:14:00 2017 +1000

    ctdb-tests: Add support for multiple ctdb connections in dummy_client
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit 6ed2ed7e2dc55e2508f31f32e53db5dab1fce2a8
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Sep 22 14:04:50 2017 +1000

    ctdb-tests: Check all connections from a process in CHECK_PID_SRVID control
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit e342f1f078fa50904216e6e45fb9b6e40043eb98
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Sep 22 13:52:09 2017 +1000

    ctdb-daemon: Check all connections from a process in CHECK_PID_SRVID control
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13042
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Volker Lendecke <vl at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 ctdb/server/ctdb_daemon.c                          | 22 +++++-----
 ctdb/tests/simple/07_ctdb_process_exists.sh        |  2 +-
 ctdb/tests/src/dummy_client.c                      | 32 ++++++++++----
 ctdb/tests/src/fake_ctdbd.c                        | 49 +++++++++++++---------
 ...ss-exists.002.sh => ctdb.process-exists.003.sh} |  4 +-
 5 files changed, 70 insertions(+), 39 deletions(-)
 copy ctdb/tests/tool/{ctdb.process-exists.002.sh => ctdb.process-exists.003.sh} (77%)


Changeset truncated at 500 lines:

diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c
index 90e8b71..c72f41a 100644
--- a/ctdb/server/ctdb_daemon.c
+++ b/ctdb/server/ctdb_daemon.c
@@ -1774,7 +1774,7 @@ int32_t ctdb_control_process_exists(struct ctdb_context *ctdb, pid_t pid)
 int32_t ctdb_control_check_pid_srvid(struct ctdb_context *ctdb,
 				     TDB_DATA indata)
 {
-        struct ctdb_client *client;
+	struct ctdb_client_pid_list *client_pid;
 	pid_t pid;
 	uint64_t srvid;
 	int ret;
@@ -1782,17 +1782,19 @@ int32_t ctdb_control_check_pid_srvid(struct ctdb_context *ctdb,
 	pid = *(pid_t *)indata.dptr;
 	srvid = *(uint64_t *)(indata.dptr + sizeof(pid_t));
 
-	client = ctdb_find_client_by_pid(ctdb, pid);
-	if (client == NULL) {
-		return -1;
-	}
-
-	ret = srvid_exists(ctdb->srv, srvid, client);
-	if (ret != 0) {
-		return -1;
+	for (client_pid = ctdb->client_pids;
+	     client_pid != NULL;
+	     client_pid = client_pid->next) {
+		if (client_pid->pid == pid) {
+			ret = srvid_exists(ctdb->srv, srvid,
+					   client_pid->client);
+			if (ret == 0) {
+				return 0;
+			}
+		}
 	}
 
-	return 0;
+	return -1;
 }
 
 int ctdb_control_getnodesfile(struct ctdb_context *ctdb, uint32_t opcode, TDB_DATA indata, TDB_DATA *outdata)
diff --git a/ctdb/tests/simple/07_ctdb_process_exists.sh b/ctdb/tests/simple/07_ctdb_process_exists.sh
index b3b8e51..8ccfc69 100755
--- a/ctdb/tests/simple/07_ctdb_process_exists.sh
+++ b/ctdb/tests/simple/07_ctdb_process_exists.sh
@@ -41,7 +41,7 @@ srvid=0xAE00000012345678
 # Execute a ctdb client on $test_node that will last for 60 seconds.
 # It should still be there when we check.
 try_command_on_node -v $test_node \
-	"$CTDB_TEST_WRAPPER exec dummy_client -S ${srvid} >/dev/null 2>&1 & echo \$!"
+	"$CTDB_TEST_WRAPPER exec dummy_client -n 10 -S ${srvid} >/dev/null 2>&1 & echo \$!"
 client_pid="$out"
 
 cleanup ()
diff --git a/ctdb/tests/src/dummy_client.c b/ctdb/tests/src/dummy_client.c
index 6af41f3..6f30512 100644
--- a/ctdb/tests/src/dummy_client.c
+++ b/ctdb/tests/src/dummy_client.c
@@ -31,6 +31,7 @@
 static struct {
 	const char *sockpath;
 	const char *debuglevel;
+	int num_connections;
 	int timelimit;
 	const char *srvidstr;
 } options;
@@ -41,6 +42,8 @@ static struct poptOption cmdline_options[] = {
 		"Unix domain socket path", "filename" },
 	{ "debug", 'd', POPT_ARG_STRING, &options.debuglevel, 0,
 		"debug level", "ERR|WARNING|NOTICE|INFO|DEBUG" } ,
+	{ "nconn", 'n', POPT_ARG_INT, &options.num_connections, 0,
+		"number of connections", "" },
 	{ "timelimit", 't', POPT_ARG_INT, &options.timelimit, 0,
 		"time limit", "seconds" },
 	{ "srvid", 'S', POPT_ARG_STRING, &options.srvidstr, 0,
@@ -59,16 +62,18 @@ int main(int argc, const char *argv[])
 {
 	TALLOC_CTX *mem_ctx;
 	struct tevent_context *ev;
-	struct ctdb_client_context *client;
+	struct ctdb_client_context **client;
+	struct ctdb_client_context *last_client;
 	const char *ctdb_socket;
 	poptContext pc;
-	int opt, ret;
+	int opt, ret, i;
 	int log_level;
 	bool status, done;
 
 	/* Set default options */
 	options.sockpath = CTDB_SOCKET;
 	options.debuglevel = "ERR";
+	options.num_connections = 1;
 	options.timelimit = 60;
 	options.srvidstr = NULL;
 
@@ -112,19 +117,32 @@ int main(int argc, const char *argv[])
 	setup_logging("dummy_client", DEBUG_STDERR);
 	DEBUGLEVEL = log_level;
 
-	ret = ctdb_client_init(mem_ctx, ev, options.sockpath, &client);
-	if (ret != 0) {
-		D_ERR("Failed to initialize client, ret=%d\n", ret);
+	client = talloc_array(mem_ctx, struct ctdb_client_context *,
+			      options.num_connections);
+	if (client == NULL) {
+		fprintf(stderr, "Memory allocation error\n");
 		exit(1);
 	}
 
+	for (i=0; i<options.num_connections; i++) {
+		ret = ctdb_client_init(client, ev, options.sockpath,
+				       &client[i]);
+		if (ret != 0) {
+			D_ERR("Failed to initialize client %d, ret=%d\n",
+			      i, ret);
+			exit(1);
+		}
+	}
+
+	last_client = client[options.num_connections-1];
+
 	done = false;
 	if (options.srvidstr != NULL) {
 		uint64_t srvid;
 
 		srvid = strtoull(options.srvidstr, NULL, 0);
 
-		ret = ctdb_client_set_message_handler(ev, client, srvid,
+		ret = ctdb_client_set_message_handler(ev, last_client, srvid,
 						      dummy_handler, &done);
 		if (ret != 0) {
 			D_ERR("Failed to register srvid, ret=%d\n", ret);
@@ -143,6 +161,6 @@ int main(int argc, const char *argv[])
 		exit(1);
 	}
 
-	talloc_free(client);
+	talloc_free(mem_ctx);
 	exit(0);
 }
diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c
index 8b3a0c4..98aacbe 100644
--- a/ctdb/tests/src/fake_ctdbd.c
+++ b/ctdb/tests/src/fake_ctdbd.c
@@ -2792,35 +2792,46 @@ static void control_check_pid_srvid(TALLOC_CTX *mem_ctx,
 	struct client_state *state = tevent_req_data(
 		req, struct client_state);
 	struct ctdbd_context *ctdb = state->ctdb;
+	struct ctdb_client *client;
 	struct client_state *cstate;
 	struct ctdb_reply_control reply;
+	bool pid_found, srvid_found;
 	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;
+	pid_found = false;
+	srvid_found = false;
+
+	for (client=ctdb->client_list; client != NULL; client=client->next) {
+		if (client->pid == request->rdata.data.pid_srvid->pid) {
+			pid_found = true;
+			cstate = (struct client_state *)client->state;
+			ret = srvid_exists(ctdb->srv,
+					   request->rdata.data.pid_srvid->srvid,
+					   cstate);
+			if (ret == 0) {
+				srvid_found = true;
+				ret = kill(cstate->pid, 0);
+				if (ret != 0) {
+					reply.status = ret;
+					reply.errmsg = strerror(errno);
+				} else {
+					reply.status = 0;
+					reply.errmsg = NULL;
+				}
 			}
 		}
 	}
 
+	if (! pid_found) {
+		reply.status = -1;
+		reply.errmsg = "No client for PID";
+	} else if (! srvid_found) {
+		reply.status = -1;
+		reply.errmsg = "No client for PID and SRVID";
+	}
+
 	client_send_control(req, header, &reply);
 }
 
diff --git a/ctdb/tests/tool/ctdb.process-exists.002.sh b/ctdb/tests/tool/ctdb.process-exists.003.sh
similarity index 77%
copy from ctdb/tests/tool/ctdb.process-exists.002.sh
copy to ctdb/tests/tool/ctdb.process-exists.003.sh
index fe3dfd4..bb1ef9a 100755
--- a/ctdb/tests/tool/ctdb.process-exists.002.sh
+++ b/ctdb/tests/tool/ctdb.process-exists.003.sh
@@ -2,7 +2,7 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "ctdbd process on node 0"
+define_test "ctdbd process with multiple connections on node 0"
 
 setup_ctdbd <<EOF
 NODEMAP
@@ -13,7 +13,7 @@ EOF
 
 srvid="0xaebbccdd12345678"
 
-dummy_client -d INFO -s "$ctdbd_socket" -S "$srvid" &
+dummy_client -d INFO -s "$ctdbd_socket" -n 10 -S "$srvid" &
 pid=$!
 
 srvid2="0x1234567812345678"


-- 
Samba Shared Repository



More information about the samba-cvs mailing list