[ZEPPELIN-2179] "clear output" paragraph doesn't work in personalized mode (branch-0.7)
### What is this PR for? `clear output` (`cmd` + `opt` + `L`) doesn't work in the personalized mode. - CI failure might be related with https://github.com/apache/zeppelin/pull/2103 ### What type of PR is it? [Bug Fix] ### Todos NONE ### What is the Jira issue? [ZEPPELIN-2179](https://issues.apache.org/jira/browse/ZEPPELIN-2179) ### How should this be tested? 1. Execute a paragraph 2. Click `clear output` button (`CMD` + `OPT` + `L) ### Screenshots (if appropriate) NONE ### Questions: * Does the licenses files need update? - NO * Is there breaking changes for older versions? - NO * Does this needs documentation? - NO Author: 1ambda <1am...@gmail.com> Closes #2116 from 1ambda/ZEPPELIN-2179/clear-output-doesnt-work-in-person-mode and squashes the following commits: e2593f6 [1ambda] fix Remove unused param 65d1147 [1ambda] fix: Remove unused parameter 0386c5c [1ambda] fix: Clear personalized paragraph output Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/75cf72e9 Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/75cf72e9 Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/75cf72e9 Branch: refs/heads/branch-0.7 Commit: 75cf72e9b374819fee550a33aa41258bd25b03e4 Parents: 56fa8b5 Author: 1ambda <1am...@gmail.com> Authored: Thu Mar 16 06:17:15 2017 +0900 Committer: Jongyoul Lee <jongy...@apache.org> Committed: Fri Mar 17 00:07:28 2017 +0900 ---------------------------------------------------------------------- .../apache/zeppelin/socket/NotebookServer.java | 17 +++++++++-------- .../java/org/apache/zeppelin/notebook/Note.java | 18 ++++++++++++++---- .../apache/zeppelin/notebook/NotebookTest.java | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zeppelin/blob/75cf72e9/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java ---------------------------------------------------------------------- diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java index 6791b63..3034d13 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java @@ -621,14 +621,13 @@ public class NotebookServer extends WebSocketServlet public void broadcastParagraph(Note note, Paragraph p) { if (note.isPersonalizedMode()) { - broadcastParagraphs(p.getUserParagraphMap(), p); + broadcastParagraphs(p.getUserParagraphMap()); } else { broadcast(note.getId(), new Message(OP.PARAGRAPH).put("paragraph", p)); } } - public void broadcastParagraphs(Map<String, Paragraph> userParagraphMap, - Paragraph defaultParagraph) { + public void broadcastParagraphs(Map<String, Paragraph> userParagraphMap) { if (null != userParagraphMap) { for (String user : userParagraphMap.keySet()) { multicastToUser(user, @@ -1143,7 +1142,7 @@ public class NotebookServer extends WebSocketServlet if (note.isPersonalizedMode()) { Map<String, Paragraph> userParagraphMap = note.getParagraph(paragraphId).getUserParagraphMap(); - broadcastParagraphs(userParagraphMap, p); + broadcastParagraphs(userParagraphMap); } else { broadcastParagraph(note, p); } @@ -1239,9 +1238,11 @@ public class NotebookServer extends WebSocketServlet notebookAuthorization.getWriters(noteId)); return; } - note.clearParagraphOutput(paragraphId); - Paragraph paragraph = note.getParagraph(paragraphId); - broadcastParagraph(note, paragraph); + + String user = (note.isPersonalizedMode()) ? + new AuthenticationInfo(fromMessage.principal).getUser() : null; + Paragraph p = note.clearParagraphOutput(paragraphId, user); + broadcastParagraph(note, p); } private void completion(NotebookSocket conn, HashSet<String> userAndRoles, Notebook notebook, @@ -1806,7 +1807,7 @@ public class NotebookServer extends WebSocketServlet public void onOutputClear(String noteId, String paragraphId) { Notebook notebook = notebook(); final Note note = notebook.getNote(noteId); - note.clearParagraphOutput(paragraphId); + note.clearParagraphOutput(paragraphId, null); Paragraph paragraph = note.getParagraph(paragraphId); broadcastParagraph(note, paragraph); } http://git-wip-us.apache.org/repos/asf/zeppelin/blob/75cf72e9/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java ---------------------------------------------------------------------- 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 f341e16..e019ee5 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 @@ -395,15 +395,25 @@ public class Note implements Serializable, ParagraphJobListener { * Clear paragraph output by id. * * @param paragraphId ID of paragraph + * @param user not null if personalized mode is enabled * @return Paragraph */ - public Paragraph clearParagraphOutput(String paragraphId) { + public Paragraph clearParagraphOutput(String paragraphId, String user) { synchronized (paragraphs) { for (Paragraph p : paragraphs) { - if (p.getId().equals(paragraphId)) { - p.setReturn(null, null); - return p; + if (!p.getId().equals(paragraphId)) { + continue; } + + /** `broadcastParagraph` requires original paragraph */ + Paragraph originParagraph = p; + + if (user != null) { + p = p.getUserParagraphMap().get(user); + } + + p.setReturn(null, null); + return originParagraph; } } return null; http://git-wip-us.apache.org/repos/asf/zeppelin/blob/75cf72e9/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java ---------------------------------------------------------------------- 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 48a4e2e..5b394ee 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 @@ -284,7 +284,7 @@ public class NotebookTest implements JobListenerFactory{ assertEquals("repl1: hello world", p1.getResult().message().get(0).getData()); // clear paragraph output/result - note.clearParagraphOutput(p1.getId()); + note.clearParagraphOutput(p1.getId(), null); assertNull(p1.getResult()); notebook.removeNote(note.getId(), anonymous); }