예제 #1
0
    def testMachineType(self, data=TEST_DB_DATA["machine"]):        
        machineType = MachineType(data["typeID"],
                                  data["numcpu"],
                                  data["numcore"],
                                  data["frequency"],
                                  data["numfpga"],
                                  data["memfpga"],
                                  data["numgpu"],
                                  data["memory"],
                                  data["disk"],
                                  data["typegpu"],
                                  data["typefpga"])

        session.add(machineType)
        session.commit()

        dbType = session.query(MachineType).get("MACHINE")

        self.assertEqual(dbType.numcpu,data["numcpu"])
        self.assertEqual(dbType.numcore,data["numcore"])
        self.assertEqual(dbType.frequency,data["frequency"])
        self.assertEqual(dbType.numfpga,data["numfpga"])
        self.assertEqual(dbType.memfpga,data["memfpga"])
        self.assertEqual(dbType.numgpu,data["numgpu"])
        self.assertEqual(dbType.memory,data["memory"])
        self.assertEqual(dbType.disk,data["disk"])
        self.assertEqual(dbType.typegpu,data["typegpu"])
        self.assertEqual(dbType.typefpga,data["typefpga"])                
예제 #2
0
    def testStorageType(self, data=TEST_DB_DATA["storage"]):
        storageType = StorageType(data["typeID"], data["capacity"],
                                  data["ranbw"], data["seqbw"])

        session.add(storageType)
        session.commit()

        dbType = session.query(StorageType).get("STORAGE")

        self.assertEqual(dbType.capacity, data["capacity"])
        self.assertEqual(dbType.ranbw, data["ranbw"])
        self.assertEqual(dbType.seqbw, data["seqbw"])
예제 #3
0
    def testStorageType(self, data=TEST_DB_DATA["storage"]):
        storageType = StorageType(data["typeID"],
                                  data["capacity"],
                                  data["ranbw"],
                                  data["seqbw"])

        session.add(storageType)
        session.commit()

        dbType = session.query(StorageType).get("STORAGE")

        self.assertEqual(dbType.capacity, data["capacity"])
        self.assertEqual(dbType.ranbw, data["ranbw"])
        self.assertEqual(dbType.seqbw, data["seqbw"])
예제 #4
0
    def testRouterType(self, data=TEST_DB_DATA["router"]):
        routerType = RouterType(data["typeID"], data["inbw"], data["outbw"],
                                data["buffer"], data["capacity"],
                                data["connector"], data["version"])

        session.add(routerType)
        session.commit()

        dbType = session.query(RouterType).get("ROUTER")

        self.assertEqual(dbType.inbw, data["inbw"])
        self.assertEqual(dbType.outbw, data["outbw"])
        self.assertEqual(dbType.buffer, data["buffer"])
        self.assertEqual(dbType.capacity, data["capacity"])
        self.assertEqual(dbType.connector, data["connector"])
        self.assertEqual(dbType.version, data["version"])
예제 #5
0
    def testRouterType(self,data=TEST_DB_DATA["router"]):        
        routerType = RouterType(data["typeID"],
                                data["inbw"],
                                data["outbw"],
                                data["buffer"],
                                data["capacity"],
                                data["connector"],
                                data["version"])

        session.add(routerType)
        session.commit()

        dbType = session.query(RouterType).get("ROUTER")

        self.assertEqual(dbType.inbw,data["inbw"])
        self.assertEqual(dbType.outbw,data["outbw"])
        self.assertEqual(dbType.buffer,data["buffer"])                        
        self.assertEqual(dbType.capacity,data["capacity"])
        self.assertEqual(dbType.connector,data["connector"])
        self.assertEqual(dbType.version,data["version"])          
예제 #6
0
    def testMachineType(self, data=TEST_DB_DATA["machine"]):
        machineType = MachineType(data["typeID"], data["numcpu"],
                                  data["numcore"], data["frequency"],
                                  data["numfpga"], data["memfpga"],
                                  data["numgpu"], data["memory"], data["disk"],
                                  data["typegpu"], data["typefpga"])

        session.add(machineType)
        session.commit()

        dbType = session.query(MachineType).get("MACHINE")

        self.assertEqual(dbType.numcpu, data["numcpu"])
        self.assertEqual(dbType.numcore, data["numcore"])
        self.assertEqual(dbType.frequency, data["frequency"])
        self.assertEqual(dbType.numfpga, data["numfpga"])
        self.assertEqual(dbType.memfpga, data["memfpga"])
        self.assertEqual(dbType.numgpu, data["numgpu"])
        self.assertEqual(dbType.memory, data["memory"])
        self.assertEqual(dbType.disk, data["disk"])
        self.assertEqual(dbType.typegpu, data["typegpu"])
        self.assertEqual(dbType.typefpga, data["typefpga"])
