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

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 6eff8a9262 NIFI-13045 Support Bootstrap Listen Port property in MiNiFi
6eff8a9262 is described below

commit 6eff8a9262522b9458b195d15b01358538dba912
Author: Ferenc Kis <[email protected]>
AuthorDate: Mon Apr 15 15:14:32 2024 +0200

    NIFI-13045 Support Bootstrap Listen Port property in MiNiFi
    
    This closes #8648
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../nifi/minifi/bootstrap/command/StartRunner.java | 25 +++++++++++++++++++---
 .../service/MiNiFiExecCommandProvider.java         |  3 ++-
 .../minifi/bootstrap/service/MiNiFiListener.java   |  6 +++---
 .../nifi/minifi/bootstrap/BootstrapListener.java   |  4 ++--
 .../apache/nifi/minifi/StandardMiNiFiServer.java   |  3 ++-
 5 files changed, 31 insertions(+), 10 deletions(-)

diff --git 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/command/StartRunner.java
 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/command/StartRunner.java
index af331fcc2b..f4d3ad8d18 100644
--- 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/command/StartRunner.java
+++ 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/command/StartRunner.java
@@ -25,6 +25,7 @@ import static 
org.apache.nifi.minifi.bootstrap.RunMiNiFi.STATUS_FILE_PID_KEY;
 import static org.apache.nifi.minifi.bootstrap.RunMiNiFi.UNINITIALIZED;
 import static org.apache.nifi.minifi.bootstrap.Status.ERROR;
 import static org.apache.nifi.minifi.bootstrap.Status.OK;
+import static 
org.apache.nifi.minifi.bootstrap.service.MiNiFiExecCommandProvider.NIFI_BOOTSTRAP_LISTEN_PORT;
 import static 
org.apache.nifi.minifi.commons.api.MiNiFiCommandState.FULLY_APPLIED;
 import static 
org.apache.nifi.minifi.commons.api.MiNiFiCommandState.NOT_APPLIED_WITH_RESTART;
 import static org.apache.nifi.minifi.commons.api.MiNiFiConstants.RAW_EXTENSION;
