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 <[email protected]>
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 <[email protected]>
    Reviewed-by: Guenther Deschner <[email protected]>
    
    Autobuild-User(master): Günther Deschner <[email protected]>
    Autobuild-Date(master): Wed Jul 17 00:06:53 UTC 2024 on atb-devel-224

commit 340563633cab974f3b3420137fedf2dec85ca88c
Author: Martin Schwenke <[email protected]>
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 <[email protected]>
    Reviewed-by: Guenther Deschner <[email protected]>

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

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

Reply via email to