MNEMONIC-463: Should load native library in memory allocator service lazily
diff --git a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMemServiceImpl.java b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMemServiceImpl.java
index 1617c1b..240583c 100644
--- a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMemServiceImpl.java
+++ b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMemServiceImpl.java
@@ -30,12 +30,14 @@
import java.util.Set;
public class PMemServiceImpl implements NonVolatileMemoryAllocatorService {
- static {
+ private static boolean nativeLoaded = false;
+ static void loadNativeLibrary() {
try {
NativeLibraryLoader.loadFromJar("pmemallocator");
} catch (Exception e) {
throw new Error(e);
}
+ nativeLoaded = true;
}
@Override
@@ -45,6 +47,9 @@
@Override
public long init(long capacity, String uri, boolean isnew) {
+ if (!nativeLoaded) {
+ loadNativeLibrary();
+ }
return ninit(capacity, uri, isnew);
}
diff --git a/mnemonic-memory-services/mnemonic-nvml-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/VMemServiceImpl.java b/mnemonic-memory-services/mnemonic-nvml-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/VMemServiceImpl.java
index 9171154..805dc27 100644
--- a/mnemonic-memory-services/mnemonic-nvml-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/VMemServiceImpl.java
+++ b/mnemonic-memory-services/mnemonic-nvml-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/VMemServiceImpl.java
@@ -33,12 +33,14 @@
import java.util.HashSet;
public class VMemServiceImpl implements VolatileMemoryAllocatorService {
- static {
+ private static boolean nativeLoaded = false;
+ static void loadNativeLibrary() {
try {
NativeLibraryLoader.loadFromJar("vmemallocator");
} catch (Exception e) {
throw new Error(e);
}
+ nativeLoaded = true;
}
protected Map<Long, Long> m_info = Collections.synchronizedMap(new HashMap<Long, Long>());
@@ -50,6 +52,9 @@
@Override
public long init(long capacity, String uri, boolean isnew) {
+ if (!nativeLoaded) {
+ loadNativeLibrary();
+ }
long ret = ninit(capacity, uri, isnew);
m_info.put(ret, capacity);
return ret;
diff --git a/mnemonic-memory-services/mnemonic-pmalloc-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMallocServiceImpl.java b/mnemonic-memory-services/mnemonic-pmalloc-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMallocServiceImpl.java
index 0257d75..0bf478f 100644
--- a/mnemonic-memory-services/mnemonic-pmalloc-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMallocServiceImpl.java
+++ b/mnemonic-memory-services/mnemonic-pmalloc-service/src/main/java/org/apache/mnemonic/service/memory/internal/PMallocServiceImpl.java
@@ -30,12 +30,14 @@
import java.util.Set;
public class PMallocServiceImpl implements NonVolatileMemoryAllocatorService {
- static {
+ private static boolean nativeLoaded = false;
+ static void loadNativeLibrary() {
try {
NativeLibraryLoader.loadFromJar("pmallocallocator");
} catch (Exception e) {
throw new Error(e);
}
+ nativeLoaded = true;
}
@Override
@@ -45,6 +47,9 @@
@Override
public long init(long capacity, String uri, boolean isnew) {
+ if (!nativeLoaded) {
+ loadNativeLibrary();
+ }
return ninit(capacity, uri, isnew);
}
@@ -277,4 +282,5 @@
public ResultSet query(long id, String querystr) {
throw new UnsupportedOperationException();
}
+
}
diff --git a/mnemonic-memory-services/mnemonic-sys-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/SysVMemServiceImpl.java b/mnemonic-memory-services/mnemonic-sys-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/SysVMemServiceImpl.java
index 70e989a..0b3f562 100644
--- a/mnemonic-memory-services/mnemonic-sys-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/SysVMemServiceImpl.java
+++ b/mnemonic-memory-services/mnemonic-sys-vmem-service/src/main/java/org/apache/mnemonic/service/memory/internal/SysVMemServiceImpl.java
@@ -33,12 +33,14 @@
import java.util.HashSet;
public class SysVMemServiceImpl implements VolatileMemoryAllocatorService {
- static {
+ private static boolean nativeLoaded = false;
+ static void loadNativeLibrary() {
try {
NativeLibraryLoader.loadFromJar("sysvmemallocator");
} catch (Exception e) {
throw new Error(e);
}
+ nativeLoaded = true;
}
protected Map<Long, Long> m_info = Collections.synchronizedMap(new HashMap<Long, Long>());
@@ -50,6 +52,9 @@
@Override
public long init(long capacity, String uri, boolean isnew) {
+ if (!nativeLoaded) {
+ loadNativeLibrary();
+ }
long ret = ninit(capacity, uri, isnew);
m_info.put(ret, capacity);
return ret;