Repository: zeppelin
Updated Branches:
  refs/heads/branch-0.8 ec919123a -> 574de381a


ZEPPELIN-3279. [FlakyTest] 
NotebookTest.testPerSessionInterpreterCloseOnUnbindInterpreterSetting

### What is this PR for?
The root cause of this flaky test is that hashCode doesn't represent an unique 
id of object. This PR just use IdGenerator for unique id and also combine 
process id.
This PR also fix the flaky test caused by matplotlib.

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

### Todos
* [ ] - Task

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

### How should this be tested?
* CI Pass

### 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 #2837 from zjffdu/ZEPPELIN-3279 and squashes the following commits:

063d4ee [Jeff Zhang] ZEPPELIN-3279. [FlakyTest] 
NotebookTest.testPerSessionInterpreterCloseOnUnbindInterpreterSetting

(cherry picked from commit a6cd0e24cc795985e200ebebf04de981e13de97c)
Signed-off-by: Jeff Zhang <zjf...@apache.org>


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

Branch: refs/heads/branch-0.8
Commit: 574de381a89d76ea0c5e80dc9ff3ca3debe7a01d
Parents: ec91912
Author: Jeff Zhang <zjf...@apache.org>
Authored: Mon Mar 5 14:38:00 2018 +0800
Committer: Jeff Zhang <zjf...@apache.org>
Committed: Tue Mar 6 12:49:03 2018 +0800

----------------------------------------------------------------------
 testing/install_external_dependencies.sh                 |  2 +-
 .../zeppelin/interpreter/mock/MockInterpreter1.java      | 11 ++++++++++-
 .../java/org/apache/zeppelin/notebook/NotebookTest.java  |  5 +++++
 3 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/574de381/testing/install_external_dependencies.sh
----------------------------------------------------------------------
diff --git a/testing/install_external_dependencies.sh 
b/testing/install_external_dependencies.sh
index d6c0736..a120d61 100755
--- a/testing/install_external_dependencies.sh
+++ b/testing/install_external_dependencies.sh
@@ -44,6 +44,6 @@ if [[ -n "$PYTHON" ]] ; then
   conda update -q conda
   conda info -a
   conda config --add channels conda-forge
-  conda install -q matplotlib pandasql ipython=5.4.1 jupyter_client ipykernel 
matplotlib bokeh=0.12.10
+  conda install -q matplotlib=2.1.2 pandasql ipython=5.4.1 jupyter_client 
ipykernel matplotlib bokeh=0.12.10
   pip install -q grpcio ggplot bkzep==0.4.0
 fi

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/574de381/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java
 
b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java
index a533c12..500c4f7 100644
--- 
a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java
+++ 
b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java
@@ -24,18 +24,27 @@ import 
org.apache.zeppelin.interpreter.thrift.InterpreterCompletion;
 import org.apache.zeppelin.scheduler.Scheduler;
 import org.apache.zeppelin.scheduler.SchedulerFactory;
 
+import java.lang.management.ManagementFactory;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class MockInterpreter1 extends Interpreter {
 
+       private static AtomicInteger IdGenerator = new AtomicInteger();
+
+       private int object_id;
+       private String pid;
        Map<String, Object> vars = new HashMap<>();
 
        public MockInterpreter1(Properties property) {
                super(property);
+               this.object_id = IdGenerator.getAndIncrement();
+               this.pid = 
ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
        }
+
        boolean open;
 
 
@@ -60,7 +69,7 @@ public class MockInterpreter1 extends Interpreter {
 
                if ("getId".equals(st)) {
                        // get unique id of this interpreter instance
-                       result = new 
InterpreterResult(InterpreterResult.Code.SUCCESS, "" + this.hashCode());
+                       result = new 
InterpreterResult(InterpreterResult.Code.SUCCESS, "" + this.object_id + "-" + 
this.pid);
                } else if (st.startsWith("sleep")) {
                        try {
                                Thread.sleep(Integer.parseInt(st.split(" 
")[1]));

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/574de381/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 122395c..ee04291 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
@@ -44,6 +44,10 @@ import org.apache.zeppelin.user.Credentials;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Request;
+import org.junit.runner.Result;
+import org.mockito.internal.runners.JUnit44RunnerImpl;
 import org.quartz.SchedulerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1450,4 +1454,5 @@ public class NotebookTest extends AbstractInterpreterTest 
implements JobListener
   private interface StatusChangedListener {
     void onStatusChanged(Job job, Status before, Status after);
   }
+
 }

Reply via email to