View Javadoc

1   package fr.in2p3.jsaga.adaptor.job;
2   
3   import fr.in2p3.jsaga.adaptor.base.defaults.Default;
4   import fr.in2p3.jsaga.adaptor.base.usage.Usage;
5   import fr.in2p3.jsaga.adaptor.job.monitor.JobStatus;
6   import fr.in2p3.jsaga.adaptor.job.monitor.QueryIndividualJob;
7   import org.apache.log4j.Logger;
8   import org.globus.gram.*;
9   import org.globus.gram.internal.GRAMConstants;
10  import org.globus.gram.internal.GRAMProtocolErrorConstants;
11  import org.ietf.jgss.GSSException;
12  import org.ogf.saga.error.*;
13  
14  import java.util.Map;
15  
16  /* ***************************************************
17   * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
18   * ***             http://cc.in2p3.fr/             ***
19   * ***************************************************
20   * File:   GkCommonJobMonitorAdaptor
21   * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
22   * Date:   21 juin 2010
23   * ***************************************************
24   * Description:                                      */
25  /**
26   *
27   */
28  public class GkCommonJobMonitorAdaptor extends GatekeeperJobAdaptorAbstract implements QueryIndividualJob {
29  	private Logger logger = Logger.getLogger(GkCommonJobMonitorAdaptor.class.getName());
30  
31      public String getType() {
32          return "gk";
33      }
34  
35      public Usage getUsage() {
36      	return null;
37      }
38  
39      public Default[] getDefaults(Map attributes) throws IncorrectStateException {
40          return null;
41      }
42  
43      public JobStatus getStatus(String nativeJobId) throws TimeoutException, NoSuccessException {
44          GramJob job = getGramJobById(nativeJobId);
45          try {
46          	Gram.jobStatus(job);
47          } catch (GramException e) {
48              if (e.getErrorCode() == GramException.ERROR_CONTACTING_JOB_MANAGER) {
49                  //WARNING: Globus does not distinguish job DONE and job manager stopped
50              	logger.warn("Globus job manager may be stopped: status DONE returned in getStatus() for job "+nativeJobId);
51                  return new GatekeeperJobStatus(nativeJobId, new Integer(GRAMConstants.STATUS_DONE), "DONE");
52              } else {
53                  this.rethrowException(e);
54              }
55          } catch (GSSException e) {
56              throw new NoSuccessException(e);
57          }
58          return new GatekeeperJobStatus(nativeJobId, new Integer(job.getStatus()), job.getStatusAsString(), job.getError());
59      }
60  
61      protected void rethrowException(GramException e) throws TimeoutException, NoSuccessException {
62          switch(e.getErrorCode()) {
63              case GRAMProtocolErrorConstants.INVALID_JOB_CONTACT:
64              case GRAMProtocolErrorConstants.ERROR_CONNECTION_FAILED:
65                  throw new TimeoutException(e);
66              default:
67                  throw new NoSuccessException(e);
68          }
69      }
70  }