diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java index 288cff97671..49f40fcdd70 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/repo/NotebookRepoSync.java @@ -42,12 +42,15 @@ public class NotebookRepoSync implements NotebookRepo{ private static final int maxRepoNum = 2; private static final String pushKey = "pushNoteIDs"; private static final String pullKey = "pullNoteIDs"; + private static ZeppelinConfiguration config; /** * @param (conf) * @throws - Exception */ public NotebookRepoSync(ZeppelinConfiguration conf) throws Exception { + + config = conf; String allStorageClassNames = conf.getString(ConfVars.ZEPPELIN_NOTEBOOK_STORAGE).trim(); if (allStorageClassNames.isEmpty()) { @@ -72,6 +75,9 @@ public NotebookRepoSync(ZeppelinConfiguration conf) throws Exception { /* by default lists from first repository */ public List list() throws IOException { + if (config.getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_RELOAD_FROM_STORAGE) && getRepoCount() > 1) { + sync(0, 1); + } return getRepo(0).list(); } 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 981ed6e2451..bfc6561d571 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 @@ -25,6 +25,7 @@ import java.io.File; import java.io.IOException; +import org.apache.commons.io.FileUtils; import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.conf.ZeppelinConfiguration.ConfVars; import org.apache.zeppelin.interpreter.InterpreterFactory; @@ -180,6 +181,40 @@ public void testSyncUpdateMain() throws IOException { notebookRepoSync.list(1).get(0).getId()).getLastParagraph().getId()); } + @Test + public void testSyncOnList() throws IOException { + + /* check that both storage repos are empty */ + assertTrue(notebookRepoSync.getRepoCount() > 1); + assertEquals(0, notebookRepoSync.list(0).size()); + assertEquals(0, notebookRepoSync.list(1).size()); + + File srcDir = new File("src/test/resources/2A94M5J1Z"); + File destDir = new File(secNotebookDir + "/2A94M5J1Z"); + + /* copy manually new notebook into secondary storage repo and check repos */ + try { + FileUtils.copyDirectory(srcDir, destDir); + } catch (IOException e) { + e.printStackTrace(); + } + assertEquals(0, notebookRepoSync.list(0).size()); + assertEquals(1, notebookRepoSync.list(1).size()); + + /* Although new notebook is added to secondary storage it's not displayed + * on list() with ZEPPELIN_NOTEBOOK_RELOAD_FROM_STORAGE set to false + */ + System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_RELOAD_FROM_STORAGE.getVarName(), "false"); + assertEquals(0, notebookRepoSync.list().size()); + + /* notebook is synced after ZEPPELIN_NOTEBOOK_RELOAD_FROM_STORAGE variable is set to true */ + System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_RELOAD_FROM_STORAGE.getVarName(), "true"); + assertEquals(1, notebookRepoSync.list().size()); + + assertEquals(1, notebookRepoSync.list(0).size()); + assertEquals(1, notebookRepoSync.list(1).size()); + } + private void delete(File file){ if(file.isFile()) file.delete(); else if(file.isDirectory()){