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

More review fixes

This commit is contained in:
Alexander Presnyakov
2025-04-23 15:49:03 +00:00
parent 04015ae414
commit 245ccebba6
4 changed files with 22 additions and 21 deletions

View File

@@ -36,7 +36,7 @@ class MCSProcessManager:
mcs_progs = {} mcs_progs = {}
mcs_version_info = None mcs_version_info = None
dispatcher_name = None dispatcher_name = None
process_dispatcher = None process_dispatcher: BaseDispatcher = None
@classmethod @classmethod
def _get_prog_name(cls, name: str) -> str: def _get_prog_name(cls, name: str) -> str:
@@ -48,12 +48,13 @@ class MCSProcessManager:
:rtype: str :rtype: str
""" """
if cls.dispatcher_name == 'systemd': if cls.dispatcher_name == 'systemd':
return ALL_MCS_PROGS[name].service_name prog = MCSProgs[name]
return ALL_MCS_PROGS[prog].service_name
return name return name
@classmethod @classmethod
def _get_sorted_progs( def _get_sorted_progs(
cls, is_primary: bool, reverse: bool = False cls, is_primary: bool, reverse: bool = False, is_read_only: bool = False
) -> dict: ) -> dict:
"""Get sorted services dict. """Get sorted services dict.
@@ -73,6 +74,13 @@ class MCSProcessManager:
for prog_name, prog_info in cls.mcs_progs.items() for prog_name, prog_info in cls.mcs_progs.items()
if prog_name not in PRIMARY_PROGS if prog_name not in PRIMARY_PROGS
} }
if is_read_only:
logging.debug('Node is in read-only mode, skipping WriteEngine')
unsorted_progs.pop(
MCSProgs.WRITE_ENGINE_SERVER.value, None
)
if reverse: if reverse:
# stop sequence builds using stop_priority property # stop sequence builds using stop_priority property
return dict( return dict(
@@ -421,7 +429,7 @@ class MCSProcessManager:
:type is_read_only: bool, optional :type is_read_only: bool, optional
:raises CMAPIBasicError: immediately if one mcs process not started :raises CMAPIBasicError: immediately if one mcs process not started
""" """
for prog_name in cls._get_sorted_progs(is_primary): for prog_name in cls._get_sorted_progs(is_primary=is_primary, is_read_only=is_read_only):
if ( if (
cls.dispatcher_name == 'systemd' cls.dispatcher_name == 'systemd'
and prog_name == MCSProgs.STORAGE_MANAGER.value and prog_name == MCSProgs.STORAGE_MANAGER.value
@@ -436,12 +444,6 @@ class MCSProcessManager:
cls._wait_for_workernodes() cls._wait_for_workernodes()
if prog_name in (MCSProgs.DML_PROC.value, MCSProgs.DDL_PROC.value): if prog_name in (MCSProgs.DML_PROC.value, MCSProgs.DDL_PROC.value):
cls._wait_for_controllernode() cls._wait_for_controllernode()
if (
is_read_only and
prog_name == MCSProgs.WRITE_ENGINE_SERVER.value
):
logging.debug('Node is in read-only mode, not starting WriteEngine')
continue
if not cls.start(prog_name, is_primary, use_sudo): if not cls.start(prog_name, is_primary, use_sudo):
logging.error(f'Process "{prog_name}" not started properly.') logging.error(f'Process "{prog_name}" not started properly.')
raise CMAPIBasicError(f'Error while starting "{prog_name}".') raise CMAPIBasicError(f'Error while starting "{prog_name}".')
@@ -470,7 +472,7 @@ class MCSProcessManager:
# so use full available list of processes. Otherwise, it could cause # so use full available list of processes. Otherwise, it could cause
# undefined behaviour when primary gone and then recovers (failover # undefined behaviour when primary gone and then recovers (failover
# triggered 2 times). # triggered 2 times).
for prog_name in cls._get_sorted_progs(True, reverse=True): for prog_name in cls._get_sorted_progs(is_primary=True, reverse=True):
if not cls.stop(prog_name, is_primary, use_sudo): if not cls.stop(prog_name, is_primary, use_sudo):
logging.error(f'Process "{prog_name}" not stopped properly.') logging.error(f'Process "{prog_name}" not stopped properly.')
raise CMAPIBasicError(f'Error while stopping "{prog_name}"') raise CMAPIBasicError(f'Error while stopping "{prog_name}"')

View File

@@ -167,7 +167,7 @@ def remove_node(
if len(active_nodes) > 1: if len(active_nodes) > 1:
pm_num = _remove_node_from_PMS(c_root, node) pm_num = _remove_node_from_PMS(c_root, node)
is_read_only = node in helpers.get_read_only_nodes(c_root) is_read_only = node in node_config.get_read_only_nodes(c_root)
if not is_read_only: if not is_read_only:
_remove_WES(c_root, pm_num) _remove_WES(c_root, pm_num)

View File

@@ -65,7 +65,7 @@ class MCSProcessManagerTest(BaseProcessDispatcherCase):
def test_mcs_process_manager(self): def test_mcs_process_manager(self):
MCSProcessManager.detect('systemd', '') MCSProcessManager.detect('systemd', '')
for prog in MCSProcessManager._get_sorted_progs(True, True).values(): for prog in MCSProcessManager._get_sorted_progs(is_primary=True, reverse=True).values():
serv_name = self.get_systemd_serv_name(prog.service_name) serv_name = self.get_systemd_serv_name(prog.service_name)
os.system(f'{SYSTEMCTL} stop {serv_name}') os.system(f'{SYSTEMCTL} stop {serv_name}')
self.assertIsNone(MCSProcessManager.start_node(True)) self.assertIsNone(MCSProcessManager.start_node(True))
@@ -95,7 +95,7 @@ class MCSProcessManagerTest(BaseProcessDispatcherCase):
) )
) )
for prog in MCSProcessManager._get_sorted_progs(True).values(): for prog in MCSProcessManager._get_sorted_progs(is_primary=True).values():
serv_name = self.get_systemd_serv_name(prog.service_name) serv_name = self.get_systemd_serv_name(prog.service_name)
os.system(f'{SYSTEMCTL} start {serv_name}') os.system(f'{SYSTEMCTL} start {serv_name}')

View File

@@ -1,19 +1,17 @@
import logging import logging
import socket import socket
import unittest import unittest
from unittest.mock import patch, ANY from unittest.mock import ANY, patch
from lxml import etree from lxml import etree
from cmapi_server import node_manipulation from cmapi_server import node_manipulation
from cmapi_server.constants import MCS_DATA_PATH from cmapi_server.constants import MCS_DATA_PATH
from cmapi_server.helpers import get_read_only_nodes from cmapi_server.helpers import get_read_only_nodes
from cmapi_server.node_manipulation import add_dbroots_of_other_nodes, remove_dbroots_of_node from cmapi_server.node_manipulation import add_dbroots_of_other_nodes, remove_dbroots_of_node
from cmapi_server.test.unittest_global import ( from cmapi_server.test.unittest_global import BaseNodeManipTestCase, tmp_mcs_config_filename
tmp_mcs_config_filename, BaseNodeManipTestCase
)
from mcs_node_control.models.node_config import NodeConfig from mcs_node_control.models.node_config import NodeConfig
logging.basicConfig(level='DEBUG') logging.basicConfig(level='DEBUG')
SINGLE_NODE_XML = "./cmapi_server/SingleNode.xml" SINGLE_NODE_XML = "./cmapi_server/SingleNode.xml"
@@ -83,7 +81,7 @@ class NodeManipTester(BaseNodeManipTestCase):
root = nc.get_current_config_root(self.tmp_files[1]) root = nc.get_current_config_root(self.tmp_files[1])
# Check if read-only nodes section exists and is filled # Check if read-only nodes section exists and is filled
read_only_nodes = get_read_only_nodes(root) read_only_nodes = nc.get_read_only_nodes(root)
self.assertEqual(len(read_only_nodes), 1) self.assertEqual(len(read_only_nodes), 1)
self.assertEqual(read_only_nodes[0], self.NEW_NODE_NAME) self.assertEqual(read_only_nodes[0], self.NEW_NODE_NAME)
@@ -102,11 +100,12 @@ class NodeManipTester(BaseNodeManipTestCase):
# Test read-only node removal # Test read-only node removal
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 = get_read_only_nodes(root) read_only_nodes = nc.get_read_only_nodes(root)
self.assertEqual(len(read_only_nodes), 0) self.assertEqual(len(read_only_nodes), 0)
mock_rebalance_dbroots.assert_not_called() mock_rebalance_dbroots.assert_not_called()