fixed data staging issues, supporting local stageins to remote job working directory, use of delegation tokens while job runs
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/f4a32fd0 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/f4a32fd0 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/f4a32fd0 Branch: refs/heads/master Commit: f4a32fd04e1cf2dbc24b59303cba9fcdb6855a9d Parents: 576c87d Author: msmemon <[email protected]> Authored: Fri Dec 5 17:23:45 2014 +0100 Committer: msmemon <[email protected]> Committed: Fri Dec 5 17:23:45 2014 +0100 ---------------------------------------------------------------------- .../client/samples/CreateLaunchExperiment.java | 38 ++- .../tools/RegisterSampleApplications.java | 22 +- .../gfac/bes/provider/impl/BESProvider.java | 9 +- .../bes/security/UNICORESecurityContext.java | 2 +- .../gfac/bes/utils/ApplicationProcessor.java | 21 +- .../gfac/bes/utils/DataStagingProcessor.java | 236 ------------------- .../gfac/bes/utils/DataTransferrer.java | 4 +- .../airavata/gfac/bes/utils/JSDLGenerator.java | 3 +- .../airavata/gfac/bes/utils/SecurityUtils.java | 7 +- .../gfac/bes/utils/UASDataStagingProcessor.java | 10 +- .../org/apache/airavata/gfac/Scheduler.java | 7 + .../airavata/gfac/core/cpi/BetterGfacImpl.java | 16 +- modules/gfac/pom.xml | 2 +- 13 files changed, 85 insertions(+), 292 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java index 34d419c..5c3ef19 100644 --- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java +++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/samples/CreateLaunchExperiment.java @@ -57,7 +57,7 @@ public class CreateLaunchExperiment { private static final String DEFAULT_GATEWAY = "default.registry.gateway"; private static Airavata.Client airavataClient; - private static String echoAppId = "Echo_36fbb479-5b41-4f48-a9c5-382ee910ac6b"; + private static String echoAppId = "Echo_753d7cf6-f79a-4f7f-8ada-5d707e90c383"; private static String wrfAppId = "WRF_7ad5da38-c08b-417c-a9ea-da9298839762"; private static String amberAppId = "Amber_49b16f6f-93ab-4885-9971-6ab2ab5eb3d3"; private static String gromacsAppId = "GROMACS_05622038-9edd-4cb1-824e-0b7cb993364b"; @@ -93,9 +93,9 @@ public class CreateLaunchExperiment { try { for (int i = 0; i < 1; i++) { // final String expId = createExperimentForSSHHost(airavata); -// final String expId = createEchoExperimentForFSD(airavataClient); + final String expId = createEchoExperimentForFSD(airavataClient); // final String expId = createEchoExperimentForStampede(airavataClient); - final String expId = createEchoExperimentForTrestles(airavataClient); +// final String expId = createEchoExperimentForTrestles(airavataClient); // final String expId = createExperimentEchoForLocalHost(airavataClient); // final String expId = createExperimentWRFTrestles(airavataClient); // final String expId = createExperimentForBR2(airavataClient); @@ -161,7 +161,6 @@ public class CreateLaunchExperiment { ucrJobSubmission.setSecurityProtocol(securityProtocol); ucrJobSubmission.setUnicoreEndPointURL(unicoreEndPointURL); - return jobSubmission.getJobSubmissionInterfaceId(); } @@ -180,7 +179,13 @@ public class CreateLaunchExperiment { output.setType(DataType.STRING); output.setValue(""); exOut.add(output); - + + OutputDataObjectType output2 = new OutputDataObjectType(); + output2.setName("Echoed_Output2"); + output2.setType(DataType.URI); + output2.setValue("file:///tmp/test.txt"); + exOut.add(output2); + Experiment simpleExperiment = ExperimentModelUtil.createSimpleExperiment("default", "admin", "echoExperiment", "SimpleEcho2", echoAppId, exInputs); simpleExperiment.setExperimentOutputs(exOut); @@ -223,23 +228,32 @@ public class CreateLaunchExperiment { InputDataObjectType input = new InputDataObjectType(); input.setName("Input_to_Echo"); input.setType(DataType.STRING); - input.setValue("Echoed_Output=Hello World"); - exInputs.add(input); + input.setValue("Hello World"); + + InputDataObjectType i2 = new InputDataObjectType(); - i2.setName("Input_to_Echo1"); + i2.setName("Input_to_Echo2"); i2.setType(DataType.URI); - i2.setValue("http://shrib.com/22QmrrX4"); + i2.setValue("http://www.textfiles.com/100/ad.txt"); + + InputDataObjectType i3 = new InputDataObjectType(); + i3.setName("Input_to_Echo3"); + i3.setType(DataType.URI); + i3.setValue("file:///tmp/test.txt"); + + exInputs.add(input); exInputs.add(i2); + exInputs.add(i3); List<OutputDataObjectType> exOut = new ArrayList<OutputDataObjectType>(); + OutputDataObjectType output = new OutputDataObjectType(); output.setName("Echoed_Output"); output.setType(DataType.STRING); - output.setValue("22QmrrX4"); + output.setValue("test.txt"); exOut.add(output); - Experiment simpleExperiment = ExperimentModelUtil.createSimpleExperiment("default", "admin", "echoExperiment", "SimpleEcho2", echoAppId, exInputs); simpleExperiment.setExperimentOutputs(exOut); @@ -251,7 +265,7 @@ public class CreateLaunchExperiment { for (String id : computeResources.keySet()) { String resourceName = computeResources.get(id); if (resourceName.equals(unicoreHostName)) { - ComputationalResourceScheduling scheduling = ExperimentModelUtil.createComputationResourceScheduling(id, 1, 1, 1, "normal", 30, 0, 1, "sds128"); + ComputationalResourceScheduling scheduling = ExperimentModelUtil.createComputationResourceScheduling(id, 1, 1, 1, "normal", 30, 0, 1048576, "sds128"); UserConfigurationData userConfigurationData = new UserConfigurationData(); userConfigurationData.setAiravataAutoSchedule(false); userConfigurationData.setOverrideManualScheduledParams(false); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/tools/RegisterSampleApplications.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/tools/RegisterSampleApplications.java b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/tools/RegisterSampleApplications.java index 41020a0..ce26814 100644 --- a/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/tools/RegisterSampleApplications.java +++ b/airavata-api/airavata-client-sdks/java-client-samples/src/main/java/org/apache/airavata/client/tools/RegisterSampleApplications.java @@ -210,7 +210,6 @@ public class RegisterSampleApplications { throw new AiravataClientException(); System.out.println("FSD Compute ResourceID: "+fsdResourceId); - JobSubmissionInterface jobSubmission = RegisterSampleApplicationsUtils.createJobSubmissionInterface(fsdResourceId, protocol, 2); UnicoreJobSubmission ucrJobSubmission = new UnicoreJobSubmission(); ucrJobSubmission.setSecurityProtocol(securityProtocol); @@ -222,11 +221,6 @@ public class RegisterSampleApplications { return jobSubmission.getJobSubmissionInterfaceId(); } - public void registerfsd(){ - System.out.println("\n #### Registering XSEDE Computational Resources #### \n"); - - } - public void registerAppModules() { try { System.out.println("\n #### Registering Application Modules #### \n"); @@ -529,17 +523,25 @@ public class RegisterSampleApplications { List<String> appModules = new ArrayList<String>(); appModules.add(echoModuleId); - InputDataObjectType input1 = RegisterSampleApplicationsUtils.createAppInput("Input_to_Echo", "Hello World", + InputDataObjectType input1 = RegisterSampleApplicationsUtils.createAppInput("Input_to_Echo", "", DataType.STRING, null, false, "A test string to Echo", null); + InputDataObjectType input2 = RegisterSampleApplicationsUtils.createAppInput("Input_to_Echo2", "", + DataType.URI, null, false, "A sample input remote file", null); + + InputDataObjectType input3 = RegisterSampleApplicationsUtils.createAppInput("Input_to_Echo3", "file:///tmp/test.txt", + DataType.URI, null, false, "A sample input local file", null); + + List<InputDataObjectType> applicationInputs = new ArrayList<InputDataObjectType>(); applicationInputs.add(input1); OutputDataObjectType output1 = RegisterSampleApplicationsUtils.createAppOutput("Echoed_Output", - "22QmrrX4", DataType.STRING); - + "", DataType.STRING); + List<OutputDataObjectType> applicationOutputs = new ArrayList<OutputDataObjectType>(); applicationOutputs.add(output1); + echoInterfaceId = airavataClient.registerApplicationInterface( RegisterSampleApplicationsUtils.createApplicationInterfaceDescription(echoName, echoDescription, @@ -1104,7 +1106,7 @@ public class RegisterSampleApplications { "/N/dc2/scratch/cgateway/gta-work-dirs"); ComputeResourcePreference fsdResourcePreferences = RegisterSampleApplicationsUtils. - createComputeResourcePreference(fsdResourceId, null, false, null, null, null,null); + createComputeResourcePreference(fsdResourceId, null, false, null, JobSubmissionProtocol.UNICORE, DataMovementProtocol.UNICORE_STORAGE_SERVICE,null); GatewayResourceProfile gatewayResourceProfile = new GatewayResourceProfile(); gatewayResourceProfile.setGatewayID(DEFAULT_GATEWAY); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java index 6fdadfb..d490269 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java @@ -167,9 +167,9 @@ public class BESProvider extends AbstractProvider implements GFacProvider, .toString())); jobExecutionContext.getNotifier().publish(new UnicoreJobIDEvent(jobId)); - GFacUtils.saveJobStatus(jobExecutionContext, details, JobState.SUBMITTED); +// GFacUtils.saveJobStatus(jobExecutionContext, details, JobState.SUBMITTED); - factory.getActivityStatus(activityEpr); + log.info(formatStatusMessage(activityEpr.getAddress() .getStringValue(), factory.getActivityStatus(activityEpr) .toString())); @@ -202,8 +202,7 @@ public class BESProvider extends AbstractProvider implements GFacProvider, + applicationJobStatus; jobExecutionContext.getNotifier().publish( new StatusChangeEvent(jobStatusMessage)); - GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, - applicationJobStatus); + GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, applicationJobStatus); throw new GFacProviderException( jobExecutionContext.getExperimentID() + "Job Canceled"); } else if (activityStatus.getState() == ActivityStateEnumeration.FINISHED) { @@ -412,7 +411,7 @@ public class BESProvider extends AbstractProvider implements GFacProvider, ActivityStatusType activityStatus = getStatus(factory, activityEpr); JobState applicationJobStatus = getApplicationJobStatus(activityStatus); String jobStatusMessage = "Status of job " + jobId + "is " + applicationJobStatus; - GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, applicationJobStatus); +// GFacUtils.updateJobStatus(jobExecutionContext, jobDetails, applicationJobStatus); jobExecutionContext.getNotifier().publish(new StatusChangeEvent(jobStatusMessage)); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java index 57fc2d5..e2896e8 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/security/UNICORESecurityContext.java @@ -52,7 +52,7 @@ public class UNICORESecurityContext extends X509SecurityContext { secProperties.getETDSettings().setExtendTrustDelegation(true); // secProperties.setMessageLogging(true); // secProperties.setDoSignMessage(true); -// secProperties.getETDSettings().setIssuerCertificateChain(secProperties.getCredential().getCertificateChain()); + secProperties.getETDSettings().setIssuerCertificateChain(secProperties.getCredential().getCertificateChain()); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java index 91c27f9..7c7a59e 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/ApplicationProcessor.java @@ -38,9 +38,9 @@ public class ApplicationProcessor { public static void generateJobSpecificAppElements(JobDefinitionType value, JobExecutionContext context){ String userName = getUserNameFromContext(context); - if (userName.equalsIgnoreCase("admin")){ - userName = "CN=zdv575, O=Ultrascan Gateway, C=DE"; - } +// if (userName.equalsIgnoreCase("admin")){ +// userName = "CN=zdv575, O=Ultrascan Gateway, C=DE"; +// } ApplicationDeploymentDescription appDep= context.getApplicationContext().getApplicationDeploymentDescription(); String appname = context.getApplicationContext().getApplicationInterfaceDescription().getApplicationName(); @@ -53,9 +53,20 @@ public class ApplicationProcessor { // createApplicationEnvironment(value, appDep.getSetEnvironment(), parallelism); // } // - String stdout = context.getStandardOutput(); - String stderr = context.getStandardError(); + String stdout = context.getStandardOutput(); + String stderr = context.getStandardError(); + if(stdout != null) { + stdout = stdout.substring(stdout.lastIndexOf('/')+1); + } + + if(stderr != null) { + stderr = stderr.substring(stderr.lastIndexOf('/')+1); + } + + stdout = (stdout == null || stdout.equals("")) ? "stdout":stdout; + stderr = (stdout == null || stderr.equals("")) ? "stderr":stderr; + if (appDep.getExecutablePath() != null) { FileNameType fNameType = FileNameType.Factory.newInstance(); fNameType.setStringValue(appDep.getExecutablePath()); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataStagingProcessor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataStagingProcessor.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataStagingProcessor.java deleted file mode 100644 index 0541d47..0000000 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataStagingProcessor.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - -package org.apache.airavata.gfac.bes.utils; - -import java.io.File; -import java.net.URI; -import java.util.Map; - -import org.apache.airavata.commons.gfac.type.ActualParameter; -import org.apache.airavata.gfac.core.context.JobExecutionContext; -import org.apache.airavata.gfac.core.utils.GFacUtils; -import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType; -import org.apache.airavata.schemas.gfac.StringArrayType; -import org.apache.airavata.schemas.gfac.StringParameterType; -import org.apache.airavata.schemas.gfac.URIArrayType; -import org.apache.airavata.schemas.gfac.URIParameterType; -import org.apache.airavata.schemas.gfac.UnicoreHostType; -import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType; - -public class DataStagingProcessor { - - public static void generateDataStagingElements(JobDefinitionType value, JobExecutionContext context) throws Exception{ - - HpcApplicationDeploymentType appDepType = (HpcApplicationDeploymentType) context - .getApplicationContext().getApplicationDeploymentDescription() - .getType(); - - - String gridftpEndpoint = ((UnicoreHostType) context.getApplicationContext().getHostDescription().getType()) - .getGridFTPEndPointArray()[0]; - - - if (context.getInMessageContext().getParameters().size() > 0) { - buildDataStagingFromInputContext(context, value, gridftpEndpoint, appDepType); - } - - if (context.getOutMessageContext().getParameters().size() > 0) { - buildFromOutputContext(context, value, gridftpEndpoint, appDepType); - } - - createStdOutURIs(value, appDepType, gridftpEndpoint, isUnicoreEndpoint(context)); - - } - - private static void createInURIElement(JobDefinitionType value, - String endpoint, String inputDir, ActualParameter inParam) - throws Exception { - - String uri = ((URIParameterType) inParam.getType()).getValue(); - String fileName = new File(uri).getName(); - if (uri.startsWith("file")) { - URI gridFTPInputDirURI = URIUtils.createGsiftpURI(endpoint, - inputDir); - String filePath = gridFTPInputDirURI.toString() + File.separator - + fileName; - JSDLUtils - .addDataStagingSourceElement(value, filePath, null, fileName); - } else if (uri.startsWith("gsiftp") || uri.startsWith("http") - || uri.startsWith("rns")) { - // no need to stage-in those files to the input - // directory - JSDLUtils.addDataStagingSourceElement(value, uri, null, fileName); - } - - } - - private static void createStdOutURIs(JobDefinitionType value, - HpcApplicationDeploymentType appDepType, String endpoint, - boolean isUnicore) throws Exception { - - URI remoteOutputDir = URIUtils.createGsiftpURI(endpoint, - appDepType.getOutputDataDirectory()); - - String stdout = ApplicationProcessor.getApplicationStdOut(value, appDepType); - - String stderr = ApplicationProcessor.getApplicationStdErr(value, appDepType); - - String stdoutFileName = (stdout == null || stdout.equals("")) ? "stdout" - : stdout; - String stdoutURI = GFacUtils.createGsiftpURIAsString( - remoteOutputDir.toString(), stdoutFileName); - JSDLUtils.addDataStagingTargetElement(value, null, stdoutFileName, - stdoutURI); - - String stderrFileName = (stdout == null || stderr.equals("")) ? "stderr" - : stderr; - String stderrURI = GFacUtils.createGsiftpURIAsString( - remoteOutputDir.toString(), stderrFileName); - JSDLUtils.addDataStagingTargetElement(value, null, stderrFileName, - stderrURI); - - if(isUnicore) { - String scriptExitCodeFName = "UNICORE_SCRIPT_EXIT_CODE"; - String scriptExitCode = GFacUtils.createGsiftpURIAsString( - remoteOutputDir.toString(), scriptExitCodeFName); - JSDLUtils.addDataStagingTargetElement(value, null, - scriptExitCodeFName, scriptExitCode.toString()); - } - - } - - - private static void createOutStringElements(JobDefinitionType value, - HpcApplicationDeploymentType appDeptype, String endpoint, String prmValue) throws Exception { - - if(prmValue == null || "".equals(prmValue)) return; - - - String outputUri = GFacUtils.createGsiftpURIAsString(endpoint, appDeptype.getOutputDataDirectory()); - - URI finalOutputUri = URIUtils.createGsiftpURI(outputUri, prmValue); - JSDLUtils.addDataStagingTargetElement(value, null, prmValue, finalOutputUri.toString()); - } - - - private static void createOutURIElement(JobDefinitionType value, - String prmValue) throws Exception { - String fileName = new File(prmValue.toString()).getName(); - JSDLUtils.addDataStagingTargetElement(value, null, fileName, prmValue); - } - - - private static JobDefinitionType buildFromOutputContext(JobExecutionContext context, - JobDefinitionType value, String gridftpEndpoint, - HpcApplicationDeploymentType appDepType) throws Exception { - - Map<String, Object> outputParams = context.getOutMessageContext() - .getParameters(); - - for (String paramKey : outputParams.keySet()) { - - ActualParameter outParam = (ActualParameter) outputParams - .get(paramKey); - - // if single urls then convert each url into jsdl source - // elements, - // that are formed by concat of gridftpurl+inputdir+filename - - String paramDataType = outParam.getType().getType().toString(); - - if ("URI".equals(paramDataType)) { - String uriPrm = ((URIParameterType) outParam.getType()) - .getValue(); - createOutURIElement(value, uriPrm); - } - - // string params are converted into the job arguments - - else if (("URIArray").equals(paramDataType)) { - String[] uriArray = ((URIArrayType) outParam.getType()) - .getValueArray(); - for (String u : uriArray) { - - createOutURIElement(value, u); - } - - } - else if ("String".equals(paramDataType)) { - String stringPrm = ((StringParameterType) outParam - .getType()).getValue(); - createOutStringElements(value, appDepType, gridftpEndpoint, stringPrm); - } - - else if ("StringArray".equals(paramDataType)) { - String[] valueArray = ((StringArrayType) outParam.getType()) - .getValueArray(); - for (String v : valueArray) { - createOutStringElements(value, appDepType, gridftpEndpoint, v); - } - } - } - - return value; - } - - - private static void buildDataStagingFromInputContext(JobExecutionContext context, JobDefinitionType value, String gridftpEndpoint, HpcApplicationDeploymentType appDepType) - throws Exception { - - // TODO set data directory - Map<String, Object> inputParams = context.getInMessageContext() - .getParameters(); - - for (String paramKey : inputParams.keySet()) { - - ActualParameter inParam = (ActualParameter) inputParams - .get(paramKey); - - // if single urls then convert each url into jsdl source - // elements, - // that are formed by concat of gridftpurl+inputdir+filename - - String paramDataType = inParam.getType().getType().toString(); - - if ("URI".equals(paramDataType)) { - createInURIElement(value, gridftpEndpoint, - appDepType.getInputDataDirectory(), inParam); - } - - // string params are converted into the job arguments - - else if ("String".equals(paramDataType)) { - String stringPrm = ((StringParameterType) inParam.getType()) - .getValue(); - ApplicationProcessor.addApplicationArgument(value, appDepType, stringPrm); - } - } - - } - - - public static boolean isUnicoreEndpoint(JobExecutionContext context) { - return ( (context.getApplicationContext().getHostDescription().getType() instanceof UnicoreHostType)?true:false ); - } - - -} http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java index 4aa6cc1..cb036fa 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/DataTransferrer.java @@ -63,7 +63,7 @@ public class DataTransferrer { if (uri.startsWith("file")) { try { String uriWithoutProtocol = uri.substring(uri.lastIndexOf("://") + 1, uri.length()); - FileUploader fileUploader = new FileUploader(uriWithoutProtocol,"input/" + fileName,Mode.overwrite); + FileUploader fileUploader = new FileUploader(uriWithoutProtocol,fileName,Mode.overwrite); fileUploader.perform(storageClient); } catch (FileNotFoundException e3) { throw new GFacProviderException( @@ -139,7 +139,7 @@ public class DataTransferrer { String scriptExitCodeFName = "UNICORE_SCRIPT_EXIT_CODE"; String scriptCodeLocation = downloadLocation+File.separator+scriptExitCodeFName; f1.setFrom(scriptExitCodeFName); - f1.setTo(downloadLocation+File.separator+scriptCodeLocation); + f1.setTo(scriptCodeLocation); f1.perform(storageClient); log.info("UNICORE_SCRIPT_EXIT_CODE downloaded to "+scriptCodeLocation); } http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/JSDLGenerator.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/JSDLGenerator.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/JSDLGenerator.java index 9755bc7..4743522 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/JSDLGenerator.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/JSDLGenerator.java @@ -55,8 +55,7 @@ public class JSDLGenerator implements BESConstants { ApplicationProcessor.generateJobSpecificAppElements(value, context); - DataStagingProcessor.generateDataStagingElements(value, context); - + return jobDefDoc; } http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/SecurityUtils.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/SecurityUtils.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/SecurityUtils.java index ac79f33..1da0bac 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/SecurityUtils.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/SecurityUtils.java @@ -16,7 +16,6 @@ import javax.security.auth.x500.X500Principal; import org.apache.airavata.common.exception.ApplicationSettingsException; import org.apache.airavata.common.utils.ServerSettings; -import org.apache.airavata.commons.gfac.type.HostDescription; import org.apache.airavata.credential.store.store.CredentialReader; import org.apache.airavata.gfac.GFacException; import org.apache.airavata.gfac.RequestData; @@ -24,14 +23,13 @@ import org.apache.airavata.gfac.bes.security.UNICORESecurityContext; import org.apache.airavata.gfac.bes.security.X509SecurityContext; import org.apache.airavata.gfac.core.context.JobExecutionContext; import org.apache.airavata.gfac.core.utils.GFacUtils; -import org.apache.airavata.schemas.gfac.UnicoreHostType; +import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol; import org.bouncycastle.asn1.ASN1InputStream; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import eu.emi.security.authn.x509.helpers.CertificateHelpers; import eu.emi.security.authn.x509.helpers.proxy.X509v3CertificateBuilder; import eu.emi.security.authn.x509.impl.CertificateUtils; @@ -45,8 +43,7 @@ public class SecurityUtils { public static void addSecurityContext(JobExecutionContext jobExecutionContext) throws GFacException { - HostDescription registeredHost = jobExecutionContext.getApplicationContext().getHostDescription(); - if (! (registeredHost.getType() instanceof UnicoreHostType)) { + if (!jobExecutionContext.getPreferredJobSubmissionProtocol().equals(JobSubmissionProtocol.UNICORE)) { logger.error("This is a wrong method to invoke for UNICORE host types,please check your gfac-config.xml"); } else http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/UASDataStagingProcessor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/UASDataStagingProcessor.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/UASDataStagingProcessor.java index 9c92789..e82edef 100644 --- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/UASDataStagingProcessor.java +++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/utils/UASDataStagingProcessor.java @@ -46,7 +46,7 @@ public class UASDataStagingProcessor { private static void createInURISMSElement(JobDefinitionType value, String smsUrl, String uri) throws Exception { - String fileName = "input/" + new File(uri).getName(); + String fileName = new File(uri).getName(); if (uri.startsWith("file")) { uri = smsUrl+"#/"+fileName; @@ -113,13 +113,9 @@ public class UASDataStagingProcessor { List<OutputDataObjectType> applicationOutputs = context.getTaskData().getApplicationOutputs(); if (applicationOutputs != null && !applicationOutputs.isEmpty()){ for (OutputDataObjectType output : applicationOutputs){ - if(output.getType().equals(DataType.URI)) { + if(output.getType().equals(DataType.URI) && !output.getValue().startsWith("file:")) { createOutURIElement(value, output.getValue()); } - else if(output.getType().equals(DataType.STRING)) { - // TODO: remove this check, as out string - createOutStringElements(value, smsUrl, output.getValue()); - } } } return value; @@ -128,7 +124,7 @@ public class UASDataStagingProcessor { private static void buildDataStagingFromInputContext(JobExecutionContext context, JobDefinitionType value, String smsUrl) throws Exception { - List<InputDataObjectType> applicationInputs = context.getApplicationContext().getApplicationInterfaceDescription().getApplicationInputs(); + List<InputDataObjectType> applicationInputs = context.getTaskData().getApplicationInputs(); if (applicationInputs != null && !applicationInputs.isEmpty()){ for (InputDataObjectType input : applicationInputs){ http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Scheduler.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Scheduler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Scheduler.java index a9940b8..853ffc8 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Scheduler.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/Scheduler.java @@ -32,6 +32,7 @@ import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionInterfa import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol; import org.apache.airavata.model.appcatalog.computeresource.LOCALSubmission; import org.apache.airavata.model.appcatalog.computeresource.SSHJobSubmission; +import org.apache.airavata.model.appcatalog.computeresource.UnicoreJobSubmission; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -42,6 +43,7 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPathExpressionException; + import java.io.File; import java.io.IOException; import java.net.URL; @@ -118,6 +120,7 @@ public class Scheduler { JobSubmissionProtocol jobSubmissionProtocol = jobExecutionContext.getPreferredJobSubmissionProtocol(); SSHJobSubmission sshJobSubmission; LOCALSubmission localSubmission; + UnicoreJobSubmission unicoreSubmission; String securityProtocol = null; try { AppCatalog appCatalog = jobExecutionContext.getAppCatalog(); @@ -130,6 +133,10 @@ public class Scheduler { }else if (jobSubmissionProtocol == JobSubmissionProtocol.LOCAL) { localSubmission = appCatalog.getComputeResource().getLocalJobSubmission(jobExecutionContext.getPreferredJobSubmissionInterface().getJobSubmissionInterfaceId()); } + else if (jobSubmissionProtocol == JobSubmissionProtocol.UNICORE) { + unicoreSubmission = appCatalog.getComputeResource().getUNICOREJobSubmission(jobExecutionContext.getPreferredJobSubmissionInterface().getJobSubmissionInterfaceId()); + securityProtocol = unicoreSubmission.getSecurityProtocol().toString(); + } List<Element> elements = GFacUtils.getElementList(GFacConfiguration.getHandlerDoc(), Constants.XPATH_EXPR_PROVIDER_ON_SUBMISSION + jobSubmissionProtocol + "']"); for (Element element : elements) { String security = element.getAttribute(Constants.GFAC_CONFIG_SECURITY_ATTRIBUTE); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java index aaa5461..8403f8c 100644 --- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java +++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java @@ -370,12 +370,16 @@ public class BetterGfacImpl implements GFac,Watcher { jobExecutionContext.setPreferredDataMovementInterface(jobExecutionContext.getHostPrioritizedDataMovementInterfaces().get(0)); jobExecutionContext.setPreferredDataMovementProtocol(jobExecutionContext.getPreferredDataMovementInterface().getDataMovementProtocol()); } else { - for (DataMovementInterface dataMovementInterface : dataMovementInterfaces) { - if (gatewayResourcePreferences.getPreferredDataMovementProtocol() == dataMovementInterface.getDataMovementProtocol()) { - jobExecutionContext.setPreferredDataMovementInterface(dataMovementInterface); - break; - } - } + // this check is to avoid NPE when job submission endpoints do + // not contain any data movement interfaces. + if((dataMovementInterfaces != null) && (!dataMovementInterfaces.isEmpty())) { + for (DataMovementInterface dataMovementInterface : dataMovementInterfaces) { + if (gatewayResourcePreferences.getPreferredDataMovementProtocol() == dataMovementInterface.getDataMovementProtocol()) { + jobExecutionContext.setPreferredDataMovementInterface(dataMovementInterface); + break; + } + } + } } } else { setUpWorkingLocation(jobExecutionContext, applicationInterface, "/tmp"); http://git-wip-us.apache.org/repos/asf/airavata/blob/f4a32fd0/modules/gfac/pom.xml ---------------------------------------------------------------------- diff --git a/modules/gfac/pom.xml b/modules/gfac/pom.xml index 34253b9..2e7df07 100644 --- a/modules/gfac/pom.xml +++ b/modules/gfac/pom.xml @@ -38,7 +38,7 @@ <!--<module>gfac-hadoop</module>--> <!--<module>gfac-gram</module>--> <module>gfac-gsissh</module> - <!--<module>gfac-bes</module>--> + <module>gfac-bes</module> <module>gfac-monitor</module> <module>airavata-gfac-service</module> <module>airavata-gfac-stubs</module>
