[haizea-commit] r556 - in trunk/src/haizea/resourcemanager: . enact frontends
haizea-commit at mailman.cs.uchicago.edu
haizea-commit at mailman.cs.uchicago.edu
Thu Jan 29 16:11:33 CST 2009
Author: borja
Date: 2009-01-29 16:11:25 -0600 (Thu, 29 Jan 2009)
New Revision: 556
Modified:
trunk/src/haizea/resourcemanager/enact/opennebula.py
trunk/src/haizea/resourcemanager/frontends/opennebula.py
trunk/src/haizea/resourcemanager/rm.py
Log:
OpenNebula 1.2 support
Modified: trunk/src/haizea/resourcemanager/enact/opennebula.py
===================================================================
--- trunk/src/haizea/resourcemanager/enact/opennebula.py 2009-01-06 11:57:20 UTC (rev 555)
+++ trunk/src/haizea/resourcemanager/enact/opennebula.py 2009-01-29 22:11:25 UTC (rev 556)
@@ -17,6 +17,7 @@
# -------------------------------------------------------------------------- #
from haizea.resourcemanager.scheduler.resourcepool import Node
+from haizea.resourcemanager.scheduler.slottable import ResourceTuple
from haizea.resourcemanager.enact import ResourcePoolInfo, VMEnactment, DeploymentEnactment
from haizea.common.utils import get_config
import haizea.common.constants as constants
@@ -40,13 +41,13 @@
self.nodes = []
cur = conn.cursor()
- cur.execute("select hid, host_name from hostpool where state != 4")
+ cur.execute("select oid, host_name from host_pool where state != 4")
hosts = cur.fetchall()
for (i, host) in enumerate(hosts):
nod_id = i+1
- enactID = int(host["hid"])
+ enactID = int(host["oid"])
hostname = host["host_name"]
- capacity = ds.ResourceTuple.create_empty()
+ capacity = ResourceTuple.create_empty()
capacity.set_by_type(constants.RES_DISK, 80000) # OpenNebula currently doesn't provide this
capacity.set_by_type(constants.RES_NETIN, 100) # OpenNebula currently doesn't provide this
capacity.set_by_type(constants.RES_NETOUT, 100) # OpenNebula currently doesn't provide this
@@ -170,7 +171,7 @@
# Unpack action
vmid = action.vnodes[vnode].enactment_info
cur = self.conn.cursor()
- cur.execute("select state from vmpool where oid = %i" % vmid)
+ cur.execute("select state from vm_pool where oid = %i" % vmid)
onevm = cur.fetchone()
state = onevm["state"]
if state == 5:
@@ -187,7 +188,7 @@
# Unpack action
vmid = action.vnodes[vnode].enactment_info
cur = self.conn.cursor()
- cur.execute("select state from vmpool where oid = %i" % vmid)
+ cur.execute("select state from vm_pool where oid = %i" % vmid)
onevm = cur.fetchone()
state = onevm["state"]
if state == 3:
Modified: trunk/src/haizea/resourcemanager/frontends/opennebula.py
===================================================================
--- trunk/src/haizea/resourcemanager/frontends/opennebula.py 2009-01-06 11:57:20 UTC (rev 555)
+++ trunk/src/haizea/resourcemanager/frontends/opennebula.py 2009-01-29 22:11:25 UTC (rev 556)
@@ -47,16 +47,20 @@
def __init__(self, db_entry, attrs):
self.db_entry = db_entry
- self.attrs = attrs
+ self.attrs = dict(attrs)
+
+ # In OpenNebula 1.2, there can be more than one disk attribute
+ self.attrs[OpenNebulaVM.ONE_DISK] = [value for name, value in attrs if name == OpenNebulaVM.ONE_DISK]
+
# If there is no HAIZEA parameter, the default is to treat the
# request as an immediate request with unlimited duration
- if not attrs.has_key(OpenNebulaVM.HAIZEA_PARAM):
+ if not self.attrs.has_key(OpenNebulaVM.HAIZEA_PARAM):
self.haizea_param = {OpenNebulaVM.HAIZEA_START: OpenNebulaVM.HAIZEA_START_NOW,
OpenNebulaVM.HAIZEA_DURATION: OpenNebulaVM.HAIZEA_DURATION_UNLIMITED,
OpenNebulaVM.HAIZEA_PREEMPTIBLE: OpenNebulaVM.HAIZEA_PREEMPTIBLE_NO}
else:
- self.haizea_param = self.__get_vector_value(attrs[OpenNebulaVM.HAIZEA_PARAM])
+ self.haizea_param = self.__get_vector_value(self.attrs[OpenNebulaVM.HAIZEA_PARAM])
def is_grouped(self):
@@ -103,7 +107,7 @@
return UNIX2DateTime(self.db_entry["stime"])
def get_diskimage(self):
- disk = self.__get_vector_value(self.attrs[OpenNebulaVM.ONE_DISK])
+ disk = self.__get_vector_value(self.attrs[OpenNebulaVM.ONE_DISK][0])
diskimage = disk[OpenNebulaVM.ONE_DISK_SOURCE]
return diskimage
@@ -120,7 +124,7 @@
return int(self.db_entry["oid"])
def __get_vector_value(self, value):
- return dict([n.split("=") for n in value.split(",")])
+ return dict([n.split("=") for n in value.split("@^_^@")])
class OpenNebulaFrontend(RequestFrontend):
@@ -137,15 +141,15 @@
def get_accumulated_requests(self):
cur = self.conn.cursor()
processed = ",".join([`p` for p in self.processed])
- cur.execute("select * from vmpool where state=1 and oid not in (%s)" % processed)
+ cur.execute("select * from vm_pool where state=1 and oid not in (%s)" % processed)
db_opennebula_vms = cur.fetchall()
# Extract the pending OpenNebula VMs
opennebula_vms = [] # (ONE VM, ONE VM template attributes, ONE Haizea parameter)
for vm in db_opennebula_vms:
- cur.execute("select * from vm_template where id=%i" % vm["oid"])
+ cur.execute("select * from vm_attributes where id=%i" % vm["oid"])
template = cur.fetchall()
- attrs = dict([(r["name"], r["value"]) for r in template])
+ attrs = [(r["name"], r["value"]) for r in template]
self.processed.append(vm["oid"])
opennebula_vms.append(OpenNebulaVM(vm, attrs))
Modified: trunk/src/haizea/resourcemanager/rm.py
===================================================================
--- trunk/src/haizea/resourcemanager/rm.py 2009-01-06 11:57:20 UTC (rev 555)
+++ trunk/src/haizea/resourcemanager/rm.py 2009-01-29 22:11:25 UTC (rev 556)
@@ -186,24 +186,24 @@
# No deployment in OpenNebula. Using dummy one for now.
deploy_enact = OpenNebulaDummyDeploymentEnactment()
+ # Resource pool
+ resourcepool = ResourcePool(info_enact, vm_enact, deploy_enact)
+
# Slot table
slottable = SlotTable()
+ for n in resourcepool.get_nodes() + resourcepool.get_aux_nodes():
+ slottable.add_node(n)
- # Resource pool
- resourcepool = ResourcePool(info_enact, vm_enact, deploy_enact)
# Deployment module
- deployment = UnmanagedDeploymentScheduler(slottable, resourcepool, deploy_enact)
+ preparation_scheduler = UnmanagedPreparationScheduler(slottable, resourcepool, deploy_enact)
- # Scheduler
- self.scheduler = Scheduler(slottable, resourcepool, deployment)
+ # VM Scheduler
+ vm_scheduler = VMScheduler(slottable, resourcepool)
+
+ # Lease Scheduler
+ self.scheduler = LeaseScheduler(vm_scheduler, preparation_scheduler, slottable)
- # TODO: Having the slot table contained in the deployment scheduler, and also
- # in the "main" scheduler (which itself contains the same slot table) is far
- # from ideal, although this is mostly a consequence of the Scheduler class
- # being in need of some serious refactoring. This will be fixed (see Scheduler
- # class comments for more details)
-
# Lease request frontends
self.frontends = [OpenNebulaFrontend(self)]
More information about the Haizea-commit
mailing list