[haizea-commit] r783 - branches/1.1/src/haizea/core/scheduler

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Wed Jan 20 16:21:42 CST 2010


Author: borja
Date: 2010-01-20 16:21:42 -0600 (Wed, 20 Jan 2010)
New Revision: 783

Modified:
   branches/1.1/src/haizea/core/scheduler/slottable.py
Log:
Allow the slottable to be saved more than once (using a stack)

Modified: branches/1.1/src/haizea/core/scheduler/slottable.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/slottable.py	2010-01-19 22:59:33 UTC (rev 782)
+++ branches/1.1/src/haizea/core/scheduler/slottable.py	2010-01-20 22:21:42 UTC (rev 783)
@@ -422,7 +422,9 @@
         self.availabilitycache = {}
         self.awcache_time = None
         self.awcache = None
+        self.state_stack = []
         self.__dirty()
+        
 
         # Resource tuple fields
         res_singleinstance = [rt for rt,ninst in resource_types if ninst == ResourceTuple.SINGLE_INSTANCE]
@@ -855,33 +857,43 @@
         from haizea.core.scheduler.vm_scheduler import VMResourceReservation
         return [i.value for i in self.reservations_by_end if isinstance(i.value, VMResourceReservation) and i.value.prematureend == time]
 
-    def save(self, leases = []):
-        self.reservations_by_start2 = self.reservations_by_start[:]
-        self.reservations_by_end2 = self.reservations_by_end[:]
-        
-        self.orig_vmrrs = dict([(l,l.vm_rrs[:]) for l in leases])
-        self.orig_vmrrs_data = {}
-        for orig_vmrr in self.orig_vmrrs.values():
+    def push_state(self, leases = []):
+        self.logger.debug("Saving slottable state, and leases %s" % [l.id for l in leases])
+        reservations_by_start = self.reservations_by_start[:]
+        reservations_by_end = self.reservations_by_end[:]
+
+        orig_vmrrs = dict([(l,l.vm_rrs[:]) for l in leases])
+        orig_vmrrs_data = {}
+        for orig_vmrr in orig_vmrrs.values():
             for vmrr in orig_vmrr:
-                self.orig_vmrrs_data[vmrr] = (vmrr.start, vmrr.end, vmrr.prematureend, vmrr.pre_rrs[:], vmrr.post_rrs[:])
+                orig_vmrrs_data[vmrr] = (vmrr.start, vmrr.end, vmrr.prematureend, vmrr.pre_rrs[:], vmrr.post_rrs[:])
+                
+        self.state_stack.append((reservations_by_start, reservations_by_end, orig_vmrrs, orig_vmrrs_data))
 
 
-    def restore(self):
-        self.reservations_by_start = self.reservations_by_start2
-        self.reservations_by_end = self.reservations_by_end2
-        
-        for l in self.orig_vmrrs:
-            l.vm_rrs = self.orig_vmrrs[l]
-            for vm_rr in l.vm_rrs:
-                vm_rr.start = self.orig_vmrrs_data[vm_rr][0]
-                vm_rr.end = self.orig_vmrrs_data[vm_rr][1]
-                vm_rr.prematureend = self.orig_vmrrs_data[vm_rr][2]
-                vm_rr.pre_rrs = self.orig_vmrrs_data[vm_rr][3]
-                vm_rr.post_rrs = self.orig_vmrrs_data[vm_rr][4]
-   
-        self.__dirty()
+    def pop_state(self, discard = False):
+        reservations_by_start, reservations_by_end, orig_vmrrs, orig_vmrrs_data = self.state_stack.pop()
 
+        if not discard:
+            self.logger.debug("Popping slottable state, and leases %s" % [l.id for l in orig_vmrrs.keys()])
+            self.reservations_by_start = reservations_by_start
+            self.reservations_by_end = reservations_by_end
+            
+            for l in orig_vmrrs:
+                l.vm_rrs = orig_vmrrs[l]
+                for vm_rr in l.vm_rrs:
+                    vm_rr.start = orig_vmrrs_data[vm_rr][0]
+                    vm_rr.end = orig_vmrrs_data[vm_rr][1]
+                    vm_rr.prematureend = orig_vmrrs_data[vm_rr][2]
+                    vm_rr.pre_rrs = orig_vmrrs_data[vm_rr][3]
+                    vm_rr.post_rrs = orig_vmrrs_data[vm_rr][4]
+       
+            self.__dirty()
+        else:
+            self.logger.debug("Popping (but NOT restoring) slottable state, and leases %s" % [l.id for l in orig_vmrrs.keys()])
+            
 
+
     def __remove_reservation(self, rr, start=None, end=None):
         """Remove a L{ResourceReservation} from the slot table.
     



More information about the Haizea-commit mailing list