Fix and simplify reboot stress test. Add new env stuff.
Added stress environment var for max_instances.
Added tempest var for log_level of rest_client.
Change-Id: Ia92536a547cdab4d2496bd9ba9067be3595b79cd
xxxxx
Change-Id: I8c2f499a41f74c2fe6fb08c80ab6fc31f6b93426
diff --git a/stress/test_server_actions.py b/stress/test_server_actions.py
index 3cf3698..7080630 100644
--- a/stress/test_server_actions.py
+++ b/stress/test_server_actions.py
@@ -25,7 +25,7 @@
# local imports
import test_case
import pending_action
-from tempest.exceptions import TimeoutException
+from tempest.exceptions import TimeoutException, Duplicate
from utils.util import *
@@ -52,51 +52,35 @@
self._logger.info('no ACTIVE instances to reboot')
return
- _reboot_type = kwargs.get('type', 'SOFT')
+ _reboot_arg = kwargs.get('type', 'SOFT')
# select active vm to reboot and then send request to nova controller
target = random.choice(active_vms)
reboot_target = target[0]
+ # It seems that doing a reboot when in reboot is an error.
+ try:
+ response, body = manager.servers_client.reboot(
+ reboot_target['id'],
+ _reboot_arg)
+ except Duplicate:
+ return
- response, body = manager.servers_client.reboot(
- reboot_target['id'],
- _reboot_type)
if (response.status != 202):
self._logger.error("response: %s" % response)
raise Exception
- if _reboot_type == 'SOFT':
- state_name = 'REBOOT'
+ if _reboot_arg == 'SOFT':
+ reboot_state = 'REBOOT'
else:
- state_name = 'REBOOT' # this is a bug, should be HARD_REBOOT
+ reboot_state = 'HARD_REBOOT'
self._logger.info('waiting for machine %s to change to %s' %
- (reboot_target['id'], state_name))
-
- # check for state transition
- _resp, body = manager.servers_client.get_server(reboot_target['id'])
- if body['status'] == state_name:
- state_string = state_name
- else:
- # grab the actual state as we think it is
- temp_obj = state.get_instances()[self._target['id']]
- self._logger.debug(
- "machine %s in state %s" %
- (reboot_target['id'], temp_obj[1])
- )
- state_string = temp_obj[1]
-
- if state_string == state_name:
- self._logger.info('machine %s ACTIVE -> %s' %
- (reboot_target['id'], state_name))
- state.set_instance_state(reboot_target['id'],
- (reboot_target, state_name))
+ (reboot_target['id'], reboot_state))
return VerifyRebootVM(manager,
state,
reboot_target,
- reboot_type=_reboot_type,
- state_name=state_string)
+ reboot_state=reboot_state)
class VerifyRebootVM(pending_action.PendingAction):
@@ -104,22 +88,13 @@
States = enum('REBOOT_CHECK', 'ACTIVE_CHECK')
def __init__(self, manager, state, target_server,
- reboot_type=None,
- state_name=None,
+ reboot_state=None,
ip_addr=None):
super(VerifyRebootVM, self).__init__(manager,
state,
target_server)
- # FIX ME: this is a nova bug
- if reboot_type == 'SOFT':
- self._reboot_state = 'REBOOT'
- else:
- self._reboot_state = 'REBOOT' # should be HARD REBOOT
-
- if state_name == 'ACTIVE': # was still active, check to see if REBOOT
- self._retry_state = self.States.REBOOT_CHECK
- else: # was REBOOT, so now check for ACTIVE
- self._retry_state = self.States.ACTIVE_CHECK
+ self._reboot_state = reboot_state
+ self._retry_state = self.States.REBOOT_CHECK
def retry(self):
"""
@@ -155,8 +130,9 @@
if not self._check_for_status('ACTIVE'):
return False
target = self._target
- self._logger.info('machine %s REBOOT -> ACTIVE [%.1f secs elapsed]' %
- (target['id'], time.time() - self._start_time))
+ self._logger.info('machine %s %s -> ACTIVE [%.1f secs elapsed]' %
+ (target['id'], reboot_state,
+ time.time() - self._start_time))
self._state.set_instance_state(target['id'],
(target, 'ACTIVE'))