yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #30538
[Bug 1437111] [NEW] os-migrateLive fault but rest api raise a incorrect conflict message
Public bug reported:
when do a live migration which the instance is in a state like this
taget@liyong:~/devstack$ nova list
+--------------------------------------+-------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------+--------+------------+-------------+----------------------+
| 1d114104-9a62-49ba-b209-6a42beff4133 | test1 | ACTIVE | - | NOSTATE | private_net=10.0.0.9 |
+--------------------------------------+-------+--------+------------+-------------+----------------------+
rest api raise conflictRequest, this is correct, but the message is not
correct.
(0, '{"conflictingRequest": {"message": "Instance
1d114104-9a62-49ba-b209-6a42beff4133 is in an invalid state for \'os-
migrateLive\'", "code": 409}}', ' % Total % Received % Xferd
Average Speed Time Time Time Current\n
Dload Upload Total Spent Left Speed\n\r 0 0 0 0
0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 92 0
0 100 92 0 76 0:00:01 0:00:01 --:--:-- 76\r100 233
100 141 100 92 78 51 0:00:01 0:00:01 --:--:-- 78\r100
233 100 141 100 92 78 51 0:00:01 0:00:01 --:--:--
78\n')
in live_migrate.py, we check if instance in active state, it do the right thing.
def _check_instance_is_active(self):
if self.instance.power_state not in (power_state.RUNNING,
power_state.PAUSED):
raise exception.InstanceInvalidState(
instance_uuid = self.instance.uuid,
attr = 'power_state',
state = self.instance.power_state,
method = 'live migrate')
but in this case, power_state is an Integer zero,
the logic in raise_http_conflict_for_instance_invalid_state
by checking code of raise_http_conflict_for_instance_invalid_state
def raise_http_conflict_for_instance_invalid_state(exc, action, server_id):
"""Raises a webob.exc.HTTPConflict instance containing a message
appropriate to return via the API based on the original
InstanceInvalidState exception.
"""
attr = exc.kwargs.get('attr')
state = exc.kwargs.get('state')
not_launched = exc.kwargs.get('not_launched')
if attr and state: <<<<<<<<<<<<<------------ should go this condition but state is zero.
msg = _("Cannot '%(action)s' instance %(server_id)s while it is in "
"%(attr)s %(state)s") % {'action': action, 'attr': attr,
'state': state,
'server_id': server_id}
** Affects: nova
Importance: Undecided
Assignee: Eli Qiao (taget-9)
Status: Confirmed
** Tags: api
** Changed in: nova
Assignee: (unassigned) => Eli Qiao (taget-9)
** Changed in: nova
Status: New => Confirmed
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1437111
Title:
os-migrateLive fault but rest api raise a incorrect conflict message
Status in OpenStack Compute (Nova):
Confirmed
Bug description:
when do a live migration which the instance is in a state like this
taget@liyong:~/devstack$ nova list
+--------------------------------------+-------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+-------+--------+------------+-------------+----------------------+
| 1d114104-9a62-49ba-b209-6a42beff4133 | test1 | ACTIVE | - | NOSTATE | private_net=10.0.0.9 |
+--------------------------------------+-------+--------+------------+-------------+----------------------+
rest api raise conflictRequest, this is correct, but the message is
not correct.
(0, '{"conflictingRequest": {"message": "Instance
1d114104-9a62-49ba-b209-6a42beff4133 is in an invalid state for \'os-
migrateLive\'", "code": 409}}', ' % Total % Received % Xferd
Average Speed Time Time Time Current\n
Dload Upload Total Spent Left Speed\n\r 0 0 0 0
0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 92 0
0 100 92 0 76 0:00:01 0:00:01 --:--:-- 76\r100 233
100 141 100 92 78 51 0:00:01 0:00:01 --:--:--
78\r100 233 100 141 100 92 78 51 0:00:01 0:00:01
--:--:-- 78\n')
in live_migrate.py, we check if instance in active state, it do the right thing.
def _check_instance_is_active(self):
if self.instance.power_state not in (power_state.RUNNING,
power_state.PAUSED):
raise exception.InstanceInvalidState(
instance_uuid = self.instance.uuid,
attr = 'power_state',
state = self.instance.power_state,
method = 'live migrate')
but in this case, power_state is an Integer zero,
the logic in raise_http_conflict_for_instance_invalid_state
by checking code of raise_http_conflict_for_instance_invalid_state
def raise_http_conflict_for_instance_invalid_state(exc, action, server_id):
"""Raises a webob.exc.HTTPConflict instance containing a message
appropriate to return via the API based on the original
InstanceInvalidState exception.
"""
attr = exc.kwargs.get('attr')
state = exc.kwargs.get('state')
not_launched = exc.kwargs.get('not_launched')
if attr and state: <<<<<<<<<<<<<------------ should go this condition but state is zero.
msg = _("Cannot '%(action)s' instance %(server_id)s while it is in "
"%(attr)s %(state)s") % {'action': action, 'attr': attr,
'state': state,
'server_id': server_id}
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1437111/+subscriptions
Follow ups
References