You've already forked mariadb-columnstore-engine
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:
@@ -77,17 +77,17 @@ class ProgInfo(NamedTuple):
|
||||
# on top level of process handling
|
||||
# mcs-storagemanager starts conditionally inside mcs-loadbrm, but should be
|
||||
# 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
|
||||
# to subcommand (DBRM_Worker1 - on primary, DBRM_Worker2 - non primary)
|
||||
MCSProgs.STORAGE_MANAGER.value: ProgInfo(15, 'mcs-storagemanager', '', False, 1),
|
||||
MCSProgs.WORKER_NODE.value: ProgInfo(13, 'mcs-workernode', 'DBRM_Worker{}', False, 1),
|
||||
MCSProgs.CONTROLLER_NODE.value: ProgInfo(11, 'mcs-controllernode', 'fg', True),
|
||||
MCSProgs.PRIM_PROC.value: ProgInfo(5, 'mcs-primproc', '', False, 1),
|
||||
MCSProgs.EXE_MGR.value: ProgInfo(9, 'mcs-exemgr', '', False, 1),
|
||||
MCSProgs.WRITE_ENGINE_SERVER.value: ProgInfo(7, 'mcs-writeengineserver', '', False, 3),
|
||||
MCSProgs.DML_PROC.value: ProgInfo(3, 'mcs-dmlproc', '', False),
|
||||
MCSProgs.DDL_PROC.value: ProgInfo(1, 'mcs-ddlproc', '', False),
|
||||
MCSProgs.STORAGE_MANAGER: ProgInfo(15, 'mcs-storagemanager', '', False, 1),
|
||||
MCSProgs.WORKER_NODE: ProgInfo(13, 'mcs-workernode', 'DBRM_Worker{}', False, 1),
|
||||
MCSProgs.CONTROLLER_NODE: ProgInfo(11, 'mcs-controllernode', 'fg', True),
|
||||
MCSProgs.PRIM_PROC: ProgInfo(5, 'mcs-primproc', '', False, 1),
|
||||
MCSProgs.EXE_MGR: ProgInfo(9, 'mcs-exemgr', '', False, 1),
|
||||
MCSProgs.WRITE_ENGINE_SERVER: ProgInfo(7, 'mcs-writeengineserver', '', False, 3),
|
||||
MCSProgs.DML_PROC: ProgInfo(3, 'mcs-dmlproc', '', False),
|
||||
MCSProgs.DDL_PROC: ProgInfo(1, 'mcs-ddlproc', '', False),
|
||||
}
|
||||
|
||||
# constants for docker container dispatcher
|
||||
|
@@ -435,7 +435,6 @@ class ConfigController:
|
||||
is_primary=node_config.is_primary_node(),
|
||||
use_sudo=use_sudo,
|
||||
timeout=request_timeout,
|
||||
is_read_only=node_config.is_read_only(),
|
||||
)
|
||||
except CMAPIBasicError as err:
|
||||
raise_422_error(
|
||||
@@ -705,7 +704,6 @@ class ShutdownController:
|
||||
is_primary=node_config.is_primary_node(),
|
||||
use_sudo=use_sudo,
|
||||
timeout=timeout,
|
||||
is_read_only=node_config.is_read_only(),
|
||||
)
|
||||
except CMAPIBasicError as err:
|
||||
raise_422_error(
|
||||
|
@@ -97,7 +97,6 @@ class FailoverAgent(AgentBase):
|
||||
if not test_mode:
|
||||
MCSProcessManager.stop_node(
|
||||
is_primary=nc.is_primary_node(),
|
||||
is_read_only=nc.is_read_only(),
|
||||
)
|
||||
logger.info(
|
||||
'FA.enterStandbyMode(): successfully stopped node.'
|
||||
|
@@ -540,11 +540,6 @@ def get_desired_nodes(config=DEFAULT_MCS_CONF_PATH):
|
||||
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):
|
||||
nc = NodeConfig()
|
||||
root = nc.get_current_config_root(config, upgrade=False)
|
||||
|
@@ -7,7 +7,7 @@ from time import sleep
|
||||
import psutil
|
||||
|
||||
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.systemd import SystemdDispatcher
|
||||
from cmapi_server.process_dispatchers.container import (
|
||||
@@ -33,7 +33,7 @@ class MCSProcessManager:
|
||||
e.g. re/-start or stop systemd services, run executable.
|
||||
"""
|
||||
CONTROLLER_MAX_RETRY = 30
|
||||
mcs_progs = {}
|
||||
mcs_progs: dict[str, ProgInfo] = {}
|
||||
mcs_version_info = None
|
||||
dispatcher_name = None
|
||||
process_dispatcher: BaseDispatcher = None
|
||||
@@ -48,7 +48,7 @@ class MCSProcessManager:
|
||||
:rtype: str
|
||||
"""
|
||||
if cls.dispatcher_name == 'systemd':
|
||||
prog = MCSProgs[name]
|
||||
prog = MCSProgs(name)
|
||||
return ALL_MCS_PROGS[prog].service_name
|
||||
return name
|
||||
|
||||
@@ -98,7 +98,8 @@ class MCSProcessManager:
|
||||
if cls.mcs_progs:
|
||||
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)):
|
||||
cls.mcs_progs[prog_name] = prog_info
|
||||
|
||||
@@ -454,7 +455,6 @@ class MCSProcessManager:
|
||||
is_primary: bool,
|
||||
use_sudo: bool = True,
|
||||
timeout: int = 10,
|
||||
is_read_only: bool = False,
|
||||
):
|
||||
"""Stop mcs node processes.
|
||||
|
||||
@@ -464,8 +464,6 @@ class MCSProcessManager:
|
||||
:type use_sudo: bool, optional
|
||||
:param timeout: timeout for DMLProc gracefully stop using DBRM, seconds
|
||||
: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
|
||||
"""
|
||||
# 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):
|
||||
"""TODO: For next releases."""
|
||||
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)
|
||||
|
@@ -11,7 +11,7 @@ from time import sleep
|
||||
import psutil
|
||||
|
||||
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.process_dispatchers.base import BaseDispatcher
|
||||
@@ -126,7 +126,8 @@ class ContainerDispatcher(BaseDispatcher):
|
||||
:return: command with arguments if needed
|
||||
: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)
|
||||
|
||||
if service_info.subcommand:
|
||||
@@ -188,7 +189,8 @@ class ContainerDispatcher(BaseDispatcher):
|
||||
env=env_vars
|
||||
)
|
||||
# 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}".')
|
||||
|
||||
if is_primary and service == 'DDLProc':
|
||||
|
@@ -7,7 +7,6 @@ from lxml import etree
|
||||
|
||||
from cmapi_server import node_manipulation
|
||||
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.test.unittest_global import BaseNodeManipTestCase, tmp_mcs_config_filename
|
||||
from mcs_node_control.models.node_config import NodeConfig
|
||||
|
@@ -4,23 +4,22 @@ import logging
|
||||
import pwd
|
||||
import re
|
||||
import socket
|
||||
from os import mkdir, replace, chown
|
||||
from os import chown, mkdir, replace
|
||||
from pathlib import Path
|
||||
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 cmapi_server.constants import (
|
||||
DEFAULT_MCS_CONF_PATH, DEFAULT_SM_CONF_PATH,
|
||||
DEFAULT_MCS_CONF_PATH,
|
||||
DEFAULT_SM_CONF_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()
|
||||
|
||||
@@ -569,11 +568,15 @@ has dbroot {subel.text}')
|
||||
|
||||
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:
|
||||
"""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()
|
||||
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())
|
||||
return bool(read_only_nodes.intersection(my_names))
|
Reference in New Issue
Block a user