@@ -129,7 +130,7 @@ public class StartRunner implements CommandRunner {
         
generateMiNiFiProperties(bootstrapFileProvider.getProtectedBootstrapProperties(),
 confDir);
         
regenerateFlowConfiguration(bootstrapProperties.getProperty(MiNiFiProperties.NIFI_MINIFI_FLOW_CONFIG.getKey()));
 
-        Process process = startMiNiFi();
+        Process process = startMiNiFi(bootstrapProperties);
         try {
             while (true) {
                 if (process.isAlive()) {
@@ -279,15 +280,33 @@ public class StartRunner implements CommandRunner {
         }
     }
 
-    private Process startMiNiFi() throws IOException {
+    private Process startMiNiFi(BootstrapProperties bootstrapProperties) 
throws IOException {
+        int bootstrapListenPort = 
parseBootstrapListenPort(bootstrapProperties);
+
         MiNiFiListener listener = new MiNiFiListener();
-        listenPort = listener.start(runMiNiFi, bootstrapFileProvider, 
configurationChangeListener);
+        listenPort = listener.start(runMiNiFi, bootstrapListenPort, 
bootstrapFileProvider, configurationChangeListener);
 
         CMD_LOGGER.info("Starting Apache MiNiFi...");
 
         return startMiNiFiProcess(getProcessBuilder());
     }
 
+    private int parseBootstrapListenPort(BootstrapProperties 
bootstrapProperties) {
+        String bootstrapListenPort = 
bootstrapProperties.getProperty(NIFI_BOOTSTRAP_LISTEN_PORT);
+        int parsedBootstrapListenPort = 
Optional.ofNullable(bootstrapListenPort)
+            .map(String::trim)
+            .map(port -> {
+                try {
+                    return Integer.parseInt(port);
+                } catch (NumberFormatException e) {
+                    throw new IllegalArgumentException("Unable to parse 
Bootstrap listen port, please provide a valid port for " + 
NIFI_BOOTSTRAP_LISTEN_PORT);
+                }
+            })
+            .orElse(0);
+        CMD_LOGGER.info("Boostrap listen port {}", parsedBootstrapListenPort);
+        return parsedBootstrapListenPort;
+    }
+
     private ProcessBuilder getProcessBuilder() throws IOException {
         ProcessBuilder builder = new ProcessBuilder();
         File workingDir = getWorkingDir();
diff --git 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiExecCommandProvider.java
 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiExecCommandProvider.java
index 0e99379a6d..8c0035ff7c 100644
--- 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiExecCommandProvider.java
+++ 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiExecCommandProvider.java
@@ -45,6 +45,8 @@ public class MiNiFiExecCommandProvider {
     public static final String DEFAULT_BOOTSTRAP_LOG_FILE_NAME = 
"minifi-bootstrap";
     public static final String DEFAULT_LOG_FILE_EXTENSION = "log";
 
+    public static final String NIFI_BOOTSTRAP_LISTEN_PORT = 
"nifi.bootstrap.listen.port";
+
     private static final String PROPERTIES_FILE_KEY = "props.file";
     private static final String LIB_DIR_KEY = "lib.dir";
     private static final String JAVA_COMMAND_KEY = "java";
@@ -63,7 +65,6 @@ public class MiNiFiExecCommandProvider {
     private static final String MINIFI_CLASS_NAME = "MiNiFi";
     private static final String MINIFI_FULLY_QUALIFIED_CLASS_NAME = 
"org.apache.nifi.minifi." + MINIFI_CLASS_NAME;
     private static final String SYSTEM_PROPERTY_TEMPLATE = "-D%s=%s";
-    private static final String NIFI_BOOTSTRAP_LISTEN_PORT = 
"nifi.bootstrap.listen.port";
     private static final String APP = "app";
     private static final String CLASSPATH = "-classpath";
     private static final String BIN_DIRECTORY = "bin";
diff --git 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiListener.java
 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiListener.java
index 90f90201cd..911265579d 100644
--- 
a/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiListener.java
+++ 
b/minifi/minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/service/MiNiFiListener.java
@@ -38,13 +38,13 @@ public class MiNiFiListener {
     private Listener listener;
     private ServerSocket serverSocket;
 
-    public int start(RunMiNiFi runner, BootstrapFileProvider 
bootstrapFileProvider, ConfigurationChangeListener configurationChangeListener) 
throws IOException {
+    public int start(RunMiNiFi runner, int listenPort, BootstrapFileProvider 
bootstrapFileProvider, ConfigurationChangeListener configurationChangeListener) 
throws IOException {
         serverSocket = new ServerSocket();
-        serverSocket.bind(new InetSocketAddress("localhost", 0));
+        serverSocket.bind(new InetSocketAddress("localhost", listenPort));
 
         listener = new Listener(serverSocket, new BootstrapCodec(runner, 
bootstrapFileProvider, configurationChangeListener));
         Thread listenThread = new Thread(listener);
-        listenThread.setName("MiNiFi listener");
+        listenThread.setName("Listen to MiNiFi");
         listenThread.setDaemon(true);
         listenThread.start();
         return serverSocket.getLocalPort();
diff --git 
a/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-runtime/src/main/java/org/apache/nifi/minifi/bootstrap/BootstrapListener.java
 
b/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-runtime/src/main/java/org/apache/nifi/minifi/bootstrap/BootstrapListener.java
index 07791b1ea8..911ddc44a7 100644
--- 
a/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-runtime/src/main/java/org/apache/nifi/minifi/bootstrap/BootstrapListener.java
+++ 
b/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-runtime/src/main/java/org/apache/nifi/minifi/bootstrap/BootstrapListener.java
@@ -73,11 +73,11 @@ public class BootstrapListener implements 
BootstrapCommunicator {
         registerHandlers();
     }
 
-    public void start() throws IOException {
+    public void start(int listenPort) throws IOException {
         logger.debug("Starting Bootstrap Listener to communicate with 
Bootstrap Port {}", bootstrapPort);
 
         ServerSocket serverSocket = new ServerSocket();
-        serverSocket.bind(new InetSocketAddress("localhost", 0));
+        serverSocket.bind(new InetSocketAddress("localhost", listenPort));
         serverSocket.setSoTimeout(2000);
 
         int localPort = serverSocket.getLocalPort();
diff --git 
a/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-server/src/main/java/org/apache/nifi/minifi/StandardMiNiFiServer.java
 
b/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-server/src/main/java/org/apache/nifi/minifi/StandardMiNiFiServer.java
index 1b648a5a0b..132be38e59 100644
--- 
a/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-server/src/main/java/org/apache/nifi/minifi/StandardMiNiFiServer.java
+++ 
b/minifi/minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-server/src/main/java/org/apache/nifi/minifi/StandardMiNiFiServer.java
@@ -127,7 +127,8 @@ public class StandardMiNiFiServer extends 
HeadlessNiFiServer implements MiNiFiSe
                 }
 
                 bootstrapListener = new BootstrapListener(this, port);
-                bootstrapListener.start();
+                NiFiProperties niFiProperties = getNiFiProperties();
+                
bootstrapListener.start(niFiProperties.getDefaultListenerBootstrapPort());
             } catch (IOException e) {
                 throw new UncheckedIOException("Failed to start MiNiFi because 
of Bootstrap listener initialization error", e);
             } catch (NumberFormatException e) {

Reply via email to