You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by zj...@apache.org on 2019/05/20 05:27:19 UTC

[zeppelin] branch master updated: [ZEPPELIN-4147]. Fail to rename folder

This is an automated email from the ASF dual-hosted git repository.

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 8babd76  [ZEPPELIN-4147]. Fail to rename folder
8babd76 is described below

commit 8babd76f3f2093695e045e4b47fa54c7d5104757
Author: Jeff Zhang <zj...@apache.org>
AuthorDate: Thu May 9 17:35:04 2019 +0800

    [ZEPPELIN-4147]. Fail to rename folder
    
    ### What is this PR for?
    
    It is a trivial bug fox for rename folder failure. The root cause is that the folder path is not including leading `/` which is required by NotebookRepo.
    
    ### What type of PR is it?
    [Bug Fix]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://jira.apache.org/jira/browse/ZEPPELIN-4147
    
    ### 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 <zj...@apache.org>
    
    Closes #3367 from zjffdu/ZEPPELIN-4147 and squashes the following commits:
    
    51c05c168 [Jeff Zhang] [ZEPPELIN-4147]. Fail to rename folder
---
 .../main/java/org/apache/zeppelin/service/NotebookService.java | 10 +++++++++-
 .../java/org/apache/zeppelin/service/NotebookServiceTest.java  |  9 ++++++++-
 .../apache/zeppelin/notebook/repo/InMemoryNotebookRepo.java    |  6 ++++++
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
index 2b829fd..bb42ce2 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/service/NotebookService.java
@@ -156,6 +156,13 @@ public class NotebookService {
     }
   }
 
+  /**
+   * normalize both note name and note folder
+   *
+   * @param notePath
+   * @return
+   * @throws IOException
+   */
   String normalizeNotePath(String notePath) throws IOException {
     if (StringUtils.isBlank(notePath)) {
       notePath = "/Untitled Note";
@@ -949,7 +956,8 @@ public class NotebookService {
     //TODO(zjffdu) folder permission check
 
     try {
-      notebook.moveFolder(folderPath, newFolderPath, context.getAutheInfo());
+      notebook.moveFolder(normalizeNotePath(folderPath),
+              normalizeNotePath(newFolderPath), context.getAutheInfo());
       List<NoteInfo> notesInfo = notebook.getNotesInfo(
               noteId -> authorizationService.isReader(noteId, context.getUserAndRoles()));
       callback.onSuccess(notesInfo, context);
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/service/NotebookServiceTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/service/NotebookServiceTest.java
index f37418e..e4df8c3 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/service/NotebookServiceTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/service/NotebookServiceTest.java
@@ -175,6 +175,13 @@ public class NotebookServiceTest {
     assertEquals(1, notesInfo.size());
     assertEquals("/folder_3/new_name", notesInfo.get(0).getPath());
 
+    // move folder in case of folder path without prefix '/'
+    reset(callback);
+    notesInfo = notebookService.renameFolder("folder_3", "folder_4", context, callback);
+    verify(callback).onSuccess(notesInfo, context);
+    assertEquals(1, notesInfo.size());
+    assertEquals("/folder_4/new_name", notesInfo.get(0).getPath());
+
     // create another note
     note2 = notebookService.createNote("/note2", "test", context, callback);
     assertEquals("note2", note2.getName());
@@ -204,7 +211,7 @@ public class NotebookServiceTest {
     verify(callback).onSuccess(notesInfo, context);
 
     // delete folder
-    notesInfo = notebookService.removeFolder("/folder_3", context, callback);
+    notesInfo = notebookService.removeFolder("/folder_4", context, callback);
     verify(callback).onSuccess(notesInfo, context);
 
     // list note again
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/InMemoryNotebookRepo.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/InMemoryNotebookRepo.java
index 1793f9c..187cfc0 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/InMemoryNotebookRepo.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/InMemoryNotebookRepo.java
@@ -71,6 +71,12 @@ public class InMemoryNotebookRepo implements NotebookRepo {
 
   @Override
   public void move(String folderPath, String newFolderPath, AuthenticationInfo subject) {
+    if (!folderPath.startsWith("/")) {
+      throw new RuntimeException(String.format("folderPath '%s' is not started with '/'", folderPath));
+    }
+    if (folderPath.startsWith("//")) {
+      throw new RuntimeException(String.format("folderPath '%s' is started with '//'", folderPath));
+    }
     if (!newFolderPath.startsWith("/")) {
       throw new RuntimeException(String.format("newFolderPath '%s' is not started with '/'", newFolderPath));
     }