[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