You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mi...@apache.org on 2016/09/07 13:49:04 UTC

zeppelin git commit: [ZEPPELIN-1399] Refactor automatic interpreter name insert

Repository: zeppelin
Updated Branches:
  refs/heads/master 66d581136 -> 3db819abf


[ZEPPELIN-1399] Refactor automatic interpreter name insert

### What is this PR for?
Refine automatic interpreter name insert. See below jira issue for detailed description

### What type of PR is it?
Improvement | Refactoring

### What is the Jira issue?
[ZEPPELIN-1399](https://issues.apache.org/jira/browse/ZEPPELIN-1399)

### Screenshots (if appropriate)
- Do not insert interpreter name if previous interpreter name is not specified
**Before**
![aug-30-2016 17-28-06](https://cloud.githubusercontent.com/assets/8503346/18095394/1f25c9b4-6ed7-11e6-818d-71099a96e305.gif)
**After**
![aug-30-2016 17-24-23](https://cloud.githubusercontent.com/assets/8503346/18095264/b469cfc6-6ed6-11e6-8497-320e8f3f8f46.gif)

- Insert interpreter name of previous paragraph without running
**Before**
![aug-30-2016 17-33-25](https://cloud.githubusercontent.com/assets/8503346/18095643/dfbc1eee-6ed7-11e6-8249-05c4d046da9d.gif)
**After**
![aug-30-2016 17-24-32](https://cloud.githubusercontent.com/assets/8503346/18095249/a4936e90-6ed6-11e6-9223-6405f3e36f80.gif)

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

Author: Mina Lee <mi...@apache.org>

Closes #1388 from minahlee/ZEPPELIN-1399 and squashes the following commits:

6c035d9 [Mina Lee] Modify tests
1484007 [Mina Lee] Refactor automatic magic keyword insert
15cd0d5 [Mina Lee] Revert "[ZEPPELIN-1069]Ignore implicit interpreter when user enter wrong interpreter name"


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

Branch: refs/heads/master
Commit: 3db819abf07db3a3daff3b62ab89f3e0623ba70e
Parents: 66d5811
Author: Mina Lee <mi...@apache.org>
Authored: Fri Sep 2 11:31:56 2016 +0200
Committer: Mina Lee <mi...@apache.org>
Committed: Wed Sep 7 15:48:55 2016 +0200

----------------------------------------------------------------------
 .../apache/zeppelin/rest/NotebookRestApi.java   |  1 -
 .../apache/zeppelin/socket/NotebookServer.java  |  6 +-
 .../integration/ParagraphActionsIT.java         | 11 +--
 .../zeppelin/rest/ZeppelinRestApiTest.java      |  3 +-
 .../java/org/apache/zeppelin/notebook/Note.java | 82 +++++-------------
 .../org/apache/zeppelin/notebook/Notebook.java  |  1 -
 .../org/apache/zeppelin/notebook/Paragraph.java | 43 +++++++---
 .../org/apache/zeppelin/notebook/NoteTest.java  | 88 +++++---------------
 .../notebook/repo/GitNotebookRepoTest.java      |  6 +-
 9 files changed, 81 insertions(+), 160 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
index 17ec74f..c93a222 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/NotebookRestApi.java
@@ -852,7 +852,6 @@ public class NotebookRestApi {
       if (paramsForUpdating != null) {
         paragraph.settings.getParams().putAll(paramsForUpdating);
         AuthenticationInfo subject = new AuthenticationInfo(SecurityUtils.getPrincipal());
-        note.setLastReplName(paragraph.getId());
         note.persist(subject);
       }
     }

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/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 19bfba1..880b0f3 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
@@ -1130,10 +1130,8 @@ public class NotebookServer extends WebSocketServlet implements
        .get("config");
     p.setConfig(config);
     // if it's the last paragraph, let's add a new one
-    boolean isTheLastParagraph = note.getLastParagraph().getId()
-        .equals(p.getId());
-    note.setLastReplName(paragraphId);
-    if (!(text.equals(note.getLastInterpreterName() + " ") || Strings.isNullOrEmpty(text)) &&
+    boolean isTheLastParagraph = note.isLastParagraph(p.getId());
+    if (!(text.trim().equals(p.getMagic()) || Strings.isNullOrEmpty(text)) &&
         isTheLastParagraph) {
       note.addParagraph();
     }

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
----------------------------------------------------------------------
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
index 8335455..3ff6e1f 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
@@ -95,28 +95,21 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       ZeppelinITUtils.sleep(1000, false);
       waitForParagraph(1, "READY");
 
-      String oldIntpTag = driver.findElement(By.xpath(getParagraphXPath(1) + "//div[contains(@class, 'editor')]")).getText();
-
       collector.checkThat("Paragraph is created above",
           driver.findElement(By.xpath(getParagraphXPath(1) + "//div[contains(@class, 'editor')]")).getText(),
-          CoreMatchers.not(StringUtils.EMPTY));
+          CoreMatchers.equalTo(StringUtils.EMPTY));
       setTextOfParagraph(1, " this is above ");
 
-
       newPara = driver.findElement(By.xpath(getParagraphXPath(2) + "//div[contains(@class,'new-paragraph')][2]"));
       action.moveToElement(newPara).click().build().perform();
 
       waitForParagraph(3, "READY");
 
-      String lastIntpTag = driver.findElement(By.xpath(getParagraphXPath(3) + "//div[contains(@class, 'editor')]")).getText();
-
       collector.checkThat("Paragraph is created below",
           driver.findElement(By.xpath(getParagraphXPath(3) + "//div[contains(@class, 'editor')]")).getText(),
-          CoreMatchers.not(StringUtils.EMPTY));
+          CoreMatchers.equalTo(StringUtils.EMPTY));
       setTextOfParagraph(3, " this is below ");
 
-      collector.checkThat("Compare interpreter name tag", oldIntpTag, CoreMatchers.equalTo(lastIntpTag));
-
       collector.checkThat("The output field of paragraph1 contains",
           driver.findElement(By.xpath(getParagraphXPath(1) + "//div[contains(@class, 'editor')]")).getText(),
           CoreMatchers.equalTo(" this is above "));

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/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 00a8106..4390d74 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
@@ -146,8 +146,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi {
     assertEquals("compare note name", expectedNoteName, newNoteName);
     assertEquals("initial paragraph check failed", 3, newNote.getParagraphs().size());
     for (Paragraph p : newNote.getParagraphs()) {
-      if (StringUtils.isEmpty(p.getText()) ||
-              p.getText().trim().equals(newNote.getLastInterpreterName())) {
+      if (StringUtils.isEmpty(p.getText())) {
         continue;
       }
       assertTrue("paragraph title check failed", p.getTitle().startsWith("title"));

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/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 1d75d10..1281e71 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
@@ -29,9 +29,9 @@ import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
 
 import com.google.gson.Gson;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,11 +57,6 @@ import org.apache.zeppelin.search.SearchService;
 import org.apache.zeppelin.user.AuthenticationInfo;
 import org.apache.zeppelin.user.Credentials;
 
-import static org.apache.commons.lang.StringUtils.EMPTY;
-import static org.apache.commons.lang.StringUtils.isEmpty;
-import static org.apache.commons.lang.StringUtils.isNotEmpty;
-import static org.apache.commons.lang.StringUtils.isBlank;
-
 /**
  * Binded interpreters for a note
  */
@@ -82,7 +77,6 @@ public class Note implements Serializable, ParagraphJobListener {
   private String name = "";
   private String id;
 
-  private AtomicReference<String> lastReplName = new AtomicReference<>(EMPTY);
   private transient ZeppelinConfiguration conf = ZeppelinConfiguration.create();
 
   private Map<String, List<AngularObject>> angularObjects = new HashMap<>();
@@ -128,13 +122,7 @@ public class Note implements Serializable, ParagraphJobListener {
 
   private String getDefaultInterpreterName() {
     InterpreterSetting setting = factory.getDefaultInterpreterSetting(getId());
-    return null != setting ? setting.getName() : EMPTY;
-  }
-
-  void putDefaultReplName() {
-    String defaultInterpreterName = getDefaultInterpreterName();
-    logger.info("defaultInterpreterName is '{}'", defaultInterpreterName);
-    lastReplName.set(defaultInterpreterName);
+    return null != setting ? setting.getName() : StringUtils.EMPTY;
   }
 
   public String getId() {
@@ -226,7 +214,7 @@ public class Note implements Serializable, ParagraphJobListener {
    */
   public Paragraph addParagraph() {
     Paragraph p = new Paragraph(this, this, factory);
-    addLastReplNameIfEmptyText(p);
+    setParagraphMagic(p, paragraphs.size());
     synchronized (paragraphs) {
       paragraphs.add(p);
     }
@@ -282,7 +270,7 @@ public class Note implements Serializable, ParagraphJobListener {
    */
   public Paragraph insertParagraph(int index) {
     Paragraph p = new Paragraph(this, this, factory);
-    addLastReplNameIfEmptyText(p);
+    setParagraphMagic(p, index);
     synchronized (paragraphs) {
       paragraphs.add(index, p);
     }
@@ -293,26 +281,6 @@ public class Note implements Serializable, ParagraphJobListener {
   }
 
   /**
-   * Add Last Repl name If Paragraph has empty text
-   *
-   * @param p Paragraph
-   */
-  private void addLastReplNameIfEmptyText(Paragraph p) {
-    String replName = lastReplName.get();
-    if (isEmpty(p.getText()) && isNotEmpty(replName) && isBinding(replName)) {
-      p.setText(getInterpreterName(replName) + " ");
-    }
-  }
-
-  public boolean isBinding(String replName) {
-    return factory.getInterpreter(this.getId(), replName) != null;
-  }
-
-  private String getInterpreterName(String replName) {
-    return isBlank(replName) ? EMPTY : "%" + replName;
-  }
-
-  /**
    * Remove paragraph by id.
    *
    * @param paragraphId ID of paragraph
@@ -439,7 +407,7 @@ public class Note implements Serializable, ParagraphJobListener {
     List<Map<String, String>> paragraphsInfo = new LinkedList<>();
     synchronized (paragraphs) {
       for (Paragraph p : paragraphs) {
-        Map<String, String> info = populatePragraphInfo(p);
+        Map<String, String> info = populateParagraphInfo(p);
         paragraphsInfo.add(info);
       }
     }
@@ -450,14 +418,14 @@ public class Note implements Serializable, ParagraphJobListener {
     synchronized (paragraphs) {
       for (Paragraph p : paragraphs) {
         if (p.getId().equals(paragraphId)) {
-          return populatePragraphInfo(p);
+          return populateParagraphInfo(p);
         }
       }
       return new HashMap<>();
     }
   }
 
-  private Map<String, String> populatePragraphInfo(Paragraph p) {
+  private Map<String, String> populateParagraphInfo(Paragraph p) {
     Map<String, String> info = new HashMap<>();
     info.put("id", p.getId());
     info.put("status", p.getStatus().toString());
@@ -473,15 +441,26 @@ public class Note implements Serializable, ParagraphJobListener {
     return info;
   }
 
+  private void setParagraphMagic(Paragraph p, int index) {
+    if (paragraphs.size() > 0) {
+      String magic;
+      if (index == 0) {
+        magic = paragraphs.get(0).getMagic();
+      } else {
+        magic = paragraphs.get(index - 1).getMagic();
+      }
+      if (StringUtils.isNotEmpty(magic)) {
+        p.setText(magic + "\n");
+      }
+    }
+  }
+
   /**
    * Run all paragraphs sequentially.
    */
   public void runAll() {
     String cronExecutingUser = (String) getConfig().get("cronExecutingUser");
     synchronized (paragraphs) {
-      if (!paragraphs.isEmpty()) {
-        setLastReplName(paragraphs.get(paragraphs.size() - 1));
-      }
       for (Paragraph p : paragraphs) {
         if (!p.isEnabled()) {
           continue;
@@ -607,16 +586,6 @@ public class Note implements Serializable, ParagraphJobListener {
     repo.save(this, subject);
   }
 
-  private void setLastReplName(Paragraph lastParagraphStarted) {
-    if (isNotEmpty(lastParagraphStarted.getRequiredReplName())) {
-      lastReplName.set(lastParagraphStarted.getRequiredReplName());
-    }
-  }
-
-  public void setLastReplName(String paragraphId) {
-    setLastReplName(getParagraph(paragraphId));
-  }
-
   /**
    * Persist this note with maximum delay.
    */
@@ -681,14 +650,6 @@ public class Note implements Serializable, ParagraphJobListener {
     this.info = info;
   }
 
-  String getLastReplName() {
-    return lastReplName.get();
-  }
-
-  public String getLastInterpreterName() {
-    return getInterpreterName(getLastReplName());
-  }
-
   @Override
   public void beforeStatusChange(Job job, Status before, Status after) {
     if (jobListenerFactory != null) {
@@ -723,7 +684,6 @@ public class Note implements Serializable, ParagraphJobListener {
     }
   }
 
-
   @Override
   public void onOutputAppend(Paragraph paragraph, InterpreterOutput out, String output) {
     if (jobListenerFactory != null) {

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
index 9acb156..f1dee48 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java
@@ -155,7 +155,6 @@ public class Notebook implements NoteEventListener {
     }
     if (interpreterIds != null) {
       bindInterpretersToNote(note.getId(), interpreterIds);
-      note.putDefaultReplName();
     }
 
     notebookIndex.addIndexDoc(note);

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/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 f326eba..7807abb 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
@@ -17,6 +17,7 @@
 
 package org.apache.zeppelin.notebook;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.zeppelin.display.AngularObject;
 import org.apache.zeppelin.display.AngularObjectRegistry;
 import org.apache.zeppelin.helium.HeliumPackage;
@@ -455,22 +456,22 @@ public class Paragraph extends Job implements Serializable, Cloneable {
     Credentials credentials = note.getCredentials();
     if (authenticationInfo != null) {
       UserCredentials userCredentials = credentials.getUserCredentials(
-              authenticationInfo.getUser());
+          authenticationInfo.getUser());
       authenticationInfo.setUserCredentials(userCredentials);
     }
 
     InterpreterContext interpreterContext = new InterpreterContext(
-            note.getId(),
-            getId(),
-            this.getTitle(),
-            this.getText(),
-            this.getAuthenticationInfo(),
-            this.getConfig(),
-            this.settings,
-            registry,
-            resourcePool,
-            runners,
-            output);
+        note.getId(),
+        getId(),
+        this.getTitle(),
+        this.getText(),
+        this.getAuthenticationInfo(),
+        this.getConfig(),
+        this.settings,
+        registry,
+        resourcePool,
+        runners,
+        output);
     return interpreterContext;
   }
 
@@ -565,4 +566,22 @@ public class Paragraph extends Job implements Serializable, Cloneable {
     }
     return scriptBody;
   }
+
+  public String getMagic() {
+    String magic = StringUtils.EMPTY;
+    String text = getText();
+    if (text != null && text.startsWith("%")) {
+      magic = text.split("\\s+")[0];
+      if (isValidInterpreter(magic.substring(1))) {
+        return magic;
+      } else {
+        return StringUtils.EMPTY;
+      }
+    }
+    return magic;
+  }
+
+  private boolean isValidInterpreter(String replName) {
+    return factory.getInterpreter(note.getId(), replName) != null;
+  }
 }

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java
index 4917ac4..98e301a 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NoteTest.java
@@ -17,13 +17,9 @@
 
 package org.apache.zeppelin.notebook;
 
-import com.google.common.base.Optional;
-
-import org.apache.commons.lang.StringUtils;
 import org.apache.zeppelin.interpreter.Interpreter;
 import org.apache.zeppelin.interpreter.InterpreterFactory;
 import org.apache.zeppelin.interpreter.InterpreterSetting;
-import org.apache.zeppelin.interpreter.mock.MockInterpreter2;
 import org.apache.zeppelin.notebook.repo.NotebookRepo;
 import org.apache.zeppelin.scheduler.Scheduler;
 import org.apache.zeppelin.search.SearchService;
@@ -84,89 +80,47 @@ public class NoteTest {
   }
 
   @Test
-  public void putDefaultReplNameIfInterpreterSettingAbsent() {
-    when(interpreterFactory.getDefaultInterpreterSetting(anyString()))
-            .thenReturn(null);
-
+  public void addParagraphWithEmptyReplNameTest() {
     Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener);
-    note.putDefaultReplName();
 
-    assertEquals(StringUtils.EMPTY, note.getLastReplName());
-    assertEquals(StringUtils.EMPTY, note.getLastInterpreterName());
+    Paragraph p = note.addParagraph();
+    assertNull(p.getText());
   }
 
   @Test
-  public void putDefaultReplNameIfInterpreterSettingPresent() {
-    InterpreterSetting interpreterSetting = Mockito.mock(InterpreterSetting.class);
-    when(interpreterSetting.getName()).thenReturn("spark");
-    when(interpreterFactory.getDefaultInterpreterSetting(anyString()))
-            .thenReturn(interpreterSetting);
+  public void addParagraphWithLastReplNameTest() {
+    when(interpreterFactory.getInterpreter(anyString(), eq("spark"))).thenReturn(interpreter);
 
     Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener);
-    note.putDefaultReplName();
+    Paragraph p1 = note.addParagraph();
+    p1.setText("%spark ");
+    Paragraph p2 = note.addParagraph();
 
-    assertEquals("spark", note.getLastReplName());
-    assertEquals("%spark", note.getLastInterpreterName());
+    assertEquals("%spark\n", p2.getText());
   }
 
   @Test
-  public void addParagraphWithLastReplName() {
-    InterpreterSetting interpreterSetting = Mockito.mock(InterpreterSetting.class);
-    when(interpreterSetting.getName()).thenReturn("spark");
-    when(interpreterFactory.getDefaultInterpreterSetting(anyString()))
-            .thenReturn(interpreterSetting);
+  public void insertParagraphWithLastReplNameTest() {
+    when(interpreterFactory.getInterpreter(anyString(), eq("spark"))).thenReturn(interpreter);
 
     Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener);
-    note.putDefaultReplName(); //set lastReplName
-    when(interpreterFactory.getInterpreter(note.getId(), "spark")).thenReturn(new MockInterpreter2(null));
-
-    Paragraph p = note.addParagraph();
+    Paragraph p1 = note.addParagraph();
+    p1.setText("%spark ");
+    Paragraph p2 = note.insertParagraph(note.getParagraphs().size());
 
-    assertEquals("%spark ", p.getText());
+    assertEquals("%spark\n", p2.getText());
   }
 
   @Test
-  public void insertParagraphWithLastReplName() {
-    InterpreterSetting interpreterSetting = Mockito.mock(InterpreterSetting.class);
-    when(interpreterSetting.getName()).thenReturn("spark");
-    when(interpreterFactory.getDefaultInterpreterSetting(anyString()))
-            .thenReturn(interpreterSetting);
+  public void insertParagraphWithInvalidReplNameTest() {
+    when(interpreterFactory.getInterpreter(anyString(), eq("invalid"))).thenReturn(null);
 
     Note note = new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener);
-    note.putDefaultReplName(); //set lastReplName
-    when(interpreterFactory.getInterpreter(note.getId(), "spark")).thenReturn(new MockInterpreter2(null));
-
-    Paragraph p = note.insertParagraph(note.getParagraphs().size());
+    Paragraph p1 = note.addParagraph();
+    p1.setText("%invalid ");
+    Paragraph p2 = note.insertParagraph(note.getParagraphs().size());
 
-    assertEquals("%spark ", p.getText());
+    assertNull(p2.getText());
   }
 
-  @Test
-  public void setLastReplName() {
-    String paragraphId = "HelloWorld";
-    Note note = Mockito.spy(new Note(repo, interpreterFactory, jobListenerFactory, index, credentials, noteEventListener));
-    Paragraph mockParagraph = Mockito.mock(Paragraph.class);
-    when(note.getParagraph(paragraphId)).thenReturn(mockParagraph);
-    when(mockParagraph.getRequiredReplName()).thenReturn("spark");
-
-    note.setLastReplName(paragraphId);
-
-    assertEquals("spark", note.getLastReplName());
-  }
-
-  @Test
-  public void isBindingTest() {
-    Note note = spy(new Note());
-    when(note.getId()).thenReturn("test1");
-    InterpreterFactory mockInterpreterFactory = mock(InterpreterFactory.class);
-    note.setInterpreterFactory(mockInterpreterFactory);
-
-    //when is not binding
-    assertFalse(note.isBinding("spark"));
-
-    //when is binding
-    when(mockInterpreterFactory.getInterpreter("test1", "spark")).
-        thenReturn(new MockInterpreter2(null));
-    assertTrue(note.isBinding("spark"));
-  }
 }

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/3db819ab/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/GitNotebookRepoTest.java
----------------------------------------------------------------------
diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/GitNotebookRepoTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/GitNotebookRepoTest.java
index 2232ea4..2e96615 100644
--- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/GitNotebookRepoTest.java
+++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/repo/GitNotebookRepoTest.java
@@ -224,7 +224,7 @@ public class GitNotebookRepoTest {
     Map<String, Object> config = p1.getConfig();
     config.put("enabled", true);
     p1.setConfig(config);
-    p1.setText("%md checkpoint test text");
+    p1.setText("checkpoint test text");
     notebookRepo.save(note, null);
 
     // second checkpoint
@@ -245,7 +245,7 @@ public class GitNotebookRepoTest {
     Paragraph p2 = note.addParagraph();
     config.put("enabled", false);
     p2.setConfig(config);
-    p2.setText("%md get revision when modified note test text");
+    p2.setText("get revision when modified note test text");
     notebookRepo.save(note, null);
     note = notebookRepo.get(TEST_NOTE_ID, null);
     int paragraphCount_3 = note.getParagraphs().size();
@@ -282,7 +282,7 @@ public class GitNotebookRepoTest {
     Map<String, Object> config = p1.getConfig();
     config.put("enabled", true);
     p1.setConfig(config);
-    p1.setText("%md get revision when modified note test text");
+    p1.setText("get revision when modified note test text");
     notebookRepo.save(note, null);
     int paragraphCount_2 = note.getParagraphs().size();