[haizea-commit] r771 - in branches/1.1/src/haizea/core: . scheduler

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Fri Jan 15 05:35:00 CST 2010


Author: borja
Date: 2010-01-15 05:35:00 -0600 (Fri, 15 Jan 2010)
New Revision: 771

Modified:
   branches/1.1/src/haizea/core/leases.py
   branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
Log:
Fix to bug that showed up when running Haizea with larger workloads.

Modified: branches/1.1/src/haizea/core/leases.py
===================================================================
--- branches/1.1/src/haizea/core/leases.py	2010-01-15 11:34:27 UTC (rev 770)
+++ branches/1.1/src/haizea/core/leases.py	2010-01-15 11:35:00 UTC (rev 771)
@@ -171,7 +171,7 @@
         # Lease state
         if state == None:
             state = Lease.STATE_NEW
-        self.state = LeaseStateMachine(initial_state = state)
+        self.state_machine = LeaseStateMachine(initial_state = state)
 
         # End of lease (recorded when the lease ends)
         self.end = None
@@ -209,7 +209,7 @@
         lease = cls.from_xml_element(element)
         if lease.id == None:
             lease.id = get_lease_id()
-        lease.state = LeaseStateMachine(initial_state = Lease.STATE_NEW)
+        lease.state_machine = LeaseStateMachine(initial_state = Lease.STATE_NEW)
         return lease
 
     @classmethod
@@ -402,7 +402,7 @@
         """Returns the lease's state.
                 
         """        
-        return self.state.get_state()
+        return self.state_machine.get_state()
     
     def set_state(self, state):
         """Changes the lease's state.
@@ -413,7 +413,7 @@
         Argument:
         state -- The new state
         """        
-        self.state.change_state(state)
+        self.state_machine.change_state(state)
         
     def print_contents(self, loglevel=LOGLEVEL_VDEBUG):
         """Prints the lease's attributes to the log.

Modified: branches/1.1/src/haizea/core/scheduler/lease_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 11:34:27 UTC (rev 770)
+++ branches/1.1/src/haizea/core/scheduler/lease_scheduler.py	2010-01-15 11:35:00 UTC (rev 771)
@@ -825,7 +825,7 @@
                     self.logger.debug("Lease %i was set to start in the middle of the preempting lease." % lease_to_preempt.id)
                     cancel = True
                 else:
-                    can_suspend = self.vm_scheduler.can_suspend_at(lease_to_preempt, preemption_time)
+                    can_suspend = self.vm_scheduler.can_suspend_at(lease_to_preempt, preemption_time, nexttime)
                     
                     if not can_suspend:
                         self.logger.debug("Suspending lease %i does not meet scheduling threshold." % lease_to_preempt.id)
@@ -849,11 +849,16 @@
                 if preempt_vmrr != None:
                     durs[lease_to_preempt] = lease_to_preempt.get_remaining_duration_at(preempt_vmrr.start)             
                     
+                    lease_to_preempt.remove_vmrr(preempt_vmrr)
+
                     if preempt_vmrr.state == ResourceReservation.STATE_ACTIVE:
-                        # The VMRR we're preempting is the active one
-                        new_state[lease_to_preempt] = Lease.STATE_READY
+                        last_vmrr = lease_to_preempt.get_last_vmrr()
+                        if last_vmrr != None and last_vmrr.is_suspending():
+                            new_state[lease_to_preempt] = Lease.STATE_SUSPENDED_SCHEDULED
+                        else:
+                            # The VMRR we're preempting is the active one
+                            new_state[lease_to_preempt] = Lease.STATE_READY
 
-                    lease_to_preempt.remove_vmrr(preempt_vmrr)
                     self.vm_scheduler.cancel_vm(preempt_vmrr)
                 else:
                     durs[lease_to_preempt] = lease_to_preempt.get_remaining_duration_at(preemption_time)             
@@ -940,7 +945,7 @@
 
             for l in new_state:
                 if new_state[l] != None:
-                    l.set_state(new_state[l])
+                    l.state_machine.state = new_state[l]
 
             for l in preempted_leases:
                 self.logger.vdebug("Lease %i after preemption:" % l.id)



More information about the Haizea-commit mailing list