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

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Tue Jan 12 19:12:11 CST 2010


Author: borja
Date: 2010-01-12 19:12:11 -0600 (Tue, 12 Jan 2010)
New Revision: 757

Modified:
   branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
Log:
Take into account that deadline leases can also be preempted without suspension.

Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-13 00:32:28 UTC (rev 756)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-13 01:12:11 UTC (rev 757)
@@ -757,62 +757,69 @@
             preempt_vmrr = lease_to_preempt.get_last_vmrr()
             dur = preempt_vmrr.end - preemption_time
             
-            if preempt_vmrr.state == ResourceReservation.STATE_SCHEDULED and preempt_vmrr.start >= preemption_time:
-                self.logger.debug("Lease was set to start in the middle of the preempting lease.")
+            susptype = get_config().get("suspension")
+            
+            cancel = False
+            
+            if susptype == constants.SUSPENSION_NONE:
+                cancel = True
+            else:
+                if preempt_vmrr.state == ResourceReservation.STATE_SCHEDULED and preempt_vmrr.start >= preemption_time:
+                    self.logger.debug("Lease was set to start in the middle of the preempting lease.")
+                    cancel = True
+                else:
+                    can_suspend = self.vm_scheduler.can_suspend_at(lease_to_preempt, preemption_time)
+                    
+                    if not can_suspend:
+                        self.logger.debug("Suspending the lease does not meet scheduling threshold.")
+                        cancel = True
+                    else:
+                        self.vm_scheduler.preempt_vm(preempt_vmrr, preemption_time)
+            if cancel:
                 self.preparation_scheduler.cancel_preparation(lease_to_preempt)
                 lease_to_preempt.remove_vmrr(preempt_vmrr)
                 self.vm_scheduler.cancel_vm(preempt_vmrr)       
                 cancelled.append(lease_to_preempt.id)
+
+        for lease_to_preempt in preempted_leases:
+            if lease.id in cancelled:
+                dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated
             else:
-                can_suspend = self.vm_scheduler.can_suspend_at(lease_to_preempt, preemption_time)
+                preempt_vmrr = lease_to_preempt.get_last_vmrr()
+                dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated - (preempt_vmrr.end - preempt_vmrr.start)
+            
+            node_ids = self.slottable.nodes.keys()
+            earliest = {}
+   
+            try:
+                if lease_to_preempt.id in cancelled:
+                    for node in node_ids:
+                        earliest[node] = EarliestStartingTime(nexttime, EarliestStartingTime.EARLIEST_NOPREPARATION)                
+                    (new_vmrr, preemptions) = self.vm_scheduler.reschedule_deadline(lease_to_preempt, dur, nexttime, earliest)
+                else:
+                    for node in node_ids:
+                        earliest[node] = EarliestStartingTime(preemption_time, EarliestStartingTime.EARLIEST_NOPREPARATION)                
+                    (new_vmrr, preemptions) = self.vm_scheduler.reschedule_deadline(lease_to_preempt, dur, nexttime, earliest, override_state = Lease.STATE_SUSPENDED_PENDING)
+    
+                # Add VMRR to lease
+                lease_to_preempt.append_vmrr(new_vmrr)
                 
-                if not can_suspend:
-                    self.logger.debug("Suspending the lease does not meet scheduling threshold.")
-                    feasible = False
-                    break
+        
+                # Add resource reservations to slottable
                 
-                self.vm_scheduler.preempt_vm(preempt_vmrr, preemption_time)
-
-        if feasible:
-            for lease_to_preempt in preempted_leases:
-                if lease.id in cancelled:
-                    dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated
-                else:
-                    preempt_vmrr = lease_to_preempt.get_last_vmrr()
-                    dur = lease_to_preempt.duration.requested - lease_to_preempt.duration.accumulated - (preempt_vmrr.end - preempt_vmrr.start)
+                # Pre-VM RRs (if any)
+                for rr in new_vmrr.pre_rrs:
+                    self.slottable.add_reservation(rr)
+                    
+                # VM
+                self.slottable.add_reservation(new_vmrr)
                 
-                node_ids = self.slottable.nodes.keys()
-                earliest = {}
-   
-                try:
-                    if lease_to_preempt.id in cancelled:
-                        for node in node_ids:
-                            earliest[node] = EarliestStartingTime(nexttime, EarliestStartingTime.EARLIEST_NOPREPARATION)                
-                        (new_vmrr, preemptions) = self.vm_scheduler.reschedule_deadline(lease_to_preempt, dur, nexttime, earliest)
-                    else:
-                        for node in node_ids:
-                            earliest[node] = EarliestStartingTime(preemption_time, EarliestStartingTime.EARLIEST_NOPREPARATION)                
-                        (new_vmrr, preemptions) = self.vm_scheduler.reschedule_deadline(lease_to_preempt, dur, nexttime, earliest, override_state = Lease.STATE_SUSPENDED_PENDING)
-    
-                    # Add VMRR to lease
-                    lease_to_preempt.append_vmrr(new_vmrr)
-                    
-            
-                    # Add resource reservations to slottable
-                    
-                    # Pre-VM RRs (if any)
-                    for rr in new_vmrr.pre_rrs:
-                        self.slottable.add_reservation(rr)
-                        
-                    # VM
-                    self.slottable.add_reservation(new_vmrr)
-                    
-                    # Post-VM RRs (if any)
-                    for rr in new_vmrr.post_rrs:
-                        self.slottable.add_reservation(rr)                    
-                except:
-                    feasible = False
-                    break
+                # Post-VM RRs (if any)
+                for rr in new_vmrr.post_rrs:
+                    self.slottable.add_reservation(rr)                    
+            except:
+                feasible = False
+                break
 
         if not feasible:
             for l in preempted_leases:



More information about the Haizea-commit mailing list