Example #1
0
def updatePandaServer(job_state, xmlstr=None, spaceReport=False, log=None, jr=False, stdout_tail="", **kwargs):
    """ Update the panda server with the latest job info """

    from PandaServerClient import PandaServerClient

    client = PandaServerClient(
        pilot_version=DorE(kwargs, "version"),
        pilot_version_tag=DorE(kwargs, "pilot_version_tag"),
        pilot_initdir=DorE(kwargs, "pilot_initdir"),
        jobSchedulerId=DorE(kwargs, "jobSchedulerId"),
        pilotId=DorE(kwargs, "pilotId"),
        updateServer=DorE(kwargs, "updateServerFlag"),
        jobrec=DorE(kwargs, "jobrec"),
        pshttpurl=DorE(kwargs, "pshttpurl"),
    )

    # update the panda server
    return client.updatePandaServer(
        job_state.job,
        job_state.site,
        DorE(kwargs, "workerNode"),
        DorE(kwargs, "psport"),
        xmlstr=xmlstr,
        spaceReport=spaceReport,
        log=log,
        ra=job_state.recoveryAttempt,
        jr=jr,
        useCoPilot=DorE(kwargs, "useCoPilot"),
        stdout_tail=stdout_tail,
    )
Example #2
0
    def updatePandaServer(self, job, site, workerNode, port, xmlstr=None, spaceReport=False, log=None, ra=0, jr=False, schedulerID=None, pilotID=None, updateServer=True):
        """ Update the PanDA server """

        # create and instantiate the client object
        from PandaServerClient import PandaServerClient
        client = PandaServerClient(pilot_version=self.__pilot_version, \
                                   pilot_version_tag=self.__pilot_version_tag, \
                                   pilot_initdir=self.__pilot_initdir, \
                                   jobSchedulerId=self.__jobSchedulerId, \
                                   pilotId=self.__pilotId, \
                                   updateServer=self.__updateServer, \
                                   jobrec=True, \
                                   pshttpurl=self.__pshttpurl)

        # update the panda server
        return client.updatePandaServer(job, site, workerNode, port, xmlstr=xmlstr, spaceReport=spaceReport, log=log, ra=ra, jr=jr)
    def updatePandaServer(self, job, site, workerNode, port, xmlstr=None, spaceReport=False, log=None, ra=0, jr=False, schedulerID=None, pilotID=None, updateServer=True):
        """ Update the PanDA server """

        # create and instantiate the client object
        from PandaServerClient import PandaServerClient
        client = PandaServerClient(pilot_version=self.__pilot_version, \
                                   pilot_version_tag=self.__pilot_version_tag, \
                                   pilot_initdir=self.__pilot_initdir, \
                                   jobSchedulerId=self.__jobSchedulerId, \
                                   pilotId=self.__pilotId, \
                                   updateServer=self.__updateServer, \
                                   jobrec=True, \
                                   pshttpurl=self.__pshttpurl)

        # update the panda server
        return client.updatePandaServer(job, site, workerNode, port, xmlstr=xmlstr, spaceReport=spaceReport, log=log, ra=ra, jr=jr)
Example #4
0
def updatePandaServer(job_state, xmlstr=None, spaceReport=False,
                      log=None, jr=False, stdout_tail="", **kwargs):
    """ Update the panda server with the latest job info """

    from PandaServerClient import PandaServerClient
    client = PandaServerClient(pilot_version=DorE(kwargs, 'version'),
                               pilot_version_tag=DorE(kwargs, 'pilot_version_tag'),
                               pilot_initdir=DorE(kwargs, 'pilot_initdir'),
                               jobSchedulerId=DorE(kwargs, 'jobSchedulerId'),
                               pilotId=DorE(kwargs, 'pilotId'),
                               updateServer=DorE(kwargs, 'updateServerFlag'),
                               jobrec=DorE(kwargs, 'jobrec'),
                               pshttpurl=DorE(kwargs, 'pshttpurl'))

    # update the panda server
    return client.updatePandaServer(job_state.job, job_state.site, DorE(kwargs, 'workerNode'),
                                           DorE(kwargs, 'psport'), xmlstr=xmlstr,
                                           spaceReport=spaceReport, log=log, ra=job_state.recoveryAttempt,
                                           jr=jr, useCoPilot=DorE(kwargs, 'useCoPilot'),
                                           stdout_tail=stdout_tail)
