Repository: zeppelin
Updated Branches:
  refs/heads/master 791619d61 -> 152538b7e


ZEPPELIN-2990. Matplotlib sometimes fails in IPythonInterpreter

### What is this PR for?
Trivial fix for matplotlib fail in `IPythonInterpreter`. Besides that, I also 
make some minor changes on zeppelin code to improve logging.

### What type of PR is it?
[Bug Fix]

### Todos
* [ ] - Task

### What is the Jira issue?
* https://issues.apache.org/jira/browse/ZEPPELIN-2990

### How should this be tested?
UT is added.

### Screenshots (if appropriate)

### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No

Author: Jeff Zhang <zjf...@apache.org>

Closes #2622 from zjffdu/ZEPPELIN-2990 and squashes the following commits:

55e6f88 [Jeff Zhang] fix unit test
1e57afe [Jeff Zhang] ZEPPELIN-2990. Matplotlib sometimes fails in 
IPythonInterpreter


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

Branch: refs/heads/master
Commit: 152538b7efc22e2c4c449f9fec4e524d92f8653c
Parents: 791619d
Author: Jeff Zhang <zjf...@apache.org>
Authored: Mon Oct 16 11:28:23 2017 +0800
Committer: Jeff Zhang <zjf...@apache.org>
Committed: Mon Oct 16 13:14:39 2017 +0800

----------------------------------------------------------------------
 interpreter-parent/pom.xml                              |  8 ++++++++
 .../java/org/apache/zeppelin/python/IPythonClient.java  |  2 +-
 .../org/apache/zeppelin/python/IPythonInterpreter.java  |  1 +
 .../apache/zeppelin/python/IPythonInterpreterTest.java  | 12 ++++++++++++
 .../apache/zeppelin/spark/IPySparkInterpreterTest.java  |  4 ++--
 .../java/org/apache/zeppelin/socket/NotebookServer.java |  2 +-
 .../remote/RemoteInterpreterEventPoller.java            |  1 -
 7 files changed, 25 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/interpreter-parent/pom.xml
----------------------------------------------------------------------
diff --git a/interpreter-parent/pom.xml b/interpreter-parent/pom.xml
index 32bdc57..cb08965 100644
--- a/interpreter-parent/pom.xml
+++ b/interpreter-parent/pom.xml
@@ -79,6 +79,14 @@
           <artifactId>maven-dependency-plugin</artifactId>
           <executions>
             <execution>
+              <id>copy-dependencies</id>
+              <phase>none</phase>
+              <configuration>
+                <skip>true</skip>
+              </configuration>
+            </execution>
+
+            <execution>
               <id>copy-interpreter-dependencies</id>
               <phase>package</phase>
               <goals>

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/python/src/main/java/org/apache/zeppelin/python/IPythonClient.java
----------------------------------------------------------------------
diff --git a/python/src/main/java/org/apache/zeppelin/python/IPythonClient.java 
b/python/src/main/java/org/apache/zeppelin/python/IPythonClient.java
index 05fe4ba..ac10204 100644
--- a/python/src/main/java/org/apache/zeppelin/python/IPythonClient.java
+++ b/python/src/main/java/org/apache/zeppelin/python/IPythonClient.java
@@ -96,7 +96,7 @@ public class IPythonClient {
             LOGGER.debug("Interpreter Streaming Output: " + 
executeResponse.getOutput());
             if (isPreviousOutputImage) {
               // add '\n' when switch from image to text
-              interpreterOutput.write("\n".getBytes());
+              interpreterOutput.write("\n%text ".getBytes());
             }
             isPreviousOutputImage = false;
             interpreterOutput.write(executeResponse.getOutput().getBytes());

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
----------------------------------------------------------------------
diff --git 
a/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java 
b/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
index 1c2ced5..77e45b9 100644
--- a/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
+++ b/python/src/main/java/org/apache/zeppelin/python/IPythonInterpreter.java
@@ -286,6 +286,7 @@ public class IPythonInterpreter extends Interpreter 
implements ExecuteResultHand
     } else {
       envs.put("PYTHONPATH", additionalPythonPath);
     }
