You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2019/10/29 20:49:19 UTC

svn commit: r1869129 - in /uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws: handlers/experiments/ handlers/utilities/ xd/

Author: burn
Date: Tue Oct 29 20:49:19 2019
New Revision: 1869129

URL: http://svn.apache.org/viewvc?rev=1869129&view=rev
Log:
UIMA-6130 Drop the IExperiment interface; fix timing bug when displaying the 'restarting' page

Removed:
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/IExperiment.java
Modified:
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/experiments/HandlerExperimentsServlets.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/utilities/HandlersUtilities.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Experiment.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/experiments/HandlerExperimentsServlets.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/experiments/HandlerExperimentsServlets.java?rev=1869129&r1=1869128&r2=1869129&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/experiments/HandlerExperimentsServlets.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/experiments/HandlerExperimentsServlets.java Tue Oct 29 20:49:19 2019
@@ -47,7 +47,7 @@ import org.apache.uima.ducc.ws.utils.For
 import org.apache.uima.ducc.ws.utils.FormatServletScroll;
 import org.apache.uima.ducc.ws.utils.HandlersHelper;
 import org.apache.uima.ducc.ws.utils.HandlersHelper.AuthorizationStatus;
-import org.apache.uima.ducc.ws.xd.IExperiment;
+import org.apache.uima.ducc.ws.xd.Experiment;
 import org.apache.uima.ducc.ws.xd.ExperimentsRegistryManager;
 import org.apache.uima.ducc.ws.xd.ExperimentsRegistryUtilities;
 import org.apache.uima.ducc.ws.xd.Jed;
@@ -81,7 +81,7 @@ public class HandlerExperimentsServlets
     super.init(duccWebServer);
   }
 
