[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Wed Jul 17 00:07:01 UTC 2024


The branch, master has been updated
       via  8ba8fef8ac4 ctdb-tests: Correctly handle adding a deleted node at the end
       via  340563633ca ctdb-tests: Add more reloadnodes unit tests
      from  85d80240ec7 s4:torture: Do not set sr.in.info to info be we queried the info

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


- Log -----------------------------------------------------------------
commit 8ba8fef8ac4525d98fd2213ca57d9e983a045af6
Author: Martin Schwenke <mschwenke at ddn.com>
Date:   Thu Jul 11 12:14:07 2024 +1000

    ctdb-tests: Correctly handle adding a deleted node at the end
    
    The current fake_ctdbd code for reloading the nodes file overruns the
    allocation when adding a deleted node at the end.  This is a very
    unlikely case, but it might as well work.
    
    Check the size of the internal node map when marking a node deleted.
    Also, update the code that adds a node to correctly set the deleted
    flag when appropriate.
    
    The included test case tests this.
    
    Signed-off-by: Martin Schwenke <mschwenke at ddn.com>
    Reviewed-by: Guenther Deschner <gd at samba.org>
    
    Autobuild-User(master): Günther Deschner <gd at samba.org>
    Autobuild-Date(master): Wed Jul 17 00:06:53 UTC 2024 on atb-devel-224

commit 340563633cab974f3b3420137fedf2dec85ca88c
Author: Martin Schwenke <mschwenke at ddn.com>
Date:   Sat Jun 22 14:54:53 2024 +1000

    ctdb-tests: Add more reloadnodes unit tests
    
    There are no existing tests to exercise node IP address change
    detection.
    
    Signed-off-by: Martin Schwenke <mschwenke at ddn.com>
    Reviewed-by: Guenther Deschner <gd at samba.org>

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

Summary of changes:
 ....reloadnodes.013.sh => ctdb.reloadnodes.030.sh} |  9 ++++---
 ....reloadnodes.017.sh => ctdb.reloadnodes.031.sh} |  7 +++---
 ....reloadnodes.013.sh => ctdb.reloadnodes.032.sh} |  7 +++---
 ....reloadnodes.013.sh => ctdb.reloadnodes.033.sh} | 13 +++++-----
 ....reloadnodes.013.sh => ctdb.reloadnodes.034.sh} | 10 ++++----
 ....reloadnodes.017.sh => ctdb.reloadnodes.035.sh} | 11 +++++----
 .../{ctdb.unban.003.sh => ctdb.reloadnodes.040.sh} | 15 +++++++++---
 ctdb/tests/src/fake_ctdbd.c                        | 28 +++++++++++++---------
 8 files changed, 58 insertions(+), 42 deletions(-)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.013.sh => ctdb.reloadnodes.030.sh} (68%)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.017.sh => ctdb.reloadnodes.031.sh} (71%)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.013.sh => ctdb.reloadnodes.032.sh} (71%)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.013.sh => ctdb.reloadnodes.033.sh} (50%)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.013.sh => ctdb.reloadnodes.034.sh} (60%)
 copy ctdb/tests/UNIT/tool/{ctdb.reloadnodes.017.sh => ctdb.reloadnodes.035.sh} (52%)
 copy ctdb/tests/UNIT/tool/{ctdb.unban.003.sh => ctdb.reloadnodes.040.sh} (60%)


Changeset truncated at 500 lines:

diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.030.sh
similarity index 68%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.030.sh
index 1402b9dcb6d..ddf69b8ac9a 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.030.sh
@@ -2,12 +2,12 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected last node"
+define_test "3 nodes, 1st node changes IP address"
 
 setup_nodes <<EOF
-192.168.20.41
+192.168.20.51
 192.168.20.42
-#192.168.20.43
+192.168.20.43
 EOF
 
 setup_ctdbd <<EOF
@@ -18,8 +18,7 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 2 is DELETED
-ERROR: Node 2 is still connected
+Node 0 has changed IP address (was 192.168.20.41, now 192.168.20.51)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.031.sh
similarity index 71%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.031.sh
index b9a969410f6..61c7fab04fb 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.031.sh
@@ -2,11 +2,11 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected middle node"
+define_test "3 nodes, 2nd node changes IP address"
 
 setup_nodes <<EOF
 192.168.20.41
-#192.168.20.42
+192.168.20.52
 192.168.20.43
 EOF
 
@@ -18,8 +18,7 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 1 is DELETED
-ERROR: Node 1 is still connected
+Node 1 has changed IP address (was 192.168.20.42, now 192.168.20.52)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.032.sh
similarity index 71%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.032.sh
index 1402b9dcb6d..18b20649b46 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.032.sh
@@ -2,12 +2,12 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected last node"
+define_test "3 nodes, 3rd node changes IP address"
 
 setup_nodes <<EOF
 192.168.20.41
 192.168.20.42
-#192.168.20.43
+192.168.20.53
 EOF
 
 setup_ctdbd <<EOF
@@ -18,8 +18,7 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 2 is DELETED
-ERROR: Node 2 is still connected
+Node 2 has changed IP address (was 192.168.20.43, now 192.168.20.53)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.033.sh
similarity index 50%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.033.sh
index 1402b9dcb6d..b3aaf1f686c 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.033.sh
@@ -2,12 +2,12 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected last node"
+define_test "3 nodes, all nodes change IP address"
 
 setup_nodes <<EOF
-192.168.20.41
-192.168.20.42
-#192.168.20.43
+192.168.20.51
+192.168.20.52
+192.168.20.53
 EOF
 
 setup_ctdbd <<EOF
