You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by co...@apache.org on 2015/11/24 05:39:56 UTC
incubator-zeppelin git commit: ZEPPELIN-387 Allow enable/disable of
specific paragraphs
Repository: incubator-zeppelin
Updated Branches:
refs/heads/master 53812cfcc -> 6cfb32e5f
ZEPPELIN-387 Allow enable/disable of specific paragraphs
- When "run all" is called the disabled paragraphs are not executed.
- There is no "run" button for a disabled paragraph.
Disabled paragraph menu item
<img width="287" alt="screen shot 2015-11-09 at 10 30 42 pm" src="https://cloud.githubusercontent.com/assets/2031306/11040681/87673328-8733-11e5-8507-f366a222ecf1.png">
---
Enabled paragraph menu item
<img width="266" alt="screen shot 2015-11-09 at 10 30 26 pm" src="https://cloud.githubusercontent.com/assets/2031306/11040702/a39ae012-8733-11e5-8c7d-33fedc6ea6a7.png">
Author: Renjith Kamath <re...@gmail.com>
Closes #414 from r-kamath/ZEPPELIN-387 and squashes the following commits:
796575d [Renjith Kamath] ZEPPELIN-387 fix testClearParagraphOutput failure
38ef9bf [Renjith Kamath] Merge branch 'master' of https://github.com/apache/incubator-zeppelin into ZEPPELIN-387
87ef87b [Renjith Kamath] ZEPPELIN-387 fix tests
118d358 [Renjith Kamath] ZEPPELIN-387 review fix
3a7175a [Renjith Kamath] ZEPPELIN-387 review updates
87aa4e8 [Renjith Kamath] ZEPPELIN-387 remove checkbox, add icon and update the position
226493a [Renjith Kamath] ZEPPELIN-387 Allow enable/disable of specific paragraphs
Project: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/commit/6cfb32e5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/tree/6cfb32e5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/diff/6cfb32e5
Branch: refs/heads/master
Commit: 6cfb32e5f686dba1973c81d8d97d00ce07f3601a
Parents: 53812cf
Author: Renjith Kamath <re...@gmail.com>
Authored: Fri Nov 20 16:30:07 2015 +0530
Committer: Damien CORNEAU <co...@gmail.com>
Committed: Tue Nov 24 13:39:41 2015 +0900
----------------------------------------------------------------------
.../zeppelin/rest/ZeppelinRestApiTest.java | 8 ++++++
.../zeppelin/rest/ZeppelinSparkClusterTest.java | 27 ++++++++++++++++++++
.../notebook/paragraph/paragraph.controller.js | 11 ++++++++
.../src/app/notebook/paragraph/paragraph.html | 7 +++--
.../java/org/apache/zeppelin/notebook/Note.java | 4 ++-
.../apache/zeppelin/notebook/NotebookTest.java | 22 ++++++++++++++--
.../notebook/repo/NotebookRepoSyncTest.java | 8 +++---
7 files changed, 78 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
index 8c8ff07..8468de2 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java
@@ -18,6 +18,7 @@
package org.apache.zeppelin.rest;
import java.io.IOException;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -155,8 +156,11 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
Note note = ZeppelinServer.notebook.createNote();
note.addParagraph();
Paragraph p = note.getLastParagraph();
+ Map config = p.getConfig();
+ config.put("enabled", true);
// run markdown paragraph
+ p.setConfig(config);
p.setText("%md markdown");
note.run(p.getId());
while (p.getStatus() != Status.FINISHED) {
@@ -175,6 +179,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
// run markdown paragraph, again
p = note.addParagraph();
+ p.setConfig(config);
p.setText("%md markdown restarted");
note.run(p.getId());
while (p.getStatus() != Status.FINISHED) {
@@ -262,6 +267,9 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
assertNotNull("cant create new note", note);
note.setName("source note for clone");
Paragraph paragraph = note.addParagraph();
+ Map config = paragraph.getConfig();
+ config.put("enabled", true);
+ paragraph.setConfig(config);
paragraph.setText("%md This is my new paragraph in my new note");
note.persist();
String sourceNoteID = note.getId();
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
index d5006ee..7076a79 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/ZeppelinSparkClusterTest.java
@@ -20,7 +20,9 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.zeppelin.interpreter.InterpreterSetting;
@@ -68,6 +70,9 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
// run markdown paragraph, again
Paragraph p = note.addParagraph();
+ Map config = p.getConfig();
+ config.put("enabled", true);
+ p.setConfig(config);
p.setText("%spark print(sc.parallelize(1 to 10).reduce(_ + _))");
note.run(p.getId());
waitForFinish(p);
@@ -84,6 +89,9 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
if (isPyspark() && sparkVersion >= 12) { // pyspark supported from 1.2.1
// run markdown paragraph, again
Paragraph p = note.addParagraph();
+ Map config = p.getConfig();
+ config.put("enabled", true);
+ p.setConfig(config);
p.setText("%pyspark print(sc.parallelize(range(1, 11)).reduce(lambda a, b: a + b))");
note.run(p.getId());
waitForFinish(p);
@@ -102,6 +110,9 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
if (isPyspark() && sparkVersion >= 14) { // auto_convert enabled from spark 1.4
// run markdown paragraph, again
Paragraph p = note.addParagraph();
+ Map config = p.getConfig();
+ config.put("enabled", true);
+ p.setConfig(config);
p.setText("%pyspark\nfrom pyspark.sql.functions import *\n"
+ "print(sqlContext.range(0, 10).withColumn('uniform', rand(seed=10) * 3.14).count())");
note.run(p.getId());
@@ -116,10 +127,19 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
// create new note
Note note = ZeppelinServer.notebook.createNote();
Paragraph p0 = note.addParagraph();
+ Map config0 = p0.getConfig();
+ config0.put("enabled", true);
+ p0.setConfig(config0);
p0.setText("%spark z.run(1)");
Paragraph p1 = note.addParagraph();
+ Map config1 = p1.getConfig();
+ config1.put("enabled", true);
+ p1.setConfig(config1);
p1.setText("%spark val a=10");
Paragraph p2 = note.addParagraph();
+ Map config2 = p2.getConfig();
+ config2.put("enabled", true);
+ p2.setConfig(config2);
p2.setText("%spark print(a)");
note.run(p0.getId());
@@ -151,6 +171,9 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
// load dep
Paragraph p0 = note.addParagraph();
+ Map config = p0.getConfig();
+ config.put("enabled", true);
+ p0.setConfig(config);
p0.setText("%dep z.load(\"com.databricks:spark-csv_2.11:1.2.0\")");
note.run(p0.getId());
waitForFinish(p0);
@@ -161,6 +184,7 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
// load data using libraries from dep loader
Paragraph p1 = note.addParagraph();
+ p1.setConfig(config);
p1.setText("%pyspark\n" +
"from pyspark.sql import SQLContext\n" +
"print(sqlContext.read.format('com.databricks.spark.csv')" +
@@ -178,6 +202,9 @@ public class ZeppelinSparkClusterTest extends AbstractTestRestApi {
*/
private int getSparkVersionNumber(Note note) {
Paragraph p = note.addParagraph();
+ Map config = p.getConfig();
+ config.put("enabled", true);
+ p.setConfig(config);
p.setText("%spark print(sc.version)");
note.run(p.getId());
waitForFinish(p);
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
index 41039c0..430c5ac 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.controller.js
@@ -128,6 +128,10 @@ angular.module('zeppelinWebApp')
if (!config.graph.scatter) {
config.graph.scatter = {};
}
+
+ if (config.enabled === undefined) {
+ config.enabled = true;
+ }
};
$scope.getIframeDimensions = function () {
@@ -268,6 +272,13 @@ angular.module('zeppelinWebApp')
$scope.dirtyText = undefined;
};
+ $scope.toggleEnableDisable = function () {
+ $scope.paragraph.config.enabled = $scope.paragraph.config.enabled ? false : true;
+ var newParams = angular.copy($scope.paragraph.settings.params);
+ var newConfig = angular.copy($scope.paragraph.config);
+ commitParagraph($scope.paragraph.title, $scope.paragraph.text, newConfig, newParams);
+ };
+
$scope.moveUp = function() {
$scope.$emit('moveParagraphUp', $scope.paragraph.id);
};
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/zeppelin-web/src/app/notebook/paragraph/paragraph.html
----------------------------------------------------------------------
diff --git a/zeppelin-web/src/app/notebook/paragraph/paragraph.html b/zeppelin-web/src/app/notebook/paragraph/paragraph.html
index 0ccb716..3ad3e31 100644
--- a/zeppelin-web/src/app/notebook/paragraph/paragraph.html
+++ b/zeppelin-web/src/app/notebook/paragraph/paragraph.html
@@ -410,7 +410,7 @@ limitations under the License.
<!-- Run / Cancel button -->
<span class="icon-control-play" style="cursor:pointer;color:#3071A9" tooltip-placement="top" tooltip="Run this paragraph (Shift+Enter)"
ng-click="runParagraph(getEditorValue())"
- ng-show="paragraph.status!='RUNNING' && paragraph.status!='PENDING'"></span>
+ ng-show="paragraph.status!='RUNNING' && paragraph.status!='PENDING' && paragraph.config.enabled"></span>
<span class="icon-control-pause" style="cursor:pointer;color:#CD5C5C" tooltip-placement="top" tooltip="Cancel"
ng-click="cancelParagraph()"
ng-show="paragraph.status=='RUNNING' || paragraph.status=='PENDING'"></span>
@@ -463,7 +463,10 @@ limitations under the License.
ng-click="showLineNumbers()"
ng-show="!paragraph.config.lineNumbers"> Show line numbers</a>
</li>
-
+ <li>
+ <a class="icon-control-play" style="cursor:pointer"
+ ng-click="toggleEnableDisable()"> {{paragraph.config.enabled ? "Disable" : "Enable"}} run</a>
+ </li>
<li><a class="icon-share-alt" style="cursor:pointer"
ng-click="goToSingleParagraph()"> Link this paragraph</a>
</li>
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/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 89a72b5..4271a73 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
@@ -323,7 +323,9 @@ public class Note implements Serializable, JobListener {
if (intp == null) {
throw new InterpreterException("Interpreter " + p.getRequiredReplName() + " not found");
}
- intp.getScheduler().submit(p);
+ if ((Boolean) p.getConfig().get("enabled")) {
+ intp.getScheduler().submit(p);
+ }
}
public List<String> completion(String paragraphId, String buffer, int cursor) {
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/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 5d887e9..8ae0970 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
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -95,6 +96,9 @@ public class NotebookTest implements JobListenerFactory{
// run with defatul repl
Paragraph p1 = note.addParagraph();
+ Map config = p1.getConfig();
+ config.put("enabled", true);
+ p1.setConfig(config);
p1.setText("hello world");
note.run(p1.getId());
while(p1.isTerminated()==false || p1.getResult()==null) Thread.yield();
@@ -102,6 +106,7 @@ public class NotebookTest implements JobListenerFactory{
// run with specific repl
Paragraph p2 = note.addParagraph();
+ p2.setConfig(config);
p2.setText("%mock2 hello world");
note.run(p2.getId());
while(p2.isTerminated()==false || p2.getResult()==null) Thread.yield();
@@ -155,6 +160,9 @@ public class NotebookTest implements JobListenerFactory{
// run with default repl
Paragraph p1 = note.addParagraph();
+ Map config = p1.getConfig();
+ config.put("enabled", true);
+ p1.setConfig(config);
p1.setText("hello world");
note.persist();
@@ -166,6 +174,9 @@ public class NotebookTest implements JobListenerFactory{
public void testClearParagraphOutput() throws IOException, SchedulerException{
Note note = notebook.createNote();
Paragraph p1 = note.addParagraph();
+ Map config = p1.getConfig();
+ config.put("enabled", true);
+ p1.setConfig(config);
p1.setText("hello world");
note.run(p1.getId());
@@ -181,10 +192,14 @@ public class NotebookTest implements JobListenerFactory{
public void testRunAll() throws IOException {
Note note = notebook.createNote();
note.getNoteReplLoader().setInterpreters(factory.getDefaultInterpreterSettingList());
-
Paragraph p1 = note.addParagraph();
+ Map config = p1.getConfig();
+ config.put("enabled", true);
+ p1.setConfig(config);
p1.setText("p1");
Paragraph p2 = note.addParagraph();
+ Map config1 = p2.getConfig();
+ p2.setConfig(config1);
p2.setText("p2");
assertEquals(null, p2.getResult());
note.runAll();
@@ -200,12 +215,15 @@ public class NotebookTest implements JobListenerFactory{
note.getNoteReplLoader().setInterpreters(factory.getDefaultInterpreterSettingList());
Paragraph p = note.addParagraph();
+ Map config = new HashMap<String, Object>();
+ p.setConfig(config);
p.setText("p1");
Date dateFinished = p.getDateFinished();
assertNull(dateFinished);
// set cron scheduler, once a second
- Map<String, Object> config = note.getConfig();
+ config = note.getConfig();
+ config.put("enabled", true);
config.put("cron", "* * * * * ?");
note.setConfig(config);
notebook.refreshCron(note.id());
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/6cfb32e5/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/NotebookRepoSyncTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/NotebookRepoSyncTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/NotebookRepoSyncTest.java
index bfc6561..8d33d51 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/NotebookRepoSyncTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/NotebookRepoSyncTest.java
@@ -19,11 +19,10 @@ package org.apache.zeppelin.notebook.repo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.zeppelin.conf.ZeppelinConfiguration;
@@ -34,10 +33,8 @@ import org.apache.zeppelin.interpreter.mock.MockInterpreter1;
import org.apache.zeppelin.interpreter.mock.MockInterpreter2;
import org.apache.zeppelin.notebook.JobListenerFactory;
import org.apache.zeppelin.notebook.Note;
-import org.apache.zeppelin.notebook.NoteInfo;
import org.apache.zeppelin.notebook.Notebook;
import org.apache.zeppelin.notebook.Paragraph;
-import org.apache.zeppelin.notebook.repo.NotebookRepoSync;
import org.apache.zeppelin.scheduler.Job;
import org.apache.zeppelin.scheduler.Job.Status;
import org.apache.zeppelin.scheduler.JobListener;
@@ -149,6 +146,9 @@ public class NotebookRepoSyncTest implements JobListenerFactory{
/* create note */
Note note = notebookSync.createNote();
Paragraph p1 = note.addParagraph();
+ Map config = p1.getConfig();
+ config.put("enabled", true);
+ p1.setConfig(config);
p1.setText("hello world");
/* new paragraph exists in note instance */