[haizea-commit] r502 - trunk/src/haizea/resourcemanager
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Fri Sep 19 11:37:16 CDT 2008
Author: borja
Date: 2008-09-19 11:37:15 -0500 (Fri, 19 Sep 2008)
New Revision: 502
Modified:
trunk/src/haizea/resourcemanager/datastruct.py
trunk/src/haizea/resourcemanager/slottable.py
Log:
Moved getNextLeasesScheduledInNodes to slottable
Modified: trunk/src/haizea/resourcemanager/datastruct.py
===================================================================
--- trunk/src/haizea/resourcemanager/datastruct.py 2008-09-16 10:43:48 UTC (rev 501)
+++ trunk/src/haizea/resourcemanager/datastruct.py 2008-09-19 16:37:15 UTC (rev 502)
@@ -508,33 +508,7 @@
def get_leases_by_state(self, state):
return [e for e in self.entries.values() if e.state == state]
-
- # TODO: Should be moved to slottable module
- def getNextLeasesScheduledInNodes(self, time, nodes):
- nodes = set(nodes)
- leases = []
- earliestEndTime = {}
- for l in self.entries.values():
- start = l.rr[-1].start
- nodes2 = set(l.rr[-1].nodes.values())
- if len(nodes & nodes2) > 0 and start > time:
- leases.append(l)
- end = l.rr[-1].end
- for n in nodes2:
- if not earliestEndTime.has_key(n):
- earliestEndTime[n] = end
- else:
- if end < earliestEndTime[n]:
- earliestEndTime[n] = end
- leases2 = set()
- for n in nodes:
- if earliestEndTime.has_key(n):
- end = earliestEndTime[n]
- l = [l for l in leases if n in l.rr[-1].nodes.values() and l.rr[-1].start < end]
- leases2.update(l)
- return list(leases2)
-
#-------------------------------------------------------------------#
# #
# MISCELLANEOUS DATA STRUCTURES CONTAINERS #
Modified: trunk/src/haizea/resourcemanager/slottable.py
===================================================================
--- trunk/src/haizea/resourcemanager/slottable.py 2008-09-16 10:43:48 UTC (rev 501)
+++ trunk/src/haizea/resourcemanager/slottable.py 2008-09-19 16:37:15 UTC (rev 502)
@@ -161,6 +161,12 @@
res = [x.value for x in self.reservationsByStart[startpos:endpos]]
return res
+ def get_reservations_starting_after(self, start):
+ startitem = KeyValueWrapper(start, None)
+ startpos = bisect.bisect_left(self.reservationsByStart, startitem)
+ res = [x.value for x in self.reservationsByStart[startpos:]]
+ return res
+
def get_reservations_ending_between(self, start, end):
startitem = KeyValueWrapper(start, None)
enditem = KeyValueWrapper(end, None)
@@ -216,13 +222,12 @@
self.dirty()
# If the slot table keys are modified (start and/or end time)
- # provide the old reservation (so we can remove it using
- # the original keys) and also the new reservation
- def updateReservationWithKeyChange(self, rrold, rrnew):
+ # provide the old keys (so we can remove it using
+ # the m) and updated reservation
+ def update_reservation_with_key_change(self, rr, old_start, old_end):
# TODO: Might be more efficient to resort lists
- self.removeReservation(rrold)
- self.addReservation(rrnew)
- rrold.lease.replace_rr(rrold, rrnew)
+ self.removeReservation(rr, old_start, old_end)
+ self.addReservation(rr)
self.dirty()
@@ -286,8 +291,40 @@
avail = sum([node.capacity.get_by_type(constants.RES_CPU) for node in nodes.values()])
return (avail == 0)
+ def get_next_reservations_in_nodes(self, time, nodes, rr_type=None, immediately_next = False):
+ nodes = set(nodes)
+ rrs_in_nodes = []
+ earliest_end_time = {}
+ rrs = self.get_reservations_starting_after(time)
+ if rr_type != None:
+ rrs = [rr for rr in rrs if isinstance(rr, rr_type)]
+
+ # Filter the RRs by nodes
+ for r in rrs:
+ rr_nodes = set(rr.resources_in_pnode.keys())
+ if len(nodes & rr_nodes) > 0:
+ rrs_in_nodes.append(rr)
+ end = rr.end
+ for n in rr_nodes:
+ if not earliest_end_time.has_key(n):
+ earliest_end_time[n] = end
+ else:
+ if end < earliest_end_time[n]:
+ earliest_end_time[n] = end
+
+ if immediately_next:
+ # We only want to include the ones that are immediately
+ # next.
+ rr_nodes_excl = set()
+ for n in nodes:
+ if earliest_end_time.has_key(n):
+ end = earliest_end_time[n]
+ rrs = [rr for rr in rrs_in_nodes if n in rr.resources_in_pnode.keys() and rr.start < end]
+ rr_nodes_excl.update(rrs)
+ rrs_in_nodes = list(rr_nodes_excl)
+
+ return rrs_in_nodes
-
class AvailEntry(object):
def __init__(self, time, avail, availpreempt, resreq):
self.time = time
More information about the Haizea-commit
mailing list