[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