[haizea-commit] r609 - in branches/TP2.0: src/haizea/core/scheduler tests

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Fri Jul 17 10:04:34 CDT 2009


Author: borja
Date: 2009-07-17 10:04:33 -0500 (Fri, 17 Jul 2009)
New Revision: 609

Modified:
   branches/TP2.0/src/haizea/core/scheduler/slottable.py
   branches/TP2.0/tests/sample_slottables.py
   branches/TP2.0/tests/test_mapper.py
   branches/TP2.0/tests/test_slottable.py
Log:
- Fixed bug in availability window construction.
- A couple of minor fixes in unit tests.

Modified: branches/TP2.0/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/TP2.0/src/haizea/core/scheduler/slottable.py	2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/src/haizea/core/scheduler/slottable.py	2009-07-17 15:04:33 UTC (rev 609)
@@ -76,6 +76,16 @@
                         return False
         return True
     
+    def any_less(self, res2):
+        for i in xrange(self.slottable.rtuple_len):
+            if self._res[i] < res2._res[i]:
+                return True
+        return False    
+   
+    def min(self, res2):
+        for i in xrange(self.slottable.rtuple_len):
+            self._res[i] = min(self._res[i], res2._res[i])
+    
     def decr(self, res2):
         for slottype in xrange(self.slottable.rtuple_len):
             self._res[slottype] -= res2._res[slottype]
@@ -621,10 +631,10 @@
         rrs.sort(key=attrgetter("start"))
         pos = 0
         # Fill in rest of changepoint hash table
+        
         for rr in rrs:
             while rr.start >= self.time and self.cp_list[pos] != rr.start:
                 pos += 1
-                
             lease = rr.lease
 
             self.leases.add(lease)
@@ -633,13 +643,12 @@
                 start_cp = self.changepoints[rr.start]
             else:
                 start_cp = self.changepoints[self.time]
-            
+
             start_cp.leases.add(lease)
             for node in rr.resources_in_pnode:
                 start_cp.nodes[node].decr(rr.resources_in_pnode[node])
                 start_cp.nodes[node].add_lease(lease, rr.resources_in_pnode[node])
-         
-                
+
             pos2 = pos + 1
 
             while self.cp_list[pos2] < rr.end:
@@ -673,14 +682,14 @@
         node = self.changepoints[time].nodes[node]
         prev_avail = None
         prev_node = None
-        
         while node != None:
             if len(preempted_leases) == None:
                 available = ResourceTuple.copy(node.available)
             else:
                 available = node.get_avail_withpreemption(preempted_leases)
 
-            if prev_avail != None and available.fits_in(prev_avail.available):
+            if prev_avail != None and available.any_less(prev_avail.available):
+                available.min(prev_avail.available)
                 availentry = AvailEntry(available, None)
                 avails.append(availentry)
                 prev_avail.until = prev_node.next_cp
@@ -692,7 +701,7 @@
             
             prev_node = node
             node = node.next_nodeavail
-        
+            
         return AvailabilityInNode(avails)
     
     def get_nodes_at(self, time):

Modified: branches/TP2.0/tests/sample_slottables.py
===================================================================
--- branches/TP2.0/tests/sample_slottables.py	2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/sample_slottables.py	2009-07-17 15:04:33 UTC (rev 609)
@@ -46,10 +46,10 @@
     slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
     FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
     
-    slottable.add_node(FULL_NODE)
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
+    slottable.add_node(1, FULL_NODE)
+    slottable.add_node(2, FULL_NODE)  
+    slottable.add_node(3, FULL_NODE)  
+    slottable.add_node(4, FULL_NODE)  
 
     lease1 = Lease(None,[],None,None,None,1,None)
     lease1.id = 1
@@ -97,10 +97,10 @@
     slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
     FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
     
