[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);
   }

Reply via email to