예제 #7
0
    def doScheduling(self, appConfig):
        """
        Parse the application configuration to get requested resources
        """
        machines, storages, routers = self.parseAppConfig(appConfig)
        """
        Invoke the IaaS service to get available resources that
        satisfy the application configuration
        """
        """
        Process machine node
        """
        machineIDList = []
        machineDesList = []
        machinePrice = 0
        for i in range(len(machines)):
            machineDescriptor = {"machine": machines[i]}
            try:
                print "........The fifo scheduler gets available" \
                        " machines for machine description %d from" \
                        " IaaS and does scheduling" %(i+1)
                machineIDs = self.getAvailableNodeList(machineDescriptor,
                                                       i + 1)
                machineID = machineIDs.pop(0)
                while machineID in machineIDList:
                    machineID = machineIDs.pop(0)
            except IndexError:
                result = json.dumps({"result": None})
                logger.error("Cannot find available machines"
                             " satisfying requirements")
                return result

            machinePrice = machinePrice + self.getNodePrice(
                machineDescriptor, machineID, 1)
            machineDesList.append({machineID: machines[i]})
            machineIDList.append(machineID)

        # for storing to database
        machineInfo = {"machine": machineDesList}
        """
        Process storage node
        """
        storageIDList = []
        storageDesList = []
        storagePrice = 0

        for i in range(len(storages)):
            storageDescriptor = {"storage": storages[i]}
            try:
                print "........The fifo scheduler gets available" \
                        " storages for storage description %d from" \
                        " IaaS and does scheduling" %(i+1)
                storageIDs = self.getAvailableNodeList(storageDescriptor,
                                                       i + 1)
                storageID = storageIDs.pop(0)
                while storageID in storageIDList:
                    storageID = storageIDs.pop(0)
            except IndexError:
                result = json.dumps({"result": None})
                logger.error("Cannot find available storages"
                             " satisfying requirements")
                return result

            storagePrice = storagePrice + self.getNodePrice(
                storageDescriptor, storageID, 1)
            storageDesList.append({storageID: storages[i]})
            storageIDList.append(storageID)

        # for storing to database
        storageInfo = {"storage": storageDesList}
        """
        Process router node
        """
        routerIDList = []
        routerDesList = []
        routerPrice = 0

        for i in range(len(routers)):
            routerDescriptor = {"router": routers[i]}
            try:
                print "........The fifo scheduler gets available" \
                        " routers for router description %d from" \
                        " IaaS and does scheduling" %(i+1)
                routerIDs = self.getAvailableNodeList(routerDescriptor, i + 1)
                routerID = routerIDs.pop(0)
                while routerID in routerIDList:
                    routerID = routerIDs.pop(0)
            except IndexError:
                result = json.dumps({"result": None})
                logger.error("Cannot find available routers"
                             " satisfying requirements")
                return result

            routerPrice = routerPrice + self.getNodePrice(
                routerDescriptor, routerID, 1)
            routerDesList.append({routerID: routers[i]})
            routerIDList.append(routerID)

        # for storing to database
        routerInfo = {"router": routerDesList}
        """
        Store the scheduling result to database
        """
        configID = str(uuid.uuid4())

        # currently we do not process network scheduling
        networkInfo = ""
        acs = AppConfigSchedule(configID, json.dumps(storageInfo),
                                json.dumps(machineInfo),
                                json.dumps(networkInfo),
                                json.dumps(routerInfo))
        session.add(acs)
        session.commit()
        """
        Return scheduling result to users to inform them the price
        """
        totalPrice = machinePrice + storagePrice + routerPrice
        result = json.dumps({
            "result": {
                "schedule": [machineInfo, storageInfo, routerInfo],
                "price": totalPrice,
                "configID": configID
            }
        })
        return result
