[haizea-commit] r505 - trunk/src/haizea/resourcemanager

haizea-commit at mailman.cs.uchicago.edu haizea-commit at mailman.cs.uchicago.edu
Fri Sep 19 11:53:01 CDT 2008


Author: borja
Date: 2008-09-19 11:53:01 -0500 (Fri, 19 Sep 2008)
New Revision: 505

Modified:
   trunk/src/haizea/resourcemanager/scheduler.py
Log:
Adapted slideback algorithm to new lease data structure topology

Modified: trunk/src/haizea/resourcemanager/scheduler.py
===================================================================
--- trunk/src/haizea/resourcemanager/scheduler.py	2008-09-19 16:39:12 UTC (rev 504)
+++ trunk/src/haizea/resourcemanager/scheduler.py	2008-09-19 16:53:01 UTC (rev 505)
@@ -1234,57 +1234,55 @@
         #    self.reevaluateSchedule(l, vmrr.nodes.values(), vmrr.end, checkedleases)
           
     def __slideback(self, lease, earliest):
-        pass
-#        (vmrr, susprr) = lease.get_last_vmrr()
-#        vmrrnew = copy.copy(vmrr)
-#        nodes = vmrrnew.nodes.values()
-#        if lease.state == Lease.LEASE_STATE_SUSPENDED:
-#            resmrr = lease.prev_rr(vmrr)
-#            originalstart = resmrr.start
-#        else:
-#            resmrr = None
-#            originalstart = vmrrnew.start
-#        cp = self.findChangePointsAfter(after=earliest, until=originalstart, nodes=nodes)
-#        cp = [earliest] + cp
-#        newstart = None
-#        for p in cp:
-#            self.availabilitywindow.initWindow(p, lease.requested_resources, canpreempt=False)
-#            self.availabilitywindow.printContents()
-#            if self.availabilitywindow.fitAtStart(nodes=nodes) >= lease.numnodes:
-#                (end, canfit) = self.availabilitywindow.findPhysNodesForVMs(lease.numnodes, originalstart)
-#                if end == originalstart and set(nodes) <= set(canfit.keys()):
-#                    self.logger.debug("Can slide back to %s" % p)
-#                    newstart = p
-#                    break
-#        if newstart == None:
-#            # Can't slide back. Leave as is.
-#            pass
-#        else:
-#            diff = originalstart - newstart
-#            if resmrr != None:
-#                resmrrnew = copy.copy(resmrr)
-#                resmrrnew.start -= diff
-#                resmrrnew.end -= diff
-#                self.updateReservationWithKeyChange(resmrr, resmrrnew)
-#            vmrrnew.start -= diff
-#            
-#            # If the lease was going to be suspended, check to see if
-#            # we don't need to suspend any more.
-#            remdur = lease.duration.get_remaining_duration()
-#            if susprr != None and vmrrnew.end - newstart >= remdur: 
-#                vmrrnew.end = vmrrnew.start + remdur
-#                #vmrrnew.oncomplete = constants.ONCOMPLETE_ENDLEASE
-#                lease.remove_rr(susprr)
-#                self.removeReservation(susprr)
-#            else:
-#                vmrrnew.end -= diff
-#            # ONLY for simulation
-#            if vmrrnew.prematureend != None:
-#                vmrrnew.prematureend -= diff
-#            self.updateReservationWithKeyChange(vmrr, vmrrnew)
-#            self.dirty()
-#            self.logger.vdebug("New lease descriptor (after slideback):")
-#            lease.print_contents()
+        vmrr = lease.get_last_vmrr()
+        # Save original start and end time of the vmrr
+        old_start = vmrr.start
+        old_end = vmrr.end
+        nodes = vmrr.nodes.values()
+        if lease.state == Lease.STATE_SUSPENDED:
+            originalstart = vmrr.resm_rrs[0].start
+        else:
+            originalstart = vmrr.start
+        cp = self.slottable.findChangePointsAfter(after=earliest, until=originalstart, nodes=nodes)
+        cp = [earliest] + cp
+        newstart = None
+        for p in cp:
+            self.slottable.availabilitywindow.initWindow(p, lease.requested_resources, canpreempt=False)
+            self.slottable.availabilitywindow.printContents()
+            if self.slottable.availabilitywindow.fitAtStart(nodes=nodes) >= lease.numnodes:
+                (end, canfit) = self.slottable.availabilitywindow.findPhysNodesForVMs(lease.numnodes, originalstart)
+                if end == originalstart and set(nodes) <= set(canfit.keys()):
+                    self.logger.debug("Can slide back to %s" % p)
+                    newstart = p
+                    break
+        if newstart == None:
+            # Can't slide back. Leave as is.
+            pass
+        else:
+            diff = originalstart - newstart
+            if lease.state == Lease.STATE_SUSPENDED:
+                for resmrr in vmrr.resm_rrs:
+                    resmrr_old_start = resmrr.start
+                    resmrr_old_end = resmrr.end
+                    resmrr.start -= diff
+                    resmrr.end -= diff
+                    self.slottable.update_reservation_with_key_change(resmrr, resmrr_old_start, resmrr_old_end)
+            vmrr.update_start(vmrr.start - diff)
+            
+            # If the lease was going to be suspended, check to see if
+            # we don't need to suspend any more.
+            remdur = lease.duration.get_remaining_duration()
+            if vmrr.is_suspending() and vmrr.end - newstart >= remdur: 
+                vmrr.update_end(vmrr.start + remdur)
+                for susprr in vmrr.susp_rrs:
+                    self.slottable.removeReservation(susprr)
+                vmrr.susp_rrs = []
+            else:
+                vmrr.update_end(vmrr.end - diff)
+
+            self.slottable.update_reservation_with_key_change(vmrr, old_start, old_end)
+            self.logger.vdebug("New lease descriptor (after slideback):")
+            lease.print_contents()
     
           
 



More information about the Haizea-commit mailing list