← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1638582] [NEW] network failure during post live-migrate fails to update hypervisor host

 

Public bug reported:

Description
===========
If the network fails during post live-migration tasks, the host/hypervisor property of the instance isn't updated to reflect the *new* compute host.

The migrated instance appears to function properly, but issuing 'nova
show <instance_id>' still shows the origin compute node along with a
stack trace.

Per the trace below, a failure occurs inside
post_live_migration_at_destination() during a call to
network_api.migrate_instance_finish() which attempts to update the
neutron port mappings. This code exists outside the try/except/finally
block that will update the database regardless of failure. Should
network connectivity be lost, or the neutron api  doesn't answer, the
instance properties aren't saved.


Steps to reproduce
==================
$ nova live-migration 0386d6cf-edf8-42b8-998f-54103ba675fe node1
$ nova show 0386d6cf-edf8-42b8-998f-54103ba675fe
+--------------------------------------+----------------------------------------------------------+
| Property                             | Value                                                    |
+--------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                    | AUTO                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                     |
| OS-EXT-SRV-ATTR:host                 | node1                                                    |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | node1.example.org                                        |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000034                                        |
| OS-EXT-STS:power_state               | 1                                                        |
| OS-EXT-STS:task_state                | migrating                                                |
| OS-EXT-STS:vm_state                  | active                                                  


A Few minutes later, vm_state is in 'error' and a stack trace can be seen
$ nova show 0386d6cf-edf8-42b8-998f-54103ba675fe
...
...SNIP
........
 fault  {"message": "Unable to establish connection to http://192.168.1.34:9696/v2.0/ports/dd042ee1-77c0-4c52-b5ea-9b5fbdd02860.json";, "code": 500, "details": "  File \"/usr/lib/python2.7/dist-packages/nova/compute/manager.py\", line 375, in decorated_function 
            return function(self, context, *args, **kwargs)
          File \"/usr/lib/python2.7/dist-packages/nova/compute/manager.py\", line 5571, in post_live_migration_at_destination             
            migration)      
          File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1577, in migrate_instance_finish 
            migration['dest_compute'])       
          File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1886, in _update_port_binding_for_instance        
            p['id'], instance=instance)      
          File \"/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__          
            self.force_reraise()             
          File \"/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise     
            six.reraise(self.type_, self.value, self.tb)   
          File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1882, in _update_port_binding_for_instance        
            {'port': {'binding:host_id': host}})           
          File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 97, in with_params  
            ret = self.function(instance, *args, **kwargs) 
          File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 659, in update_port 
            return self.put(self.port_path % (port), body=body)             
          File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 367, in put         
            headers=headers, params=params)  
          File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 335, in retry_request             
            headers=headers, params=params)  
          File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 286, in do_request  
            resp, replybody = self.httpclient.do_request(action, method, body=body)       
          File \"/usr/lib/python2.7/dist-packages/neutronclient/client.py\", line 306, in do_request       
            return self.request(url, method, **kwargs)     
          File \"/usr/lib/python2.7/dist-packages/neutronclient/client.py\", line 294, in request          
            resp = super(SessionClient, self).request(*args, **kwargs)      
          File \"/usr/lib/python2.7/dist-packages/keystoneauth1/adapter.py\", line 98, in request          
            return self.session.request(url, method, **kwargs)              
          File \"/usr/lib/python2.7/dist-packages/positional/__init__.py\", line 94, in inner              
            return func(*args, **kwargs)     
          File \"/usr/lib/python2.7/dist-packages/keystoneauth1/session.py\", line 452, in request         
            resp = send(**kwargs)            
          File \"/usr/lib/python2.7/dist-packages/keystoneauth1/session.py\", line 496, in _send_request   
            raise exceptions.ConnectFailure(msg)           
        ", "created": "2016-10-26T22:54:10Z"}                    


Expected result
===============
'host' and 'hypervisor_hostname' should be updated to the destination compute node.


Environment
===========
Ubuntu 16.04
Openstack Mitaka
  Nova 13.1.1
  Neutron 8.1.2
    + Calico driver 1.3.0

** Affects: nova
     Importance: Undecided
         Status: New

-- 
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/1638582

Title:
  network failure during post live-migrate fails to update hypervisor
  host

Status in OpenStack Compute (nova):
  New

