Files
openGauss-OM/script/gspylib/inspection/items/database/CheckTableSpace.py
coolany eae422baf3 适配CM组件
Signed-off-by: coolany <kyosang@163.com>

support cgroup

追加合入
2022-03-05 18:51:52 +08:00

114 lines
4.8 KiB
Python

# -*- coding:utf-8 -*-
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
import os
from gspylib.inspection.common.CheckItem import BaseItem
from gspylib.inspection.common.CheckResult import ResultStatus
from base_utils.os.env_util import EnvUtil
class CheckTableSpace(BaseItem):
def __init__(self):
super(CheckTableSpace, self).__init__(self.__class__.__name__)
def getClusterDirectorys(self, dbNode):
"""
function : Get cluster all directorys
input : NA
output : List
"""
nodeDirs = []
# including cm_server, cm_agent, cn, dn, gtm, etcd, ssd
for dbInst in dbNode.datanodes:
nodeDirs.append(dbInst.datadir)
if (hasattr(dbInst, 'ssdDir') and len(dbInst.ssdDir) != 0):
nodeDirs.append(dbInst.ssdDir)
return nodeDirs
def doCheck(self):
self.result.val = ""
nodeInfo = self.cluster.getDbNodeByName(self.host)
clusterPathList = self.getClusterDirectorys(nodeInfo)
clusterPathList.append(self.cluster.appPath)
clusterPathList.append(self.cluster.logPath)
clusterPathList.append(EnvUtil.getEnv('GPHOME'))
clusterPathList.append(EnvUtil.getEnv('PGHOST'))
nodeInfo = self.cluster.getDbNodeByName(self.host)
if self.cluster.isSingleInstCluster():
dirPath = nodeInfo.datanodes[0].datadir
else:
dirPath = nodeInfo.coordinators[0].datadir
tableSpaceDir = os.path.join(dirPath, "pg_tblspc")
tableSpaceList = os.listdir(tableSpaceDir)
tablespacePaths = []
if (len(tableSpaceList)):
for filename in tableSpaceList:
if (os.path.islink(os.path.join(tableSpaceDir, filename))):
linkDir = os.readlink(
os.path.join(tableSpaceDir, filename))
if (os.path.isdir(linkDir)):
tablespacePaths.append(linkDir)
flag = "Normal"
for tableSpace in tablespacePaths:
if (tableSpace.find(' ') >= 0):
flag = "Error"
self.result.val += "Table space path[%s] contains spaces.\n" \
% tableSpace
# Support create tablespace in pg_location dir for V1R7
if (tableSpace.find(os.path.join(dirPath, "pg_location")) == 0):
continue
tableSpaces = tableSpace.split('/')
for clusterPath in clusterPathList:
clusterPaths = clusterPath.split('/')
if (tableSpace.find(clusterPath) == 0 and
tableSpaces[:len(clusterPaths)] == clusterPaths):
if (flag == "Normal"):
flag = "Warning"
self.result.val += "Table space path[%s] and cluster " \
"path[%s] are nested.\n" % (
tableSpace, clusterPath)
elif (clusterPath.find(tableSpace) == 0 and
clusterPaths[:len(tableSpaces)] == tableSpaces):
flag = "Error"
self.result.val += "Table space path[%s] and cluster " \
"path[%s] are nested.\n" % (tableSpace,
clusterPath)
else:
continue
for tableSpace1 in tablespacePaths:
tableSpaces1 = tableSpace1.split('/')
for tableSpace2 in tablespacePaths:
if (tableSpace1 == tableSpace2):
continue
tableSpaces2 = tableSpace2.split('/')
if (tableSpace1.find(tableSpace2) == 0 and
tableSpaces1[:len(tableSpaces2)] == tableSpaces2):
flag = "Error"
self.result.val += "Table space path[%s] and table space" \
" path[%s] are nested.\n" \
% (tableSpace1, tableSpace2)
if (flag == "Error"):
self.result.rst = ResultStatus.NG
elif (flag == "Warning"):
self.result.rst = ResultStatus.WARNING
else:
self.result.rst = ResultStatus.OK
self.result.val = "All table space path is normal."