Skip to content

Commit b5097c7

Browse files
authored
HDDS-11347. Add rocks_tools_native lib check in Ozone CLI checknative subcommand (apache#7101)
1 parent fb0bf77 commit b5097c7

3 files changed

Lines changed: 47 additions & 6 deletions

File tree

hadoop-hdds/rocks-native/src/main/java/org/apache/hadoop/hdds/utils/NativeLibraryLoader.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import java.util.Optional;
3737
import java.util.concurrent.ConcurrentHashMap;
3838

39+
import static org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
40+
3941
/**
4042
* Class to load Native Libraries.
4143
*/
@@ -67,6 +69,10 @@ public static NativeLibraryLoader getInstance() {
6769
return instance;
6870
}
6971

72+
public static String getJniLibraryFileName() {
73+
return appendLibOsSuffix("lib" + ROCKS_TOOLS_NATIVE_LIBRARY_NAME);
74+
}
75+
7076
public static String getJniLibraryFileName(String libraryName) {
7177
return appendLibOsSuffix("lib" + libraryName);
7278
}
@@ -99,9 +105,12 @@ private static String appendLibOsSuffix(String libraryFileName) {
99105
return libraryFileName + getLibOsSuffix();
100106
}
101107

108+
public static boolean isLibraryLoaded() {
109+
return isLibraryLoaded(ROCKS_TOOLS_NATIVE_LIBRARY_NAME);
110+
}
111+
102112
public static boolean isLibraryLoaded(final String libraryName) {
103-
return getInstance().librariesLoaded
104-
.getOrDefault(libraryName, false);
113+
return getInstance().librariesLoaded.getOrDefault(libraryName, false);
105114
}
106115

107116
public synchronized boolean loadLibrary(final String libraryName, final List<String> dependentFiles) {

hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/checknative/CheckNative.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@
1919
package org.apache.hadoop.ozone.shell.checknative;
2020

2121
import org.apache.hadoop.hdds.cli.GenericCli;
22+
import org.apache.hadoop.hdds.utils.NativeLibraryLoader;
23+
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksObjectUtils;
2224
import org.apache.hadoop.io.erasurecode.ErasureCodeNative;
23-
import org.apache.hadoop.util.NativeCodeLoader;
2425
import picocli.CommandLine;
2526

27+
import java.util.Collections;
28+
29+
import static org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
30+
2631
/**
2732
* CLI command to check if native libraries are loaded.
2833
*/
@@ -36,12 +41,12 @@ public static void main(String[] argv) {
3641

3742
@Override
3843
public Void call() throws Exception {
39-
boolean nativeHadoopLoaded = NativeCodeLoader.isNativeCodeLoaded();
44+
boolean nativeHadoopLoaded = org.apache.hadoop.util.NativeCodeLoader.isNativeCodeLoaded();
4045
String hadoopLibraryName = "";
4146
String isalDetail = "";
4247
boolean isalLoaded = false;
4348
if (nativeHadoopLoaded) {
44-
hadoopLibraryName = NativeCodeLoader.getLibraryName();
49+
hadoopLibraryName = org.apache.hadoop.util.NativeCodeLoader.getLibraryName();
4550

4651
isalDetail = ErasureCodeNative.getLoadingFailureReason();
4752
if (isalDetail != null) {
@@ -50,12 +55,21 @@ public Void call() throws Exception {
5055
isalDetail = ErasureCodeNative.getLibraryName();
5156
isalLoaded = true;
5257
}
53-
5458
}
5559
System.out.println("Native library checking:");
5660
System.out.printf("hadoop: %b %s%n", nativeHadoopLoaded,
5761
hadoopLibraryName);
5862
System.out.printf("ISA-L: %b %s%n", isalLoaded, isalDetail);
63+
64+
// Attempt to load the rocks-tools lib
65+
boolean nativeRocksToolsLoaded = NativeLibraryLoader.getInstance().loadLibrary(
66+
ROCKS_TOOLS_NATIVE_LIBRARY_NAME,
67+
Collections.singletonList(ManagedRocksObjectUtils.getRocksDBLibFileName()));
68+
String rocksToolsDetail = "";
69+
if (nativeRocksToolsLoaded) {
70+
rocksToolsDetail = NativeLibraryLoader.getJniLibraryFileName();
71+
}
72+
System.out.printf("rocks-tools: %b %s%n", nativeRocksToolsLoaded, rocksToolsDetail);
5973
return null;
6074
}
6175
}

hadoop-ozone/tools/src/test/java/org/apache/hadoop/ozone/checknative/TestCheckNative.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.hadoop.ozone.checknative;
2020

2121
import org.apache.hadoop.ozone.shell.checknative.CheckNative;
22+
import org.apache.ozone.test.tag.Native;
2223
import org.junit.jupiter.api.BeforeAll;
2324
import org.junit.jupiter.api.AfterEach;
2425
import org.junit.jupiter.api.AfterAll;
@@ -27,6 +28,7 @@
2728
import java.io.PrintStream;
2829
import java.io.UnsupportedEncodingException;
2930

31+
import static org.apache.hadoop.hdds.utils.NativeConstants.ROCKS_TOOLS_NATIVE_LIBRARY_NAME;
3032
import static org.assertj.core.api.Assertions.assertThat;
3133
import static java.nio.charset.StandardCharsets.UTF_8;
3234

@@ -59,6 +61,22 @@ public void testCheckNativeNotLoaded() throws UnsupportedEncodingException {
5961
assertThat(stdOut).contains("Native library checking:");
6062
assertThat(stdOut).contains("hadoop: false");
6163
assertThat(stdOut).contains("ISA-L: false");
64+
assertThat(stdOut).contains("rocks-tools: false");
65+
}
66+
67+
@Native(ROCKS_TOOLS_NATIVE_LIBRARY_NAME)
68+
@Test
69+
public void testCheckNativeRocksToolsLoaded() throws UnsupportedEncodingException {
70+
outputStream.reset();
71+
new CheckNative()
72+
.run(new String[] {});
73+
// trims multiple spaces
74+
String stdOut = outputStream.toString(DEFAULT_ENCODING)
75+
.replaceAll(" +", " ");
76+
assertThat(stdOut).contains("Native library checking:");
77+
assertThat(stdOut).contains("hadoop: false");
78+
assertThat(stdOut).contains("ISA-L: false");
79+
assertThat(stdOut).contains("rocks-tools: true");
6280
}
6381

6482
@AfterEach

0 commit comments

Comments
 (0)