Пример #1
0
 def release_nodes(self, node_list=None, keep_select=None):
     """release_nodes"""
     if ( (_pbs_v1.event().type & _pbs_v1.EXECJOB_PROLOGUE) == 0 and
          (_pbs_v1.event().type & _pbs_v1.EXECJOB_LAUNCH) == 0 ):
         return None
     tolerate_node_failures = None
     ajob = _pbs_v1.event().job
     if hasattr(ajob, "tolerate_node_failures"):
         tolerate_node_failures = getattr(ajob, "tolerate_node_failures")
         if tolerate_node_failures not in ["job_start", "all"]:
             msg = "no nodes released as job does not tolerate node failures"
             _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "%s: %s" % (ajob.id, msg))
             return ajob
     return _pbs_v1.release_nodes(self, node_list, keep_select)
Пример #2
0
	def __init__(self, pbs_obj_name, pbs_filter1, pbs_filter2, connect_server=None):
        
	    self._caller = _pbs_v1.get_python_daemon_name()
	    if self._caller == "pbs_python":

		if( connect_server == None ):
		    self._connect_server = "localhost"
		    sn = ""
		else:        
		    self._connect_server = connect_server
		    sn = connect_server

		self.type = pbs_obj_name         
		if _pbs_v1.use_static_data():
		    if( self.type == "jobs" ):
			self.bs=iter(_pbs_v1.get_job_static("", sn, ""))
		    elif( self.type == "queues" ):
			self.bs=iter(_pbs_v1.get_queue_static("", sn))
		    elif( self.type == "vnodes" ):
			self.bs=iter(_pbs_v1.get_vnode_static("", sn))
		    elif( self.type == "resvs" ):
			self.bs=iter(_pbs_v1.get_resv_static("", sn))
		    else:
			_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
			     "pbs_iter/init: Bad object iterator type %s" % (self.type))
			return None        
		    return

		self.con=pbs_connect(self._connect_server)
		if self.con < 0:
		    _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\
		       "pbs_iter: Unable to connect to server %s" % (connect_server))
		    return None        

		if( self.type == "jobs" ):
		    self.bs=pbs_statjob(self.con, pbs_filter2, None, None)
		elif( self.type == "queues" ):
		    self.bs=pbs_statque(self.con, None, None, None)
		elif( self.type == "vnodes" ):
		    self.bs=pbs_statvnode(self.con, None, None, None)
		elif( self.type == "resvs" ):
		    self.bs=pbs_statresv(self.con, None, None, None)
		else:
		    _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
		     "pbs_iter/init: Bad object iterator type %s" % (self.type))
		    pbs_disconnect(self.con)        
		    self.con = -1
		    return None        

	    else:

		self.obj_name = pbs_obj_name
		self.filter1 = pbs_filter1
		self.filter2 = pbs_filter2
		# argument 1 below tells C function we're inside __init__
		_pbs_v1.iter_nextfunc(self, 1, pbs_obj_name, pbs_filter1, pbs_filter2) 
