This is an automated email from the ASF dual-hosted git repository.
siyao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new b5097c76da HDDS-11347. Add rocks_tools_native lib check in Ozone CLI
checknative subcommand (#7101)
b5097c76da is described below
commit b5097c76daeaf92e9ecbf292d17b0154520f8aa7
Author: Siyao Meng <[email protected]>
AuthorDate: Thu Sep 26 07:56:07 2024 -0700
HDDS-11347. Add rocks_tools_native lib check in Ozone CLI checknative
subcommand (#7101)
---
.../hadoop/hdds/utils/NativeLibraryLoader.java | 13 +++++++++++--
.../ozone/shell/checknative/CheckNative.java | 22 ++++++++++++++++++----
.../hadoop/ozone/checknative/TestCheckNative.java | 18 ++++++++++++++++++
3 files changed, 47 insertions(+), 6 deletions(-)
diff --git
a/hadoop-hdds/rocks-native/src/main/java/org/apache/hadoop/hdds/utils/NativeLibraryLoader.java
b/hadoop-hdds/rocks-native/src/main/java/org/apache/hadoop/hdds/utils/NativeLibraryLoader.java
index ce424c930e..d93933dee3 100644
---
a/hadoop-hdds/rocks-native/src/main/java/org/apache/hadoop/hdds/utils/NativeLibraryLoader.java
+++
b/hadoop-hdds/rocks-native/src/main/java/org/apache/hadoop/hdds/utils/NativeLibraryLoader.java
@@ -36,6 +36,8 @@ import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
+import static
org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
+
/**
* Class to load Native Libraries.
*/
@@ -67,6 +69,10 @@ public class NativeLibraryLoader {
return instance;
}
+ public static String getJniLibraryFileName() {
+ return appendLibOsSuffix("lib" + ROCKS_TOOLS_NATIVE_LIBRARY_NAME);
+ }
+
public static String getJniLibraryFileName(String libraryName) {
return appendLibOsSuffix("lib" + libraryName);
}
@@ -99,9 +105,12 @@ public class NativeLibraryLoader {
return libraryFileName + getLibOsSuffix();
}
+ public static boolean isLibraryLoaded() {
+ return isLibraryLoaded(ROCKS_TOOLS_NATIVE_LIBRARY_NAME);
+ }
+
public static boolean isLibraryLoaded(final String libraryName) {
- return getInstance().librariesLoaded
- .getOrDefault(libraryName, false);
+ return getInstance().librariesLoaded.getOrDefault(libraryName, false);
}
public synchronized boolean loadLibrary(final String libraryName, final
List<String> dependentFiles) {
diff --git
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/checknative/CheckNative.java
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/checknative/CheckNative.java
index 63b2b425c6..f19548a1fa 100644
---
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/checknative/CheckNative.java
+++
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/checknative/CheckNative.java
@@ -19,10 +19,15 @@
package org.apache.hadoop.ozone.shell.checknative;
import org.apache.hadoop.hdds.cli.GenericCli;
+import org.apache.hadoop.hdds.utils.NativeLibraryLoader;
+import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksObjectUtils;
import org.apache.hadoop.io.erasurecode.ErasureCodeNative;
-import org.apache.hadoop.util.NativeCodeLoader;
import picocli.CommandLine;
+import java.util.Collections;
+
+import static
org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
+
/**
* CLI command to check if native libraries are loaded.
*/
@@ -36,12 +41,12 @@ public class CheckNative extends GenericCli {
@Override
public Void call() throws Exception {
- boolean nativeHadoopLoaded = NativeCodeLoader.isNativeCodeLoaded();
+ boolean nativeHadoopLoaded =
org.apache.hadoop.util.NativeCodeLoader.isNativeCodeLoaded();
String hadoopLibraryName = "";
String isalDetail = "";
boolean isalLoaded = false;
if (nativeHadoopLoaded) {
- hadoopLibraryName = NativeCodeLoader.getLibraryName();
+ hadoopLibraryName =
org.apache.hadoop.util.NativeCodeLoader.getLibraryName();
isalDetail = ErasureCodeNative.getLoadingFailureReason();
if (isalDetail != null) {
@@ -50,12 +55,21 @@ public class CheckNative extends GenericCli {
isalDetail = ErasureCodeNative.getLibraryName();
isalLoaded = true;
}
-
}
System.out.println("Native library checking:");
System.out.printf("hadoop: %b %s%n", nativeHadoopLoaded,
hadoopLibraryName);
System.out.printf("ISA-L: %b %s%n", isalLoaded, isalDetail);
+
+ // Attempt to load the rocks-tools lib
+ boolean nativeRocksToolsLoaded =
NativeLibraryLoader.getInstance().loadLibrary(
+ ROCKS_TOOLS_NATIVE_LIBRARY_NAME,
+
Collections.singletonList(ManagedRocksObjectUtils.getRocksDBLibFileName()));
+ String rocksToolsDetail = "";
+ if (nativeRocksToolsLoaded) {
+ rocksToolsDetail = NativeLibraryLoader.getJniLibraryFileName();
+ }
+ System.out.printf("rocks-tools: %b %s%n", nativeRocksToolsLoaded,
rocksToolsDetail);
return null;
}
}
diff --git
a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/checknative/TestCheckNative.java
b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/checknative/TestCheckNative.java
index 8e29105633..0dc1fde57f 100644
---
a/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/checknative/TestCheckNative.java
+++
b/hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/checknative/TestCheckNative.java
@@ -19,6 +19,7 @@
package org.apache.hadoop.ozone.checknative;
import org.apache.hadoop.ozone.shell.checknative.CheckNative;
+import org.apache.ozone.test.tag.Native;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.AfterAll;
@@ -27,6 +28,7 @@ import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
+import static
org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static java.nio.charset.StandardCharsets.UTF_8;
@@ -59,6 +61,22 @@ public class TestCheckNative {
assertThat(stdOut).contains("Native library checking:");
assertThat(stdOut).contains("hadoop: false");
assertThat(stdOut).contains("ISA-L: false");
+ assertThat(stdOut).contains("rocks-tools: false");
+ }
+
+ @Native(ROCKS_TOOLS_NATIVE_LIBRARY_NAME)
+ @Test
+ public void testCheckNativeRocksToolsLoaded() throws
UnsupportedEncodingException {
+ outputStream.reset();
+ new CheckNative()
+ .run(new String[] {});
+ // trims multiple spaces
+ String stdOut = outputStream.toString(DEFAULT_ENCODING)
+ .replaceAll(" +", " ");
+ assertThat(stdOut).contains("Native library checking:");
+ assertThat(stdOut).contains("hadoop: false");
+ assertThat(stdOut).contains("ISA-L: false");
+ assertThat(stdOut).contains("rocks-tools: true");
}
@AfterEach
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]