components/openstack/nova/patches/11-launchpad-1435633.patch
author david.comay@oracle.com
Thu, 11 Feb 2016 17:35:03 -0800
changeset 5450 699a9e31ddae
permissions -rw-r--r--
22713569 nova-conductor doesn't handle RPC timeout during live-migration well
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5450
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     1
This upstream patch has been addressed in Liberty but has not yet been
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     2
addressed in Kilo.
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     3
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     4
commit c0d0e5ccf62f45498f084ed59e776c3b370e9137
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     5
Author: jichenjc <[email protected]>
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     6
Date:   Mon Mar 23 00:36:43 2015 +0800
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     7
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     8
    Handle MessageTimeout to MigrationPreCheckError
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
     9
    
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    10
    There are a few checks before live-migration, if any of the
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    11
    check failed, the live-migration can't be done. However
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    12
    during _call_livem_checks_on_host check, because it's a
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    13
    RPC call ,so it might result in a MessageTimeout exception.
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    14
    If this occurs, we should safely revert its state,
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    15
    since no real opperation occured.
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    16
    
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    17
    This patch translates the MessageTimeout to
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    18
    MigrationPreCheckError and leverage existing MigrationPreCheckError
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    19
    processing to revert instance to normal state instead of error
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    20
    
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    21
    Closes-Bug: 1435633
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    22
    
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    23
    Change-Id: I8b484abb6650e14e2d225ca5e476d1fa7a6ee990
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    24
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    25
--- nova-2015.1.2/nova/conductor/tasks/live_migrate.py.~1~	2015-10-13 07:52:44.000000000 -0700
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    26
+++ nova-2015.1.2/nova/conductor/tasks/live_migrate.py	2016-02-10 23:52:06.321170852 -0800
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    27
@@ -12,6 +12,7 @@
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    28
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    29
 from oslo_config import cfg
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    30
 from oslo_log import log as logging
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    31
+import oslo_messaging as messaging
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    32
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    33
 from nova.compute import power_state
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    34
 from nova.compute import rpcapi as compute_rpcapi
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    35
@@ -140,9 +141,14 @@ class LiveMigrationTask(object):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    36
             raise exception.DestinationHypervisorTooOld()
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    37
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    38
     def _call_livem_checks_on_host(self, destination):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    39
-        self.migrate_data = self.compute_rpcapi.\
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    40
-            check_can_live_migrate_destination(self.context, self.instance,
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    41
-                destination, self.block_migration, self.disk_over_commit)
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    42
+        try:
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    43
+            self.migrate_data = self.compute_rpcapi.\
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    44
+                check_can_live_migrate_destination(self.context, self.instance,
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    45
+                    destination, self.block_migration, self.disk_over_commit)
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    46
+        except messaging.MessagingTimeout:
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    47
+            msg = _("Timeout while checking if we can live migrate to host: "
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    48
+                    "%s") % destination
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    49
+            raise exception.MigrationPreCheckError(msg)
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    50
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    51
     def _find_destination(self):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    52
         # TODO(johngarbutt) this retry loop should be shared
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    53
--- nova-2015.1.2/nova/tests/unit/conductor/tasks/test_live_migrate.py.~1~	2015-10-13 07:52:44.000000000 -0700
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    54
+++ nova-2015.1.2/nova/tests/unit/conductor/tasks/test_live_migrate.py	2016-02-10 23:52:46.817923384 -0800
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    55
@@ -11,6 +11,7 @@
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    56
 #    under the License.
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    57
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    58
 from mox3 import mox
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    59
+import oslo_messaging as messaging
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    60
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    61
 from nova.compute import power_state
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    62
 from nova.compute import utils as compute_utils
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    63
@@ -401,5 +402,12 @@ class LiveMigrationTaskTestCase(test.NoD
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    64
         self.mox.ReplayAll()
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    65
         self.assertRaises(exception.NoValidHost, self.task._find_destination)
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    66
 
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    67
+    def test_call_livem_checks_on_host(self):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    68
+        with mock.patch.object(self.task.compute_rpcapi,
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    69
+            'check_can_live_migrate_destination',
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    70
+            side_effect=messaging.MessagingTimeout):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    71
+            self.assertRaises(exception.MigrationPreCheckError,
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    72
+                self.task._call_livem_checks_on_host, {})
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    73
+
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    74
     def test_not_implemented_rollback(self):
699a9e31ddae 22713569 nova-conductor doesn't handle RPC timeout during live-migration well
david.comay@oracle.com
parents:
diff changeset
    75
         self.assertRaises(NotImplementedError, self.task.rollback)