+    LOGGER.info("PYTHONPATH:" + envs.get("PYTHONPATH"));
     return envs;
   }
 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/python/src/test/java/org/apache/zeppelin/python/IPythonInterpreterTest.java
----------------------------------------------------------------------
diff --git 
a/python/src/test/java/org/apache/zeppelin/python/IPythonInterpreterTest.java 
b/python/src/test/java/org/apache/zeppelin/python/IPythonInterpreterTest.java
index 6a388c2..104fe19 100644
--- 
a/python/src/test/java/org/apache/zeppelin/python/IPythonInterpreterTest.java
+++ 
b/python/src/test/java/org/apache/zeppelin/python/IPythonInterpreterTest.java
@@ -284,12 +284,24 @@ public class IPythonInterpreterTest {
     // the order of IMAGE and TEXT is not determined
     // check there must be one IMAGE output
     boolean hasImageOutput = false;
+    boolean hasLineText = false;
+    boolean hasFigureText = false;
     for (InterpreterResultMessage msg : interpreterResultMessages) {
       if (msg.getType() == InterpreterResult.Type.IMG) {
         hasImageOutput = true;
       }
+      if (msg.getType() == InterpreterResult.Type.TEXT
+          && msg.getData().contains("matplotlib.lines.Line2D")) {
+        hasLineText = true;
+      }
+      if (msg.getType() == InterpreterResult.Type.TEXT
+          && msg.getData().contains("matplotlib.figure.Figure")) {
+        hasFigureText = true;
+      }
     }
     assertTrue("No Image Output", hasImageOutput);
+    assertTrue("No Line Text", hasLineText);
+    assertTrue("No Figure Text", hasFigureText);
 
     // bokeh
     // bokeh initialization

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/spark/src/test/java/org/apache/zeppelin/spark/IPySparkInterpreterTest.java
----------------------------------------------------------------------
diff --git 
a/spark/src/test/java/org/apache/zeppelin/spark/IPySparkInterpreterTest.java 
b/spark/src/test/java/org/apache/zeppelin/spark/IPySparkInterpreterTest.java
index faf0473..5f6d42c 100644
--- a/spark/src/test/java/org/apache/zeppelin/spark/IPySparkInterpreterTest.java
+++ b/spark/src/test/java/org/apache/zeppelin/spark/IPySparkInterpreterTest.java
@@ -146,7 +146,7 @@ public class IPySparkInterpreterTest {
         List<InterpreterResultMessage> interpreterResultMessages = null;
         try {
           interpreterResultMessages = 
context2.out.getInterpreterResultMessages();
-          
assertTrue(interpreterResultMessages.get(0).getData().contains("cancelled"));
+          
assertTrue(interpreterResultMessages.get(0).getData().contains("KeyboardInterrupt"));
         } catch (IOException e) {
           e.printStackTrace();
         }
@@ -180,7 +180,7 @@ public class IPySparkInterpreterTest {
         "ssc.start()\n" +
         "time.sleep(6)\n" +
         "ssc.stop(stopSparkContext=False, stopGraceFully=True)", context);
-    Thread.sleep(100);
+    Thread.sleep(1000);
     assertEquals(InterpreterResult.Code.SUCCESS, result.code());
     interpreterResultMessages = context.out.getInterpreterResultMessages();
     assertEquals(1, interpreterResultMessages.size());

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/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 1e7b74f..8c13e21 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
@@ -357,7 +357,7 @@ public class NotebookServer extends WebSocketServlet
           break;
       }
     } catch (Exception e) {
-      LOG.error("Can't handle message", e);
+      LOG.error("Can't handle message: " + msg, e);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/152538b7/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPoller.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPoller.java
 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPoller.java
index 35b6b6c..abda81e 100644
--- 
a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPoller.java
+++ 
b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPoller.java
@@ -246,7 +246,6 @@ public class RemoteInterpreterEventPoller extends Thread {
             listener.onParaInfosReceived(noteId, paraId, settingId, paraInfos);
           }
         }
-        logger.debug("Event from remote process {}", event.getType());
       } catch (Exception e) {
         logger.error("Can't handle event " + event, e);
       }

Reply via email to