[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