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

Restore edits after cherry-pick

This commit is contained in:
Alexander Presnyakov
2025-04-23 21:49:23 +00:00
parent 7199c974c9
commit ff25d4e35c
8 changed files with 33 additions and 39 deletions

View File

@@ -77,17 +77,17 @@ class ProgInfo(NamedTuple):
# on top level of process handling # on top level of process handling
# mcs-storagemanager starts conditionally inside mcs-loadbrm, but should be # mcs-storagemanager starts conditionally inside mcs-loadbrm, but should be
# stopped using cmapi # stopped using cmapi
ALL_MCS_PROGS: dict[str, ProgInfo] = { ALL_MCS_PROGS: dict[MCSProgs, ProgInfo] = {
# workernode starts on primary and non primary node with 1 or 2 added # workernode starts on primary and non primary node with 1 or 2 added
# to subcommand (DBRM_Worker1 - on primary, DBRM_Worker2 - non primary) # to subcommand (DBRM_Worker1 - on primary, DBRM_Worker2 - non primary)
MCSProgs.STORAGE_MANAGER.value: ProgInfo(15, 'mcs-storagemanager', '', False, 1), MCSProgs.STORAGE_MANAGER: ProgInfo(15, 'mcs-storagemanager', '', False, 1),
MCSProgs.WORKER_NODE.value: ProgInfo(13, 'mcs-workernode', 'DBRM_Worker{}', False, 1), MCSProgs.WORKER_NODE: ProgInfo(13, 'mcs-workernode', 'DBRM_Worker{}', False, 1),
MCSProgs.CONTROLLER_NODE.value: ProgInfo(11, 'mcs-controllernode', 'fg', True), MCSProgs.CONTROLLER_NODE: ProgInfo(11, 'mcs-controllernode', 'fg', True),
MCSProgs.PRIM_PROC.value: ProgInfo(5, 'mcs-primproc', '', False, 1), MCSProgs.PRIM_PROC: ProgInfo(5, 'mcs-primproc', '', False, 1),
MCSProgs.EXE_MGR.value: ProgInfo(9, 'mcs-exemgr', '', False, 1), MCSProgs.EXE_MGR: ProgInfo(9, 'mcs-exemgr', '', False, 1),
MCSProgs.WRITE_ENGINE_SERVER.value: ProgInfo(7, 'mcs-writeengineserver', '', False, 3), MCSProgs.WRITE_ENGINE_SERVER: ProgInfo(7, 'mcs-writeengineserver', '', False, 3),
MCSProgs.DML_PROC.value: ProgInfo(3, 'mcs-dmlproc', '', False), MCSProgs.DML_PROC: ProgInfo(3, 'mcs-dmlproc', '', False),
MCSProgs.DDL_PROC.value: ProgInfo(1, 'mcs-ddlproc', '', False), MCSProgs.DDL_PROC: ProgInfo(1, 'mcs-ddlproc', '', False),
} }
# constants for docker container dispatcher # constants for docker container dispatcher

View File

