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 b1a99c1 [ZEPPELIN-4647]. zeppelin.notebook.cron.folders doesn't work for regular folder b1a99c1 is described below commit b1a99c1a7bd5eaf6c914ec9de536ca41c451f60e Author: Jeff Zhang <zjf...@apache.org> AuthorDate: Fri Feb 28 17:45:27 2020 +0800 [ZEPPELIN-4647]. zeppelin.notebook.cron.folders doesn't work for regular folder ### What is this PR for? This PR fix the issue of `zeppelin.notebook.cron.folders` doesn't work for regular folder, but only for regular expression. IMHO, specify regular folder is enough for users, regular expression is not necessary. So I change `zeppelin.notebook.cron.folders` to regular folder instead of regular expression. ### What type of PR is it? [Bug Fix] ### Todos * [ ] - Task ### What is the Jira issue? * https://github.com/zjffdu/zeppelin/tree/ZEPPELIN-4647 ### 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 <zjf...@apache.org> Closes #3666 from zjffdu/ZEPPELIN-4647 and squashes the following commits: 3ab0409be [Jeff Zhang] [ZEPPELIN-4647]. zeppelin.notebook.cron.folders doesn't work for regular folder --- docs/usage/other_features/cron_scheduler.md | 2 +- .../test/java/org/apache/zeppelin/rest/ZeppelinRestApiTest.java | 5 ++++- .../src/main/java/org/apache/zeppelin/notebook/Note.java | 7 ++----- .../src/main/java/org/apache/zeppelin/notebook/NoteManager.java | 2 ++ .../src/test/java/org/apache/zeppelin/notebook/NotebookTest.java | 5 ++--- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/docs/usage/other_features/cron_scheduler.md b/docs/usage/other_features/cron_scheduler.md index 2a835a3..05fabd7 100644 --- a/docs/usage/other_features/cron_scheduler.md +++ b/docs/usage/other_features/cron_scheduler.md @@ -57,4 +57,4 @@ Set property **zeppelin.notebook.cron.enable** to **true** in `$ZEPPELIN_HOME/co ### Run cron selectively on folders -In `$ZEPPELIN_HOME/conf/zeppelin-site.xml` make sure the property **zeppelin.notebook.cron.enable** is set to **true**, and then set property **zeppelin.notebook.cron.folders** to the desired folder as comma-separated values, e.g. `*yst*, Sys?em, System`. This property accepts wildcard and joker. +In `$ZEPPELIN_HOME/conf/zeppelin-site.xml` make sure the property **zeppelin.notebook.cron.enable** is set to **true**, and then set property **zeppelin.notebook.cron.folders** to the desired folder as comma-separated values, e.g. `/cron,/test/cron`. 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 871d926..f353429 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 @@ -590,6 +590,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi { // create a note and a paragraph Note note = null; try { + System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_ENABLE.getVarName(), "true"); note = TestUtils.getInstance(Notebook.class).createNote("note1_testJobs", anonymous); note.setName("note for run test"); @@ -630,6 +631,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi { if (null != note) { TestUtils.getInstance(Notebook.class).removeNote(note.getId(), anonymous); } + System.clearProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_ENABLE.getVarName()); } } @@ -658,7 +660,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi { postCron.releaseConnection(); System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_ENABLE.getVarName(), "true"); - System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_FOLDERS.getVarName(), "System/*"); + System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_FOLDERS.getVarName(), "/System"); note.setName("System/test2"); note.runAll(AuthenticationInfo.ANONYMOUS, false); @@ -679,6 +681,7 @@ public class ZeppelinRestApiTest extends AbstractTestRestApi { if (null != note) { TestUtils.getInstance(Notebook.class).removeNote(note.getId(), anonymous); } + System.clearProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_ENABLE.getVarName()); } } 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 0f902f6..ab7016a 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 @@ -129,7 +129,6 @@ public class Note implements JsonSerializable { public Note() { generateId(); - setCronSupported(ZeppelinConfiguration.create()); } public Note(String path, String defaultInterpreterGroup, InterpreterFactory factory, @@ -395,12 +394,11 @@ public class Note implements JsonSerializable { public Boolean isCronSupported(ZeppelinConfiguration config) { if (config.isZeppelinNotebookCronEnable()) { config.getZeppelinNotebookCronFolders(); - if (config.getZeppelinNotebookCronFolders() == null) { + if (StringUtils.isBlank(config.getZeppelinNotebookCronFolders())) { return true; } else { for (String folder : config.getZeppelinNotebookCronFolders().split(",")) { - folder = folder.replaceAll("\\*", "\\.*").replaceAll("\\?", "\\."); - if (getName().matches(folder)) { + if (this.path.startsWith(folder)) { return true; } } @@ -1116,7 +1114,6 @@ public class Note implements JsonSerializable { public static Note fromJson(String json) throws IOException { try { Note note = gson.fromJson(json, Note.class); - note.setCronSupported(ZeppelinConfiguration.create()); convertOldInput(note); note.info.remove("isRunning"); note.postProcessParagraphs(); diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java index b64dd4d..9e06750 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/NoteManager.java @@ -19,6 +19,7 @@ package org.apache.zeppelin.notebook; import org.apache.commons.lang3.StringUtils; +import org.apache.zeppelin.conf.ZeppelinConfiguration; import org.apache.zeppelin.notebook.repo.NotebookRepo; import org.apache.zeppelin.scheduler.Job; import org.apache.zeppelin.user.AuthenticationInfo; @@ -523,6 +524,7 @@ public class NoteManager { } else { note.setPath(parent.toString() + "/" + note.getName()); } + note.setCronSupported(ZeppelinConfiguration.create()); note.setLoaded(true); } return note; 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 94956ae..17d8c85 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 @@ -615,7 +615,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo @Test public void testScheduleDisabledWithName() throws InterruptedException, IOException { - System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_FOLDERS.getVarName(), "System/*"); + System.setProperty(ConfVars.ZEPPELIN_NOTEBOOK_CRON_FOLDERS.getVarName(), "/System"); try { final int timeout = 10; final String everySecondCron = "* * * * * ?"; @@ -638,8 +638,7 @@ public class NotebookTest extends AbstractInterpreterTest implements ParagraphJo terminateScheduledNote(note); afterStatusChangedListener = null; - final Note noteNameSystem = notebook.createNote("note1", anonymous); - noteNameSystem.setName("System/test1"); + final Note noteNameSystem = notebook.createNote("/System/test1", anonymous); final CountDownLatch jobsToExecuteCountNameSystem = new CountDownLatch(5); executeNewParagraphByCron(noteNameSystem, everySecondCron);