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()); + } }
