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
|
# 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
|
||||||
|
@@ -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(
|
||||||
|
@@ -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.'
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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':
|
||||||
|
@@ -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
|
||||||
|
@@ -4,7 +4,7 @@ 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
|
||||||
@@ -12,15 +12,14 @@ 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))
|
Reference in New Issue
Block a user