You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2015/05/24 03:21:39 UTC

incubator-zeppelin git commit: Fix 'Scheduler already terminated error' exception after restart interpreter

Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master 928d09987 -> 4ca8466ab


Fix 'Scheduler already terminated error' exception after restart interpreter

In certain condition, interpreter restart cause 'Scheduler already terminated' exception.
This PR fixes the bug.

Related issue https://issues.apache.org/jira/browse/ZEPPELIN-85

Author: Lee moon soo <mo...@apache.org>

Closes #77 from Leemoonsoo/restart_bug and squashes the following commits:

0808879 [Lee moon soo] ZEPPELIN-85 reset interpretergroup when process is not started yet


Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/4ca8466a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/4ca8466a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/4ca8466a

Branch: refs/heads/master
Commit: 4ca8466ab3d2c3bacee957ecf62b4e54f86820d7
Parents: 928d099
Author: Lee moon soo <mo...@apache.org>
Authored: Thu May 21 17:10:49 2015 +0900
Committer: Lee moon soo <mo...@apache.org>
Committed: Sun May 24 10:21:32 2015 +0900

----------------------------------------------------------------------
 .../interpreter/remote/RemoteInterpreter.java   |  4 +-
 .../remote/RemoteInterpreterTest.java           | 52 +++++++++++++++++++-
 2 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/4ca8466a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
----------------------------------------------------------------------
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
index 4f1e262..1637e9c 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreter.java
@@ -319,6 +319,7 @@ public class RemoteInterpreter extends Interpreter {
         maxConcurrency);
   }
 
+
   @Override
   public void setInterpreterGroup(InterpreterGroup interpreterGroup) {
     super.setInterpreterGroup(interpreterGroup);
@@ -328,7 +329,8 @@ public class RemoteInterpreter extends Interpreter {
           .get(getInterpreterGroupKey(interpreterGroup));
 
       // when interpreter process is not created or terminated
-      if (intpProcess == null || (!intpProcess.isRunning() && intpProcess.getPort() > 0)) {
+      if (intpProcess == null || (!intpProcess.isRunning() && intpProcess.getPort() > 0)
+          || (!intpProcess.isRunning() && intpProcess.getPort() == -1)) {
         interpreterGroupReference.put(getInterpreterGroupKey(interpreterGroup),
             new RemoteInterpreterProcess(interpreterRunner,
                 interpreterPath, env, interpreterContextRunnerPool));

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/4ca8466a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
index 0661bfa..4d5636d 100644
--- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
+++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterTest.java
@@ -19,6 +19,7 @@ package org.apache.zeppelin.interpreter.remote;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -459,7 +460,7 @@ public class RemoteInterpreterTest {
   }
 
   @Test
-  public void testProcessCreation() {
+  public void testInterpreterGroupResetBeforeProcessStarts() {
     Properties p = new Properties();
 
     RemoteInterpreter intpA = new RemoteInterpreter(
@@ -476,6 +477,55 @@ public class RemoteInterpreterTest {
     intpA.setInterpreterGroup(new InterpreterGroup(intpA.getInterpreterGroup().getId()));
     RemoteInterpreterProcess processB = intpA.getInterpreterProcess();
 
+    assertNotSame(processA.hashCode(), processB.hashCode());
+  }
+
+  @Test
+  public void testInterpreterGroupResetAfterProcessFinished() {
+    Properties p = new Properties();
+
+    RemoteInterpreter intpA = new RemoteInterpreter(
+        p,
+        MockInterpreterA.class.getName(),
+        new File("../bin/interpreter.sh").getAbsolutePath(),
+        "fake",
+        env
+        );
+
+    intpA.setInterpreterGroup(intpGroup);
+    RemoteInterpreterProcess processA = intpA.getInterpreterProcess();
+    intpA.open();
+
+    processA.dereference();    // intpA.close();
+
+    intpA.setInterpreterGroup(new InterpreterGroup(intpA.getInterpreterGroup().getId()));
+    RemoteInterpreterProcess processB = intpA.getInterpreterProcess();
+
+    assertNotSame(processA.hashCode(), processB.hashCode());
+  }
+
+  @Test
+  public void testInterpreterGroupResetDuringProcessRunning() {
+    Properties p = new Properties();
+
+    RemoteInterpreter intpA = new RemoteInterpreter(
+        p,
+        MockInterpreterA.class.getName(),
+        new File("../bin/interpreter.sh").getAbsolutePath(),
+        "fake",
+        env
+        );
+
+    intpA.setInterpreterGroup(intpGroup);
+    RemoteInterpreterProcess processA = intpA.getInterpreterProcess();
+    intpA.open();
+
+    intpA.setInterpreterGroup(new InterpreterGroup(intpA.getInterpreterGroup().getId()));
+    RemoteInterpreterProcess processB = intpA.getInterpreterProcess();
+
     assertEquals(processA.hashCode(), processB.hashCode());
+
+    processA.dereference();     // intpA.close();
+
   }
 }