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

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to