This is an automated email from the ASF dual-hosted git repository.
pvillard 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 30293b2 NIFI-9375 Refactored Registry using OSUtils from
nifi-bootstrap-utils
30293b2 is described below
commit 30293b23395b468929c233437d2c2ce9a4bcc837
Author: exceptionfactory <[email protected]>
AuthorDate: Fri Nov 12 16:02:09 2021 -0600
NIFI-9375 Refactored Registry using OSUtils from nifi-bootstrap-utils
Signed-off-by: Pierre Villard <[email protected]>
This closes #5520.
---
.../nifi-registry-bootstrap/pom.xml | 6 +-
.../nifi/registry/bootstrap/RunNiFiRegistry.java | 4 +-
.../nifi/registry/bootstrap/util/OSUtils.java | 134 ---------------------
3 files changed, 5 insertions(+), 139 deletions(-)
diff --git a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
index f1288f4..0008686 100644
--- a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
+++ b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/pom.xml
@@ -31,9 +31,9 @@
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
- <groupId>net.java.dev.jna</groupId>
- <artifactId>jna-platform</artifactId>
- <version>4.4.0</version>
+ <groupId>org.apache.nifi</groupId>
+ <artifactId>nifi-bootstrap-utils</artifactId>
+ <version>1.16.0-SNAPSHOT</version>
</dependency>
</dependencies>
diff --git
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
index b73dcfc..f75edcb 100644
---
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
+++
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/RunNiFiRegistry.java
@@ -17,7 +17,7 @@
package org.apache.nifi.registry.bootstrap;
import org.apache.commons.lang3.StringUtils;
-import org.apache.nifi.registry.bootstrap.util.OSUtils;
+import org.apache.nifi.bootstrap.util.OSUtils;
import org.apache.nifi.registry.util.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1024,7 +1024,7 @@ public class RunNiFiRegistry {
final Properties pidProperties = new Properties();
pidProperties.setProperty(PID_KEY,
String.valueOf(nifiRegistryPid));
savePidProperties(pidProperties, cmdLogger);
- cmdLogger.info("Launched Apache NiFi Registry with Process ID " +
pid);
+ cmdLogger.info("Launched Apache NiFi Registry with Process ID {}",
pid);
}
shutdownHook = new ShutdownHook(process, this, secretKey,
gracefulShutdownSeconds, loggingExecutor);
diff --git
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
b/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
deleted file mode 100644
index 4b70866..0000000
---
a/nifi-registry/nifi-registry-core/nifi-registry-bootstrap/src/main/java/org/apache/nifi/registry/bootstrap/util/OSUtils.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.nifi.registry.bootstrap.util;
-
-import com.sun.jna.Pointer;
-import com.sun.jna.platform.win32.Kernel32;
-import com.sun.jna.platform.win32.WinNT;
-import org.slf4j.Logger;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * OS specific utilities with generic method interfaces
- */
-public final class OSUtils {
- /**
- * @param process NiFi Process Reference
- * @param logger Logger Reference for Debug
- * @return Returns pid or null in-case pid could not be determined
- * This method takes {@link Process} and {@link Logger} and returns
- * the platform specific ProcessId for Unix like systems, a.k.a <b>pid</b>
- * In-case it fails to determine the pid, it will return Null.
- * Purpose for the Logger is to log any interaction for debugging.
- */
- private static Long getUnicesPid(final Process process, final Logger
logger) {
- try {
- final Class<?> procClass = process.getClass();
- final Field pidField = procClass.getDeclaredField("pid");
- pidField.setAccessible(true);
- final Object pidObject = pidField.get(process);
-
- logger.debug("PID Object = {}", pidObject);
-
- if (pidObject instanceof Number) {
- return ((Number) pidObject).longValue();
- }
- return null;
- } catch (final IllegalAccessException | NoSuchFieldException nsfe) {
- logger.debug("Could not find PID for child process due to {}",
nsfe);
- return null;
- }
- }
-
- /**
- * @param process NiFi Registry Process Reference
- * @param logger Logger Reference for Debug
- * @return Returns pid or null in-case pid could not be determined
- * This method takes {@link Process} and {@link Logger} and returns
- * the platform specific Handle for Win32 Systems, a.k.a <b>pid</b>
- * In-case it fails to determine the pid, it will return Null.
- * Purpose for the Logger is to log any interaction for debugging.
- */
- private static Long getWindowsProcessId(final Process process, final
Logger logger) {
- /* determine the pid on windows plattforms */
- try {
- Field f = process.getClass().getDeclaredField("handle");
- f.setAccessible(true);
- long handl = f.getLong(process);
-
- Kernel32 kernel = Kernel32.INSTANCE;
- WinNT.HANDLE handle = new WinNT.HANDLE();
- handle.setPointer(Pointer.createConstant(handl));
- int ret = kernel.GetProcessId(handle);
- logger.debug("Detected pid: {}", ret);
- return Long.valueOf(ret);
- } catch (final IllegalAccessException | NoSuchFieldException nsfe) {
- logger.debug("Could not find PID for child process due to {}",
nsfe);
- }
- return null;
- }
-
- /**
- * @param process NiFi Process Reference
- * @param logger Logger Reference for Debug
- * @return Returns pid or null in-case pid could not be determined
- * This method takes {@link Process} and {@link Logger} and returns
- * the platform specific ProcessId for Unix like systems or Handle for
Win32 Systems, a.k.a <b>pid</b>
- * In-case it fails to determine the pid, it will return Null.
- * Purpose for the Logger is to log any interaction for debugging.
- */
- public static Long getProcessId(final Process process, final Logger
logger) {
- /*
- * NiFi Registry built with Java 1.8 and running on Java 9.
Reflectively invoke Process.pid() on the given process
- * instance to get the PID of this Java process. Reflection is
required in this scenario due to NiFi Registry being
- * compiled on Java 1.8, which does not have the Process API
improvements available in Java 9.
- *
- * Otherwise, if NiFi is running on Java 1.8, attempt to get PID using
capabilities available on Java 1.8.
- *
- * TODO: When minimum Java version updated to Java 9+, this class
should be removed with the addition
- * of the pid method to the Process API.
- */
- Long pid = null;
- if (!System.getProperty("java.version").startsWith("1.")) {
- try {
- Method pidMethod = process.getClass().getMethod("pid");
- pidMethod.setAccessible(true);
- Object pidMethodResult = pidMethod.invoke(process);
- if (Long.class.isAssignableFrom(pidMethodResult.getClass())) {
- pid = (Long) pidMethodResult;
- } else {
- logger.debug("Could not determine PID for child process
because returned PID was not " +
- "assignable to type " + Long.class.getName());
- }
- } catch (NoSuchMethodException | IllegalAccessException |
InvocationTargetException e) {
- logger.debug("Could not find PID for child process due to {}",
e);
- }
- } else if
(process.getClass().getName().equals("java.lang.UNIXProcess")) {
- pid = getUnicesPid(process, logger);
- } else if
(process.getClass().getName().equals("java.lang.Win32Process")
- ||
process.getClass().getName().equals("java.lang.ProcessImpl")) {
- pid = getWindowsProcessId(process, logger);
- }
-
- return pid;
- }
-
-}