On Wed, Aug 03, 2011 at 06:03:38PM +0300, Apollon Oikonomopoulos wrote:
> When wait_for_sync is set to False in LUInstanceCreate, Ganeti lets DRBD sync
> in the background while performing the rest of the installation steps,
> including OS installation.
> 
> However, OS installation is a very disk-intensive task that intereferes badly
> with the background I/O caused by DRBD's initial sync. To this end, we pause
> the background sync before OS installation and unpause it afterwards, which
> yields a significant speed boost for OS installation. The following should be
> noted:
> 
> a) The user has requested not to wait for sync, i.e. the instance will be
>    non-redundant for an unspecified interval anyway and delaying this by a
>    couple of minutes is not a big compromise.
> 
> b) This approach is also followed during disk wiping.

Excellent, thanks, I'll commit with this interdiff:

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 365151d..a70dda0 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -8861,8 +8861,9 @@ class LUInstanceCreate(LogicalUnit):
     if iobj.disk_template != constants.DT_DISKLESS and not self.adopt_disks:
       if self.op.mode == constants.INSTANCE_CREATE:
         if not self.op.no_install:
-          if (iobj.disk_template in constants.DTS_INT_MIRROR and not
-              self.op.wait_for_sync):
+          pause_sync = (iobj.disk_template in constants.DTS_INT_MIRROR and
+                        not self.op.wait_for_sync)
+          if pause_sync:
             feedback_fn("* pausing disk sync to install instance OS")
             result = self.rpc.call_blockdev_pause_resume_sync(pnode_name,
                                                               iobj.disks, True)
@@ -8875,8 +8876,7 @@ class LUInstanceCreate(LogicalUnit):
           # FIXME: pass debug option from opcode to backend
           result = self.rpc.call_instance_os_add(pnode_name, iobj, False,
                                                  self.op.debug_level)
-          if (iobj.disk_template in constants.DTS_INT_MIRROR and not
-              self.op.wait_for_sync):
+          if pause_sync:
             feedback_fn("* resuming disk sync")
             result = self.rpc.call_blockdev_pause_resume_sync(pnode_name,
                                                               iobj.disks, 
False)

Just to simplify the check.

thanks,
iustin

Reply via email to