-    slottable.add_node(FULL_NODE)
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
+    slottable.add_node(1, FULL_NODE)
+    slottable.add_node(2, FULL_NODE)  
+    slottable.add_node(3, FULL_NODE)  
+    slottable.add_node(4, FULL_NODE)  
 
     lease1 = create_ar_lease(lease_id = 1,
                              submit_time = T1200,
@@ -124,10 +124,10 @@
     slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
     FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
     
-    slottable.add_node(FULL_NODE)
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
-    slottable.add_node(FULL_NODE)  
+    slottable.add_node(1, FULL_NODE)
+    slottable.add_node(2, FULL_NODE)  
+    slottable.add_node(3, FULL_NODE)  
+    slottable.add_node(4, FULL_NODE)  
 
     lease1 = create_ar_lease(lease_id = 1,
                              submit_time = T1200,
@@ -153,4 +153,37 @@
                              requested_resources = {1: HALF_NODE})
     create_reservation_from_lease(lease3, {1:2}, slottable)
 
-    return slottable, [lease1, lease2, lease3]
\ No newline at end of file
+    return slottable, [lease1, lease2, lease3]
+
+def sample_slottable_4():
+    slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
+    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
+    
+    slottable.add_node(1, FULL_NODE)
+
+    lease1 = create_ar_lease(lease_id = 1,
+                             submit_time = T1200,
+                             start = T1315,
+                             end   = T1420,
+                             preemptible = False,
+                             requested_resources = {1: HALF_NODE})
+    create_reservation_from_lease(lease1, {1:1}, slottable)
+
+    lease2 = create_ar_lease(lease_id = 2,
+                             submit_time = T1200,
+                             start = T1330,
+                             end   = T1415,
+                             preemptible = False,
+                             requested_resources = {1: QRTR_NODE})
+    create_reservation_from_lease(lease2, {1:1}, slottable)
+
+    #lease3 = create_ar_lease(lease_id = 3,
+    #                         submit_time = T1200,
+    #                         start = T1345,
+    #                         end   = T1400,
+    #                         preemptible = False,
+    #                         requested_resources = {1: QRTR_NODE})
+    #create_reservation_from_lease(lease1, {1:1}, slottable)
+
+
+    return slottable, [lease1, lease2, None]
\ No newline at end of file

Modified: branches/TP2.0/tests/test_mapper.py
===================================================================
--- branches/TP2.0/tests/test_mapper.py	2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/test_mapper.py	2009-07-17 15:04:33 UTC (rev 609)
@@ -1,19 +1,21 @@
 from haizea.core.leases import Lease
 from haizea.core.scheduler.resourcepool import ResourcePoolNode
-from haizea.core.scheduler.policy import Policy
+from haizea.core.scheduler.policy import PolicyManager
 from haizea.core.scheduler.slottable import ResourceTuple, SlotTable, ResourceReservation, AvailabilityWindow
 from haizea.core.scheduler.mapper import GreedyMapper
+from haizea.policies.host_selection import GreedyPolicy
 from mx import DateTime
 import haizea.common.constants as constants
 from sample_slottables import *
 from common import create_tmp_slottable
 
-class SimplePolicy(Policy):
+class SimplePolicy(PolicyManager):
     def __init__(self, slottable, preemption):
-        Policy.__init__(self, slottable)
+        PolicyManager.__init__(self, slottable, None, None, None)
         self.preemption = preemption
+        self.host_selection = GreedyPolicy(slottable)
     
-    def get_lease_preemptability_score(self, preemptor, preemptee):
+    def get_lease_preemptability_score(self, preemptor, preemptee, time):
         if self.preemption:
             return 1
         else:

Modified: branches/TP2.0/tests/test_slottable.py
===================================================================
--- branches/TP2.0/tests/test_slottable.py	2009-07-17 15:02:10 UTC (rev 608)
+++ branches/TP2.0/tests/test_slottable.py	2009-07-17 15:04:33 UTC (rev 609)
@@ -374,8 +374,8 @@
         self.slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
         FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(self.slottable)
         
-        self.slottable.add_node(FULL_NODE)
-        self.slottable.add_node(FULL_NODE)  
+        self.slottable.add_node(1, FULL_NODE)
+        self.slottable.add_node(2, FULL_NODE)  
         
         assert self.slottable.get_total_capacity(constants.RES_CPU) == 200
         assert self.slottable.get_total_capacity(constants.RES_MEM) == 2048
@@ -649,4 +649,33 @@
         avail = aw.get_availability_at_node(T1415, 4)
         assert(len(avail.avail_list)==1)
         assert(avail.avail_list[0].available == FULL_NODE)
-        assert(avail.avail_list[0].until     == None)                        
\ No newline at end of file
+        assert(avail.avail_list[0].until     == None) 
+        
+        self.slottable, leases = sample_slottable_4()        
+        FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(self.slottable)
+        
+        lease1,lease2,lease3 = leases
+        aw = self.slottable.get_availability_window(T1300)
+        
+        # 13:30
+        avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 1, 
+                              leases = {}, next_cp = T1315)
+        avail_node_assertions(time = T1315, avail = HALF_NODE, node_id = 1, 
+                              leases = {lease1:HALF_NODE}, next_cp = T1330)
+        avail_node_assertions(time = T1330, avail = QRTR_NODE, node_id = 1, 
+                              leases = {lease1:HALF_NODE,lease2:QRTR_NODE}, next_cp = T1415)
+        
+        avail = aw.get_availability_at_node(T1300, 1)
+        print avail.avail_list
+        print avail.avail_list[0].available, avail.avail_list[0].until
+        print avail.avail_list[1].available, avail.avail_list[1].until
+        print avail.avail_list[2].available, avail.avail_list[2].until
+        assert(len(avail.avail_list)==3)
+        assert(avail.avail_list[0].available == FULL_NODE)
+        assert(avail.avail_list[0].until     == T1315)
+        assert(avail.avail_list[1].available == HALF_NODE)
+        assert(avail.avail_list[1].until     == T1330)
+        assert(avail.avail_list[2].available == QRTR_NODE)
+        assert(avail.avail_list[2].until     == None)
+        
+                
\ No newline at end of file



More information about the Haizea-commit mailing list