Repository: incubator-mnemonic
Updated Branches:
  refs/heads/master 5c14c2a3d -> 66df08df4


MNEMONIC-119: PMemServiceImpl.capacity() returns incorrectly when opening 
existing memory pool


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/66df08df
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/66df08df
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/66df08df

Branch: refs/heads/master
Commit: 66df08df43f7020f0e0f5a987bcd771c0de8952c
Parents: 5c14c2a
Author: Wang, Gang(Gary) <gang1.w...@intel.com>
Authored: Tue Sep 20 14:41:34 2016 -0700
Committer: Wang, Gang(Gary) <gang1.w...@intel.com>
Committed: Tue Sep 20 14:45:42 2016 -0700

----------------------------------------------------------------------
 .../src/main/native/layout.h                           |  2 ++
 ...ic_service_memoryservice_internal_PMemServiceImpl.c | 13 ++++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/66df08df/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/layout.h
----------------------------------------------------------------------
diff --git 
a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/layout.h 
b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/layout.h
index 823b021..43ba210 100644
--- 
a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/layout.h
+++ 
b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/layout.h
@@ -26,11 +26,13 @@ extern "C" {
 
 struct pmem_root {
   long hdl_buf[MAX_HANDLER_STORE_LEN];
+  size_t capacity;
 };
 
 POBJ_LAYOUT_BEGIN(memory_service);
 POBJ_LAYOUT_ROOT(memory_service, struct pmem_root);
 POBJ_LAYOUT_TOID(memory_service, uint8_t);
+POBJ_LAYOUT_TOID(memory_service, size_t);
 POBJ_LAYOUT_END(memory_service);
 
 typedef struct {

http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/66df08df/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/org_apache_mnemonic_service_memoryservice_internal_PMemServiceImpl.c
----------------------------------------------------------------------
diff --git 
a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/org_apache_mnemonic_service_memoryservice_internal_PMemServiceImpl.c
 
b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/org_apache_mnemonic_service_memoryservice_internal_PMemServiceImpl.c
index 55a792b..0cfc175 100644
--- 
a/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/org_apache_mnemonic_service_memoryservice_internal_PMemServiceImpl.c
+++ 
b/mnemonic-memory-services/mnemonic-nvml-pmem-service/src/main/native/org_apache_mnemonic_service_memoryservice_internal_PMemServiceImpl.c
@@ -264,6 +264,7 @@ jlong JNICALL 
Java_org_apache_mnemonic_service_memoryservice_internal_PMemServic
     jclass this, jlong capacity, jstring pathname, jboolean isnew) {
   PMPool *pool;
   TOID(struct pmem_root) root;
+  int needcreate;
   jlong ret = -1;
   PMEMobjpool *pop = NULL;
   pthread_rwlock_wrlock(&g_pmp_rwlock);
@@ -272,10 +273,11 @@ jlong JNICALL 
Java_org_apache_mnemonic_service_memoryservice_internal_PMemServic
     pthread_rwlock_unlock(&g_pmp_rwlock);
     throw(env, "Big memory path not specified!");
   }
-  if (capacity < PMEMOBJ_MIN_POOL) {
+  needcreate = access(mpathname, F_OK);
+  if (needcreate && capacity < PMEMOBJ_MIN_POOL) {
     capacity = PMEMOBJ_MIN_POOL;
   }
-  if (access(mpathname, F_OK)) {
+  if (needcreate) {
     pop = pmemobj_create(mpathname, POBJ_LAYOUT_NAME(memory_service), 
capacity, S_IRUSR | S_IWUSR);
   } else {
     pop = pmemobj_open(mpathname, POBJ_LAYOUT_NAME(memory_service));
@@ -292,7 +294,12 @@ jlong JNICALL 
Java_org_apache_mnemonic_service_memoryservice_internal_PMemServic
     root = POBJ_ROOT(pool->pop, struct pmem_root);
     pool->uuid_lo = root.oid.pool_uuid_lo;
     pool->base = (void*)pop;
-    pool->capacity = capacity;
+    if (needcreate) {
+      pool->capacity = capacity;
+      D_RW(root)->capacity = capacity;
+    } else {
+      pool->capacity = D_RO(root)->capacity;
+    }
     ret = g_pmpool_count;
     ++g_pmpool_count;
   } else {

Reply via email to