001: /**
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */package org.griphyn.cPlanner.code.gridstart;
015:
016: import org.griphyn.cPlanner.classes.SubInfo;
017:
018: import org.griphyn.cPlanner.common.PegasusProperties;
019: import org.griphyn.cPlanner.common.LogManager;
020:
021: import org.griphyn.cPlanner.namespace.Dagman;
022:
023: import org.griphyn.cPlanner.code.POSTScript;
024:
025: import java.io.File;
026:
027: /**
028: * A user defined post script. By default, the postscript is given the name
029: * of the job output file on the submit host, to work upon. Additional arguments
030: * to the post script can be specified via properties or profiles.
031: *
032: * The postscript is only constructed if the job already contains the
033: * Dagman profile key passed.
034: *
035: * @author Karan Vahi vahi@isi.edu
036: * @version $Revision: 50 $
037: */
038:
039: public class UserPOSTScript implements POSTScript {
040:
041: /**
042: * The SHORTNAME for this implementation.
043: */
044: public static final String SHORT_NAME = "user";
045:
046: /**
047: * The LogManager object which is used to log all the messages.
048: */
049: protected LogManager mLogger;
050:
051: /**
052: * The object holding all the properties pertaining to Pegasus.
053: */
054: protected PegasusProperties mProps;
055:
056: /**
057: * The path to the user postscript on the submit host.
058: *
059: */
060: protected String mPOSTScriptPath;
061:
062: /**
063: * The default constructor.
064: */
065: public UserPOSTScript() {
066: mLogger = LogManager.getInstance();
067: }
068:
069: /**
070: * Initialize the POSTScript implementation.
071: *
072: * @param properties the <code>PegasusProperties</code> object containing all
073: * the properties required by Pegasus.
074: * @param path the path to the POSTScript on the submit host.
075: * @param submitDir the submit directory where the submit file for the job
076: * has to be generated.
077: *
078: * @throws RuntimeException in case of path being null.
079: */
080: public void initialize(PegasusProperties properties, String path,
081: String submitDir) {
082:
083: mProps = properties;
084: mPOSTScriptPath = path;
085:
086: if (path == null) {
087: throw new RuntimeException(
088: "Path to user specified postscript not given");
089: }
090: }
091:
092: /**
093: * Constructs the postscript that has to be invoked on the submit host
094: * after the job has executed on the remote end. The postscript works on the
095: * stdout of the remote job, that has been transferred back to the submit
096: * host by Condor.
097: * <p>
098: * The postscript is constructed and populated as a profile
099: * in the DAGMAN namespace.
100: *
101: *
102: * @param job the <code>SubInfo</code> object containing the job description
103: * of the job that has to be enabled on the grid.
104: * @param key the <code>DAGMan</code> profile key that has to be inserted.
105: *
106: * @return boolean true if postscript was generated,else false.
107: */
108: public boolean construct(SubInfo job, String key) {
109: boolean constructed = false;
110:
111: //see if any specific postscript was specified for this job
112: //get the value user specified for the job
113: String postscript = mPOSTScriptPath;
114:
115: job.dagmanVariables.construct(Dagman.OUTPUT_KEY,
116: (String) job.condorVariables.get("output"));
117:
118: //arguments are taken care of automatically in DagMan namespace
119:
120: constructed = true;
121: //put in the postscript
122: mLogger.log("Postscript constructed is " + postscript,
123: LogManager.DEBUG_MESSAGE_LEVEL);
124: job.dagmanVariables.checkKeyInNS(key, postscript);
125:
126: // else{
127: // //Karan Nov 15,2005 VDS BUG FIX 128
128: // //Always remove POST_SCRIPT_ARGUMENTS
129: // job.dagmanVariables.removeKey(Dagman.POST_SCRIPT_ARGUMENTS_KEY);
130: // }
131:
132: return constructed;
133: }
134:
135: /**
136: * Returns a short textual description of the implementing class.
137: *
138: * @return short textual description.
139: */
140: public String shortDescribe() {
141: return this .SHORT_NAME;
142: }
143:
144: /**
145: * Returns the path to exitcode that is to be used on the kickstart
146: * output.
147: *
148: * @return the path to the exitcode script to be invoked.
149: */
150: public String getExitCodePath() {
151: StringBuffer sb = new StringBuffer();
152: sb.append(mProps.getPegasusHome()).append(File.separator)
153: .append("bin");
154: sb.append(File.separator).append("exitcode");
155:
156: return sb.toString();
157: }
158:
159: }
|