om仓迁移
This commit is contained in:
133
script/gspylib/common/Signal.py
Normal file
133
script/gspylib/common/Signal.py
Normal file
@ -0,0 +1,133 @@
|
||||
# -*- 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.
|
||||
# ----------------------------------------------------------------------------
|
||||
# Description : Signal.py is utility to process signal
|
||||
#############################################################################
|
||||
import sys
|
||||
import signal
|
||||
|
||||
sys.path.append(sys.path[0] + "/../../")
|
||||
from gspylib.common.ErrorCode import ErrorCode
|
||||
|
||||
|
||||
class Signal(object):
|
||||
|
||||
##########################################################################
|
||||
# init signal handler
|
||||
##########################################################################
|
||||
|
||||
def __init__(self, logger):
|
||||
"""
|
||||
function: initialize signal handler
|
||||
input : object logger
|
||||
output: NA
|
||||
"""
|
||||
self.logger = logger
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGQUIT, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGTERM, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGALRM, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGHUP, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGUSR1, signal.SIG_IGN)
|
||||
signal.signal(signal.SIGUSR2, signal.SIG_IGN)
|
||||
|
||||
def setSignalEvent(self, functionName=None):
|
||||
"""
|
||||
function: initialize signal handler
|
||||
input : function
|
||||
output: NA
|
||||
"""
|
||||
if (functionName is not None):
|
||||
signal.signal(signal.SIGINT, functionName)
|
||||
else:
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
|
||||
def print_signal_stack(self, frame):
|
||||
"""
|
||||
function: Function to print signal stack
|
||||
input : frame
|
||||
output: NA
|
||||
"""
|
||||
if (self.logger is None):
|
||||
return
|
||||
try:
|
||||
import inspect
|
||||
stacks = inspect.getouterframes(frame)
|
||||
for curr in range(len(stacks)):
|
||||
stack = stacks[curr]
|
||||
self.logger.debug("Stack level: %d. File: %s. Function: %s. "
|
||||
"LineNo: %d." % (curr, stack[1], stack[3],
|
||||
stack[2]))
|
||||
self.logger.debug("Code: %s." %
|
||||
(stack[4][0].strip().strip("\n")))
|
||||
except Exception as e:
|
||||
self.logger.debug("Failed to print signal stack. Error: \n%s"
|
||||
% str(e))
|
||||
|
||||
def raise_handler(self, signal_num, frame):
|
||||
"""
|
||||
function: Function to raise handler
|
||||
input : signal_num, frame
|
||||
output: NA
|
||||
"""
|
||||
if (self.logger is not None):
|
||||
self.logger.debug("Received signal[%d]." % (signal_num))
|
||||
self.print_signal_stack(frame)
|
||||
raise Exception(ErrorCode.GAUSS_516["GAUSS_51614"] % (signal_num))
|
||||
|
||||
def setupTimeoutHandler(self):
|
||||
"""
|
||||
function: Function to set up time out handler
|
||||
input : NA
|
||||
output: NA
|
||||
"""
|
||||
signal.signal(signal.SIGALRM, self.timeout_handler)
|
||||
|
||||
def setTimer(self, timeout):
|
||||
"""
|
||||
function: Function to set timer
|
||||
input : timeout
|
||||
output: NA
|
||||
"""
|
||||
self.logger.debug("Set timer. The timeout: %d." % timeout)
|
||||
signal.signal(signal.SIGALRM, self.timeout_handler)
|
||||
signal.alarm(timeout)
|
||||
|
||||
def resetTimer(self):
|
||||
"""
|
||||
function: Reset timer
|
||||
input : NA
|
||||
output: NA
|
||||
"""
|
||||
signal.signal(signal.SIGALRM, signal.SIG_IGN)
|
||||
self.logger.debug("Reset timer. Left time: %d." % signal.alarm(0))
|
||||
|
||||
def timeout_handler(self, signal_num, frame):
|
||||
"""
|
||||
function: Received the timeout signal
|
||||
input : signal_num, frame
|
||||
output: NA
|
||||
"""
|
||||
if (self.logger is not None):
|
||||
self.logger.debug("Received the timeout signal: [%d]."
|
||||
% (signal_num))
|
||||
self.print_signal_stack(frame)
|
||||
raise Timeout("Time out.")
|
||||
|
||||
|
||||
class Timeout(Exception):
|
||||
pass
|
||||
Reference in New Issue
Block a user