[haizea-commit] r834 - in branches/1.1/src/haizea/core/scheduler: . preparation_schedulers
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Wed Jul 21 13:28:03 CDT 2010
Author: borja
Date: 2010-07-21 13:28:03 -0500 (Wed, 21 Jul 2010)
New Revision: 834
Modified:
branches/1.1/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py
branches/1.1/src/haizea/core/scheduler/resourcepool.py
branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
Log:
Saner migration scheduling
Modified: branches/1.1/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py 2010-07-21 18:27:32 UTC (rev 833)
+++ branches/1.1/src/haizea/core/scheduler/preparation_schedulers/imagetransfer.py 2010-07-21 18:28:03 UTC (rev 834)
@@ -64,8 +64,11 @@
# This code is the same as the one in vm_scheduler
# Should be factored out
+
last_vmrr = lease.get_last_vmrr()
- vnode_migrations = dict([(vnode, (last_vmrr.nodes[vnode], vmrr.nodes[vnode])) for vnode in vmrr.nodes])
+
+ vnode_mappings = self.resourcepool.get_disk_image_mappings(lease)
+ vnode_migrations = dict([(vnode, (vnode_mappings[vnode], vmrr.nodes[vnode])) for vnode in vmrr.nodes if vnode_mappings[vnode] != vmrr.nodes[vnode]])
mustmigrate = False
for vnode in vnode_migrations:
Modified: branches/1.1/src/haizea/core/scheduler/resourcepool.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/resourcepool.py 2010-07-21 18:27:32 UTC (rev 833)
+++ branches/1.1/src/haizea/core/scheduler/resourcepool.py 2010-07-21 18:28:03 UTC (rev 834)
@@ -64,14 +64,18 @@
raise
def verify_deploy(self, lease, rr):
+ deployed = False
if isinstance(lease.software, UnmanagedSoftwareEnvironment):
- return True
+ deployed = True
elif isinstance(lease.software, DiskImageSoftwareEnvironment):
+ missing = False
for (vnode, pnode) in rr.nodes.items():
img = self.get_node(pnode).get_diskimage(lease, vnode, lease.software.image_id)
if img == None:
- return False
- return True
+ self.logger.error("L%iV%i is not deployed in node %i" % (lease.id, vnode, pnode))
+ missing = True
+ if not missing: deployed = True
+ return deployed
def suspend_vms(self, lease, rr):
# Add memory image files
@@ -173,7 +177,23 @@
node.print_files()
node.remove_ramfile(lease, vnode)
node.print_files()
-
+
+ def get_disk_image_mappings(self, lease):
+ vnode_map = {}
+ for n in self.nodes.values():
+ disk_images = [img for img in n.get_diskimages() if img.lease == lease]
+ for img in disk_images:
+ vnode_map[img.vnode] = n.id
+ return vnode_map
+
+ def get_ram_image_mappings(self, lease):
+ vnode_map = {}
+ for n in self.nodes.values():
+ disk_images = [img for img in n.get_ramimages() if img.lease == lease]
+ for img in disk_images:
+ vnode_map[img.vnode] = n.id
+ return vnode_map
+
def get_max_disk_usage(self):
return max([n.get_disk_usage() for n in self.nodes.values()])
@@ -228,6 +248,9 @@
def get_diskimages(self):
return [f for f in self.files if isinstance(f, DiskImageFile)]
+
+ def get_ramimages(self):
+ return [f for f in self.files if isinstance(f, RAMImageFile)]
def print_files(self):
images = ""
Modified: branches/1.1/src/haizea/core/scheduler/vm_scheduler.py
===================================================================
--- branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-07-21 18:27:32 UTC (rev 833)
+++ branches/1.1/src/haizea/core/scheduler/vm_scheduler.py 2010-07-21 18:28:03 UTC (rev 834)
@@ -153,11 +153,12 @@
nexttime -- The next time at which the scheduler can allocate resources.
"""
- # Determine what migrations have to be done. We do this by looking at
- # the mapping in the previous VM RR and in the new VM RR
+ # Determine what migrations have to be done.
last_vmrr = lease.get_last_vmrr()
- vnode_migrations = dict([(vnode, (last_vmrr.nodes[vnode], vmrr.nodes[vnode])) for vnode in vmrr.nodes])
+ vnode_mappings = self.resourcepool.get_ram_image_mappings(lease)
+ vnode_migrations = dict([(vnode, (vnode_mappings[vnode], vmrr.nodes[vnode])) for vnode in vmrr.nodes if vnode_mappings[vnode] != vmrr.nodes[vnode]])
+
# Determine if we actually have to migrate
mustmigrate = False
for vnode in vnode_migrations:
@@ -231,9 +232,9 @@
self.future_leases.remove(vmrr.lease)
get_persistence().persist_future_leases(self.future_leases)
- # If there are any pre-RRs that are scheduled, remove them
+ # If there are any pre-RRs that are scheduled or active, remove them
for rr in vmrr.pre_rrs:
- if rr.state == ResourceReservation.STATE_SCHEDULED:
+ if rr.state != ResourceReservation.STATE_DONE:
self.slottable.remove_reservation(rr)
# If there are any post RRs, remove them
@@ -1320,7 +1321,7 @@
if get_config().get("lease-preparation") == "imagetransfer":
if not self.resourcepool.verify_deploy(l, rr):
- self.logger.error("Deployment was not complete.")
+ self.logger.error("Deployment of lease %i was not complete." % l.id)
raise # TODO raise something better
# Kludge: Should be done by the preparations scheduler
More information about the Haizea-commit
mailing list