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 {