| 
     
      
      
      From: <ha...@us...> - 2007-05-02 21:19:54
      
     
   | 
Revision: 1635
          http://svn.sourceforge.net/cogkit/?rev=1635&view=rev
Author:   hategan
Date:     2007-05-02 14:19:49 -0700 (Wed, 02 May 2007)
Log Message:
-----------
added jobtypes to the pbs provider
Modified Paths:
--------------
    trunk/current/src/cog/modules/provider-localscheduler/etc/provider-pbs.properties
    trunk/current/src/cog/modules/provider-localscheduler/project.properties
    trunk/current/src/cog/modules/provider-localscheduler/src/org/globus/cog/abstraction/impl/scheduler/pbs/PBSExecutor.java
Modified: trunk/current/src/cog/modules/provider-localscheduler/etc/provider-pbs.properties
===================================================================
--- trunk/current/src/cog/modules/provider-localscheduler/etc/provider-pbs.properties	2007-04-11 21:12:03 UTC (rev 1634)
+++ trunk/current/src/cog/modules/provider-localscheduler/etc/provider-pbs.properties	2007-05-02 21:19:49 UTC (rev 1635)
@@ -14,3 +14,13 @@
 # The path to qstat. The default assumes that qstat is in PATH
 #
 qstat=qstat
+
+
+#
+# If the jobType attribute is specified, then the PBS provider
+# will look for a property named "wrapper.<jobType>" and prepend
+# that to the executable line in the PBS script. It will also
+# substitute value of attributes in the job specification, using
+# the "$attrName" notation.
+#
+wrapper.mpi=mpirun -np $count
Modified: trunk/current/src/cog/modules/provider-localscheduler/project.properties
===================================================================
--- trunk/current/src/cog/modules/provider-localscheduler/project.properties	2007-04-11 21:12:03 UTC (rev 1634)
+++ trunk/current/src/cog/modules/provider-localscheduler/project.properties	2007-05-02 21:19:49 UTC (rev 1635)
@@ -1,6 +1,6 @@
 module.name 	= provider-localscheduler
 long.name 		= Local providers for PBS/Torque and Cobalt
-version			= 1.0
+version			= 0.2
 project			= Java CoG Kit
 lib.deps		= -
 debug			= true
Modified: trunk/current/src/cog/modules/provider-localscheduler/src/org/globus/cog/abstraction/impl/scheduler/pbs/PBSExecutor.java
===================================================================
--- trunk/current/src/cog/modules/provider-localscheduler/src/org/globus/cog/abstraction/impl/scheduler/pbs/PBSExecutor.java	2007-04-11 21:12:03 UTC (rev 1634)
+++ trunk/current/src/cog/modules/provider-localscheduler/src/org/globus/cog/abstraction/impl/scheduler/pbs/PBSExecutor.java	2007-05-02 21:19:49 UTC (rev 1635)
@@ -78,7 +78,7 @@
         String[] cmdline = new String[] { Properties.getProperties().getQSub(),
                 script.getAbsolutePath() };
         if (logger.isDebugEnabled()) {
-            logger.debug(cmdline[0]+" "+cmdline[1]);
+            logger.debug(cmdline[0] + " " + cmdline[1]);
         }
         Process process = Runtime.getRuntime().exec(cmdline, null, null);
 
@@ -154,6 +154,25 @@
             wr.write(quote(spec.getEnvironmentVariable(name)));
             wr.write('\n');
         }
+        String type = (String) spec.getAttribute("jobType");
+        if (logger.isDebugEnabled()) {
+            logger.debug("Job type: " + type);
+        }
+        if (type != null) {
+            String wrapper = Properties.getProperties().getProperty(
+                    "wrapper." + type);
+            if (logger.isDebugEnabled()) {
+                logger.debug("Wrapper: " + wrapper);
+            }
+            if (wrapper != null) {
+                wrapper = replaceVars(wrapper);
+                wr.write(wrapper);
+                wr.write(' ');
+            }
+            if (logger.isDebugEnabled()) {
+                logger.debug("Wrapper after variable substitution: " + wrapper);
+            }
+        }
         wr.write(quote(spec.getExecutable()));
         List args = spec.getArgumentsAsList();
         if (args != null && args.size() > 0) {
@@ -188,7 +207,6 @@
             char c = s.charAt(i);
             if (c == '"' || c == '\\') {
                 sb.append('\\');
-                break;
             }
             sb.append(c);
         }
@@ -214,6 +232,50 @@
         return out;
     }
 
+    protected String replaceVars(String str) {
+        StringBuffer sb = new StringBuffer();
+        boolean escaped = false;
+        for (int i = 0; i < str.length(); i++) {
+            char c = str.charAt(i);
+            if (c == '\\') {
+            	if (escaped) {
+            	    sb.append('\\');
+            	}
+            	else {
+            	    escaped = true;
+            	}
+            }
+            else {
+                if (c == '$' && !escaped) {
+                	if (i == str.length() - 1) {
+                		sb.append('$');
+                	}
+                	else {
+                	    int e = str.indexOf(' ', i);
+                	    if (e == -1) {
+                	        e = str.length();
+                	    }
+                	    String name = str.substring(i + 1, e);
+                	    Object attr = spec.getAttribute(name);
+                	    if (attr != null) {
+                	    	sb.append(attr.toString());
+                	    }
+                	    else {
+                	    	sb.append('$');
+                	    	sb.append(name);
+                	    }
+                	    i = e;
+                	}
+                }
+                else {
+                    sb.append(c);
+                }
+                escaped = false;
+            }
+        }
+        return sb.toString();
+    }
+
     protected void cleanup() {
         script.delete();
         new File(exitcode).delete();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |