9c6e77467db7d54f98e58e1e858ee7afae0e40e5
galt
  Thu Oct 11 03:07:37 2012 -0700
v12.15 - bugfixes and better support of rlimit for parasol
diff --git src/parasol/para/para.c src/parasol/para/para.c
index b05b52f..9739732 100644
--- src/parasol/para/para.c
+++ src/parasol/para/para.c
@@ -138,30 +138,34 @@
   "   List jobs that had problems (even if successfully rerun).\n"
   "   Includes host info.\n"
   "para running\n"
   "   Print info on currently running jobs.\n"
   "para hippos time\n"
   "   Print info on currently running jobs taking > 'time' (minutes) to run.\n"
   "para time\n"
   "   List timing information.\n"
   "para recover jobList newJobList\n"
   "   Generate a job list by selecting jobs from an existing list where\n"
   "   the `check out' tests fail.\n"
   "para priority 999\n"
   "   Set batch priority. Values explained under 'push' options above.\n"
   "para maxJob 999\n"
   "   Set batch maxJob. Values explained under 'push' options above.\n"
+  "para ram 999\n"
+  "   Set batch ram usage. Values explained under 'push' options above.\n"
+  "para cpu 999\n"
+  "   Set batch cpu usage. Values explained under 'push' options above.\n"
   "para resetCounts\n"
   "   Set batch done and crash counters to 0.\n"
   "para flushResults\n"
   "   Flush results file.  Warns if batch has jobs queued or running.\n"
   "para freeBatch\n"
   "   Free all batch info on hub.  Works only if batch has nothing queued or running.\n"
   "para showSickNodes\n"
   "   Show sick nodes which have failed when running this batch.\n"
   "para clearSickNodes\n"
   "   Clear sick nodes statistics and consecutive crash counts of batch.\n"
   "\n"
   "Common options\n"
   "   -verbose=1 - set verbosity level.\n",
   version,
   NORMAL_PRIORITY,
@@ -1995,30 +1999,61 @@
 		if (endTime > lastEnd) 
 		    {
 		    lastEnd = endTime;
 		    gotEnd = TRUE;
 		    }
 		}
 	    }
 	}
     }
 if (gotEnd)
     return lastEnd - firstSub;
 else
     return now - firstSub;
 }
 
+
+void paraRam(char *batch, char *val)
+/* set batch ram = val */
+{
+long long newRam = paraParseRam(val);
+if (newRam == -1)
+    usage();
+struct jobDb *db = readBatch(batch);
+struct job *job;
+for (job = db->jobList; job != NULL; job = job->next)
+    {
+    job->ramUsed = newRam;
+    }
+atomicWriteBatch(db, batch);
+}
+
+void paraCpu(char *batch, char *val)
+/* set batch cpu = val */
+{
+float newCpus = sqlFloat(val);
+if (newCpus < 0)
+    usage();
+struct jobDb *db = readBatch(batch);
+struct job *job;
+for (job = db->jobList; job != NULL; job = job->next)
+    {
+    job->cpusUsed = newCpus;
+    }
+atomicWriteBatch(db, batch);
+}
+
 void paraTimes(char *batch)
 /* Report times of run. */
 {
 struct jobDb *db = readBatch(batch);
 double totalCpu = 0, totalWall = 0;
 double oneWall, longestWall = 0;
 struct job *job;
 char *longestWallId = NULL;
 struct submission *sub;
 int jobCount = 0;
 int runningCount = 0;
 int timedCount = 0;
 int crashCount = 0;
 int queueCount = 0;
 double runTime = 0, longestRun = 0;
@@ -2275,30 +2310,42 @@
 else if (sameWord(command, "priority"))
     {
     if (argc != 3)
         usage();
     paraPriority(argv[2]);
     }
 else if (sameWord(command, "maxJob") || sameWord(command, "maxNode"))
     {
     if (argc != 3)
         usage();
     /* backwards compatibility */
     if (sameWord(command, "maxNode"))
 	warn("maxNode deprecated, use maxJob");
     paraMaxJob(argv[2]);
     }
+else if (sameWord(command, "ram"))
+    {
+    if (argc != 3)
+        usage();
+    paraRam(batch, argv[2]);
+    }
+else if (sameWord(command, "cpu"))
+    {
+    if (argc != 3)
+        usage();
+    paraCpu(batch, argv[2]);
+    }
 else if (sameWord(command, "resetCounts"))
     {
     if (argc != 2)
         usage();
     paraResetCounts();
     }
 else if (sameWord(command, "freeBatch"))
     {
     if (argc != 2)
         usage();
     freeBatch();
     }
 else if (sameWord(command, "flushResults"))
     {
     if (argc != 2)