예제 #8
0
    def doScheduling(self, appConfig):
        """
        Parse the application configuration to get requested resources
        """
        machines, storages, routers = self.parseAppConfig(appConfig)
        
        """
        Invoke the IaaS service to get available resources that
        satisfy the application configuration
        """

        """
        Process machine node
        """
        machineIDList = []
        machineDesList = []        
        machinePrice = 0
        for i in range(len(machines)):
            machineDescriptor = {"machine":machines[i]}
            try:               
                print "........The fifo scheduler gets available" \
                        " machines for machine description %d from" \
                        " IaaS and does scheduling" %(i+1)                    
                machineIDs = self.getAvailableNodeList(machineDescriptor, i+1)                
                machineID = machineIDs.pop(0)                 
                while machineID in machineIDList:                    
                    machineID = machineIDs.pop(0)                
            except IndexError:                
                result = json.dumps({"result":None})                
                logger.error("Cannot find available machines"
                             " satisfying requirements")                
                return result
                
            machinePrice = machinePrice + self.getNodePrice(machineDescriptor,
                                              machineID, 1)
            machineDesList.append({machineID:machines[i]})
            machineIDList.append(machineID)

        # for storing to database
        machineInfo = {"machine":machineDesList}

        """
        Process storage node
        """
        storageIDList = []
        storageDesList = []               
        storagePrice = 0
        
        for i in range(len(storages)):        
            storageDescriptor = {"storage":storages[i]}            
            try:
                print "........The fifo scheduler gets available" \
                        " storages for storage description %d from" \
                        " IaaS and does scheduling" %(i+1)                                        
                storageIDs = self.getAvailableNodeList(storageDescriptor, i+1)
                storageID = storageIDs.pop(0)                 
                while storageID in storageIDList:                    
                    storageID = storageIDs.pop(0)                            
            except IndexError:                
                result = json.dumps({"result":None})
                logger.error("Cannot find available storages"
                             " satisfying requirements")                                
                return result                
            
            storagePrice = storagePrice + self.getNodePrice(storageDescriptor,
                                              storageID, 1)            
            storageDesList.append({storageID:storages[i]})
            storageIDList.append(storageID)

        # for storing to database
        storageInfo = {"storage":storageDesList}           
        
        """
        Process router node
        """
        routerIDList = []
        routerDesList = []                     
        routerPrice = 0
        
        for i in range(len(routers)):        
            routerDescriptor = {"router":routers[i]}            
            try:
                print "........The fifo scheduler gets available" \
                        " routers for router description %d from" \
                        " IaaS and does scheduling" %(i+1)                                        
                routerIDs = self.getAvailableNodeList(routerDescriptor, i+1)                            
                routerID = routerIDs.pop(0)                 
                while routerID in routerIDList:                    
                    routerID = routerIDs.pop(0)                    
            except IndexError:                
                result = json.dumps({"result":None})
                logger.error("Cannot find available routers"
                             " satisfying requirements")                                                
                return result                                            
            
            routerPrice = routerPrice + self.getNodePrice(routerDescriptor,
                                              routerID, 1)            
            routerDesList.append({routerID:routers[i]})
            routerIDList.append(routerID)

        # for storing to database
        routerInfo = {"router":routerDesList}            

        """
        Store the scheduling result to database
        """
        configID = str(uuid.uuid4())

        # currently we do not process network scheduling
        networkInfo = ""        
        acs = AppConfigSchedule(configID,
                                json.dumps(storageInfo),
                                json.dumps(machineInfo),
                                json.dumps(networkInfo),
                                json.dumps(routerInfo))        
        session.add(acs)
        session.commit()

        """
        Return scheduling result to users to inform them the price
        """        
        totalPrice = machinePrice + storagePrice + routerPrice
        result = json.dumps({"result":
                                    {"schedule":[machineInfo,
                                                 storageInfo,
                                                 routerInfo],
                                     "price":totalPrice,
                                     "configID":configID
                                     }
                             })        
        return result
        
        
