From bfbaba57310a03e60f30d44b6dc127de5c77f960 Mon Sep 17 00:00:00 2001
From: Li Zhu
Date: Mon, 25 Sep 2023 14:04:21 -0400
Subject: [PATCH] Set longer shutdown time and fix power state error log
1.Extended the timeout to 14mins to accommodate the longer shutdown time.
2.Fixed the power state error log so that it logs the requested state
instead of the current power_state.
Test Plan:
PASS: Verify logged version is 2.2
PASS: Verify success path with no FIT delay ; HP and ZT servers
PASS: Verify timing of the loop with timeout of 14 minutes
PASS: Verify shutdown timeout handling when shutdown exceeds 14
minutes.
PASS: Verify install completes successfully when Power Off takes
close to but less than 14 minutes
PASS: Verify power state failure log reports proper state
Closes-Bug: 2038484
Signed-off-by: Li Zhu
Change-Id: Ic99a06dca9962fcae43b20e00d8ebcb127a80560
---
tools/rvmc/docker/rvmc.py | 42 +++++++++++++++++++++++++--------------
1 file changed, 27 insertions(+), 15 deletions(-)
diff --git a/tools/rvmc/docker/rvmc.py b/tools/rvmc/docker/rvmc.py
index 637d6a0f..da1640e8 100755
--- a/tools/rvmc/docker/rvmc.py
+++ b/tools/rvmc/docker/rvmc.py
@@ -1,7 +1,7 @@
#!/usr/bin/python3
###############################################################################
#
-# Copyright (c) 2019-2022 Wind River Systems, Inc.
+# Copyright (c) 2019-2023 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
@@ -131,7 +131,7 @@ from redfish.rest.v1 import InvalidCredentialsError
FEATURE_NAME = 'Redfish Virtual Media Controller'
VERSION_MAJOR = 2
-VERSION_MINOR = 1
+VERSION_MINOR = 2
POWER_ON = 'On'
POWER_OFF = "Off"
@@ -1073,7 +1073,7 @@ class VmcObject(object):
elog("BMC is not publishing any %s" % info)
self._exit(1)
- dlog3("ResetActions: %s" % reset_command_list)
+ ilog("ResetActions: %s" % reset_command_list)
# load the appropriate acceptable command list
if state == POWER_OFF:
@@ -1088,6 +1088,7 @@ class VmcObject(object):
for acceptable_command in acceptable_commands:
for reset_command in reset_command_list:
if reset_command == acceptable_command:
+ ilog("Selected Command: %s" % reset_command)
command = reset_command
break
else:
@@ -1113,30 +1114,41 @@ class VmcObject(object):
# this was not a power command
return
+ # Set the timeout in seconds (14 minutes = 840 seconds)
+ timeout = int(os.environ.get('RVMC_POWER_ACTION_TIMEOUT', 840))
+ ilog("%s timeout is %d seconds" % (stage, timeout))
+
+ # Get the start time
+ start_time = time.time()
+
+ # init wait duration
+ duration = 0
+
# poll for requested power state.
- poll_count = 0
- MAX_STATE_POLL_COUNT = 60 # some servers take longer than 10 seconds
- while poll_count < MAX_STATE_POLL_COUNT and self.power_state != state:
- time.sleep(3)
- poll_count = poll_count + 1
+ while time.time() - start_time < timeout and self.power_state != state:
+ time.sleep(10)
+
+ # update wait duration
+ duration = int(time.time() - start_time)
# get systems info
if self.make_request(operation=GET,
path=self.systems_member_url) is False:
- elog("Failed to Get System State (%i of %i)" %
- (poll_count, MAX_STATE_POLL_COUNT))
+ elog("Failed to Get System State (after %d secs)" %
+ (duration))
else:
# get powerState
self.power_state = self.get_key_value('PowerState')
if self.power_state != state:
- dlog1("waiting for power %s (%s) (%d)" %
- (state, self.power_state, poll_count))
+ dlog1("Waiting for Power %s (currently %s) (%d secs)" %
+ (state, self.power_state, duration))
+
if self.power_state != state:
- elog("Failed to Set System Power State to %s (%s)" %
- (self.power_state, self.systems_member_url))
+ elog("Failed to Set System Power State to %s after %d secs (%s)" %
+ (state, duration, self.systems_member_url))
self._exit(1)
else:
- ilog("%s verified (%d)" % (stage, poll_count))
+ ilog("%s verified (after %d seconds)" % (stage, duration))
######################################################################
# Get CD/DVD Virtual Media URL