You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jp...@apache.org on 2016/07/18 21:43:41 UTC
nifi git commit: NIFI-929 Changing RunNiFi to write just the pid to
nifi.pid and the full status to nifi.status
Repository: nifi
Updated Branches:
refs/heads/master 41c0f19e4 -> e308c6464
NIFI-929 Changing RunNiFi to write just the pid to nifi.pid and the full status to nifi.status
This closes #668
Signed-off-by: jpercivall <jo...@yahoo.com>
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/e308c646
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/e308c646
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/e308c646
Branch: refs/heads/master
Commit: e308c6464c543eee670e6db536345113b7f4d853
Parents: 41c0f19
Author: Bryan Bende <bb...@apache.org>
Authored: Mon Jul 18 13:30:15 2016 -0400
Committer: jpercivall <jo...@yahoo.com>
Committed: Mon Jul 18 17:27:15 2016 -0400
----------------------------------------------------------------------
.../java/org/apache/nifi/bootstrap/RunNiFi.java | 62 +++++++++++++++++---
1 file changed, 55 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/e308c646/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 bc6c241..657620f 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
@@ -54,6 +54,7 @@ import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.bootstrap.notification.NotificationType;
import org.apache.nifi.util.file.FileUtils;
import org.slf4j.Logger;
@@ -95,8 +96,11 @@ public class RunNiFi {
public static final String NIFI_PID_DIR_PROP = "org.apache.nifi.bootstrap.config.pid.dir";
public static final String NIFI_PID_FILE_NAME = "nifi.pid";
+ public static final String NIFI_STATUS_FILE_NAME = "nifi.status";
public static final String NIFI_LOCK_FILE_NAME = "nifi.lock";
+ public static final String PID_KEY = "pid";
+
public static final int STARTUP_WAIT_SECONDS = 60;
public static final String SHUTDOWN_CMD = "SHUTDOWN";
@@ -349,10 +353,14 @@ public class RunNiFi {
return statusFile;
}
- File getStatusFile(final Logger logger) throws IOException{
+ File getPidFile(final Logger logger) throws IOException{
return getBootstrapFile(logger,NIFI_PID_DIR_PROP,DEFAULT_PID_DIR,NIFI_PID_FILE_NAME);
}
+ File getStatusFile(final Logger logger) throws IOException{
+ return getBootstrapFile(logger,NIFI_PID_DIR_PROP,DEFAULT_PID_DIR,NIFI_STATUS_FILE_NAME);
+ }
+
File getLockFile(final Logger logger) throws IOException{
return getBootstrapFile(logger,NIFI_PID_DIR_PROP,DEFAULT_PID_DIR,NIFI_LOCK_FILE_NAME);
}
@@ -381,6 +389,11 @@ public class RunNiFi {
}
private synchronized void saveProperties(final Properties nifiProps, final Logger logger) throws IOException {
+ final String pid = nifiProps.getProperty(PID_KEY);
+ if (!StringUtils.isBlank(pid)) {
+ writePidFile(pid, logger);
+ }
+
final File statusFile = getStatusFile(logger);
if (statusFile.exists() && !statusFile.delete()) {
logger.warn("Failed to delete {}", statusFile);
@@ -409,6 +422,35 @@ public class RunNiFi {
logger.debug("Saved Properties {} to {}", new Object[]{nifiProps, statusFile});
}
+ private synchronized void writePidFile(final String pid, final Logger logger) throws IOException {
+ final File pidFile = getPidFile(logger);
+ if (pidFile.exists() && !pidFile.delete()) {
+ logger.warn("Failed to delete {}", pidFile);
+ }
+
+ if (!pidFile.createNewFile()) {
+ throw new IOException("Failed to create file " + pidFile);
+ }
+
+ try {
+ final Set<PosixFilePermission> perms = new HashSet<>();
+ perms.add(PosixFilePermission.OWNER_READ);
+ perms.add(PosixFilePermission.OWNER_WRITE);
+ Files.setPosixFilePermissions(pidFile.toPath(), perms);
+ } catch (final Exception e) {
+ logger.warn("Failed to set permissions so that only the owner can read pid file {}; "
+ + "this may allows others to have access to the key needed to communicate with NiFi. "
+ + "Permissions should be changed so that only the owner can read this file", pidFile);
+ }
+
+ try (final FileOutputStream fos = new FileOutputStream(pidFile)) {
+ fos.write(pid.getBytes(StandardCharsets.UTF_8));
+ fos.getFD().sync();
+ }
+
+ logger.debug("Saved Pid {} to {}", new Object[]{pid, pidFile});
+ }
+
private boolean isPingSuccessful(final int port, final String secretKey, final Logger logger) {
logger.debug("Pinging {}", port);
@@ -449,7 +491,7 @@ public class RunNiFi {
return port;
}
- final String pid = props.getProperty("pid");
+ final String pid = props.getProperty(PID_KEY);
logger.debug("PID in status file is {}", pid);
if (pid != null) {
final boolean procRunning = isProcessRunning(pid, logger);
@@ -512,7 +554,7 @@ public class RunNiFi {
}
final String portValue = props.getProperty("port");
- final String pid = props.getProperty("pid");
+ final String pid = props.getProperty(PID_KEY);
final String secretKey = props.getProperty("secret.key");
if (portValue == null && pid == null) {
@@ -696,8 +738,9 @@ public class RunNiFi {
final Properties nifiProps = loadProperties(logger);
final String secretKey = nifiProps.getProperty("secret.key");
- final String pid = nifiProps.getProperty("pid");
+ final String pid = nifiProps.getProperty(PID_KEY);
final File statusFile = getStatusFile(logger);
+ final File pidFile = getPidFile(logger);
try (final Socket socket = new Socket()) {
logger.debug("Connecting to NiFi instance");
@@ -766,6 +809,11 @@ public class RunNiFi {
if (statusFile.exists() && !statusFile.delete()) {
logger.error("Failed to delete status file {}; this file should be cleaned up manually", statusFile);
}
+
+ if (pidFile.exists() && !pidFile.delete()) {
+ logger.error("Failed to delete pid file {}; this file should be cleaned up manually", pidFile);
+ }
+
logger.info("NiFi has finished shutting down.");
}
} else {
@@ -1008,7 +1056,7 @@ public class RunNiFi {
if (pid != null) {
nifiPid = pid;
final Properties nifiProps = new Properties();
- nifiProps.setProperty("pid", String.valueOf(nifiPid));
+ nifiProps.setProperty(PID_KEY, String.valueOf(nifiPid));
saveProperties(nifiProps, cmdLogger);
}
@@ -1070,7 +1118,7 @@ public class RunNiFi {
if (pid != null) {
nifiPid = pid;
final Properties nifiProps = new Properties();
- nifiProps.setProperty("pid", String.valueOf(nifiPid));
+ nifiProps.setProperty(PID_KEY, String.valueOf(nifiPid));
saveProperties(nifiProps, defaultLogger);
}
@@ -1223,7 +1271,7 @@ public class RunNiFi {
final Properties nifiProps = new Properties();
if (nifiPid != -1) {
- nifiProps.setProperty("pid", String.valueOf(nifiPid));
+ nifiProps.setProperty(PID_KEY, String.valueOf(nifiPid));
}
nifiProps.setProperty("port", String.valueOf(ccPort));
nifiProps.setProperty("secret.key", secretKey);