diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java index 0a8a45d05e2..285bcedbbe8 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java @@ -160,6 +160,11 @@ public void setName(String name) { public void setInterpreterFactory(InterpreterFactory factory) { this.factory = factory; + synchronized (paragraphs) { + for (Paragraph p : paragraphs) { + p.setInterpreterFactory(factory); + } + } } public JobListenerFactory getJobListenerFactory() { @@ -447,7 +452,6 @@ public void runAll() { authenticationInfo.setUser(cronExecutingUser); p.setAuthenticationInfo(authenticationInfo); - p.setInterpreterFactory(factory); p.setListener(jobListenerFactory.getParagraphJobListener(this)); Interpreter intp = factory.getInterpreter(getId(), p.getRequiredReplName()); @@ -463,7 +467,6 @@ public void runAll() { */ public void run(String paragraphId) { Paragraph p = getParagraph(paragraphId); - p.setInterpreterFactory(factory); p.setListener(jobListenerFactory.getParagraphJobListener(this)); String requiredReplName = p.getRequiredReplName(); Interpreter intp = factory.getInterpreter(getId(), requiredReplName); @@ -501,7 +504,6 @@ public boolean isTerminated() { public List completion(String paragraphId, String buffer, int cursor) { Paragraph p = getParagraph(paragraphId); - p.setInterpreterFactory(factory); p.setListener(jobListenerFactory.getParagraphJobListener(this)); List completion = p.completion(buffer, cursor); diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java index 479f5675f0d..e67344fab23 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java @@ -127,6 +127,22 @@ public void testSelectingReplImplementation() throws IOException { assertEquals("repl2: hello world", p2.getResult().message()); } + @Test + public void testReloadAndSetInterpreter() throws IOException { + // given a notebook + File srcDir = new File("src/test/resources/2A94M5J1Z"); + File destDir = new File(notebookDir.getAbsolutePath() + "/2A94M5J1Z"); + FileUtils.copyDirectory(srcDir, destDir); + + // when load + notebook.reloadAllNotes(null); + assertEquals(1, notebook.getAllNotes().size()); + + // then interpreter factory should be injected into all the paragraphs + Note note = notebook.getAllNotes().get(0); + assertNull(note.getParagraphs().get(0).getRepl(null)); + } + @Test public void testReloadAllNotes() throws IOException { File srcDir = new File("src/test/resources/2A94M5J1Z");