You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-10-31 18:30:33 +03:00
71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
from mcs_node_control.models.node_config import NodeConfig
|
|
from mr_kot import Status, check, check_all, fact, parametrize
|
|
from mr_kot.runner import Runner, RunResult
|
|
from mr_kot_fs_validators import GroupIs, HasMode, IsDir, OwnerIs
|
|
|
|
from cmapi_server.constants import MCS_DATA_PATH
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def run_state_checks(*, verbose: bool = False) -> RunResult:
|
|
"""Run state checks, log warnings/errors/failures, and exit the process on failure/error.
|
|
"""
|
|
logger.info("Starting invariant checks")
|
|
try:
|
|
runner = Runner(verbose=verbose, include_tags=True)
|
|
result = runner.run()
|
|
except Exception:
|
|
logger.exception('Unexpected exception during state checks')
|
|
sys.exit(1)
|
|
|
|
# Log each fail/error/warning for diagnostics
|
|
for item in result.items:
|
|
if item.status in (Status.FAIL, Status.ERROR, Status.WARN):
|
|
logger.error(
|
|
'State check with id=%s produced %s: %r',
|
|
item.id, item.status, item.evidence,
|
|
)
|
|
|
|
logger.info('Stats: overall=%s counts=%s', result.overall, {k.value: v for k, v in result.counts.items() if v != 0})
|
|
if result.overall in (Status.FAIL, Status.ERROR):
|
|
logger.error('State check failed, exiting')
|
|
sys.exit(1)
|
|
|
|
return result
|
|
|
|
@fact
|
|
def storage_type() -> str:
|
|
"""Provides storage type: shared_fs or s3."""
|
|
return 's3' if NodeConfig().s3_enabled() else 'shared_fs'
|
|
|
|
@fact
|
|
def is_shared_fs(storage_type: str) -> bool:
|
|
return storage_type == 'shared_fs'
|
|
|
|
@check(selector='is_shared_fs')
|
|
@parametrize(
|
|
'required_local_dir',
|
|
values=[
|
|
os.path.join(MCS_DATA_PATH, 'data1'),
|
|
os.path.join(MCS_DATA_PATH, 'data1', 'systemFiles'),
|
|
os.path.join(MCS_DATA_PATH, 'data1', 'systemFiles', 'dbrm'),
|
|
],
|
|
fail_fast=True,
|
|
)
|
|
def required_dirs_fs_state(required_local_dir: str) -> tuple[Status, str]:
|
|
status, ev = check_all(
|
|
required_local_dir,
|
|
IsDir(),
|
|
HasMode('1755'),
|
|
OwnerIs('mysql'),
|
|
GroupIs('mysql'),
|
|
)
|
|
return (status, ev)
|