[SCM] Samba Shared Repository - branch master updated

Amitay Isaacs amitay at samba.org
Mon May 13 08:43:02 UTC 2019


The branch, master has been updated
       via  c75fbeaa961 ctdb-tests: Remove old socket wrapper state directory during setup
       via  97ad353a67c ctdb-tests: Actually restart if cluster doesn't become healthy
       via  a60e77157cb ctdb-tests: Add dump-logs command for local daemons
       via  a0a82f1b6a0 ctdb-tests: Add reqid wrapping test
       via  8663e0a64fb ctdb-daemon: Never use 0 as a client ID
      from  21dc6f8e8d8 vfs_ceph: fix cephwrap_flistxattr() debug message

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


- Log -----------------------------------------------------------------
commit c75fbeaa96108cd4dc193ef5f4170977804e5104
Author: Martin Schwenke <martin at meltin.net>
Date:   Sun May 12 07:52:13 2019 +1000

    ctdb-tests: Remove old socket wrapper state directory during setup
    
    Otherwise, when looping tests for a long time, nodes are unable to
    connect to each other.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13924
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>
    
    Autobuild-User(master): Amitay Isaacs <amitay at samba.org>
    Autobuild-Date(master): Mon May 13 08:42:44 UTC 2019 on sn-devel-184

commit 97ad353a67ce0232d7ca5637f1bf8886e2df1aca
Author: Martin Schwenke <martin at meltin.net>
Date:   Fri May 10 19:22:16 2019 +1000

    ctdb-tests: Actually restart if cluster doesn't become healthy
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13924
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit a60e77157cb6e803ead4e93d1caeba140f955e08
Author: Martin Schwenke <martin at meltin.net>
Date:   Sun May 5 12:31:41 2019 +1000

    ctdb-tests: Add dump-logs command for local daemons
    
    Dump a single merged log to stdout.
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

commit a0a82f1b6a0d7d94b99982579fe13291d1e6a1b0
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue May 7 16:29:54 2019 +1000

    ctdb-tests: Add reqid wrapping test
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13930
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 8663e0a64fbdb9ea16babbfe87d6f5d7a7b72bbd
Author: Martin Schwenke <martin at meltin.net>
Date:   Mon May 6 15:22:49 2019 +1000

    ctdb-daemon: Never use 0 as a client ID
    
    ctdb_control_db_attach() and ctdb_control_db_detach() assume that any
    control with client ID 0 comes from another daemon and treat it
    specially.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13930
    
    Signed-off-by: Martin Schwenke <martin at meltin.net>
    Reviewed-by: Amitay Isaacs <amitay at gmail.com>

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

Summary of changes:
 ctdb/server/ctdb_daemon.c           | 48 ++++++++++++++++++++++++++++++++++++-
 ctdb/tests/local_daemons.sh         | 28 ++++++++++++++++++++++
 ctdb/tests/scripts/integration.bash |  1 +
 ctdb/tests/src/reqid_test.c         | 16 +++++++++++++
 4 files changed, 92 insertions(+), 1 deletion(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c
index c5733bb2592..acb40bdb8df 100644
--- a/ctdb/server/ctdb_daemon.c
+++ b/ctdb/server/ctdb_daemon.c
@@ -1051,6 +1051,44 @@ static int ctdb_clientpid_destructor(struct ctdb_client_pid_list *client_pid)
 	return 0;
 }
 
