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]

Reply via email to