nodePool.py
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. #Licensed to the Apache Software Foundation (ASF) under one
  2. #or more contributor license agreements.  See the NOTICE file
  3. #distributed with this work for additional information
  4. #regarding copyright ownership.  The ASF licenses this file
  5. #to you under the Apache License, Version 2.0 (the
  6. #"License"); you may not use this file except in compliance
  7. #with the License.  You may obtain a copy of the License at
  8. #     http://www.apache.org/licenses/LICENSE-2.0
  9. #Unless required by applicable law or agreed to in writing, software
  10. #distributed under the License is distributed on an "AS IS" BASIS,
  11. #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. #See the License for the specific language governing permissions and
  13. #limitations under the License.
  14. """defines nodepool and nodeset as abstract interface for batch system"""
  15. # -*- python -*-
  16. from hodlib.GridServices.service import *
  17. class NodeSet:
  18.   """a set of nodes as one allocation unit"""
  19.   PENDING, COMMITTED, COMPLETE = range(3)
  20.   def __init__(self, id, numNodes, preferredList, isPreemptee):
  21.     self.id = id
  22.     self.numNodes = numNodes
  23.     self.isPreemptee = isPreemptee
  24.     self.preferredList = preferredList
  25.     self.cmdDescSet = []
  26.   def getId(self):
  27.     """returns a unique id of the nodeset"""
  28.     return self.id
  29.   def registerCommand(self, cmdDesc):
  30.     """register a command to the nodeset"""
  31.     self.cmdDescSet.append(cmdDesc)
  32.   def getAddrList(self):
  33.     """get list of node host names
  34.     May return empty list if node set is not allocated yet"""
  35.     raise NotImplementedError
  36.   def _getNumNodes(self):
  37.     return self.numNodes
  38.   def _isPreemptee(self):
  39.     return self.isPreemptee
  40.   def _getPreferredList(self):
  41.     return self.preferredList
  42.   def _getCmdSet(self):
  43.     return self.cmdDescSet
  44. class NodePool:
  45.   """maintains a collection of node sets as they get allocated.
  46.   Also the base class for all kinds of nodepools. """
  47.   def __init__(self, nodePoolDesc, cfg, log):
  48.     self.nodePoolDesc = nodePoolDesc
  49.     self.nodeSetDict = {}
  50.     self._cfg = cfg
  51.     self.nextNodeSetId = 0
  52.     self._log = log
  53.     
  54.   def newNodeSet(self, numNodes, preferred=[], isPreemptee=True, id=None):
  55.     """create a nodeset possibly with asked properties"""
  56.     raise NotImplementedError
  57.   def submitNodeSet(self, nodeSet, walltime = None, qosLevel = None, 
  58.                     account = None, resourcelist = None):
  59.     """submit the nodeset request to nodepool
  60.     return False if error happened"""
  61.     raise NotImplementedError
  62.   def pollNodeSet(self, nodeSet):
  63.     """return status of node set"""
  64.     raise NotImplementedError
  65.   def getWorkers(self):
  66.     """return the hosts that comprise this nodepool"""
  67.     raise NotImplementedError
  68.   def runWorkers(self, nodeSet = None, args = []):
  69.     """Run node set workers."""
  70.     
  71.     raise NotImplementedError
  72.   
  73.   def freeNodeSet(self, nodeset):
  74.     """free a node set"""
  75.     raise NotImplementedError
  76.   def finalize(self):
  77.     """cleans up all nodesets"""
  78.     raise NotImplementedError
  79.   def getServiceId(self):
  80.     raise NotImplementedError
  81.  
  82.   def getJobInfo(self, jobId=None):
  83.     raise NotImplementedError
  84.   def deleteJob(self, jobId):
  85.     """Delete a job, given it's id"""
  86.     raise NotImplementedError
  87.   def isJobFeasible(self):
  88.     """Check if job can run by looking at any user/job limits"""
  89.     raise NotImplementedError
  90.   def updateWorkerInfo(self, workerInfoMap, jobId):
  91.     """Update information about the workers started by this NodePool."""
  92.     raise NotImplementedError
  93.   def getAccountString(self):
  94.     """Return the account string for this job"""
  95.     raise NotImplementedError
  96.   def getNextNodeSetId(self):
  97.     id = self.nextNodeSetId
  98.     self.nextNodeSetId += 1
  99.     
  100.     return id  
  101.