You've already forked mariadb-columnstore-engine
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:
@@ -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)
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user