@@ -18,8 +18,9 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 2 is DELETED
-ERROR: Node 2 is still connected
+Node 0 has changed IP address (was 192.168.20.41, now 192.168.20.51)
+Node 1 has changed IP address (was 192.168.20.42, now 192.168.20.52)
+Node 2 has changed IP address (was 192.168.20.43, now 192.168.20.53)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.034.sh
similarity index 60%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.034.sh
index 1402b9dcb6d..e2d423d1c55 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.013.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.034.sh
@@ -2,12 +2,12 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected last node"
+define_test "3 nodes, list reversed nodes change IP address"
 
 setup_nodes <<EOF
-192.168.20.41
+192.168.20.43
 192.168.20.42
-#192.168.20.43
+192.168.20.41
 EOF
 
 setup_ctdbd <<EOF
@@ -18,8 +18,8 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 2 is DELETED
-ERROR: Node 2 is still connected
+Node 0 has changed IP address (was 192.168.20.41, now 192.168.20.43)
+Node 2 has changed IP address (was 192.168.20.43, now 192.168.20.41)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.035.sh
similarity index 52%
copy from ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.035.sh
index b9a969410f6..9c058bd20d3 100755
--- a/ctdb/tests/UNIT/tool/ctdb.reloadnodes.017.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.035.sh
@@ -2,11 +2,12 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "3 nodes, delete connected middle node"
+define_test "3 nodes, comment at beginning, deleted node, nodes move"
 
 setup_nodes <<EOF
+# Adding a comment!
 192.168.20.41
-#192.168.20.42
+192.168.20.42
 192.168.20.43
 EOF
 
@@ -18,8 +19,10 @@ NODEMAP
 EOF
 
 required_result 1 <<EOF
-Node 1 is DELETED
-ERROR: Node 1 is still connected
+Node 0 is DELETED
+ERROR: Node 0 is still connected
+Node 1 has changed IP address (was 192.168.20.42, now 192.168.20.41)
+Node 2 has changed IP address (was 192.168.20.43, now 192.168.20.42)
 ERROR: Nodes will not be reloaded due to previous error
 EOF
 
diff --git a/ctdb/tests/UNIT/tool/ctdb.unban.003.sh b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.040.sh
similarity index 60%
copy from ctdb/tests/UNIT/tool/ctdb.unban.003.sh
copy to ctdb/tests/UNIT/tool/ctdb.reloadnodes.040.sh
index 8b94f3011ba..19481b82755 100755
--- a/ctdb/tests/UNIT/tool/ctdb.unban.003.sh
+++ b/ctdb/tests/UNIT/tool/ctdb.reloadnodes.040.sh
@@ -2,7 +2,14 @@
 
 . "${TEST_SCRIPTS_DIR}/unit.sh"
 
-define_test "node not banned"
+define_test "3 nodes, comment added at end, new deleted node"
+
+setup_nodes <<EOF
+192.168.20.41
+192.168.20.42
+192.168.20.43
+# Adding a comment!
+EOF
 
 setup_ctdbd <<EOF
 NODEMAP
@@ -11,11 +18,13 @@ NODEMAP
 2       192.168.20.43   0x0
 EOF
 
-ok "Node 0 is not banned"
+ok <<EOF
+Node 3 is NEW
+EOF
 simple_test
 
 ok <<EOF
-Number of nodes:3
+Number of nodes:4 (including 1 deleted nodes)
 pnn:0 192.168.20.41    OK (THIS NODE)
 pnn:1 192.168.20.42    OK
 pnn:2 192.168.20.43    OK
diff --git a/ctdb/tests/src/fake_ctdbd.c b/ctdb/tests/src/fake_ctdbd.c
index 1b44f1de688..f3af4bd43f9 100644
--- a/ctdb/tests/src/fake_ctdbd.c
+++ b/ctdb/tests/src/fake_ctdbd.c
@@ -2499,7 +2499,15 @@ static void control_reload_nodes_file(TALLOC_CTX *mem_ctx,
 	}
 
 	for (i=0; i<nodemap->num; i++) {
-		struct node *node;
+		struct node *node = NULL;
+		ctdb_sock_addr zero = {};
+		int ret;
+
+		ret = ctdb_sock_addr_from_string("0.0.0.0", &zero, false);
+		if (ret != 0) {
+			/* Can't happen, but Coverity... */
+			goto fail;
+		}
 
 		if (i < node_map->num_nodes &&
 		    ctdb_sock_addr_same(&nodemap->node[i].addr,
@@ -2507,18 +2515,12 @@ static void control_reload_nodes_file(TALLOC_CTX *mem_ctx,
 			continue;
 		}
 
-		if (nodemap->node[i].flags & NODE_FLAGS_DELETED) {
-			int ret;
-
+		if (i < node_map->num_nodes &&
+		    nodemap->node[i].flags & NODE_FLAGS_DELETED) {
 			node = &node_map->node[i];
 
 			node->flags |= NODE_FLAGS_DELETED;
-			ret = ctdb_sock_addr_from_string("0.0.0.0", &node->addr,
-							 false);
-			if (ret != 0) {
-				/* Can't happen, but Coverity... */
-				goto fail;
-			}
+			node->addr = zero;
 
 			continue;
 		}
@@ -2543,7 +2545,11 @@ static void control_reload_nodes_file(TALLOC_CTX *mem_ctx,
 
 		node->addr = nodemap->node[i].addr;
 		node->pnn = nodemap->node[i].pnn;
-		node->flags = 0;
+		if (ctdb_sock_addr_same_ip(&node->addr, &zero)) {
+			node->flags = NODE_FLAGS_DELETED;
+		} else {
+			node->flags = 0;
+		}
 		node->capabilities = CTDB_CAP_DEFAULT;
 		node->recovery_disabled = false;
 		node->recovery_substate = NULL;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list