Пример #3
0
	def __init__(self, pbs_obj_name, pbs_filter1, pbs_filter2, connect_server=None):
        
	    self._caller = _pbs_v1.get_python_daemon_name()
	    if self._caller == "pbs_python":

		if( connect_server == None ):
		    self._connect_server = "localhost"
		    sn = ""
		else:        
		    self._connect_server = connect_server
		    sn = connect_server

		self.type = pbs_obj_name         
		if _pbs_v1.use_static_data():
		    if( self.type == "jobs" ):
			self.bs=iter(_pbs_v1.get_job_static("", sn, ""))
		    elif( self.type == "queues" ):
			self.bs=iter(_pbs_v1.get_queue_static("", sn))
		    elif( self.type == "vnodes" ):
			self.bs=iter(_pbs_v1.get_vnode_static("", sn))
		    elif( self.type == "resvs" ):
			self.bs=iter(_pbs_v1.get_resv_static("", sn))
		    else:
			_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
			     "pbs_iter/init: Bad object iterator type %s" % (self.type))
			return None        
		    return

		self.con=pbs_connect(self._connect_server)
		if self.con < 0:
		    _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\
		       "pbs_iter: Unable to connect to server %s" % (connect_server))
		    return None        

		if( self.type == "jobs" ):
		    self.bs=pbs_statjob(self.con, pbs_filter2, None, None)
		elif( self.type == "queues" ):
		    self.bs=pbs_statque(self.con, None, None, None)
		elif( self.type == "vnodes" ):
		    self.bs=pbs_statvnode(self.con, None, None, None)
		elif( self.type == "resvs" ):
		    self.bs=pbs_statresv(self.con, None, None, None)
		else:
		    _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
		     "pbs_iter/init: Bad object iterator type %s" % (self.type))
		    pbs_disconnect(self.con)        
		    self.con = -1
		    return None        

	    else:

		self.obj_name = pbs_obj_name
		self.filter1 = pbs_filter1
		self.filter2 = pbs_filter2
		# argument 1 below tells C function we're inside __init__
		_pbs_v1.iter_nextfunc(self, 1, pbs_obj_name, pbs_filter1, pbs_filter2) 
Пример #4
0
        def next(self):
            if self._caller == "pbs_python":
                if not hasattr(self, "bs") or self.bs == None:
                    if not _pbs_v1.use_static_data():
                        pbs_disconnect(self.con)
                        self.con = -1
                    raise StopIteration

                if _pbs_v1.use_static_data():
                    if (self.type == "jobs"):
                        return _pbs_v1.get_job_static(self.bs.next(),
                                                      self._connect_server, "")
                    elif (self.type == "queues"):
                        return _pbs_v1.get_queue_static(
                            self.bs.next(), self._connect_server)
                    elif (self.type == "resvs"):
                        return _pbs_v1.get_resv_static(self.bs.next(),
                                                       self._connect_server)
                    elif (self.type == "vnodes"):
                        return _pbs_v1.get_vnode_static(
                            self.bs.next(), self._connect_server)
                    else:
                        _pbs_v1.logmsg(
                            _pbs_v1.LOG_DEBUG,
                            "pbs_iter/next: Bad object iterator type %s" %
                            (self.type))
                        raise StopIteration
                    return

                b = self.bs
                job = None

                _pbs_v1.set_c_mode()

                server_data_fp = _pbs_v1.get_server_data_fp()
                if (b):
                    if (self.type == "jobs"):
                        obj = _job(b.name, self._connect_server)
                        header_str = "pbs.server().job(%s)" % (b.name, )
                    elif (self.type == "queues"):
                        obj = _queue(b.name, self._connect_server)
                        header_str = "pbs.server().queue(%s)" % (b.name, )
                    elif (self.type == "resvs"):
                        obj = _resv(b.name, self._connect_server)
                        header_str = "pbs.server().resv(%s)" % (b.name, )
                    elif (self.type == "vnodes"):
                        obj = _vnode(b.name, self._connect_server)
                        header_str = "pbs.server().vnode(%s)" % (b.name, )
                    else:
                        _pbs_v1.logmsg(
                            _pbs_v1.LOG_DEBUG,
                            "pbs_iter/next: Bad object iterator type %s" %
                            (self.type))
                        pbs_disconnect(self.con)
                        self.con = -1
                        _pbs_v1.set_python_mode()
                        raise StopIteration

                    a = b.attribs

                    while (a):
                        n = a.name
                        r = a.resource
                        v = a.value

                        if (self.type == "vnodes"):
                            if (n == ATTR_NODE_state):
                                v = _pbs_v1.str_to_vnode_state(v)
                            elif (n == ATTR_NODE_ntype):
                                v = _pbs_v1.str_to_vnode_ntype(v)
                            elif (n == ATTR_NODE_Sharing):
                                v = _pbs_v1.str_to_vnode_sharing(v)

                        if (self.type == "jobs"):
                            if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port:
                                v = int(pbs_bool(v))

                        if (r):
                            pr = getattr(obj, n)

                            # if resource list does not exist, then set it
                            if (pr == None):
                                setattr(obj, n)

                            pr = getattr(obj, n)
                            if (pr == None):
                                _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                                               "pbs_statobj: missing %s" % (n))
                                a = a.next
                                continue

                            vo = getattr(pr, r)
                            if (vo == None):
                                setattr(pr, r, v)
                                if server_data_fp:
                                    server_data_fp.write("%s.%s[%s]=%s\n" %
                                                         (header_str, n, r, v))
                            else:
                                # append value:
                                # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack"
                                vl = [vo, v]
                                setattr(pr, r, ",".join(vl))
                                if server_data_fp:
                                    server_data_fp.write(
                                        "%s.%s[%s]=%s\n" %
                                        (header_str, n, r, ",".join(vl)))

                        else:
                            vo = getattr(obj, n)

                            if (vo == None):
                                setattr(obj, n, v)
                                if server_data_fp:
                                    server_data_fp.write("%s.%s=%s\n" %
                                                         (header_str, n, v))
                            else:
                                vl = [vo, v]
                                setattr(obj, n, ",".join(vl))
                                if server_data_fp:
                                    server_data_fp.write(
                                        "%s.%s=%s\n" %
                                        (header_str, n, ",".join(vl)))

                        a = a.next

                self.bs = b.next

                _pbs_v1.set_python_mode()
                return obj
            else:
                # argument 0 below tells C function we're inside next
                return _pbs_v1.iter_nextfunc(self, 0, self.obj_name,
                                             self.filter1, self.filter2)