Example #5
0
    def __mk_gl_temp_dir(self):
        """Make the directory tree for glexec.

        See usage example in:
        http://wiki.nikhef.nl/grid/GLExec_TransientPilotJobs
        """
        pUtil.tolog('sys path is %s' % sys.path)

        pUtil.tolog("folder is : %s" % self.__mkgltempdir_path)
	cmd = '%s -t 777 `pwd`' % self.__mkgltempdir_path

	attempts = 0
	while attempts < 3:
	        stdout, stderr, status = execute(cmd)
		pUtil.tolog('cmd: %s' % cmd)
	        pUtil.tolog('output: %s' % stdout)
	        pUtil.tolog('error: %s' % stderr)
        	pUtil.tolog('status: %s' % status)
	        if not (status or stderr):
			self.__target_path = stdout.rstrip('\n')
		        os.environ['GLEXEC_TARGET_DIR'] = self.__target_path
		        os.environ['GLEXEC_TARGET_PROXY'] = os.path.join(self.__target_path, 'user_proxy')
		        pUtil.tolog("gltmpdir created and added to env: %s" % self.__target_path)
			pUtil.tolog("now adding sandbox to sys.path")
			sys.path.append(self.__target_path)
			pUtil.tolog("New sys.path is %s " %sys.path)
			return 0
	        else:
			pUtil.tolog('error! gltmpdir has failed')
		        attempts += 1
			#raise GlexecException("mkgltempdir failed: %s" % stderr)
			pUtil.tolog("mkgltempdir failed: %s" % stderr)
			if attempts == 3:
	                        pUtil.tolog('sys path is %s' % sys.path)
        	                pUtil.tolog('os environ is %s' % os.environ)
				ec = 1226
				env = Configuration.Configuration()

	                        pUtil.tolog("Updating PanDA server for the failed job (error code %d)" % (ec))
	                        env['job'].result[0] = 'failed'
				env['job'].currentState = env['job'].result[0]
                	        env['job'].result[2] = ec
	                        env['pilotErrorDiag'] = "gLExec related failure - %s" %stderr
				env['job'].pilotErrorDiag = env['pilotErrorDiag']

				from pilot import getProperNodeName

				if 'https://' not in env['pshttpurl']:
					env['pshttpurl'] = 'https://' + env['pshttpurl']

				import Node#, Site
			        env['workerNode'] = Node.Node()
			        env['workerNode'].setNodeName(getProperNodeName(os.uname()[1]))
				
				env['job'].workdir = os.getcwd()
				env['thisSite'].workdir = os.getcwd()

				from PandaServerClient import PandaServerClient				

				strXML = pUtil.getMetadata(env['thisSite'].workdir, env['job'].jobId)

				client = PandaServerClient(pilot_version = env['version'], pilot_version_tag = env['pilot_version_tag'],
	                               pilot_initdir = env['pilot_initdir'], jobSchedulerId = env['jobSchedulerId'],
        	                       pilotId = env['pilotId'], updateServer = env['updateServerFlag'],
                	               jobrec = env['jobrec'], pshttpurl = env['pshttpurl'])

				client.updatePandaServer(env['job'], env['thisSite'], env['workerNode'], env['psport'],
					log = env['pilotErrorDiag'], useCoPilot = env['useCoPilot'], xmlstr = strXML)

        	                return 1

			else:
				pUtil.tolog('[Trial %s] Sleeping for 10 secs and retrying' % attempts)
				time.sleep(10)
Example #6
0
    def __mk_gl_temp_dir(self):
        """Make the directory tree for glexec.

        See usage example in:
        http://wiki.nikhef.nl/grid/GLExec_TransientPilotJobs
        """
        pUtil.tolog('sys path is %s' % sys.path)

        pUtil.tolog("folder is : %s" % self.__mkgltempdir_path)
	cmd = '%s -t 777 `pwd`' % self.__mkgltempdir_path

	attempts = 0
	while attempts < 3:
	        stdout, stderr, status = execute(cmd)
		pUtil.tolog('cmd: %s' % cmd)
	        pUtil.tolog('output: %s' % stdout)
	        pUtil.tolog('error: %s' % stderr)
        	pUtil.tolog('status: %s' % status)
	        if not (status or stderr):
			self.__target_path = stdout.rstrip('\n')
		        os.environ['GLEXEC_TARGET_DIR'] = self.__target_path
		        os.environ['GLEXEC_TARGET_PROXY'] = os.path.join(self.__target_path, 'user_proxy')
		        pUtil.tolog("gltmpdir created and added to env: %s" % self.__target_path)
			pUtil.tolog("now adding sandbox to sys.path")
			sys.path.append(self.__target_path)
			pUtil.tolog("New sys.path is %s " %sys.path)
			return 0
	        else:
			pUtil.tolog('error! gltmpdir has failed')
		        attempts += 1
			#raise GlexecException("mkgltempdir failed: %s" % stderr)
			pUtil.tolog("mkgltempdir failed: %s" % stderr)
			if attempts == 3:
	                        pUtil.tolog('sys path is %s' % sys.path)
        	                pUtil.tolog('os environ is %s' % os.environ)
				ec = 1226
				env = Configuration.Configuration()

	                        pUtil.tolog("Updating PanDA server for the failed job (error code %d)" % (ec))
	                        env['job'].result[0] = 'failed'
				env['job'].currentState = env['job'].result[0]
                	        env['job'].result[2] = ec
	                        env['pilotErrorDiag'] = "gLExec related failure - %s" %stderr
				env['job'].pilotErrorDiag = env['pilotErrorDiag']

				from pilot import getProperNodeName

				if 'https://' not in env['pshttpurl']:
					env['pshttpurl'] = 'https://' + env['pshttpurl']

				import Node#, Site
			        env['workerNode'] = Node.Node()
			        env['workerNode'].setNodeName(getProperNodeName(os.uname()[1]))
				
				env['job'].workdir = os.getcwd()
				env['thisSite'].workdir = os.getcwd()

				from PandaServerClient import PandaServerClient				

				strXML = pUtil.getMetadata(env['thisSite'].workdir, env['job'].jobId)

				client = PandaServerClient(pilot_version = env['version'], pilot_version_tag = env['pilot_version_tag'],
	                               pilot_initdir = env['pilot_initdir'], jobSchedulerId = env['jobSchedulerId'],
        	                       pilotId = env['pilotId'], updateServer = env['updateServerFlag'],
                	               jobrec = env['jobrec'], pshttpurl = env['pshttpurl'])

				client.updatePandaServer(env['job'], env['thisSite'], env['workerNode'], env['psport'],
					log = env['pilotErrorDiag'], useCoPilot = env['useCoPilot'], xmlstr = strXML)

        	                return 1

			else:
				pUtil.tolog('[Trial %s] Sleeping for 10 secs and retrying' % attempts)
				time.sleep(10)