-  private String getStartDate(HttpServletRequest request, IExperiment experiment) {
+  private String getStartDate(HttpServletRequest request, Experiment experiment) {
     String startDate = "";
     if (experiment.getStartDate() != null) {
       startDate = experiment.getStartDate();
@@ -91,7 +91,7 @@ public class HandlerExperimentsServlets
     return startDate;
   }
 
-  private long getRunTime(HttpServletRequest request, IExperiment experiment) {
+  private long getRunTime(HttpServletRequest request, Experiment experiment) {
     long runTime = 0;
     ArrayList<Task> tasks = experiment.getTasks();
     for (Task task : tasks) {
@@ -114,7 +114,7 @@ public class HandlerExperimentsServlets
     return runTime;
   }
 
-  private String fmtDuration(IExperiment experiment, long runTime) {
+  private String fmtDuration(Experiment experiment, long runTime) {
     StringBuffer db = new StringBuffer();
     Status experimentStatus = experiment.getStatus();
     String health = experimentStatus==Status.Running ? "class=\"health_green\"" : "class=\"health_black\"";
@@ -126,7 +126,7 @@ public class HandlerExperimentsServlets
     return db.toString();
   }
 
-  private String getUser(HttpServletRequest request, IExperiment experiment) {
+  private String getUser(HttpServletRequest request, Experiment experiment) {
     String user = "";
     if (experiment.getUser() != null) {
       user = experiment.getUser();
@@ -134,7 +134,7 @@ public class HandlerExperimentsServlets
     return user;
   }
 
-  private String getState(HttpServletRequest request, IExperiment experiment) {
+  private String getState(HttpServletRequest request, Experiment experiment) {
     String health;
     Status experimentStatus = experiment.getStatus();
     switch (experimentStatus) {
@@ -154,7 +154,7 @@ public class HandlerExperimentsServlets
     return state;
   }
 
-  private String getDirectoryLink(HttpServletRequest request, IExperiment experiment) {
+  private String getDirectoryLink(HttpServletRequest request, Experiment experiment) {
     String directory = experiment.getDirectory();
     String href = "href='experiment.details.html?dir=" + directory + "'";
     String directoryLink = "<a" + " " + href + " " + ">" + directory + "</a>";
@@ -175,7 +175,7 @@ public class HandlerExperimentsServlets
     ArrayList<String> users = HandlersUtilities.getExperimentsUsers(request);
     
     // List experiments in "experiment" order: active, newest start-date, directory
-    for (IExperiment experiment : experimentsRegistryManager.getMapByStatus().keySet()) {
+    for (Experiment experiment : experimentsRegistryManager.getMapByStatus().keySet()) {
 
       boolean fullTable = fmt.numRows() >= maxRecords;
       
@@ -240,10 +240,14 @@ public class HandlerExperimentsServlets
   }
 
   // TODO - Might be nice to mark the top-level tasks as "Restarting"
-  private String decorateState(IExperiment experiment, Task task, boolean isRestartable, boolean isCanceled) {
+  private String decorateState(Experiment experiment, Task task, boolean isRestartable, boolean isCanceled) {
     String mName = "decorateState";
     String state = "";
-    if (task.status != null) {
+    if (task.status == null) {
+      if (task.rerun) {  // If status has been cleared the task may be about to be rerun
+        state = "<span class=\"health_green\">Rerun";
+      }
+    } else {
       state = task.status;
       // If experiment has been canceled change any "Running" tasks to "Canceled"
       Jed.Status status = Jed.Status.getEnum(state);
@@ -367,7 +371,7 @@ public class HandlerExperimentsServlets
     return sbuff.toString();
   }
 
-  private void edTaskDucc(FormatServlet fmt, IExperiment experiment, Task task,
+  private void edTaskDucc(FormatServlet fmt, Experiment experiment, Task task,
           HttpServletRequest request, long duccId, long now, boolean isRestartable, boolean isCanceled) {
     DuccData duccData = DuccData.getInstance();
     
@@ -428,12 +432,18 @@ public class HandlerExperimentsServlets
     WsLog.enter(cName, mName);
 
     boolean handled = false;
+    boolean restart = false;
     long now = System.currentTimeMillis();
     FormatServlet fmt = tableStyle.equals("scroll") ? new FormatServletScroll() : new FormatServletClassic();
 
     String dir = request.getParameter("dir");
-    IExperiment experiment = experimentsRegistryManager.getExperiment(dir);
+    Experiment experiment = experimentsRegistryManager.getExperiment(dir);
     if (experiment != null) {
+      // If restart requested update the tasks to be rerun
+      restart = request.getParameter("restart") != null;
+      if (restart) {
+        experiment.updateStatus();
+      }
       // Check if the experiment can be restarted, i.e.
       // launched by DUCC as a JED AP, stopped, and owned by the logged-in user
       boolean isRestartable = experiment.getJedDuccId() != null  
@@ -452,10 +462,12 @@ public class HandlerExperimentsServlets
           task.rerun = !task.rerun;
           markSubtasks(tasks, toggleId, task.rerun);
         }
-        // Find the latest duccId to display for a task ... omit if not started or has been reset for a rerun
+        // Find the latest duccId to display for a task ... omit if not started or is being rerun
+        // i.e. display it if has been run and is not marked to be rerun or is marked but not yet restarted
         for (Task task : tasks) {
           long latestDuccId = 0;
-          if (task.status != null && !task.rerun) {
+          // Omit if: task.status==null || (task.rerun && !isRestartable)
+          if (task.status != null && (!task.rerun || isRestartable)) {
             Jed.Type jedType = Jed.Type.getEnum(task.type);
             if (jedType == Jed.Type.Ducc_Job || jedType == Jed.Type.Java) {
               long[] duccIds = task.duccId;
@@ -485,12 +497,11 @@ public class HandlerExperimentsServlets
     // Restart the experiment AFTER the page has been generated
     // Don't trigger on the restart state of the experiment as do't want to launch on every page refresh
     // If restart fails clear the restarting state
-    boolean restart = request.getParameter("restart") != null;
     if (restart) {
       boolean ok = ExperimentsRegistryUtilities.launchJed(experiment);
       if (!ok) {
-        WsLog.warn(cName, mName, "Failed to relaunch JED - reset state");
-        experiment.updateStatus(null);
+        WsLog.warn(cName, mName, "Failed to relaunch JED - reset the is-rerunning state");
+        experiment.setRerunJedId(null);
       }
     }
     
@@ -530,7 +541,7 @@ public class HandlerExperimentsServlets
 
     boolean restart = false;
 
-    IExperiment experiment = experimentsRegistryManager.getExperiment(directory);
+    Experiment experiment = experimentsRegistryManager.getExperiment(directory);
 
     if (experiment != null) {
       // Display Terminate/Restart button if DUCC-launched && the owner logged in
@@ -538,8 +549,8 @@ public class HandlerExperimentsServlets
       if (experiment.getJedDuccId() != null &&
         HandlersHelper.getAuthorizationStatus(request, experiment.getUser()) == AuthorizationStatus.LoggedInOwner) {
         restart = request.getParameter("restart") != null;
-        if (restart) {          // Update the state of the tasks for the restart ... DuccId not known yet
-          experiment.updateStatus("?");
+        if (restart) {           // Mark as "restarting" ... correct ID will be set later
+          experiment.setRerunJedId("");
         }
         Status status = experiment.getStatus();
         // TODO - If still restarting should check if the restartJedId AP is actually running
@@ -587,7 +598,7 @@ public class HandlerExperimentsServlets
     StringBuffer sb = new StringBuffer();
 
     String directory = request.getParameter("dir");
-    IExperiment experiment = experimentsRegistryManager.getExperiment(directory);
+    Experiment experiment = experimentsRegistryManager.getExperiment(directory);
 
     String resourceOwnerUserId = experiment.getUser();
 

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/utilities/HandlersUtilities.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/utilities/HandlersUtilities.java?rev=1869129&r1=1869128&r2=1869129&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/utilities/HandlersUtilities.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/handlers/utilities/HandlersUtilities.java Tue Oct 29 20:49:19 2019
@@ -38,7 +38,7 @@ import org.apache.uima.ducc.ws.server.Du
 import org.apache.uima.ducc.ws.server.DuccCookies.DateStyle;
 import org.apache.uima.ducc.ws.server.DuccLocalConstants;
 import org.apache.uima.ducc.ws.server.DuccLocalCookies;
-import org.apache.uima.ducc.ws.xd.IExperiment;
+import org.apache.uima.ducc.ws.xd.Experiment;
 
 public class HandlersUtilities {
 
@@ -101,7 +101,7 @@ public class HandlersUtilities {
   }
 
   public static final boolean isListable(HttpServletRequest request, ArrayList<String> users,
-          boolean fullTable, IExperiment handle) {
+          boolean fullTable, Experiment handle) {
     boolean list = false;
     DuccCookies.FilterUsersStyle filterUsersStyle = DuccCookies.getFilterUsersStyle(request);
     if (!users.isEmpty()) {

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Experiment.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Experiment.java?rev=1869129&r1=1869128&r2=1869129&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Experiment.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/Experiment.java Tue Oct 29 20:49:19 2019
@@ -35,7 +35,7 @@ import org.apache.uima.ducc.ws.log.WsLog
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
-public class Experiment implements IExperiment {
+public class Experiment implements Comparable<Experiment> {
   
   private static DuccLogger logger = DuccLogger.getLogger(Experiment.class);
 
@@ -47,9 +47,9 @@ public class Experiment implements IExpe
 
   private long fileDate = 0;
 
-  private DuccId jedDuccId;
+  private DuccId jedDuccId;   // ID of JED task that last launched this experiment
 
-  private String restartJedId = null;  // ID of re-launched JED
+  private String rerunJedId = null;  // ID of re-launched JED
 
     
   public Experiment(String user, String directory, long fileDate, ArrayList<Task> tasks, IDuccWork work) {
@@ -63,40 +63,33 @@ public class Experiment implements IExpe
     }
   }
 
-  @Override
   public String getUser() {
     return user;
   }
 
-  @Override
   public String getDirectory() {
     return directory;
   }
 
-  @Override
   public long getFileDate() {
     return fileDate;
   }
 
-  @Override
   public ArrayList<Task> getTasks() {
     return tasks;
   }
   
-  @Override
   public DuccId getJedDuccId() {
     return jedDuccId;
   }
   
   // Update the duccId for the JED AP if missing or is older
-  @Override
   public void updateJedId(DuccId duccId) {
     if (jedDuccId == null || jedDuccId.getFriendly() < duccId.getFriendly()) {
       jedDuccId = duccId;
     }
   }
   
-  @Override
   public boolean isActive() {
     boolean retVal = false;
     switch (getStatus()) {
@@ -112,10 +105,9 @@ public class Experiment implements IExpe
 
   // TODO - the experiment status could be determined in the constructor but the restarting state can change
   // The restarting state is NOT saved in the Experiment.state file
-  @Override
   public Jed.Status getStatus() {
     Jed.Status retVal = Jed.Status.Unknown;
-    if (restartJedId != null) {
+    if (rerunJedId != null) {
       return Jed.Status.Restarting;
     }
     if (tasks != null) {
@@ -165,40 +157,43 @@ public class Experiment implements IExpe
   }
 
   /*
-   * Set/clear the restarting status of the experiment
-   * When restarting is initially requested the ID is not available,
-   * it is provided when launchJed succeeds.
+   * Set the status of the tasks to be rerun
    */
-  @Override
-  public void updateStatus(String restartJedId) {
-    String mName = "updateStatus";
-    WsLog.info(logger, mName, "Restart JED ID = " + restartJedId);
-    this.restartJedId  = restartJedId;
-    if (restartJedId != null) {
-      for (Task task : tasks) {
-        if (task.rerun) {
-          task.status = null;
-          if (Jed.Type.isLeaf(task.type)) { // Times are not accumulated for primitive tasks
-            task.startTime = null;
-            task.runTime = 0;
-          }
+  public void updateStatus() {
+    for (Task task : tasks) {
+      if (task.rerun) {
+        task.status = null;
+        if (Jed.Type.isLeaf(task.type)) { // Times are not accumulated for primitive tasks
+          task.startTime = null;
+          task.runTime = 0;
         }
       }
     }
+    setRerunJedId("");  // Mark as "restarting" ... correct ID will be set later
+  }
+  
+  public void setRerunJedId(String rerunJedId) {
+    String mName = "setRerunJedId";
+    if (rerunJedId != null && this.rerunJedId != null && this.rerunJedId.length() > 0) {
+      WsLog.warn(logger, mName, "JED ID was " + this.rerunJedId + " but is now " + rerunJedId);
+    }
+    this.rerunJedId  = rerunJedId;
   }
   
   /*
-   * Write the state as a temporary file, 
+   * Write the state as a temporary file (starting with the version number)
    * as the user copy it to the output directory,
    * delete the temp file.
    */
-  @Override
   public boolean writeStateFile(String umask) {
+    int version = 1;
     File tempFile = null;
     Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().setPrettyPrinting().create();
     try {
       tempFile = File.createTempFile("experiment", jedDuccId.toString());
       FileWriter out = new FileWriter(tempFile);
+      out.write(String.valueOf(version));
+      out.write('\n');
       String text = gson.toJson(tasks);
       out.write(text);
       out.close();
@@ -238,7 +233,6 @@ public class Experiment implements IExpe
     return retVal;
   }
 
-  @Override
   public String getStartDate() {
     String retVal = "";
     long experimentStartMillis = Long.MAX_VALUE;
@@ -259,7 +253,6 @@ public class Experiment implements IExpe
 
   private long staleTime = 1000 * 60 * 6;
 
-  @Override
   public boolean isStale() {
     // If the log lock file has been removed then the driver has stopped.
     // If the lock file is still present the driver may have been killed, so check the age of the state file.
@@ -291,7 +284,7 @@ public class Experiment implements IExpe
    * Sort active experiments first, then by start date (newest first) then by directory
    */
   @Override
-  public int compareTo(IExperiment that) {
+  public int compareTo(Experiment that) {
     // Booleans sort false before true so must reverse and compare that with this
     int retVal = new Boolean(that.isActive()).compareTo(new Boolean(this.isActive()));  // active first
     if (retVal == 0) {

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java?rev=1869129&r1=1869128&r2=1869129&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryManager.java Tue Oct 29 20:49:19 2019
@@ -56,13 +56,13 @@ public class ExperimentsRegistryManager
 
   private Set<String> seenDirs = new HashSet<String>();   // Set of directories seen when booting or during an OR publication
 
-  private Map<String, IExperiment> experimentsByDir = new ConcurrentHashMap<String,IExperiment>();
+  private Map<String, Experiment> experimentsByDir = new ConcurrentHashMap<String,Experiment>();
 
   public static ExperimentsRegistryManager getInstance() {
     return instance;
   }
 
-  public IExperiment getExperiment(String directory) {
+  public Experiment getExperiment(String directory) {
     return experimentsByDir.get(directory);
   }
   
@@ -161,7 +161,7 @@ public class ExperimentsRegistryManager
     
     // Check if state file is newer than any existing one
     // If newer refresh it, otherwise just update the JED duccId in case it is a newer AP
-    IExperiment existingExperiment = experimentsByDir.get(directory);
+    Experiment existingExperiment = experimentsByDir.get(directory);
     if (existingExperiment != null) {
       // Synchronize the check for a newer state file with the rewrite of the file in Experiment.writeStateFile
       // to ensure that the rewritten file does does not look newer that the in-memory Experiment
@@ -193,8 +193,8 @@ public class ExperimentsRegistryManager
     Type typeOfTaskList = new TypeToken<ArrayList<Task>>(){}.getType();
     try {
       ArrayList<Task> taskArray = gson.fromJson(sr, typeOfTaskList);
-      IExperiment experiment = new Experiment(user, directory, fileTime, taskArray, work);
-      IExperiment oldExperiment = experimentsByDir.put(directory, experiment);
+      Experiment experiment = new Experiment(user, directory, fileTime, taskArray, work);
+      Experiment oldExperiment = experimentsByDir.put(directory, experiment);
       if (oldExperiment != null) {
         experiment.updateJedId(oldExperiment.getJedDuccId());    // Ensure the new instance has the latest DuccId
       }
@@ -204,9 +204,9 @@ public class ExperimentsRegistryManager
   }
   
   // Create map ordered by experiment: active, newest start date, directory
-  public TreeMap<IExperiment, String> getMapByStatus() {
-    TreeMap<IExperiment, String> mapInverse = new TreeMap<IExperiment, String>();
-    for (Entry<String, IExperiment> entry : experimentsByDir.entrySet()) {
+  public TreeMap<Experiment, String> getMapByStatus() {
+    TreeMap<Experiment, String> mapInverse = new TreeMap<Experiment, String>();
+    for (Entry<String, Experiment> entry : experimentsByDir.entrySet()) {
       mapInverse.put(entry.getValue(), entry.getKey());
     }
     return mapInverse;
@@ -215,8 +215,8 @@ public class ExperimentsRegistryManager
   // Create map from file last update time to directory ordered oldest first
   private TreeMap<Long, String> getMapByDate() {
     TreeMap<Long, String> mapByDate = new TreeMap<Long, String>();
-    for (Entry<String, IExperiment> entry : experimentsByDir.entrySet()) {
-      IExperiment experiment = entry.getValue();
+    for (Entry<String, Experiment> entry : experimentsByDir.entrySet()) {
+      Experiment experiment = entry.getValue();
       mapByDate.put(experiment.getFileDate(), entry.getKey());
     }
     return mapByDate;
@@ -234,7 +234,7 @@ public class ExperimentsRegistryManager
     WsLog.info(cName, mName, "Pruning " + excess + " old experiments");
     TreeMap<Long, String> mapByDate = getMapByDate();
     for (String directory : mapByDate.values()) {
-      IExperiment experiment = experimentsByDir.get(directory);
+      Experiment experiment = experimentsByDir.get(directory);
       if (!experiment.isActive()) {
         WsLog.info(cName, mName, "Pruned " + directory + " filetime " + experiment.getFileDate());
         experimentsByDir.remove(directory);

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java?rev=1869129&r1=1869128&r2=1869129&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/xd/ExperimentsRegistryUtilities.java Tue Oct 29 20:49:19 2019
@@ -83,7 +83,7 @@ public class ExperimentsRegistryUtilitie
     }
   }
 
-  public static boolean launchJed(IExperiment experiment) {
+  public static boolean launchJed(Experiment experiment) {
     String mName = "launchJed";
     
     IHistoryPersistenceManager hpm = HistoryFactory.getInstance(ExperimentsRegistryUtilities.class.getName());
@@ -128,7 +128,6 @@ public class ExperimentsRegistryUtilitie
     for (String arg : cmd.getArguments()) {
       args.append(arg).append(' ');
     }
-    args.append("--DRIVER.rerunTasks=~");   // Override any initial rerun list 
     StringBuilder envs = new StringBuilder();
     if (cmd instanceof ACommandLine) {
       for (Entry<String, String> ent : ((ACommandLine) cmd).getEnvironment().entrySet()) {
@@ -162,18 +161,15 @@ public class ExperimentsRegistryUtilitie
     String sysout = DuccAsUser.execute(experiment.getUser(), null, submitCmd);
     WsLog.info(cName, mName, sysout);
     
-    // If launch failed clear the Experiment's "Restarting" state 
     // Should report: "Managed Reservation ### submitted."
     // If successful save the ID of JED
-    // If fails reset the status
+    // If it fails return false and the status will be reset by the caller
     boolean launched = sysout.startsWith("Managed Reservation");
     if (launched) {
       String[] toks = sysout.split("\\s+");
       if (toks.length >= 3) {
-        experiment.updateStatus(toks[2]);
+        experiment.setRerunJedId(toks[2]);
       }
-    } else {
-      experiment.updateStatus(null);
     }
     
     return launched;