Пример #5
0
def pbs_statobj(type, name=None, connect_server=None, filter_queue=None):
    """
        Returns a PBS (e.g. _job, _queue, _resv, _vnode, _server) object
        that is populated with data obtained by calling PBS APIs:
        pbs_statjob(), pbs_statque(), pbs_statresv(), pbs_statvnode(),
        pbs_statserver(), using a connection handle to 'connect_server'.

        If 'type'  is "job", then return the _job object.
        If 'type'  is "queue", then return the _queue object.
        If 'type'  is "resv", then return the _resv object.
        If 'type'  is "vnode", then return the _vnode object.
        If 'type'  is "server", then return the _server object.

        'filter_queue' is used for a "job" type, which means
        the job must be in the queue 'filter_queue' for the
        job object to be instantiated.
        """

    _pbs_v1.set_c_mode()

    server_data_fp = _pbs_v1.get_server_data_fp()

    if (connect_server == None):
        con = pbs_connect("localhost")
    else:
        con = pbs_connect(connect_server)

    if con < 0:
        _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\
           "pbs_statobj: Unable to connect to server %s" % (connect_server))
        _pbs_v1.set_python_mode()
        return None

    if (type == "job"):
        bs = pbs_statjob(con, name, None, None)
        header_str = "pbs.server().job(%s)" % (name, )
    elif (type == "queue"):
        bs = pbs_statque(con, name, None, None)
        header_str = "pbs.server().queue(%s)" % (name, )
    elif (type == "vnode"):
        bs = pbs_statvnode(con, name, None, None)
        header_str = "pbs.server().vnode(%s)" % (name, )
    elif (type == "resv"):
        bs = pbs_statresv(con, name, None, None)
        header_str = "pbs.server().resv(%s)" % (name, )
    elif (type == "server"):
        bs = pbs_statserver(con, None, None)
        header_str = "pbs.server()"
    else:
        _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                       "pbs_statobj: Bad object type %s" % (type))
        pbs_disconnect(con)
        _pbs_v1.set_python_mode()
        return None

    b = bs
    obj = None
    while (b):
        if (type == "job"):
            obj = _job(b.name, connect_server)
        elif (type == "queue"):
            obj = _queue(b.name, connect_server)
        elif (type == "vnode"):
            obj = _vnode(b.name, connect_server)
        elif (type == "resv"):
            obj = _resv(b.name, connect_server)
        elif (type == "server"):
            obj = _server(b.name, connect_server)
        else:
            _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                           "pbs_statobj: Bad object type %s" % (type))
            pbs_disconnect(con)
            _pbs_v1.set_python_mode()
            return None

        a = b.attribs

        while (a):
            n = a.name
            r = a.resource
            v = a.value

            if (type == "vnode"):
                if (n == ATTR_NODE_state):
                    v = _pbs_v1.str_to_vnode_state(v)
                elif (n == ATTR_NODE_ntype):
                    v = _pbs_v1.str_to_vnode_ntype(v)
                elif (n == ATTR_NODE_Sharing):
                    v = _pbs_v1.str_to_vnode_sharing(v)

            elif (type == "job"):
                if( (filter_queue != None) and (n == ATTR_queue) and \
                                      (filter_queue != v) ):
                    pbs_disconnect(con)
                    _pbs_v1.set_python_mode()
                    return None
                if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port:
                    v = int(pbs_bool(v))

            if (r):
                pr = getattr(obj, n)

                # instantiate Resource_List object if not set
                if (pr == None):
                    setattr(obj, n)

                pr = getattr(obj, n)
                if (pr == None):
                    _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                                   "pbs_statobj: missing %s" % (n))
                    a = a.next
                    continue

                vo = getattr(pr, r)
                if (vo == None):
                    setattr(pr, r, v)
                    if server_data_fp:
                        server_data_fp.write("%s.%s[%s]=%s\n" %
                                             (header_str, n, r, v))
                else:
                    # append value...
                    # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack"
                    vl = [vo, v]
                    setattr(pr, r, ",".join(vl))
                    if server_data_fp:
                        server_data_fp.write("%s.%s[%s]=%s\n" %
                                             (header_str, n, r, ",".join(vl)))

            else:
                vo = getattr(obj, n)

                if (vo == None):
                    setattr(obj, n, v)
                    if server_data_fp:
                        server_data_fp.write("%s.%s=%s\n" % (header_str, n, v))
                else:
                    # append value
                    vl = [vo, v]
                    setattr(obj, n, ",".join(vl))
                    if server_data_fp:
                        server_data_fp.write("%s.%s=%s\n" %
                                             (header_str, n, ",".join(vl)))

            a = a.next

        b = b.next

    pbs_disconnect(con)
    _pbs_v1.set_python_mode()
    return obj
