From: <bj...@us...> - 2008-08-19 14:59:09
|
Revision: 3327 http://unicore.svn.sourceforge.net/unicore/?rev=3327&view=rev Author: bjoernh Date: 2008-08-19 14:59:05 +0000 (Tue, 19 Aug 2008) Log Message: ----------- implemented cleanup(), getTaskName(); support for HiLA URIs in DataStaging elements Modified Paths: -------------- hila/trunk/hila-unicore6/src/main/java/de/fzj/hila/implementation/unicore6/Unicore6JSDLTask.java Modified: hila/trunk/hila-unicore6/src/main/java/de/fzj/hila/implementation/unicore6/Unicore6JSDLTask.java =================================================================== --- hila/trunk/hila-unicore6/src/main/java/de/fzj/hila/implementation/unicore6/Unicore6JSDLTask.java 2008-08-19 12:40:24 UTC (rev 3326) +++ hila/trunk/hila-unicore6/src/main/java/de/fzj/hila/implementation/unicore6/Unicore6JSDLTask.java 2008-08-19 14:59:05 UTC (rev 3327) @@ -31,17 +31,27 @@ ********************************************************************************/ package de.fzj.hila.implementation.unicore6; +import java.util.HashSet; +import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xmlbeans.XmlException; +import org.ggf.schemas.jsdl.x2005.x11.jsdl.DataStagingType; import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionDocument; +import org.ggf.schemas.jsdl.x2005.x11.jsdl.SourceTargetType; +import org.unigrids.services.atomic.types.ProtocolType.Enum; import org.unigrids.x2006.x04.services.tss.SubmitDocument; import org.unigrids.x2006.x04.services.tss.SubmitResponseDocument; import org.w3.x2005.x08.addressing.EndpointReferenceType; +import de.fzj.hila.File; import de.fzj.hila.Location; +import de.fzj.hila.TaskStatus; import de.fzj.hila.exceptions.HiLAException; +import de.fzj.hila.exceptions.HiLALocationSyntaxException; import de.fzj.unicore.uas.client.JobClient; +import de.fzj.unicore.uas.client.StorageClient; /** * @author bjoernh @@ -53,7 +63,7 @@ @SuppressWarnings("unused") private static Log log = LogFactory.getLog(Unicore6JSDLTask.class); - JobDefinitionDocument jdsl; + JobDefinitionDocument jsdl; public Unicore6JSDLTask(Unicore6Site site, JobDefinitionDocument jsdl) throws HiLAException { @@ -61,8 +71,10 @@ // getChildLocation(jsdl.getJobDefinition().getJobDescription(). // getJobIdentification().getJobName())); super(site, null); - this.jdsl = jsdl; + this.jsdl = jsdl; + transformJSDL(); + SubmitDocument submit = SubmitDocument.Factory.newInstance(); try { @@ -87,4 +99,105 @@ } } + /** + * transform abstract HiLA URIs into UNICORE 6 URIs for staging + * @throws HiLAException + */ + private void transformJSDL() throws HiLAException + { + DataStagingType[] ds = this.jsdl.getJobDefinition().getJobDescription().getDataStagingArray(); + for (DataStagingType dsElem : ds) + { + SourceTargetType src = dsElem.getSource(); + if (src != null) + { + transformUri(src); + } + SourceTargetType tgt = dsElem.getTarget(); + if (tgt != null) + { + transformUri(tgt); + } + } + } + + private void transformUri(SourceTargetType src) throws HiLALocationSyntaxException, HiLAException + { + String fUri = src.getURI(); + try + { + File f = getSite().getGrid().locateFile(new Location(fUri)); + StorageClient storageClient = ((Unicore6BaseStorage)f.getStorage()).getStorageClient(); + Enum[] protoArr = storageClient.getSupportedProtocols(); + Set<Enum> protoSet = new HashSet<Enum>(); + for (Enum enum1 : protoArr) + { + protoSet.add(enum1); + } + FileTransferPreferences prefs = ((Unicore6Grid) getSite().getGrid()).getFileTransferPrefs(); + String ftProto = null; + for(String pref : prefs.getPrefs()) { + if(protoSet.contains(Enum.forString(pref))) { + ftProto = pref; + break; + } + } + if(log.isDebugEnabled()) { + log.debug("Protocol will be " + ftProto); + } + String stagingUri = ftProto + ":" + storageClient.getEPR().getAddress().getStringValue() + "#" + f.getPath(); + if(log.isDebugEnabled()) { + log.debug("stagingUri: " + stagingUri); + } + src.setURI(stagingUri); + } + catch (HiLALocationSyntaxException e) + { + throw new HiLALocationSyntaxException("Wrong location in staging element", e); + } + catch (Exception e) + { + throw new HiLAException("Can't determin supported protocols for staging", e); + } + } + + @Override + public void cleanup() throws HiLAException + { + if (!isInFinalState()) + { + throw new HiLAException("Not in final state. cleanup() not applicable."); + } + try + { + jobClient.destroy(); + } + catch (Exception e) + { + throw new HiLAException("Cannot destroy job resource", e); + } + getOutcomeFiles(); + try + { + jobClient.destroy(); + } + catch (Exception e) + { + throw new HiLAException("Unable to destroy job resource", e); + } + setCurrentStatus(TaskStatus.CLEANEDUP); + } + + @Override + public String getTaskName() throws HiLAException + { + try + { + return this.jsdl.getJobDefinition().getJobDescription().getJobIdentification().getJobName(); + } + catch (NullPointerException e) + { + return null; + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |