!503 【资源池化】 OM支持NoF/NoF+接口

Merge pull request !503 from Hemny/master-dev
This commit is contained in:
opengauss_bot 2023-07-21 02:26:26 +00:00 committed by Gitee
commit 104816a5e7
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 69 additions and 17 deletions

View File

@ -256,8 +256,49 @@ class DiskUtil(object):
return output.split('\n')
@staticmethod
def get_scsi_dev_id(dev_name):
cmd = '/lib/udev/scsi_id -g -u {}'.format(dev_name)
def get_disk_dev_id(dev_name):
cmd = 'udevadm info -q symlink {}'.format(dev_name)
sts, out = CmdUtil.getstatusoutput_by_fast_popen(cmd)
if sts not in [0]:
raise Exception(ErrorCode.GAUSS_504["GAUSS_50422"] %
str(out).strip())
if out.find('disk/by-id/scsi-') != -1:
strtmp = out[out.index('disk/by-id/scsi-') + len('disk/by-id/scsi-'):]
if out.find(' ') != -1:
strtmp = strtmp.split()[0]
return strtmp.strip()
if out.find('disk/by-id/ultrapath') != -1:
strtmp = out[out.index('disk/by-id/ultrapath') + len('disk/by-id/ultrapath'):]
if out.find(' ') != -1:
strtmp = strtmp.split()[0]
strtmp = strtmp.split('-', 1)[1]
return strtmp.strip()
if out.find('disk/by-id/wwn-') != -1:
strtmp = out[out.index('disk/by-id/wwn-') + len('disk/by-id/wwn-'):]
if out.find(' ') != -1:
strtmp = strtmp.split()[0]
return strtmp.strip()
if out.find('disk/by-id/ata-') != -1:
strtmp = out[out.index('disk/by-id/ata-') + len('disk/by-id/ata-'):]
if out.find(' ') != -1:
strtmp = strtmp.split()[0]
return strtmp.strip()
if out.find('disk/by-id/dm-uuid-') != -1:
strtmp = out[out.index('disk/by-id/dm-uuid-') + len('disk/by-id/dm-uuid-'):]
if out.find(' ') != -1:
strtmp = strtmp.split()[0]
return strtmp.strip()
return out.strip()
@staticmethod
def get_disk_dev_name(dev_name):
cmd = 'udevadm info -q name {}'.format(dev_name)
sts, out = CmdUtil.getstatusoutput_by_fast_popen(cmd)
if sts not in [0]:
raise Exception(ErrorCode.GAUSS_504["GAUSS_50422"] %

View File

@ -233,6 +233,7 @@ class DefaultValue():
GREY_UPGRADE_STEP_UPGRADE_PROCESS = 3
CAP_WIO = "CAP_SYS_RAWIO"
CAP_ADM = "CAP_SYS_ADMIN"
# env parameter
MPPRC_FILE_ENV = "MPPDB_ENV_SEPARATE_PATH"

View File

@ -402,6 +402,8 @@ class Udev():
def __init__(self, attr='', **kwargs):
# uuid soft_link_name user, group
dev_id = ''
dev_name = ''
if shutil.which('hot_add'):
self.KERNEL = 'sd*'
else:
@ -410,12 +412,19 @@ class Udev():
self.SUBSYSTEM = 'block'
self.RESULT, self.SYMLINK, self.OWNER, self.GROUP = '', '', '', '',
if attr:
self.RESULT, self.SYMLINK, self.OWNER, self.GROUP = attr
self.PROGRAM = ' '.join([
'/lib/udev/scsi_id', '--whitelisted', '--replace-whitespace',
'--device=/dev/$name'
])
dev_id, dev_name, self.SYMLINK, self.OWNER, self.GROUP = attr
self.PROGRAM = ' '.join(['/usr/bin/udevadm', 'info', '-q', 'symlink', '/dev/$name'])
self.RESULT = '*{}*'.format(dev_id)
self.MODE = '0660'
if dev_name.startswith('sd'):
self.KERNEL = 'sd*'
elif dev_name.startswith('nvme'):
self.KERNEL = 'nvme*'
elif dev_name.startswith('ultrapath'):
self.KERNEL = 'ultrapath*'
elif dev_name.startswith('dm-'):
self.KERNEL = 'dm-*'
for key, val in kwargs.items():
setattr(self, key, val)
@ -450,9 +459,10 @@ class UdevContext():
DSS_UDEV_NAME = 'zz-dss_%s.rules'
DSS_UDEV_DIR = '/etc/udev/rules.d/'
def __init__(self, identity, db_info, uuid_getter=''):
def __init__(self, identity, db_info, uuid_getter='', devname_getter=''):
self.user, self.group = identity
self.uuid_getter = uuid_getter
self.devname_getter = devname_getter
self.db_info = db_info
@property
@ -515,16 +525,16 @@ class UdevContext():
if isinstance(info, dict) and key == 'dss_pri_disks':
for dss_id, phy_disk in enumerate(info.values()):
yield str(
Udev((self.uuid_getter(phy_disk), alias % (str(dss_id)),
Udev((self.uuid_getter(phy_disk), self.devname_getter(phy_disk), alias % (str(dss_id)),
self.user, self.group)))
elif isinstance(info, dict):
# shared disk
for phy_disk in info.values():
yield str(
Udev((self.uuid_getter(phy_disk), alias, self.user,
Udev((self.uuid_getter(phy_disk), self.devname_getter(phy_disk), alias, self.user,
self.group)))
elif isinstance(info, str):
# the disk used by cm
yield str(
Udev(
(self.uuid_getter(info), alias, self.user, self.group)))
(self.uuid_getter(info), self.devname_getter(phy_disk), alias, self.user, self.group)))

View File

@ -922,7 +922,7 @@ Common options:
self.logger.debug("Creating dss disk link.")
context = list(
UdevContext((self.user, self.group), self.clusterInfo,
DiskUtil.get_scsi_dev_id))
DiskUtil.get_disk_dev_id, DiskUtil.get_disk_dev_name))
self.logger.debug("Checking dss udev directory.")
if os.path.isdir(UdevContext.DSS_UDEV_DIR):
@ -931,7 +931,7 @@ Common options:
for disk in UdevContext.get_all_phy_disk(self.clusterInfo):
cmd = "cd %s; grep -iro '%s' | grep -v grep | grep -v '%s'" % (
UdevContext.DSS_UDEV_DIR, DiskUtil.get_scsi_dev_id(disk),
UdevContext.DSS_UDEV_DIR, DiskUtil.get_disk_dev_id(disk),
UdevContext.DSS_UDEV_NAME % self.user)
sts, out = subprocess.getstatusoutput(cmd)
if sts == 1:
@ -2697,10 +2697,10 @@ Common options:
FileUtil.changeMode(DefaultValue.BIN_FILE_MODE,
os.path.join(clib_app, file_))
caps = ['perctrl', 'cm_persist']
for file_ in caps:
FileUtil.change_caps(DefaultValue.CAP_WIO,
os.path.join(clib_app, file_))
os.path.join(clib_app, 'cm_persist'))
FileUtil.change_caps('{},{}'.format(DefaultValue.CAP_ADM, DefaultValue.CAP_WIO),
os.path.join(clib_app, 'perctrl'))
self.logger.debug("Successfully modified dss cap permissions.")
def fix_dss_dir_permission(self):