Пример #6
0
        def next(self):
	    if self._caller == "pbs_python":
		if not hasattr(self, "bs") or self.bs == None:
		    if not _pbs_v1.use_static_data():
			pbs_disconnect(self.con)
			self.con = -1
		    raise StopIteration

		if _pbs_v1.use_static_data():
		    if( self.type == "jobs" ):
			return _pbs_v1.get_job_static(self.bs.next(), self._connect_server, "")
		    elif( self.type == "queues" ):
			return _pbs_v1.get_queue_static(self.bs.next(), self._connect_server)
		    elif( self.type == "resvs" ):
			return _pbs_v1.get_resv_static(self.bs.next(), self._connect_server)
		    elif( self.type == "vnodes" ):
			return _pbs_v1.get_vnode_static(self.bs.next(), self._connect_server)
		    else:        
			_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
			    "pbs_iter/next: Bad object iterator type %s" % (self.type))
			raise StopIteration
		    return
	    
		b = self.bs
		job = None

		_pbs_v1.set_c_mode()

		server_data_fp = _pbs_v1.get_server_data_fp();
		if(b):
		    if( self.type == "jobs" ):
			_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\
			    "pbs_iter/next: pbs_python mode not supported by NAS local mod")
			pbs_disconnect(self.con)
			self.con = -1 
			_pbs_v1.set_python_mode()
			raise StopIteration
		    elif( self.type == "queues" ):
			obj=_queue(b.name, self._connect_server)
			header_str = "pbs.server().queue(%s)" % (b.name,)
		    elif( self.type == "resvs" ):
			obj=_resv(b.name, self._connect_server)
			header_str = "pbs.server().resv(%s)" % (b.name,)
		    elif( self.type == "vnodes" ):
			obj=_vnode(b.name, self._connect_server)
			header_str = "pbs.server().vnode(%s)" % (b.name,)
		    else:        
			_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
			    "pbs_iter/next: Bad object iterator type %s" % (self.type))
			pbs_disconnect(self.con)
			self.con = -1 
			_pbs_v1.set_python_mode()
			raise StopIteration

		    a=b.attribs

		    while(a):
			n=a.name
			r=a.resource
			v=a.value

			if( self.type == "vnodes" ): 
			    if( n == ATTR_NODE_state ):         
				v=_pbs_v1.str_to_vnode_state(v)         
			    elif( n == ATTR_NODE_ntype ): 
				v=_pbs_v1.str_to_vnode_ntype(v)         
			    elif( n == ATTR_NODE_Sharing ): 
				v=_pbs_v1.str_to_vnode_sharing(v)         

			if( self.type == "jobs" ):
                            if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port:
				v=int(pbs_bool(v))

			if(r):
			    pr=getattr(obj,n)

			    # if resource list does not exist, then set it
			    if( pr == None):
				setattr(obj,n)

			    pr=getattr(obj,n)
			    if (pr == None):
				_pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
					       "pbs_statobj: missing %s" % (n))
				a=a.next
				continue

			    vo=getattr(pr, r)
			    if( vo == None ):
				setattr(pr,r,v)
				if server_data_fp:
				    server_data_fp.write("%s.%s[%s]=%s\n" %(header_str,n,r,v))
			    else:
				# append value:
				# example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack"
				vl=[vo, v]
				setattr(pr, r, ",".join(vl))
				if server_data_fp:
				    server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n,r,",".join(vl)))

			else:
			    vo=getattr(obj,n)

			    if( vo == None ):
				setattr(obj,n,v)
				if server_data_fp:
				    server_data_fp.write("%s.%s=%s\n" %(header_str,n,v))
			    else:
				vl=[vo, v]
				setattr(obj, n, ",".join(vl))
				if server_data_fp:
				    server_data_fp.write("%s.%s=%s\n" % (header_str, n, ",".join(vl)))

			a=a.next
      
		self.bs=b.next

		_pbs_v1.set_python_mode()
		return obj
	    else:
		# argument 0 below tells C function we're inside next
		return _pbs_v1.iter_nextfunc(self, 0, self.obj_name, self.filter1, self.filter2, self.ignore_fin, self.filter_user)
