components/openstack/nova/patches/11-launchpad-1377644.patch
author david.comay@oracle.com
Tue, 15 Dec 2015 00:08:40 -0800
changeset 5195 694672bf3c17
permissions -rw-r--r--
PSARC 2015/324 OpenStack Nova support for kernel zone live-migration 19438929 'nova live-migration' shouldn't leave instances in an error state 20739475 Nova driver should support live-migration 22252353 nova-compute needs updating for mod_zonemgr auth changes

This external patch was a follow up fix to Launchpad bug 1377644.
While the original fix was backported to Juno 2014.2.1, the subsequent
one was not.

commit 64882d39d9fea9d6001ccc61973624949825c52f
Author: He Jie Xu <[email protected]>
Date:   Fri Nov 7 23:24:12 2014 +0800

    Fix circular reference error when live migration failed
    
    When unexpected exception raised in live migration, the MigrationError
    carry another original exception in it. But when oslo.message
    serialize the exception, the circular reference error happended. This
    patch just pass the exception as unicode string into MigrationError.
    
    Change-Id: I4e449baae74bd9a15490ae7accbd2103bae90d57
    Related-Bug: #1377644

--- nova-2014.2.2/nova/conductor/manager.py.~1~	2015-12-01 04:52:25.839270759 -0800
+++ nova-2014.2.2/nova/conductor/manager.py	2015-12-01 04:54:08.341268026 -0800
@@ -589,7 +589,7 @@ class ComputeTaskManager(base.Base):
                        ' %(dest)s unexpectedly failed.'),
                        {'instance_id': instance['uuid'], 'dest': destination},
                        exc_info=True)
-            raise exception.MigrationError(reason=ex)
+            raise exception.MigrationError(reason=six.text_type(ex))
 
     def build_instances(self, context, instances, image, filter_properties,
             admin_password, injected_files, requested_networks,
--- nova-2014.2.2/nova/tests/conductor/test_conductor.py.~1~	2015-02-05 06:26:50.000000000 -0800
+++ nova-2014.2.2/nova/tests/conductor/test_conductor.py	2015-12-01 04:55:27.135695264 -0800
@@ -20,6 +20,7 @@ import contextlib
 import mock
 import mox
 from oslo import messaging
+import six
 
 from nova.api.ec2 import ec2utils
 from nova.compute import arch
@@ -1711,18 +1712,19 @@ class ConductorTaskTestCase(_BaseTaskTes
         self.mox.StubOutWithMock(scheduler_utils,
                 'set_vm_state_and_notify')
 
-        ex = IOError()
+        expected_ex = IOError('fake error')
         live_migrate.execute(self.context, mox.IsA(objects.Instance),
                              'destination', 'block_migration',
-                             'disk_over_commit').AndRaise(ex)
+                             'disk_over_commit').AndRaise(expected_ex)
         self.mox.ReplayAll()
 
         self.conductor = utils.ExceptionHelper(self.conductor)
 
-        self.assertRaises(exc.MigrationError,
+        ex = self.assertRaises(exc.MigrationError,
             self.conductor.migrate_server, self.context, inst_obj,
             {'host': 'destination'}, True, False, None, 'block_migration',
             'disk_over_commit')
+        self.assertEqual(ex.kwargs['reason'], six.text_type(expected_ex))
 
     def test_set_vm_state_and_notify(self):
         self.mox.StubOutWithMock(scheduler_utils,