You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2015/12/01 23:17:40 UTC

incubator-zeppelin git commit: [ZEPPELIN-474] Provide InterpreterContext as ThreadLocal value

Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master a54a3ac18 -> 48ee2b14d


[ZEPPELIN-474] Provide InterpreterContext as ThreadLocal value

This PR implements ZEPPELIN-474.

Let 3rd party library access InterpreterContext.

Author: Lee moon soo <mo...@apache.org>

Closes #492 from Leemoonsoo/ZEPPELIN-474 and squashes the following commits:

14c707b [Lee moon soo] Add very basic test
4297f3f [Lee moon soo] Provide InterpreterContext as ThreadLocal value


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

Branch: refs/heads/master
Commit: 48ee2b14d4d65f70b40334fd16d61992d83bbf8d
Parents: a54a3ac
Author: Lee moon soo <mo...@apache.org>
Authored: Mon Nov 30 22:50:38 2015 +0900
Committer: Lee moon soo <mo...@apache.org>
Committed: Wed Dec 2 07:18:24 2015 +0900

----------------------------------------------------------------------
 .../interpreter/InterpreterContext.java         | 17 ++++++++-
 .../remote/RemoteInterpreterServer.java         |  9 +++--
 .../interpreter/InterpreterContextTest.java     | 37 ++++++++++++++++++++
 .../org/apache/zeppelin/notebook/Paragraph.java | 14 +++++---
 4 files changed, 70 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/48ee2b14/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterContext.java
----------------------------------------------------------------------
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterContext.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterContext.java
index 7c2f6c0..0417f91 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterContext.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterContext.java
@@ -27,6 +27,21 @@ import org.apache.zeppelin.display.GUI;
  * Interpreter context
  */
 public class InterpreterContext {
+  private static final ThreadLocal<InterpreterContext> threadIC =
+      new ThreadLocal<InterpreterContext>();
+
+  public static InterpreterContext get() {
+    return threadIC.get();
+  }
+
+  public static void set(InterpreterContext ic) {
+    threadIC.set(ic);
+  }
+
+  public static void remove() {
+    threadIC.remove();
+  }
+
   private final String noteId;
   private final String paragraphTitle;
   private final String paragraphId;
@@ -55,7 +70,7 @@ public class InterpreterContext {
     this.runners = runners;
   }
 
-  
+
   public String getNoteId() {
     return noteId;
   }

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/48ee2b14/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
----------------------------------------------------------------------
diff --git a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
index d6768c9..725ee63 100644
--- a/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
+++ b/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterServer.java
@@ -294,8 +294,13 @@ public class RemoteInterpreterServer
 
     @Override
     protected Object jobRun() throws Throwable {
-      InterpreterResult result = interpreter.interpret(script, context);
-      return result;
+      try {
+        InterpreterContext.set(context);
+        InterpreterResult result = interpreter.interpret(script, context);
+        return result;
+      } finally {
+        InterpreterContext.remove();
+      }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/48ee2b14/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterContextTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterContextTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterContextTest.java
new file mode 100644
index 0000000..080bdaa
--- /dev/null
+++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterContextTest.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.zeppelin.interpreter;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class InterpreterContextTest {
+
+  @Test
+  public void testThreadLocal() {
+    assertNull(InterpreterContext.get());
+
+    InterpreterContext.set(new InterpreterContext(null, null, null, null, null, null, null, null));
+    assertNotNull(InterpreterContext.get());
+
+    InterpreterContext.remove();
+    assertNull(InterpreterContext.get());
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/48ee2b14/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
index 28c49c6..348c12e 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Paragraph.java
@@ -206,12 +206,18 @@ public class Paragraph extends Job implements Serializable, Cloneable {
       script = Input.getSimpleQuery(settings.getParams(), scriptBody);
     }
     logger().debug("RUN : " + script);
-    InterpreterResult ret = repl.interpret(script, getInterpreterContext());
+    try {
+      InterpreterContext context = getInterpreterContext();
+      InterpreterContext.set(context);
+      InterpreterResult ret = repl.interpret(script, context);
 
-    if (Code.KEEP_PREVIOUS_RESULT == ret.code()) {
-      return getReturn();
+      if (Code.KEEP_PREVIOUS_RESULT == ret.code()) {
+        return getReturn();
+      }
+      return ret;
+    } finally {
+      InterpreterContext.remove();
     }
-    return ret;
   }
 
   @Override