@@ -435,7 +435,6 @@ class ConfigController:
is_primary=node_config.is_primary_node(), is_primary=node_config.is_primary_node(),
use_sudo=use_sudo, use_sudo=use_sudo,
timeout=request_timeout, timeout=request_timeout,
is_read_only=node_config.is_read_only(),
) )
except CMAPIBasicError as err: except CMAPIBasicError as err:
raise_422_error( raise_422_error(
@@ -705,7 +704,6 @@ class ShutdownController:
is_primary=node_config.is_primary_node(), is_primary=node_config.is_primary_node(),
use_sudo=use_sudo, use_sudo=use_sudo,
timeout=timeout, timeout=timeout,
is_read_only=node_config.is_read_only(),
) )
except CMAPIBasicError as err: except CMAPIBasicError as err:
raise_422_error( raise_422_error(

View File

@@ -97,7 +97,6 @@ class FailoverAgent(AgentBase):
if not test_mode: if not test_mode:
MCSProcessManager.stop_node( MCSProcessManager.stop_node(
is_primary=nc.is_primary_node(), is_primary=nc.is_primary_node(),
is_read_only=nc.is_read_only(),
) )
logger.info( logger.info(
'FA.enterStandbyMode(): successfully stopped node.' 'FA.enterStandbyMode(): successfully stopped node.'

View File

@@ -540,11 +540,6 @@ def get_desired_nodes(config=DEFAULT_MCS_CONF_PATH):
return [ node.text for node in nodes ] return [ node.text for node in nodes ]
def get_read_only_nodes(root) -> list[str]:
"""Get names of read only nodes from config"""
return [node.text for node in root.findall('./ReadOnlyNodes/Node')]
def in_maintenance_state(config=DEFAULT_MCS_CONF_PATH): def in_maintenance_state(config=DEFAULT_MCS_CONF_PATH):
nc = NodeConfig() nc = NodeConfig()
root = nc.get_current_config_root(config, upgrade=False) root = nc.get_current_config_root(config, upgrade=False)

View File

@@ -7,7 +7,7 @@ from time import sleep
import psutil import psutil
from cmapi_server.exceptions import CMAPIBasicError from cmapi_server.exceptions import CMAPIBasicError
from cmapi_server.constants import MCS_INSTALL_BIN, ALL_MCS_PROGS, MCSProgs from cmapi_server.constants import MCS_INSTALL_BIN, ALL_MCS_PROGS, MCSProgs, ProgInfo
from cmapi_server.process_dispatchers.base import BaseDispatcher from cmapi_server.process_dispatchers.base import BaseDispatcher
from cmapi_server.process_dispatchers.systemd import SystemdDispatcher from cmapi_server.process_dispatchers.systemd import SystemdDispatcher
from cmapi_server.process_dispatchers.container import ( from cmapi_server.process_dispatchers.container import (
@@ -33,7 +33,7 @@ class MCSProcessManager:
e.g. re/-start or stop systemd services, run executable. e.g. re/-start or stop systemd services, run executable.
""" """
CONTROLLER_MAX_RETRY = 30 CONTROLLER_MAX_RETRY = 30
mcs_progs = {} mcs_progs: dict[str, ProgInfo] = {}
mcs_version_info = None mcs_version_info = None
dispatcher_name = None dispatcher_name = None
process_dispatcher: BaseDispatcher = None process_dispatcher: BaseDispatcher = None
@@ -48,7 +48,7 @@ class MCSProcessManager:
:rtype: str :rtype: str
""" """
if cls.dispatcher_name == 'systemd': if cls.dispatcher_name == 'systemd':
prog = MCSProgs[name] prog = MCSProgs(name)
return ALL_MCS_PROGS[prog].service_name return ALL_MCS_PROGS[prog].service_name
return name return name
@@ -98,7 +98,8 @@ class MCSProcessManager:
if cls.mcs_progs: if cls.mcs_progs:
logging.warning('Mcs ProcessHandler already detected processes.') logging.warning('Mcs ProcessHandler already detected processes.')
for prog_name, prog_info in ALL_MCS_PROGS.items(): for prog, prog_info in ALL_MCS_PROGS.items():
prog_name = prog.value
if os.path.exists(os.path.join(MCS_INSTALL_BIN, prog_name)): if os.path.exists(os.path.join(MCS_INSTALL_BIN, prog_name)):
cls.mcs_progs[prog_name] = prog_info cls.mcs_progs[prog_name] = prog_info
@@ -454,7 +455,6 @@ class MCSProcessManager:
is_primary: bool, is_primary: bool,
use_sudo: bool = True, use_sudo: bool = True,
timeout: int = 10, timeout: int = 10,
is_read_only: bool = False,
): ):
"""Stop mcs node processes. """Stop mcs node processes.
@@ -464,8 +464,6 @@ class MCSProcessManager:
:type use_sudo: bool, optional :type use_sudo: bool, optional
:param timeout: timeout for DMLProc gracefully stop using DBRM, seconds :param timeout: timeout for DMLProc gracefully stop using DBRM, seconds
:type timeout: int :type timeout: int
:param is_read_only: if true, doesn't stop WriteEngine
:type is_read_only: bool, optional
:raises CMAPIBasicError: immediately if one mcs process not stopped :raises CMAPIBasicError: immediately if one mcs process not stopped
""" """
# Every time try to stop all processes no matter primary it or slave, # Every time try to stop all processes no matter primary it or slave,
@@ -481,5 +479,5 @@ class MCSProcessManager:
def restart_node(cls, is_primary: bool, use_sudo: bool, is_read_only: bool = False): def restart_node(cls, is_primary: bool, use_sudo: bool, is_read_only: bool = False):
"""TODO: For next releases.""" """TODO: For next releases."""
if cls.get_running_mcs_procs(): if cls.get_running_mcs_procs():
cls.stop_node(is_primary, use_sudo, is_read_only) cls.stop_node(is_primary, use_sudo)
cls.start_node(is_primary, use_sudo, is_read_only) cls.start_node(is_primary, use_sudo, is_read_only)

View File

@@ -11,7 +11,7 @@ from time import sleep
import psutil import psutil
from cmapi_server.constants import ( from cmapi_server.constants import (
IFLAG, LIBJEMALLOC_DEFAULT_PATH, MCS_INSTALL_BIN, ALL_MCS_PROGS IFLAG, LIBJEMALLOC_DEFAULT_PATH, MCS_INSTALL_BIN, ALL_MCS_PROGS, MCSProgs
) )
from cmapi_server.exceptions import CMAPIBasicError from cmapi_server.exceptions import CMAPIBasicError
from cmapi_server.process_dispatchers.base import BaseDispatcher from cmapi_server.process_dispatchers.base import BaseDispatcher
@@ -126,7 +126,8 @@ class ContainerDispatcher(BaseDispatcher):
:return: command with arguments if needed :return: command with arguments if needed
:rtype: str :rtype: str
""" """
service_info = ALL_MCS_PROGS[service] prog = MCSProgs(service)
service_info = ALL_MCS_PROGS[prog]
command = os.path.join(MCS_INSTALL_BIN, service) command = os.path.join(MCS_INSTALL_BIN, service)
if service_info.subcommand: if service_info.subcommand:
@@ -188,7 +189,8 @@ class ContainerDispatcher(BaseDispatcher):
env=env_vars env=env_vars
) )
# TODO: any other way to detect service finished its initialisation? # TODO: any other way to detect service finished its initialisation?
sleep(ALL_MCS_PROGS[service].delay) prog = MCSProgs(service)
sleep(ALL_MCS_PROGS[prog].delay)
logger.debug(f'Started "{service}".') logger.debug(f'Started "{service}".')
if is_primary and service == 'DDLProc': if is_primary and service == 'DDLProc':

View File

@@ -7,7 +7,6 @@ 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.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 BaseNodeManipTestCase, tmp_mcs_config_filename from cmapi_server.test.unittest_global import BaseNodeManipTestCase, tmp_mcs_config_filename
from mcs_node_control.models.node_config import NodeConfig from mcs_node_control.models.node_config import NodeConfig

View File

@@ -4,23 +4,22 @@ import logging
import pwd import pwd
import re import re
import socket import socket
from os import mkdir, replace, chown from os import chown, mkdir, replace
from pathlib import Path from pathlib import Path
from shutil import copyfile from shutil import copyfile
from xml.dom import minidom # to pick up pretty printing functionality from xml.dom import minidom # to pick up pretty printing functionality
from lxml import etree from lxml import etree
from cmapi_server.constants import ( from cmapi_server.constants import (
DEFAULT_MCS_CONF_PATH, DEFAULT_SM_CONF_PATH, DEFAULT_MCS_CONF_PATH,
DEFAULT_SM_CONF_PATH,
MCS_MODULE_FILE_PATH, MCS_MODULE_FILE_PATH,
) )
# from cmapi_server.managers.process import MCSProcessManager
from mcs_node_control.models.misc import (
read_module_id, get_dbroots_list
)
from mcs_node_control.models.network_ifaces import get_network_interfaces
# from cmapi_server.managers.process import MCSProcessManager
from mcs_node_control.models.misc import get_dbroots_list, read_module_id
from mcs_node_control.models.network_ifaces import get_network_interfaces
module_logger = logging.getLogger() module_logger = logging.getLogger()
@@ -569,11 +568,15 @@ has dbroot {subel.text}')
return dbroots return dbroots
def get_read_only_nodes(self, root=None) -> list[str]:
"""Get names of read only nodes from config"""
root = root or self.get_current_config_root()
return [node.text for node in root.findall('./ReadOnlyNodes/Node')]
def is_read_only(self, root=None) -> bool: def is_read_only(self, root=None) -> bool:
"""Checks if this node is in read-only mode""" """Checks if this node is in read-only mode"""
from cmapi_server.helpers import get_read_only_nodes # Avoid circular import
root = root or self.get_current_config_root() root = root or self.get_current_config_root()
read_only_nodes = set(get_read_only_nodes(root)) read_only_nodes = set(self.get_read_only_nodes(root))
my_names = set(self.get_network_addresses_and_names()) my_names = set(self.get_network_addresses_and_names())
return bool(read_only_nodes.intersection(my_names)) return bool(read_only_nodes.intersection(my_names))