You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by vi...@apache.org on 2012/01/13 17:09:11 UTC

svn commit: r1231147 - /incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java

Author: vines
Date: Fri Jan 13 16:09:11 2012
New Revision: 1231147

URL: http://svn.apache.org/viewvc?rev=1231147&view=rev
Log:
Fixes-273 - hardcoded 5 minute warning with notification of resumption

Modified:
    incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java

Modified: incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java
URL: http://svn.apache.org/viewvc/incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java?rev=1231147&r1=1231146&r2=1231147&view=diff
==============================================================================
--- incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java (original)
+++ incubator/accumulo/branches/1.4/src/server/src/main/java/org/apache/accumulo/server/test/randomwalk/Module.java Fri Jan 13 16:09:11 2012
@@ -24,6 +24,7 @@ import java.util.Properties;
 import java.util.Random;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
@@ -189,7 +190,16 @@ public class Module extends Node {
     }
     
     Node initNode = getNode(initNodeId);
+    
+    boolean test = false;
+    if (initNode instanceof Test) {
+      startTimer(initNode.toString());
+      test = true;
+    }
     initNode.visit(state, getProps(initNodeId));
+    if (test)
+      stopTimer(initNode.toString());
+
     state.visitedNode();
     // update aliases
     Set<String> aliases;
@@ -231,7 +241,14 @@ public class Module extends Node {
         nextNode = ((Alias) nextNode).get();
       }
       try {
+        test = false;
+        if (nextNode instanceof Test) {
+          startTimer(nextNode.toString());
+          test = true;
+        }
         nextNode.visit(state, getProps(nextNodeId));
+        if (test)
+          stopTimer(nextNode.toString());
       } catch (Exception e) {
         throw new Exception("Error running node " + nextNodeId, e);
       }
@@ -252,6 +269,54 @@ public class Module extends Node {
     }
   }
   
+  Thread timer = null;
+  final int time = 5 * 1000 * 60;
+  AtomicBoolean runningLong = new AtomicBoolean(false);
+  long systemTime;
+
+  /**
+   * 
+   */
+  private void startTimer(final String nodeName) {
+    runningLong.set(false);
+    timer = new Thread(new Runnable() {
+
+      @Override
+      public void run() {
+        try {
+          log.debug("Starting timer for " + nodeName);
+          systemTime = System.currentTimeMillis();
+          synchronized (timer) {
+            timer.wait(time);
+          }
+        } catch (InterruptedException ie) {
+          return;
+        }
+        log.warn("Node " + nodeName + " has been running for " + time / 1000.0 + " seconds. You may want to look into it.");
+        runningLong.set(true);
+      }
+      
+    });
+    timer.start();
+  }
+  
+  /**
+   * 
+   */
+  private void stopTimer(String nodeName) {
+    synchronized (timer) {
+      timer.interrupt();
+      try {
+        timer.join();
+      } catch (InterruptedException e) {
+        // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+    if (runningLong.get())
+      log.warn("Node " + nodeName + ", which was running long, has now completed after " + (System.currentTimeMillis() - systemTime) / 1000.0 + " seconds");
+  }
+
   @Override
   public String toString() {
     return xmlFile.toString();