[haizea-commit] r767 - branches/1.1/src/haizea/core/scheduler
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Fri Jan 15 02:21:24 CST 2010
Author: borja
Date: 2010-01-15 02:21:24 -0600 (Fri, 15 Jan 2010)
New Revision: 767
Modified:
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/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-15 07:45:17 UTC (rev 766)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-01-15 08:21:24 UTC (rev 767)
@@ -33,6 +33,7 @@
from mx.DateTime import TimeDelta
import logging
+import operator
class VMScheduler(object):
@@ -641,22 +642,23 @@
if vmrr == None or vmrr.end - vmrr.start != duration or vmrr.end > lease.deadline or len(preemptions)>0:
self.logger.debug("Lease #%i cannot be scheduled before deadline using best-effort." % lease.id)
- self.slottable.save()
-
dirtynodes = set()
dirtytime = earliest_time
future_vmrrs = self.slottable.get_reservations_on_or_after(earliest_time)
future_vmrrs = [rr for rr in future_vmrrs
if isinstance(rr, VMResourceReservation)
- and rr.lease.get_state() in (Lease.STATE_SCHEDULED, Lease.STATE_READY, Lease.STATE_SUSPENDED_SCHEDULED)]
+ and rr.state == ResourceReservation.STATE_SCHEDULED
+ and reduce(operator.and_, [(prerr.state == ResourceReservation.STATE_SCHEDULED) for prerr in rr.pre_rrs], True)]
+
+ leases = list(set([future_vmrr.lease for future_vmrr in future_vmrrs]))
+
+ self.slottable.save(leases)
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]))
-
orig_vmrrs = dict([(l,[rr for rr in future_vmrrs if rr.lease == l]) for l in leases])
leases.append(lease)
@@ -669,11 +671,22 @@
# First pass
scheduled = set()
for lease2 in leases:
+
+ last_vmrr = lease2.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(lease2.start.requested, nexttime)
+ earliest[n].time = l_earliest_time
+
self.logger.debug("Rescheduling lease %s" % lease2.id)
- dur = lease2.get_remaining_duration_at(nexttime)
- vmrr, preemptions = self.__schedule_asap(lease2, dur, nexttime, earliest, allow_in_future = True)
+ dur = lease2.get_remaining_duration_at(l_earliest_time)
+
+ vmrr, preemptions = self.__schedule_asap(lease2, dur, nexttime, earliest, allow_in_future = True, override_state=override_state)
if vmrr.end - vmrr.start != dur or vmrr.end > lease2.deadline or len(preemptions) != 0:
self.logger.debug("Lease %s could not be rescheduled, undoing changes." % lease2.id)
self.slottable.restore()
More information about the Haizea-commit
mailing list