1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-07 03:22:57 +03:00

Manually remove read-only node from ReadOnlyNodes on node removal (because nodes are only deactivated)

This commit is contained in:
Alexander Presnyakov
2025-07-23 20:05:37 +00:00
parent a193104ee1
commit f956f597a0
2 changed files with 12 additions and 2 deletions

View File

@@ -178,8 +178,14 @@ def remove_node(
_remove_Module_entries(c_root, node) _remove_Module_entries(c_root, node)
_remove_from_ExeMgrs(c_root, node) _remove_from_ExeMgrs(c_root, node)
# FIXME MCOL-6105: for some reason deactivate_only is always True, so the nodes are never removed from InactiveNodes
if deactivate_only: if deactivate_only:
_deactivate_node(c_root, node) _deactivate_node(c_root, node)
# Remove node from ReadOnlyNodes if it is present there
read_only_nodes = c_root.find('./ReadOnlyNodes')
if read_only_nodes is not None:
__remove_helper(read_only_nodes, node)
else: else:
# TODO: unspecific name, need to think of a better one # TODO: unspecific name, need to think of a better one
_remove_node(c_root, node) _remove_node(c_root, node)

View File

@@ -107,16 +107,20 @@ class NodeManipTester(BaseNodeManipTestCase):
mock_update_dbroots_of_readonly_nodes.reset_mock() mock_update_dbroots_of_readonly_nodes.reset_mock()
# Test read-only node removal # Test read-only node removal
# Note: deactivate_only is always True in production, so node is only deactivated, not fully removed from config sections.
node_manipulation.remove_node( node_manipulation.remove_node(
self.NEW_NODE_NAME, self.tmp_files[1], self.tmp_files[2], self.NEW_NODE_NAME, self.tmp_files[1], self.tmp_files[2]
deactivate_only=False,
) )
nc = NodeConfig() nc = NodeConfig()
root = nc.get_current_config_root(self.tmp_files[2]) root = nc.get_current_config_root(self.tmp_files[2])
read_only_nodes = nc.get_read_only_nodes(root) read_only_nodes = nc.get_read_only_nodes(root)
# Node should be removed from ReadOnlyNodes (current code does this), but not from InactiveNodes/DesiredNodes
self.assertEqual(len(read_only_nodes), 0) self.assertEqual(len(read_only_nodes), 0)
inactive_nodes = root.find('./InactiveNodes')
self.assertTrue(any(n.text == self.NEW_NODE_NAME for n in inactive_nodes.findall('./Node')))
mock_rebalance_dbroots.assert_not_called() mock_rebalance_dbroots.assert_not_called()
mock_move_primary_node.assert_not_called() mock_move_primary_node.assert_not_called()
mock_update_dbroots_of_readonly_nodes.assert_called_once() mock_update_dbroots_of_readonly_nodes.assert_called_once()