[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