Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master f4bc662d3 -> a0428f06d


ZEPPELIN-59 fix interpreter restart

>From some point, interpreter restart button stops interpreter but does not 
>bringing up again.
This PR fixes the problem and adds test for it. 
https://issues.apache.org/jira/browse/ZEPPELIN-59

Ready to merge.

Author: Lee moon soo <[email protected]>

Closes #52 from Leemoonsoo/ZEPPELIN-59 and squashes the following commits:

9f6f191 [Lee moon soo] ZEPPELIN-59 fix interpreter restart


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

Branch: refs/heads/master
Commit: a0428f06d5f947b78995ab606d43c002406c1d64
Parents: f4bc662
Author: Lee moon soo <[email protected]>
Authored: Mon Apr 27 13:28:58 2015 +0900
Committer: Lee moon soo <[email protected]>
Committed: Tue Apr 28 14:56:23 2015 +0900

----------------------------------------------------------------------
 .../interpreter/remote/RemoteInterpreter.java   | 19 +++++-----
 .../zeppelin/scheduler/RemoteScheduler.java     |  3 ++
 .../zeppelin/rest/ZeppelinRestApiTest.java      | 37 ++++++++++++++++++++
 3 files changed, 50 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/a0428f06/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 3e6128f..fbadce9 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
@@ -79,7 +79,6 @@ public class RemoteInterpreter extends Interpreter {
       String interpreterPath,
       Map<String, String> env) {
     super(property);
-
     this.className = className;
     this.interpreterRunner = interpreterRunner;
     this.interpreterPath = interpreterPath;
@@ -325,16 +324,18 @@ public class RemoteInterpreter extends Interpreter {
     super.setInterpreterGroup(interpreterGroup);
 
     synchronized (interpreterGroupReference) {
-      if (!interpreterGroupReference
+      if (interpreterGroupReference
           .containsKey(getInterpreterGroupKey(interpreterGroup))) {
-        interpreterGroupReference.put(getInterpreterGroupKey(interpreterGroup),
-            new RemoteInterpreterProcess(interpreterRunner,
-                interpreterPath, env, interpreterContextRunnerPool));
-
-        logger.info("setInterpreterGroup = "
-            + getInterpreterGroupKey(interpreterGroup) + " class=" + className
-            + ", path=" + interpreterPath);
+        
interpreterGroupReference.remove(getInterpreterGroupKey(interpreterGroup));
       }
+
+      interpreterGroupReference.put(getInterpreterGroupKey(interpreterGroup),
+          new RemoteInterpreterProcess(interpreterRunner,
+              interpreterPath, env, interpreterContextRunnerPool));
+
+      logger.info("setInterpreterGroup = "
+          + getInterpreterGroupKey(interpreterGroup) + " class=" + className
+          + ", path=" + interpreterPath);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/a0428f06/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/RemoteScheduler.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/RemoteScheduler.java
 
b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/RemoteScheduler.java
index 15e4a3c..1bf91d6 100644
--- 
a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/RemoteScheduler.java
+++ 
b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/scheduler/RemoteScheduler.java
@@ -118,6 +118,9 @@ public class RemoteScheduler implements Scheduler {
 
   @Override
   public void submit(Job job) {
+    if (terminate) {
+      throw new RuntimeException("Scheduler already terminated");
+    }
     job.setStatus(Status.PENDING);
 
     synchronized (queue) {

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/a0428f06/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
 
b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
index 0d4e158..1a76ca5 100644
--- 
a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
+++ 
b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
@@ -27,7 +27,10 @@ import java.util.Map;
 
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.zeppelin.conf.ZeppelinConfiguration;
+import org.apache.zeppelin.interpreter.InterpreterSetting;
 import org.apache.zeppelin.notebook.Note;
+import org.apache.zeppelin.notebook.Paragraph;
+import org.apache.zeppelin.scheduler.Job.Status;
 import org.apache.zeppelin.server.ZeppelinServer;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -110,4 +113,38 @@ public class ZeppelinRestApiTest extends 
AbstractTestRestApi {
 
     get.releaseConnection();
   }
+
+  @Test
+  public void testInterpreterRestart() throws IOException, 
InterruptedException {
+    // create new note
+    Note note = ZeppelinServer.notebook.createNote();
+    note.addParagraph();
+    Paragraph p = note.getLastParagraph();
+
+    // run markdown paragraph
+    p.setText("%md markdown");
+    note.run(p.getId());
+    while (p.getStatus() != Status.FINISHED) {
+      Thread.sleep(100);
+    }
+    assertEquals("<p>markdown</p>\n", p.getResult().message());
+
+    // restart interpreter
+    for (InterpreterSetting setting : 
note.getNoteReplLoader().getInterpreterSettings()) {
+      if (setting.getName().equals("md")) {
+        // restart
+        ZeppelinServer.notebook.getInterpreterFactory().restart(setting.id());
+        break;
+      }
+    }
+
+    // run markdown paragraph, again
+    p = note.addParagraph();
+    p.setText("%md markdown restarted");
+    note.run(p.getId());
+    while (p.getStatus() != Status.FINISHED) {
+      Thread.sleep(100);
+    }
+    assertEquals("<p>markdown restarted</p>\n", p.getResult().message());
+  }
 }

Reply via email to