+static int get_new_client_id(struct reqid_context *idr,
+			     struct ctdb_client *client,
+			     uint32_t *out)
+{
+	uint32_t client_id;
+
+	client_id = reqid_new(idr, client);
+	/*
+	 * Some places in the code (e.g. ctdb_control_db_attach(),
+	 * ctdb_control_db_detach()) assign a special meaning to
+	 * client_id 0.  The assumption is that if client_id is 0 then
+	 * the control has come from another daemon.  Therefore, we
+	 * should never return client_id == 0.
+	 */
+	if (client_id == 0) {
+		/*
+		 * Don't leak ID 0.  This is safe because the ID keeps
+		 * increasing.  A test will be added to ensure that
+		 * this doesn't change.
+		 */
+		reqid_remove(idr, 0);
+
+		client_id = reqid_new(idr, client);
+	}
+
+	if (client_id == REQID_INVALID) {
+		return EINVAL;
+	}
+
+	if (client_id == 0) {
+		/* Every other ID must have been used and we can't use 0 */
+		reqid_remove(idr, 0);
+		return EINVAL;
+	}
+
+	*out = client_id;
+	return 0;
+}
 
 static void ctdb_accept_client(struct tevent_context *ev,
 			       struct tevent_fd *fde, uint16_t flags,
@@ -1094,7 +1132,15 @@ static void ctdb_accept_client(struct tevent_context *ev,
 
 	client->ctdb = ctdb;
 	client->fd = fd;
-	client->client_id = reqid_new(ctdb->idr, client);
+
+	ret = get_new_client_id(ctdb->idr, client, &client->client_id);
+	if (ret != 0) {
+		DBG_ERR("Unable to get client ID (%d)\n", ret);
+		close(fd);
+		talloc_free(client);
+		return;
+	}
+
 	client->pid = peer_pid;
 
 	client_pid = talloc(client, struct ctdb_client_pid_list);
diff --git a/ctdb/tests/local_daemons.sh b/ctdb/tests/local_daemons.sh
index 3c3897feb50..58a762b426d 100755
--- a/ctdb/tests/local_daemons.sh
+++ b/ctdb/tests/local_daemons.sh
@@ -119,6 +119,7 @@ setup_socket_wrapper ()
 	ln -s "$_socket_wrapper_so" "$_so"
 
 	_d="${directory}/sw"
+	rm -rf "$_d"
 	mkdir -p "$_d"
 }
 
@@ -399,6 +400,31 @@ local_daemons_print_socket ()
 	onnode -q "$_nodes" "${VALGRIND:-} ${_path} socket ctdbd"
 }
 
+local_daemons_dump_logs ()
+{
+	if [ $# -ne 1 ] || [ "$1" = "-h" ] ; then
+		local_daemons_generic_usage "dump-logs"
+	fi
+
+	_nodes="$1"
+	shift
+
+	onnode_common
+
+	# shellcheck disable=SC2016
+	# $CTDB_BASE must only be expanded under onnode, not in top-level shell
+	onnode -q "$_nodes" 'echo ${CTDB_BASE}/log.ctdb' |
+	while IFS='' read -r _l ; do
+		_dir=$(dirname "$_l")
+		_node=$(basename "$_dir")
+		# Add fake hostname after date and time, which are the
+		# first 2 words on each line
+		sed -e "s|^\\([^ ][^ ]* [^ ][^ ]*\\)|\\1 ${_node}|" "$_l"
+	done |
+	sort
+
+}
+
 usage ()
 {
 	cat <<EOF
@@ -410,6 +436,7 @@ Commands:
   stop           Stop specified daemon(s)
   onnode         Run a command in the environment of specified daemon(s)
   print-socket   Print the Unix domain socket used by specified daemon(s)
+  dump-logs      Dump logs for specified daemon(s) to stdout
 
 All commands use <directory> for daemon configuration
 
@@ -434,5 +461,6 @@ start) local_daemons_start "$@" ;;
 stop) local_daemons_stop "$@" ;;
 onnode) local_daemons_onnode "$@" ;;
 print-socket) local_daemons_print_socket "$@" ;;
+dump-logs) local_daemons_dump_logs "$@" ;;
 *) usage ;;
 esac
diff --git a/ctdb/tests/scripts/integration.bash b/ctdb/tests/scripts/integration.bash
index ce5bd576b24..32a729d0249 100644
--- a/ctdb/tests/scripts/integration.bash
+++ b/ctdb/tests/scripts/integration.bash
@@ -520,6 +520,7 @@ ctdb_init ()
 {
     local i
     for i in $(seq 1 5) ; do
+	ctdb_stop_all >/dev/null 2>&1 || :
 	ctdb_start_all || {
 	    echo "Start failed.  Trying again in a few seconds..."
 	    sleep_for 5
diff --git a/ctdb/tests/src/reqid_test.c b/ctdb/tests/src/reqid_test.c
index ec0c4a56df1..39f1fbdcc69 100644
--- a/ctdb/tests/src/reqid_test.c
+++ b/ctdb/tests/src/reqid_test.c
@@ -66,6 +66,22 @@ int main(void)
 	talloc_free(reqid_ctx);
 	assert(talloc_get_size(mem_ctx) == 0);
 
+	ret = reqid_init(mem_ctx, INT_MAX-1, &reqid_ctx);
+	assert(ret == 0);
+
+	reqid = reqid_new(reqid_ctx, data);
+	assert(reqid == INT_MAX);
+
+	reqid = reqid_new(reqid_ctx, data);
+	assert(reqid == 0);
+
+	reqid_remove(reqid_ctx, 0);
+
+	reqid = reqid_new(reqid_ctx, data);
+	assert(reqid == 1);
+
+	talloc_free(reqid_ctx);
+
 	talloc_free(mem_ctx);
 
 	return 0;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list