In a earlier post [2] we looked at how to execute a MPI job in Ranger [1] using the XBaya GUI. This post describes how to run the same scenario
using a java client. This java client does not use the AiravataClient API but it uses XML Beans generated from Schema to describe and run the
MPI job programmetically. I will be writing a test client later, which will be using AiravataClient API.
1. Configure gram.properties file which will be used in the test case. (Let's assume it's named gram_ranger.properties)
[2] - http://heshans.blogspot.com/2012/06/execute-simple-mpi-job-on-ranger-using.html
1. Configure gram.properties file which will be used in the test case. (Let's assume it's named gram_ranger.properties)
# The myproxy server to retrieve the grid credentials myproxy.server=myproxy.teragrid.org # Example: XSEDE myproxy server #myproxy.server=myproxy.teragrid.org # The user name and password to fetch grid proxy myproxy.username=username myproxy.password=******** #Directory with Grid Certification Authority certificates and CRL's # The certificates for XSEDE can be downloaded from http://software.xsede.org/security/xsede-certs.tar.gz ca.certificates.directory=/home/heshan/Dev/setup/gram-provider/certificates # On computational grids, an allocation is awarded with a charge number. On XSEDE, the numbers are typically of the format TG-DIS123456 allocation.charge.number=TG-STA110014S # The scratch space with ample space to create temporary working directory on target compute cluster scratch.working.directory=/scratch/01437/ogce/test # Name, FQDN, and gram and gridftp end points of the remote compute cluster host.commom.name=gram host.fqdn.name=gatekeeper2.ranger.tacc.teragrid.org gridftp.endpoint=gsiftp://gridftp.ranger.tacc.teragrid.org:2811/ gram.endpoints=gatekeeper.ranger.tacc.teragrid.org:2119/jobmanager-sge defualt.queue=development2. Using the above configured properties file (gram_ranger.properties) run the test case which will execute the simple MPI job on Ranger.
import org.apache.airavata.commons.gfac.type.ActualParameter; import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription; import org.apache.airavata.commons.gfac.type.HostDescription; import org.apache.airavata.commons.gfac.type.ServiceDescription; import org.apache.airavata.core.gfac.context.invocation.impl.DefaultExecutionContext; import org.apache.airavata.core.gfac.context.invocation.impl.DefaultInvocationContext; import org.apache.airavata.core.gfac.context.message.impl.ParameterContextImpl; import org.apache.airavata.core.gfac.context.security.impl.GSISecurityContext; import org.apache.airavata.core.gfac.notification.impl.LoggingNotification; import org.apache.airavata.core.gfac.services.impl.PropertiesBasedServiceImpl; import org.apache.airavata.migrator.registry.MigrationUtil; import org.apache.airavata.registry.api.impl.AiravataJCRRegistry; import org.apache.airavata.schemas.gfac.*; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.net.URL; import java.util.*; import static org.junit.Assert.fail; public class GramProviderMPIRangerTest { public static final String MYPROXY = "myproxy"; public static final String GRAM_PROPERTIES = "gram_ranger.properties"; private AiravataJCRRegistry jcrRegistry = null; @Before public void setUp() throws Exception { Map<String,String> config = new HashMap<String,String>(); config.put("org.apache.jackrabbit.repository.home","target"); jcrRegistry = new AiravataJCRRegistry(null, "org.apache.jackrabbit.core.RepositoryFactoryImpl", "admin", "admin", config); // Host URL url = this.getClass().getClassLoader().getResource(GRAM_PROPERTIES); Properties properties = new Properties(); properties.load(url.openStream()); HostDescription host = new HostDescription(); host.getType().changeType(GlobusHostType.type); host.getType().setHostName(properties.getProperty("host.commom.name")); host.getType().setHostAddress(properties.getProperty("host.fqdn.name")); ((GlobusHostType) host.getType()).setGridFTPEndPointArray(new String[]{properties.getProperty("gridftp.endpoint")}); ((GlobusHostType) host.getType()).setGlobusGateKeeperEndPointArray(new String[]{properties.getProperty("gram.endpoints")}); /* Application */ ApplicationDeploymentDescription appDesc = new ApplicationDeploymentDescription(GramApplicationDeploymentType.type); GramApplicationDeploymentType app = (GramApplicationDeploymentType) appDesc.getType(); app.setCpuCount(1); app.setNodeCount(1); ApplicationDeploymentDescriptionType.ApplicationName name = appDesc.getType().addNewApplicationName(); name.setStringValue("EchoMPILocal"); app.setExecutableLocation("/share/home/01437/ogce/airavata-test/mpi-hellow-world"); app.setScratchWorkingDirectory(properties.getProperty("scratch.working.directory")); app.setCpuCount(16); app.setJobType(MigrationUtil.getJobTypeEnum("MPI")); //app.setMinMemory(); ProjectAccountType projectAccountType = ((GramApplicationDeploymentType) appDesc.getType()).addNewProjectAccount(); projectAccountType.setProjectAccountNumber(properties.getProperty("allocation.charge.number")); /* Service */ ServiceDescription serv = new ServiceDescription(); serv.getType().setName("SimpleMPIEcho"); InputParameterType input = InputParameterType.Factory.newInstance(); ParameterType parameterType = input.addNewParameterType(); parameterType.setName("echo_mpi_input"); List<InputParameterType> inputList = new ArrayList<InputParameterType>(); inputList.add(input); InputParameterType[] inputParamList = inputList.toArray(new InputParameterType[inputList .size()]); OutputParameterType output = OutputParameterType.Factory.newInstance(); ParameterType parameterType1 = output.addNewParameterType(); parameterType1.setName("echo_mpi_output"); List<OutputParameterType> outputList = new ArrayList<OutputParameterType>(); outputList.add(output); OutputParameterType[] outputParamList = outputList .toArray(new OutputParameterType[outputList.size()]); serv.getType().setInputParametersArray(inputParamList); serv.getType().setOutputParametersArray(outputParamList); /* Save to Registry */ jcrRegistry.saveHostDescription(host); jcrRegistry.saveDeploymentDescription(serv.getType().getName(), host.getType().getHostName(), appDesc); jcrRegistry.saveServiceDescription(serv); jcrRegistry.deployServiceOnHost(serv.getType().getName(), host.getType().getHostName()); } @Test public void testExecute() { try { URL url = this.getClass().getClassLoader().getResource(GRAM_PROPERTIES); Properties properties = new Properties(); properties.load(url.openStream()); DefaultInvocationContext ct = new DefaultInvocationContext(); DefaultExecutionContext ec = new DefaultExecutionContext(); ec.addNotifiable(new LoggingNotification()); ec.setRegistryService(jcrRegistry); ct.setExecutionContext(ec); GSISecurityContext gsiSecurityContext = new GSISecurityContext(); gsiSecurityContext.setMyproxyServer(properties.getProperty("myproxy.server")); gsiSecurityContext.setMyproxyUserName(properties.getProperty("myproxy.username")); gsiSecurityContext.setMyproxyPasswd(properties.getProperty("myproxy.password")); gsiSecurityContext.setMyproxyLifetime(14400); gsiSecurityContext.setTrustedCertLoc(properties.getProperty("ca.certificates.directory")); ct.addSecurityContext(MYPROXY, gsiSecurityContext); ct.setServiceName("SimpleMPIEcho"); /* Input */ ParameterContextImpl input = new ParameterContextImpl(); ActualParameter echo_input = new ActualParameter(); ((StringParameterType) echo_input.getType()).setValue("echo_mpi_output=hi"); input.add("echo_mpi_input", echo_input); /* Output */ ParameterContextImpl output = new ParameterContextImpl(); ActualParameter echo_output = new ActualParameter(); output.add("echo_mpi_output", echo_output); /* parameter */ ct.setInput(input); ct.setOutput(output); PropertiesBasedServiceImpl service = new PropertiesBasedServiceImpl(); service.init(); service.execute(ct); System.out.println("output : " + ct.getOutput().toString()); System.out.println("output from service : " + ct.getOutput().getValue("echo_mpi_output")); Assert.assertNotNull(ct.getOutput()); Assert.assertNotNull(ct.getOutput().getValue("echo_mpi_output")); System.out.println("output : " + ((StringParameterType) ((ActualParameter) ct.getOutput().getValue("echo_mpi_output")).getType()).getValue()); } catch (Exception e) { e.printStackTrace(); fail("ERROR"); } } }[1] - http://www.tacc.utexas.edu/user-services/user-guides/ranger-user-guide
[2] - http://heshans.blogspot.com/2012/06/execute-simple-mpi-job-on-ranger-using.html