예제 #9
0
def beforeFirstRequest():
    session.add(MachineType("MACHINE_TYPE_1",
                               cloud_infra.MACHINE_TYPE_1["numcpu"],
                               cloud_infra.MACHINE_TYPE_1["numcore"],
                               cloud_infra.MACHINE_TYPE_1["frequency"],
                               cloud_infra.MACHINE_TYPE_1["numfpga"],
                               cloud_infra.MACHINE_TYPE_1["memfpga"],
                               cloud_infra.MACHINE_TYPE_1["numgpu"],
                               cloud_infra.MACHINE_TYPE_1["memory"],
                               cloud_infra.MACHINE_TYPE_1["disk"],
                               cloud_infra.MACHINE_TYPE_1["typegpu"],
                               cloud_infra.MACHINE_TYPE_1["typefpga"]))

    for i in range(cloud_infra.MACHINE_TYPE_1["quantity"]):
        session.add(MachineResource("/dc1/rack1/machine%s/machine:" %i,
                                          "MACHINE_TYPE_1"))
        
    session.add(MachineType("MACHINE_TYPE_2",
                               cloud_infra.MACHINE_TYPE_2["numcpu"],
                               cloud_infra.MACHINE_TYPE_2["numcore"],
                               cloud_infra.MACHINE_TYPE_2["frequency"],
                               cloud_infra.MACHINE_TYPE_2["numfpga"],
                               cloud_infra.MACHINE_TYPE_2["memfpga"],
                               cloud_infra.MACHINE_TYPE_2["numgpu"],
                               cloud_infra.MACHINE_TYPE_2["memory"],
                               cloud_infra.MACHINE_TYPE_2["disk"],
                               cloud_infra.MACHINE_TYPE_2["typegpu"],
                               cloud_infra.MACHINE_TYPE_2["typefpga"]))

    for i in range(cloud_infra.MACHINE_TYPE_2["quantity"]):
        session.add(MachineResource("/dc2/rack1/machine%s/machine:" %i,
                                          "MACHINE_TYPE_2"))
        
    session.add(MachineType("MACHINE_TYPE_3",
                               cloud_infra.MACHINE_TYPE_3["numcpu"],
                               cloud_infra.MACHINE_TYPE_3["numcore"],
                               cloud_infra.MACHINE_TYPE_3["frequency"],
                               cloud_infra.MACHINE_TYPE_3["numfpga"],
                               cloud_infra.MACHINE_TYPE_3["memfpga"],
                               cloud_infra.MACHINE_TYPE_3["numgpu"],
                               cloud_infra.MACHINE_TYPE_3["memory"],
                               cloud_infra.MACHINE_TYPE_3["disk"],
                               cloud_infra.MACHINE_TYPE_3["typegpu"],
                               cloud_infra.MACHINE_TYPE_3["typefpga"]))    
 
    for i in range(cloud_infra.MACHINE_TYPE_3["quantity"]):
        session.add(MachineResource("/dc2/rack2/machine%s/machine:" %i,
                                          "MACHINE_TYPE_3"))    

    session.add(RouterType("ROUTER_TYPE_1",
                            cloud_infra.ROUTER_TYPE_1["inbw"],
                            cloud_infra.ROUTER_TYPE_1["outbw"],
                            cloud_infra.ROUTER_TYPE_1["buffer"],
                            cloud_infra.ROUTER_TYPE_1["capacity"],
                            cloud_infra.ROUTER_TYPE_1["connector"],
                            cloud_infra.ROUTER_TYPE_1["version"]))
    
    for i in range(cloud_infra.ROUTER_TYPE_1["quantity"]):
        session.add(RouterResource("/dc1/rack1/router%s/router:" %i,
                                          "ROUTER_TYPE_1"))
        
    session.add(RouterType("ROUTER_TYPE_2",
                            cloud_infra.ROUTER_TYPE_2["inbw"],
                            cloud_infra.ROUTER_TYPE_2["outbw"],
                            cloud_infra.ROUTER_TYPE_2["buffer"],
                            cloud_infra.ROUTER_TYPE_2["capacity"],
                            cloud_infra.ROUTER_TYPE_2["connector"],
                            cloud_infra.ROUTER_TYPE_2["version"]))
    
    for i in range(cloud_infra.ROUTER_TYPE_2["quantity"]):
        session.add(RouterResource("/dc2/rack1/router%s/router:" %i,
                                          "ROUTER_TYPE_2"))

    session.add(StorageType("STORAGE_TYPE_1",
                            cloud_infra.STORAGE_TYPE_1["capacity"],
                            cloud_infra.STORAGE_TYPE_1["ranbw"],
                            cloud_infra.STORAGE_TYPE_1["seqbw"]))
    
    for i in range(cloud_infra.STORAGE_TYPE_1["quantity"]):
        session.add(StorageResource("/dc1/rack1/storage%s/storage:" %i,
                                          "STORAGE_TYPE_1"))

    session.add(StorageType("STORAGE_TYPE_2",
                            cloud_infra.STORAGE_TYPE_2["capacity"],
                            cloud_infra.STORAGE_TYPE_2["ranbw"],
                            cloud_infra.STORAGE_TYPE_2["seqbw"]))
    
    for i in range(cloud_infra.STORAGE_TYPE_2["quantity"]):
        session.add(StorageResource("/dc2/rack1/storage%s/storage:" %i,
                                          "STORAGE_TYPE_2"))
    session.commit()