From 15821cba7b4ecd256f63760ea6fc58641505fc17 Mon Sep 17 00:00:00 2001
From: Bach Dániel <bd@ik.bme.hu>
Date: Sat, 5 Jul 2014 20:43:23 +0200
Subject: [PATCH] vm: migration with zero downtime

---
 circle/vm/models/instance.py | 3 ++-
 circle/vm/operations.py      | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/circle/vm/models/instance.py b/circle/vm/models/instance.py
index 6a9ad6a..72fea58 100644
--- a/circle/vm/models/instance.py
+++ b/circle/vm/models/instance.py
@@ -822,7 +822,8 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin,
     def migrate_vm(self, to_node, timeout=120):
         queue_name = self.get_remote_queue_name('vm', 'slow')
         return vm_tasks.migrate.apply_async(args=[self.vm_name,
-                                                  to_node.host.hostname],
+                                                  to_node.host.hostname,
+                                                  True],
                                             queue=queue_name
                                             ).get(timeout=timeout)
 
diff --git a/circle/vm/operations.py b/circle/vm/operations.py
index a922f80..a6f7577 100644
--- a/circle/vm/operations.py
+++ b/circle/vm/operations.py
@@ -250,10 +250,6 @@ class MigrateOperation(InstanceOperation):
                 to_node = self.instance.select_node()
                 sa.result = to_node
 
-        # Shutdown networks
-        with activity.sub_activity('shutdown_net'):
-            self.instance.shutdown_net()
-
         try:
             with activity.sub_activity('migrate_vm'):
                 self.instance.migrate_vm(to_node=to_node, timeout=timeout)
@@ -262,6 +258,10 @@ class MigrateOperation(InstanceOperation):
                 self.rollback(activity)
             raise
 
+        # Shutdown networks
+        with activity.sub_activity('shutdown_net'):
+            self.instance.shutdown_net()
+
         # Refresh node information
         self.instance.node = to_node
         self.instance.save()
--
libgit2 0.26.0