HDFS-16014: Fix an issue in checking native pmdk lib by 'hadoop checknative' command (#3762)

This commit is contained in:
PHILO-HE 2021-12-14 17:15:12 +08:00 committed by GitHub
parent d29f0e83a9
commit 8e08f43e03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 4 deletions

View File

@ -141,7 +141,7 @@ public class NativeIO {
} }
} }
// Denotes the state of supporting PMDK. The value is set by JNI. // Denotes the state of supporting PMDK. The actual value is set via JNI.
private static SupportState pmdkSupportState = private static SupportState pmdkSupportState =
SupportState.UNSUPPORTED; SupportState.UNSUPPORTED;

View File

@ -35,13 +35,14 @@
#endif #endif
PmdkLibLoader * pmdkLoader; PmdkLibLoader * pmdkLoader;
// 1 represents loaded. Otherwise, not loaded.
int pmdkLoaded;
/** /**
* pmdk_load.c * pmdk_load.c
* Utility of loading the libpmem library and the required functions. * Utility of loading the libpmem library and the required functions.
* Building of this codes won't rely on any libpmem source codes, but running * Building of this codes won't rely on any libpmem source codes, but running
* into this will rely on successfully loading of the dynamic library. * into this will rely on successfully loading of the dynamic library.
*
*/ */
static const char* load_functions() { static const char* load_functions() {
@ -56,6 +57,10 @@ static const char* load_functions() {
return NULL; return NULL;
} }
/**
* It should be idempotent to call this function for checking
* whether PMDK lib is successfully loaded.
*/
void load_pmdk_lib(char* err, size_t err_len) { void load_pmdk_lib(char* err, size_t err_len) {
const char* errMsg; const char* errMsg;
const char* library = NULL; const char* library = NULL;
@ -67,10 +72,13 @@ void load_pmdk_lib(char* err, size_t err_len) {
err[0] = '\0'; err[0] = '\0';
if (pmdkLoader != NULL) { if (pmdkLoaded == 1) {
return; return;
} }
if (pmdkLoader == NULL) {
pmdkLoader = calloc(1, sizeof(PmdkLibLoader)); pmdkLoader = calloc(1, sizeof(PmdkLibLoader));
}
// Load PMDK library // Load PMDK library
#ifdef UNIX #ifdef UNIX
@ -103,4 +111,5 @@ void load_pmdk_lib(char* err, size_t err_len) {
} }
pmdkLoader->libname = strdup(library); pmdkLoader->libname = strdup(library);
pmdkLoaded = 1;
} }