Bug description:
  Description
  ===========
  If the network fails during post live-migration tasks, the host/hypervisor property of the instance isn't updated to reflect the *new* compute host.

  The migrated instance appears to function properly, but issuing 'nova
  show <instance_id>' still shows the origin compute node along with a
  stack trace.

  Per the trace below, a failure occurs inside
  post_live_migration_at_destination() during a call to
  network_api.migrate_instance_finish() which attempts to update the
  neutron port mappings. This code exists outside the try/except/finally
  block that will update the database regardless of failure. Should
  network connectivity be lost, or the neutron api  doesn't answer, the
  instance properties aren't saved.

  
  Steps to reproduce
  ==================
  $ nova live-migration 0386d6cf-edf8-42b8-998f-54103ba675fe node1
  $ nova show 0386d6cf-edf8-42b8-998f-54103ba675fe
  +--------------------------------------+----------------------------------------------------------+
  | Property                             | Value                                                    |
  +--------------------------------------+----------------------------------------------------------+
  | OS-DCF:diskConfig                    | AUTO                                                     |
  | OS-EXT-AZ:availability_zone          | nova                                                     |
  | OS-EXT-SRV-ATTR:host                 | node1                                                    |
  | OS-EXT-SRV-ATTR:hypervisor_hostname  | node1.example.org                                        |
  | OS-EXT-SRV-ATTR:instance_name        | instance-00000034                                        |
  | OS-EXT-STS:power_state               | 1                                                        |
  | OS-EXT-STS:task_state                | migrating                                                |
  | OS-EXT-STS:vm_state                  | active                                                  

  
  A Few minutes later, vm_state is in 'error' and a stack trace can be seen
  $ nova show 0386d6cf-edf8-42b8-998f-54103ba675fe
  ...
  ...SNIP
  ........
   fault  {"message": "Unable to establish connection to http://192.168.1.34:9696/v2.0/ports/dd042ee1-77c0-4c52-b5ea-9b5fbdd02860.json";, "code": 500, "details": "  File \"/usr/lib/python2.7/dist-packages/nova/compute/manager.py\", line 375, in decorated_function 
              return function(self, context, *args, **kwargs)
            File \"/usr/lib/python2.7/dist-packages/nova/compute/manager.py\", line 5571, in post_live_migration_at_destination             
              migration)      
            File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1577, in migrate_instance_finish 
              migration['dest_compute'])       
            File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1886, in _update_port_binding_for_instance        
              p['id'], instance=instance)      
            File \"/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 220, in __exit__          
              self.force_reraise()             
            File \"/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py\", line 196, in force_reraise     
              six.reraise(self.type_, self.value, self.tb)   
            File \"/usr/lib/python2.7/dist-packages/nova/network/neutronv2/api.py\", line 1882, in _update_port_binding_for_instance        
              {'port': {'binding:host_id': host}})           
            File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 97, in with_params  
              ret = self.function(instance, *args, **kwargs) 
            File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 659, in update_port 
              return self.put(self.port_path % (port), body=body)             
            File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 367, in put         
              headers=headers, params=params)  
            File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 335, in retry_request             
              headers=headers, params=params)  
            File \"/usr/lib/python2.7/dist-packages/neutronclient/v2_0/client.py\", line 286, in do_request  
              resp, replybody = self.httpclient.do_request(action, method, body=body)       
            File \"/usr/lib/python2.7/dist-packages/neutronclient/client.py\", line 306, in do_request       
              return self.request(url, method, **kwargs)     
            File \"/usr/lib/python2.7/dist-packages/neutronclient/client.py\", line 294, in request          
              resp = super(SessionClient, self).request(*args, **kwargs)      
            File \"/usr/lib/python2.7/dist-packages/keystoneauth1/adapter.py\", line 98, in request          
              return self.session.request(url, method, **kwargs)              
            File \"/usr/lib/python2.7/dist-packages/positional/__init__.py\", line 94, in inner              
              return func(*args, **kwargs)     
            File \"/usr/lib/python2.7/dist-packages/keystoneauth1/session.py\", line 452, in request         
              resp = send(**kwargs)            
            File \"/usr/lib/python2.7/dist-packages/keystoneauth1/session.py\", line 496, in _send_request   
              raise exceptions.ConnectFailure(msg)           
          ", "created": "2016-10-26T22:54:10Z"}                    

  
  Expected result
  ===============
  'host' and 'hypervisor_hostname' should be updated to the destination compute node.

  
  Environment
  ===========
  Ubuntu 16.04
  Openstack Mitaka
    Nova 13.1.1
    Neutron 8.1.2
      + Calico driver 1.3.0

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1638582/+subscriptions


Follow ups