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