diff --git a/script/gspylib/component/DSS/dss_checker.py b/script/gspylib/component/DSS/dss_checker.py index 4f327f551bce398f5022fb3f6a153ce15ad6c92e..cfb81b4bb222390dec618c78dd75a23424bb834c 100644 --- a/script/gspylib/component/DSS/dss_checker.py +++ b/script/gspylib/component/DSS/dss_checker.py @@ -168,6 +168,29 @@ class DssConfig(): else: return False + @staticmethod + def check_process_available(logger, process, retry=5, interval=1): + ''' + The dssserver process is not available when running. + Then check if it is available. + ''' + logger.debug(f'Start to check {process} available.' ) + if process.find('dssserver') > -1: + cmd = 'dsscmd lsvg' + for cur in range(retry): + sts, out = CmdUtil.exec_by_popen(cmd) + if not sts: + # There is '.' in the out. + logger.debug(f'The dssserver is not available. Message: {out}') + if cur >= retry - 1: + return False + else: + time.sleep(interval) + else: + logger.debug(f'The dssserver is available. The result of the lsvg: {out}') + break + return True + @staticmethod def set_cm_manual_flag(inst_id, flag, logger): gauss_home = ClusterDir.get_gauss_home() @@ -200,9 +223,11 @@ class DssConfig(): check_flag = flag logger.log(f"Start to wait for {flag} to be started.") while timeout > 0: - if not DssConfig.check_process_exist(check_flag=check_flag): + if not (DssConfig.check_process_exist(check_flag=check_flag) and + DssConfig.check_process_available(logger, flag, retry=1)): if timeout % 5 == 0: - logger.debug(f'The process {flag} if not running.') + logger.debug( + f'The process {flag} if not running or not available.') timeout -= 1 time.sleep(1) continue diff --git a/script/gspylib/component/DSS/dss_comp.py b/script/gspylib/component/DSS/dss_comp.py index 75102a7b91cd034cbe2ed7d189f7b01ec7267057..552d71e117be44816906d529e5646cc99138d561 100644 --- a/script/gspylib/component/DSS/dss_comp.py +++ b/script/gspylib/component/DSS/dss_comp.py @@ -251,6 +251,9 @@ class Dss(BaseComponent): om init dss server ''' Dss.start_dss_server(self.logger, self.binPath) + if not DssConfig.check_process_available( + self.logger, 'dssserver'): + raise Exception(ErrorCode.GAUSS_512["GAUSS_51252"]) @staticmethod def catch_err(exist_so=True): diff --git a/script/gspylib/component/Kernel/DN_OLAP/DN_OLAP.py b/script/gspylib/component/Kernel/DN_OLAP/DN_OLAP.py index d3897eca7432170862a2042a139ae557e34f2e0c..3f5f5ec348d5f94a01182da6fe704d31ac3d5215 100644 --- a/script/gspylib/component/Kernel/DN_OLAP/DN_OLAP.py +++ b/script/gspylib/component/Kernel/DN_OLAP/DN_OLAP.py @@ -144,8 +144,6 @@ class DN_OLAP(Kernel): if self.paxos_mode: cmd += " -c" elif self.dss_mode: - if not DssConfig.check_process_exist('dssserver'): - raise Exception('The dssserver process does not exist.') vgname = EnvUtil.getEnv('VGNAME') dss_home = EnvUtil.getEnv('DSS_HOME') inst_id = DssInst.get_dss_id_from_key(dss_home)