Repository: nifi Updated Branches: refs/heads/master f34d73e73 -> d39848f06
NIFI-894 Introducing a lock file to communicate from boostrap to NiFi that a shutdown is in progress. Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/d39848f0 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/d39848f0 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/d39848f0 Branch: refs/heads/master Commit: d39848f06eff3fa6c53a6632ccb8a9b67c60582f Parents: f34d73e Author: Bryan Bende <[email protected]> Authored: Tue Aug 25 15:43:52 2015 -0400 Committer: Bryan Bende <[email protected]> Committed: Thu Aug 27 10:06:02 2015 -0400 ---------------------------------------------------------------------- .../java/org/apache/nifi/bootstrap/RunNiFi.java | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/d39848f0/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java ---------------------------------------------------------------------- diff --git a/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java b/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java index 636fd4a..1299c6d 100644 --- a/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java +++ b/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java @@ -235,6 +235,16 @@ public class RunNiFi { return statusFile; } + public File getLockFile(final Logger logger) { + final File confDir = bootstrapConfigFile.getParentFile(); + final File nifiHome = confDir.getParentFile(); + final File bin = new File(nifiHome, "bin"); + final File lockFile = new File(bin, "nifi.lock"); + + logger.debug("Lock File: {}", lockFile); + return lockFile; + } + private Properties loadProperties(final Logger logger) throws IOException { final Properties props = new Properties(); final File statusFile = getStatusFile(logger); @@ -498,6 +508,12 @@ public class RunNiFi { return; } + // indicate that a stop command is in progress + final File lockFile = getLockFile(logger); + if (!lockFile.exists()) { + lockFile.createNewFile(); + } + final Properties nifiProps = loadProperties(logger); final String secretKey = nifiProps.getProperty("secret.key"); @@ -576,6 +592,10 @@ public class RunNiFi { } } catch (final IOException ioe) { logger.error("Failed to send shutdown command to port {} due to {}", new Object[]{port, ioe.toString(), ioe}); + } finally { + if (lockFile.exists() && !lockFile.delete()) { + logger.error("Failed to delete lock file {}; this file should be cleaned up manually", lockFile); + } } } @@ -624,6 +644,11 @@ public class RunNiFi { return; } + final File prevLockFile = getLockFile(cmdLogger); + if (prevLockFile.exists() && !prevLockFile.delete()){ + cmdLogger.warn("Failed to delete previous lock file {}; this file should be cleaned up manually", prevLockFile); + } + final ProcessBuilder builder = new ProcessBuilder(); if (!bootstrapConfigFile.exists()) { @@ -805,6 +830,12 @@ public class RunNiFi { return; } + final File lockFile = getLockFile(defaultLogger); + if (lockFile.exists()) { + defaultLogger.info("A shutdown was initiated. Will not restart NiFi"); + return; + } + final boolean previouslyStarted = getNifiStarted(); if (!previouslyStarted) { defaultLogger.info("NiFi never started. Will not restart NiFi");
