[haizea-commit] r766 - branches/1.1/src/haizea/core/scheduler

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Fri Jan 15 01:45:17 CST 2010


Author: borja
Date: 2010-01-15 01:45:17 -0600 (Fri, 15 Jan 2010)
New Revision: 766

Modified:
   branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
   branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
Log:
Fixes to several bugs that showed up when running Haizea with larger workloads.

Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 06:23:15 UTC (rev 765)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 07:45:17 UTC (rev 766)
@@ -818,6 +818,7 @@
             cancel = False
             
             if susptype == constants.SUSPENSION_NONE:
+                self.logger.debug("Lease %i will be cancelled because suspension is not supported." % lease_to_preempt.id)
                 cancel = True
             else:
                 if preempt_vmrr == None:
@@ -829,6 +830,9 @@
                     if not can_suspend:
                         self.logger.debug("Suspending lease %i does not meet scheduling threshold." % lease_to_preempt.id)
                         cancel = True
+                    else:
+                        self.logger.debug("Lease %i will be suspended." % lease_to_preempt.id)
+
                         
             after_vmrrs = lease_to_preempt.get_vmrr_after(preemption_time)
 

Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-01-15 06:23:15 UTC (rev 765)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py	2010-01-15 07:45:17 UTC (rev 766)
@@ -652,6 +652,7 @@
                             and rr.lease.get_state() in (Lease.STATE_SCHEDULED, Lease.STATE_READY, Lease.STATE_SUSPENDED_SCHEDULED)]
             
             for future_vmrr in future_vmrrs:
+                future_vmrr.lease.remove_vmrr(future_vmrr)
                 self.cancel_vm(future_vmrr)
             
             leases = list(set([future_vmrr.lease for future_vmrr in future_vmrrs]))
@@ -741,10 +742,6 @@
                         restored_leases.add(l)
     
             print "Skipped re-scheduling %i leases (out of %i)" % (len(restored_leases), len(leases))
-            
-            for l in [l2 for l2 in orig_vmrrs if l2 in scheduled - restored_leases]:
-                for vmrr in orig_vmrrs[l]:
-                    vmrr.lease.remove_vmrr(vmrr)
                 
             for lease2, vmrr in new_vmrrs.items():
                 lease2.append_vmrr(vmrr)
@@ -757,6 +754,11 @@
             for rr in return_vmrr.post_rrs:
                 self.slottable.remove_reservation(rr)             
             
+            for l in leases:
+                if l in scheduled:
+                    self.logger.vdebug("Lease %i after rescheduling:" % l.id)
+                    l.print_contents()                   
+            
             return return_vmrr, []
         else:
             return vmrr, preemptions
@@ -794,11 +796,21 @@
                 if min_future_start > dirtytime:
                     print "Ignoring after %s" % dirtytime
                     break
+                
+            last_vmrr = l.get_last_vmrr()
+            if last_vmrr != None and last_vmrr.is_suspending():
+                override_state = Lease.STATE_SUSPENDED_PENDING
+                l_earliest_time = last_vmrr.post_rrs[-1].end
+            else:
+                override_state = None
+                l_earliest_time = earliest_time
+                
             for n in earliest:
-                earliest[n].time = max(l.start.requested, nexttime)                    
+                earliest[n].time = l_earliest_time
+                
             self.logger.debug("Rescheduling lease %s" % l.id)
-            dur = l.get_remaining_duration_at(earliest_time)
-            vmrr, preemptions = self.__schedule_asap(l, dur, nexttime, earliest, allow_in_future = True)
+            dur = l.get_remaining_duration_at(l_earliest_time)
+            vmrr, preemptions = self.__schedule_asap(l, dur, nexttime, earliest, allow_in_future = True, override_state=override_state)
             if vmrr.end - vmrr.start != dur or vmrr.end > l.deadline or len(preemptions) != 0:
                 raise NotSchedulableException, "Could not schedule before deadline without making other leases miss deadline"
             



More information about the Haizea-commit mailing list