Ryan,
this is a bug, i found that myself a while ago.
Lifetime handling of MultiJobs will be better in 4.2.
If you can avoid MultiJobs i would recommend to do so.
Martin
> Hi
>
> I have a service that creates a multi job. It appears that there is only
> an option to set the parent job's termination time and NOT the subjobs
> of the multi. Currently I create each subjob (in a JobDescriptionType
> object) and then they are added to a MultiJobDescriptionType which is
> later associated with a CreateManagedJobInputType. The
> CreateManagedJobInputType object then has its termination time set.
> Setting this does not appear to set the termination time of the subjobs
> - it ONLY sets the first subjob - is there a way to inherit or set the
> termination time for ALL the subjobs? Am I using the wrong class or is
> this a bug?
>
>
>
> Regards
>
> Ryan Fraser (SE)
>
> CSIRO Exploration & Mining ,
> ARRC, 26 Dick Perry Ave,
> Kensington, WA 6151 Australia
> Phone +61 8 6436 8760 Fax +61 8 6436 8555
>
>
>
>
>
>
>
>
>
> private RunResponse submitBatchJob(
>
> RunResponse rr, MultiJobDescriptionType
> jobDescription,
>
> int amountOfJobs) throws Exception
>
>
>
> String gramJobHandle = null;
>
> SwFrameResource swFrameResource = getResource();
>
>
>
> .........................
>
> // submit job
>
>
>
>
>
>
>
> try {
>
>
>
>
>
> ..........................
>
>
>
> // prepare for job submission
>
> JobDescriptionType[] jobs = jobDescription.getJob();
>
>
>
> // set the default lifetime of the resource in seconds
>
> //int lifetime =
> (SwFrameConfig.defaultGramLifeTimeLength *
> 3600)+(int)(jobs[0].getMaxWallTime()/60);
>
> int lifetime =
> (SwFrameConfig.defaultGramLifeTimeLength * 3600);
>
> logger.debug("Delegation Cert Resource lifetime in
> seconds = " + lifetime);
>
> lifetime = lifetime +
> (int)(jobs[0].getMaxWallTime()/60);
>
> logger.debug("Delegation Cert Resource lifetime in
> seconds with walltime added = " + lifetime);
>
>
>
>
>
> // establish FULL delegation to client
>
> .......................................................
>
>
>
>
>
> for(int i=0; i<amountOfJobs; i++)
>
> {
>
> jobs[i].setFactoryEndpoint(factoryEndpointSubs);
>
>
> jobs[i].setJobCredentialEndpoint(credentialEndpoint);
>
>
> jobs[i].setStagingCredentialEndpoint(credentialEndpoint);
>
>
>
> TransferRequestType stageIn =
> jobs[i].getFileStageIn();
>
>
> stageIn.setTransferCredentialEndpoint(credentialEndpoint);
>
> jobs[i].setFileStageIn(stageIn);
>
>
>
> TransferRequestType stageOut =
> jobs[i].getFileStageOut();
>
>
> stageOut.setTransferCredentialEndpoint(credentialEndpoint);
>
> jobs[i].setFileStageOut(stageOut);
>
>
>
> DeleteRequestType fileCleanUp =
> jobs[i].getFileCleanUp();
>
>
> fileCleanUp.setTransferCredentialEndpoint(credentialEndpoint);
>
> jobs[i].setFileCleanUp(fileCleanUp);
>
> }
>
>
>
> jobDescription.setFactoryEndpoint(factoryEndpoint);
>
> jobDescription.setJob(jobs);
>
>
>
>
> jobDescription.setJobCredentialEndpoint(credentialEndpoint);
>
> //set the user cred for ANY staging
>
>
> jobDescription.setStagingCredentialEndpoint(credentialEndpoint);
>
>
>
> //set up calendar to detail termination time for the
> resource we are about to create, this needs to be longer than the total
> (including staging) job itself, resource for job
>
> //will be destroyed at this time even if the job has
> not completed!!!!
>
>
>
> // set up calendar to detail termination time for the
> resource
>
> // we are about to create, this needs to be longer
> than the
>
> // total (including staging) job itself, resource
> for job will
>
> // be destroyed at this time even if the job has
> not completed!
>
> Calendar cal = Calendar.getInstance();
>
>
> cal.add(java.util.Calendar.HOUR,100+(int)(jobs[0].getMaxWallTime()/60));
>
> logger.debug("Resource lifetime is 100hrs + walltime =
> " + (100+(int)(jobs[0].getMaxWallTime()/60)));
>
>
>
>
>
>
>
>
>
> //set up calendar to detail termination time for the
> resource we are about to create, this needs to be longer than the total
> (including staging) job itself, resource for job
>
> //will be destroyed at this time even if the job has
> not completed!!!!
>
>
>
> //subscibe to the job
>
> Subscribe subscriptionReq = new Subscribe();
>
>
>
> //create the job input which includes everything setup
> previously
>
> CreateManagedJobInputType jobInput = new
> CreateManagedJobInputType();
>
> jobInput.setJobID(new AttributedURI("uuid:" +
> UUIDGenFactory.getUUIDGen().nextUUID()));
>
>
>
> jobInput.setInitialTerminationTime(cal);
>
> jobInput.setMultiJob(jobDescription);
>
> //subscribe to the job
>
>
>
> //create the job and submit to gram
>
> CreateManagedJobOutputType createResponse
>
> = factoryPort.createManagedJob(jobInput);
>
>
>
> //create an endpoint to reference the job
>
> EndpointReferenceType jobEndpoint =
> createResponse.getManagedJobEndpoint();
>
>
>
> ManagedJobPortType jobPort =
> ManagedJobClientHelper.getPort(jobEndpoint);
>
>
>
>
>
>
>
>
>
>