Пример #7
0
def pbs_statobj(type, name=None, connect_server=None, filter_queue=None):
        """
        Returns a PBS (e.g. _job, _queue, _resv, _vnode, _server) object
        that is populated with data obtained by calling PBS APIs:
        pbs_statjob(), pbs_statque(), pbs_statresv(), pbs_statvnode(),
        pbs_statserver(), using a connection handle to 'connect_server'.

        If 'type'  is "job", then return the _job object.
        If 'type'  is "queue", then return the _queue object.
        If 'type'  is "resv", then return the _resv object.
        If 'type'  is "vnode", then return the _vnode object.
        If 'type'  is "server", then return the _server object.

        'filter_queue' is used for a "job" type, which means
        the job must be in the queue 'filter_queue' for the
        job object to be instantiated.
        """

        _pbs_v1.set_c_mode()

        server_data_fp = _pbs_v1.get_server_data_fp();

        if( connect_server == None ):
            con=pbs_connect("localhost")
        else:
            con=pbs_connect(connect_server)

        if con < 0:
            _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,\
               "pbs_statobj: Unable to connect to server %s" % (connect_server))
            _pbs_v1.set_python_mode()
            return None

        if( type == "job" ):
            bs=pbs_statjob(con, name, None, None)
            header_str = "pbs.server().job(%s)" % (name,)
        elif( type == "queue" ):
            bs=pbs_statque(con, name, None, None)
            header_str = "pbs.server().queue(%s)" % (name,)
        elif( type == "vnode" ):
            bs=pbs_statvnode(con, name, None, None)
            header_str = "pbs.server().vnode(%s)" % (name,)
        elif( type == "resv" ):
            bs=pbs_statresv(con, name, None, None)
            header_str = "pbs.server().resv(%s)" % (name,)
        elif( type == "server" ):
            bs=pbs_statserver(con, None, None)
            header_str = "pbs.server()"
        else:
            _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG, "pbs_statobj: Bad object type %s" % (type))
            pbs_disconnect(con)
            _pbs_v1.set_python_mode()
            return None

        b = bs
        obj = None
        while(b):
            if( type == "job" ):
                obj=_job(b.name, connect_server)
            elif( type == "queue" ):
                obj=_queue(b.name, connect_server)
            elif( type == "vnode" ):
                obj=_vnode(b.name, connect_server)
            elif( type == "resv" ):
                obj=_resv(b.name, connect_server)
            elif( type == "server" ):
                obj=_server(b.name, connect_server)
            else:
                _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                                 "pbs_statobj: Bad object type %s" % (type))
                pbs_disconnect(con)
                _pbs_v1.set_python_mode()
                return None

            a=b.attribs

            while(a):
                n=a.name
                r=a.resource
                v=a.value

                if( type == "vnode" ):        
                    if( n == ATTR_NODE_state ):         
                        v=_pbs_v1.str_to_vnode_state(v)         
                    elif( n == ATTR_NODE_ntype ): 
                        v=_pbs_v1.str_to_vnode_ntype(v)         
                    elif( n == ATTR_NODE_Sharing ): 
                        v=_pbs_v1.str_to_vnode_sharing(v)

                elif( type == "job" ):
                    if( (filter_queue != None) and (n == ATTR_queue) and \
                                          (filter_queue != v) ):
                        pbs_disconnect(con)
                        _pbs_v1.set_python_mode()
                        return None
                    if n == ATTR_inter or n == ATTR_block or n == ATTR_X11_port:
                        v=int(pbs_bool(v))

                if(r):
                    pr=getattr(obj,n)

                    # instantiate Resource_List object if not set
                    if( pr == None):
                        setattr(obj,n)

                    pr=getattr(obj,n)
                    if (pr == None):
                        _pbs_v1.logmsg(_pbs_v1.LOG_DEBUG,
                                         "pbs_statobj: missing %s" % (n))
                        a=a.next
                        continue

                    vo=getattr(pr, r)
                    if( vo == None ):
                        setattr(pr,r,v)
                        if server_data_fp:
                            server_data_fp.write("%s.%s[%s]=%s\n" %(header_str,n,r,v))
                    else:
                        # append value...
                        # example: "select=1:ncpus=1,ncpus=1,nodect=1,place=pack"
                        vl=[vo, v]
                        setattr(pr, r, ",".join(vl))        
                        if server_data_fp:
                            server_data_fp.write("%s.%s[%s]=%s\n" % (header_str, n,r,",".join(vl)))

                else:
                    vo=getattr(obj,n)

                    if( vo == None ):
                        setattr(obj,n,v)
                        if server_data_fp:
                            server_data_fp.write("%s.%s=%s\n" %(header_str,n,v))
                    else:
                        # append value        
                        vl=[vo, v]
                        setattr(obj, n, ",".join(vl))
                        if server_data_fp:
                            server_data_fp.write("%s.%s=%s\n" % (header_str, n, ",".join(vl)))

                a=a.next
  
            b=b.next

        pbs_disconnect(con)
        _pbs_v1.set_python_mode()
        return obj