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

kdoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi-registry.git


The following commit(s) were added to refs/heads/master by this push:
     new d7be335  NIFIREG-222 Improving logic for determining working dir and 
docs dir
d7be335 is described below

commit d7be335e408f8df242f026bb0560120c86b7cec1
Author: Bryan Bende <[email protected]>
AuthorDate: Wed May 8 11:36:13 2019 -0400

    NIFIREG-222 Improving logic for determining working dir and docs dir
    
    This closes #186.
    
    Signed-off-by: Kevin Doran <[email protected]>
---
 .../nifi/registry/bootstrap/RunNiFiRegistry.java   | 29 ++++++++++++++++------
 .../apache/nifi/registry/jetty/JettyServer.java    | 23 +++++++++++++++--
 .../src/main/resources/conf/bootstrap.conf         |  6 +++++
 .../org/apache/nifi/registry/NiFiRegistry.java     |  6 ++++-
 4 files changed, 53 insertions(+), 11 deletions(-)

diff --git 
a/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
 
b/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
index 769d1c4..c3bc172 100644
--- 
a/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
+++ 
b/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
@@ -80,6 +80,7 @@ public class RunNiFiRegistry {
     public static final String DEFAULT_JAVA_CMD = "java";
     public static final String DEFAULT_PID_DIR = "bin";
     public static final String DEFAULT_LOG_DIR = "./logs";
+    public static final String DEFAULT_DOCS_DIR = "./docs";
 
     public static final String GRACEFUL_SHUTDOWN_PROP = 
"graceful.shutdown.seconds";
     public static final String DEFAULT_GRACEFUL_SHUTDOWN_VALUE = "20";
@@ -827,21 +828,32 @@ public class RunNiFiRegistry {
         final Map<String, String> props = new HashMap<>();
         props.putAll((Map) properties);
 
-        final String specifiedWorkingDir = props.get("working.dir");
-        if (specifiedWorkingDir != null) {
-            builder.directory(new File(specifiedWorkingDir));
-        }
+        // Determine the working dir for launching the NiFi Registry process
+        // The order of precedence is:
+        // 1) Specified in bootstrap.conf via working.dir
+        // 2) NIFI_REGISTRY_HOME env variable
+        // 3) Parent of bootstrap config file's parent
 
+        final File workingDir;
+        final String specifiedWorkingDir = props.get("working.dir");
+        final String nifiRegistryHome = System.getenv("NIFI_REGISTRY_HOME");
         final File bootstrapConfigAbsoluteFile = 
bootstrapConfigFile.getAbsoluteFile();
-        final File binDir = bootstrapConfigAbsoluteFile.getParentFile();
-        final File workingDir = binDir.getParentFile();
 
-        if (specifiedWorkingDir == null) {
-            builder.directory(workingDir);
+        if (!StringUtils.isBlank(specifiedWorkingDir)) {
+            workingDir = new File(specifiedWorkingDir.trim());
+        } else if (!StringUtils.isBlank(nifiRegistryHome)) {
+            workingDir = new File(nifiRegistryHome.trim());
+        } else {
+            final File binDir = bootstrapConfigAbsoluteFile.getParentFile();
+            workingDir = binDir.getParentFile();
         }
 
+        builder.directory(workingDir);
+
         final String nifiRegistryLogDir = 
replaceNull(System.getProperty("org.apache.nifi.registry.bootstrap.config.log.dir"),
 DEFAULT_LOG_DIR).trim();
 
+        final String nifiRegistryDocsDir = replaceNull(props.get("docs.dir"), 
DEFAULT_DOCS_DIR).trim();
+
         final String libFilename = replaceNull(props.get("lib.dir"), 
"./lib").trim();
         File libDir = getFile(libFilename, workingDir);
         File libSharedDir = getFile(libFilename + "/shared", workingDir);
@@ -944,6 +956,7 @@ public class RunNiFiRegistry {
         cmd.add("-Dnifi.registry.properties.file.path=" + 
nifiRegistryPropsFilename);
         cmd.add("-Dnifi.registry.bootstrap.config.file.path=" + 
bootstrapConfigFile.getAbsolutePath());
         cmd.add("-Dnifi.registry.bootstrap.listen.port=" + listenPort);
+        cmd.add("-Dnifi.registry.bootstrap.config.docs.dir=" + 
nifiRegistryDocsDir);
         cmd.add("-Dapp=NiFiRegistry");
         cmd.add("-Dorg.apache.nifi.registry.bootstrap.config.log.dir=" + 
nifiRegistryLogDir);
         cmd.add("org.apache.nifi.registry.NiFiRegistry");
diff --git 
a/nifi-registry-core/nifi-registry-jetty/src/main/java/org/apache/nifi/registry/jetty/JettyServer.java
 
b/nifi-registry-core/nifi-registry-jetty/src/main/java/org/apache/nifi/registry/jetty/JettyServer.java
index c202a5b..0eb6d88 100644
--- 
a/nifi-registry-core/nifi-registry-jetty/src/main/java/org/apache/nifi/registry/jetty/JettyServer.java
+++ 
b/nifi-registry-core/nifi-registry-jetty/src/main/java/org/apache/nifi/registry/jetty/JettyServer.java
@@ -78,18 +78,20 @@ public class JettyServer {
 
     private final NiFiRegistryProperties properties;
     private final CryptoKeyProvider masterKeyProvider;
+    private final String docsLocation;
     private final Server server;
 
     private WebAppContext webUiContext;
     private WebAppContext webApiContext;
     private WebAppContext webDocsContext;
 
-    public JettyServer(final NiFiRegistryProperties properties, final 
CryptoKeyProvider cryptoKeyProvider) {
+    public JettyServer(final NiFiRegistryProperties properties, final 
CryptoKeyProvider cryptoKeyProvider, final String docsLocation) {
         final QueuedThreadPool threadPool = new 
QueuedThreadPool(properties.getWebThreads());
         threadPool.setName("NiFi Registry Web Server");
 
         this.properties = properties;
         this.masterKeyProvider = cryptoKeyProvider;
+        this.docsLocation = docsLocation;
         this.server = new Server(threadPool);
 
         // enable the annotation based configuration to ensure the jsp 
container is initialized properly
@@ -373,7 +375,24 @@ public class JettyServer {
         resourceHandler.setDirectoriesListed(false);
 
         // load the docs directory
-        final File docsDir = Paths.get("docs").toRealPath().toFile();
+        String docsDirectory = docsLocation;
+        if (StringUtils.isBlank(docsDirectory)) {
+            docsDirectory = "docs";
+        }
+
+        File docsDir;
+        try {
+            docsDir = Paths.get(docsDirectory).toRealPath().toFile();
+        } catch (IOException ex) {
+            logger.warn("Directory '" + docsDirectory + "' is missing. Some 
documentation will be unavailable.");
+            docsDir = new File(docsDirectory).getAbsoluteFile();
+            final boolean made = docsDir.mkdirs();
+            if (!made) {
+                logger.error("Failed to create 'docs' directory!");
+                startUpFailure(new IOException(docsDir.getAbsolutePath() + " 
could not be created"));
+            }
+        }
+
         final Resource docsResource = Resource.newResource(docsDir);
 
         // load the rest documentation
diff --git 
a/nifi-registry-core/nifi-registry-resources/src/main/resources/conf/bootstrap.conf
 
b/nifi-registry-core/nifi-registry-resources/src/main/resources/conf/bootstrap.conf
index 637eb64..e4bf313 100644
--- 
a/nifi-registry-core/nifi-registry-resources/src/main/resources/conf/bootstrap.conf
+++ 
b/nifi-registry-core/nifi-registry-resources/src/main/resources/conf/bootstrap.conf
@@ -21,9 +21,15 @@ java=java
 # Username to use when running nifi-registry. This value will be ignored on 
Windows.
 run.as=
 
+# Configure the working directory for launching the NiFi Registry process
+# If not specified, the working directory will fall back to using the 
NIFI_REGISTRY_HOME env variable
+# If the environment variable is not specified, the working directory will 
fall back to the parent of this file's parent
+working.dir=
+
 # Configure where nifi-registry's lib and conf directories live
 lib.dir=./lib
 conf.dir=./conf
+docs.dir=./docs
 
 # How long to wait after telling nifi-registry to shutdown before explicitly 
killing the Process
 graceful.shutdown.seconds=20
diff --git 
a/nifi-registry-core/nifi-registry-runtime/src/main/java/org/apache/nifi/registry/NiFiRegistry.java
 
b/nifi-registry-core/nifi-registry-runtime/src/main/java/org/apache/nifi/registry/NiFiRegistry.java
index 982b9ea..455ab9d 100644
--- 
a/nifi-registry-core/nifi-registry-runtime/src/main/java/org/apache/nifi/registry/NiFiRegistry.java
+++ 
b/nifi-registry-core/nifi-registry-runtime/src/main/java/org/apache/nifi/registry/NiFiRegistry.java
@@ -44,9 +44,11 @@ public class NiFiRegistry {
 
     public static final String NIFI_REGISTRY_PROPERTIES_FILE_PATH_PROPERTY = 
"nifi.registry.properties.file.path";
     public static final String NIFI_REGISTRY_BOOTSTRAP_FILE_PATH_PROPERTY = 
"nifi.registry.bootstrap.config.file.path";
+    public static final String NIFI_REGISTRY_BOOTSTRAP_DOCS_DIR_PROPERTY = 
"nifi.registry.bootstrap.config.docs.dir";
 
     public static final String RELATIVE_BOOTSTRAP_FILE_LOCATION = 
"conf/bootstrap.conf";
     public static final String RELATIVE_PROPERTIES_FILE_LOCATION = 
"conf/nifi-registry.properties";
+    public static final String RELATIVE_DOCS_LOCATION = "docs";
 
     private final JettyServer server;
     private final BootstrapListener bootstrapListener;
@@ -104,8 +106,10 @@ public class NiFiRegistry {
         SLF4JBridgeHandler.removeHandlersForRootLogger();
         SLF4JBridgeHandler.install();
 
+        final String docsDir = 
System.getProperty(NIFI_REGISTRY_BOOTSTRAP_DOCS_DIR_PROPERTY, 
RELATIVE_DOCS_LOCATION);
+
         final long startTime = System.nanoTime();
-        server = new JettyServer(properties, masterKeyProvider);
+        server = new JettyServer(properties, masterKeyProvider, docsDir);
 
         if (shutdown) {
             LOGGER.info("NiFi Registry has been shutdown via NiFi Registry 
Bootstrap. Will not start Controller");

Reply via email to