def get(self, init_start=False, retry_count=7):
"""Get or start switch instance.
Args:
init_start(bool): Perform switch start operation or not
retry_count(int): Number of retries to start(restart) switch
Returns:
None or raise an exception.
Notes:
Also self.opts.fail_ctrl attribute affects logic of this method.
fail_ctrl is set in py.test command line options (read py.test --help for more information).
"""
# If fail_ctrl != "restart", restart retries won't be performed
if self.opts.fail_ctrl != "restart":
retry_count = 1
for retry in range(retry_count):
try:
if retry == 0:
if init_start:
self.start()
else:
self.waiton()
else:
self.restart(mode=self.default_restart_type)
break
except KeyboardInterrupt:
message = "KeyboardInterrupt while checking switch %s(%s)..." % (self.name, self.ipaddr)
self.class_logger.info(message)
self.sanitize()
pytest.exit(message)
except Exception:
self.class_logger.warning("Error while checking switch %s(%s)..." % (self.name, self.ipaddr))
retry += 1
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback_message = traceback.format_exception(exc_type, exc_value, exc_traceback)
message = "Error while checking switch %s(%s):\n%s" % (self.name, self.ipaddr, "".join(traceback_message))
sys.stderr.write(message)
sys.stderr.flush()
self.class_logger.error(message)
if retry > 4:
self.class_logger.warning(
"Could not complete switch start method for the fourth time. Trying to "
"reset the DB...")
self.db_corruption = True
if retry >= retry_count + 1:
message = "Could not complete start switch method after {0} retries. Something " \
"went wrong...\n".format(retry_count)
sys.stderr.write(message)
sys.stderr.flush()
self.class_logger.error(message)
if self.opts.fail_ctrl != "ignore":
pytest.exit(message)
else:
pytest.fail(message)
评论列表
文章目录