From 93811f01bf22cc8876c2a301c53417367ff83c56 Mon Sep 17 00:00:00 2001 From: Houjun Tang Date: Thu, 8 May 2025 15:57:52 -0700 Subject: [PATCH 1/4] Return the same obj_id if the obj is just created or already opened --- src/api/pdc_obj/pdc_obj.c | 20 ++++++++++++++++++++ src/tests/open_obj.c | 29 +++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/api/pdc_obj/pdc_obj.c b/src/api/pdc_obj/pdc_obj.c index 18e62382e..061043610 100644 --- a/src/api/pdc_obj/pdc_obj.c +++ b/src/api/pdc_obj/pdc_obj.c @@ -535,9 +535,29 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) pdcid_t obj_prop; size_t i; uint32_t metadata_server_id; + obj_handle *oh; + struct pdc_obj_info *info; + int is_opened = 0; FUNC_ENTER(NULL); + // Search if the object has already been opened + oh = PDCobj_iter_start(pdc); + while (!PDCobj_iter_null(oh)) { + info = PDCobj_iter_get_info(oh); + if (strcmp(obj_name, info->name) == 0) { + is_opened = 1; + break; + } + oh = PDCobj_iter_next(oh, pdc); + } + + if (is_opened) { + ret_value = info->local_id; + PDC_inc_ref(info->local_id); + goto done; + } + p = (struct _pdc_obj_info *)PDC_malloc(sizeof(struct _pdc_obj_info)); if (!p) PGOTO_ERROR(0, "PDC object memory allocation failed"); diff --git a/src/tests/open_obj.c b/src/tests/open_obj.c index 3558c0ebb..66f0672fa 100644 --- a/src/tests/open_obj.c +++ b/src/tests/open_obj.c @@ -82,6 +82,7 @@ main(int argc, char **argv) else { LOG_ERROR("Rank %d Fail to create object!\n", rank); ret_value = 1; + goto done; } // create second object sprintf(obj_name2, "o2_%d", rank); @@ -92,30 +93,39 @@ main(int argc, char **argv) else { LOG_ERROR("Rank %d Fail to create object!\n", rank); ret_value = 1; + goto done; } // open first object twice - open11 = PDCobj_open(obj_name1, pdc); + open11 = PDCobj_open(obj_name1, cont); if (open11 == 0) { LOG_ERROR("Rank %d Fail to open object o1\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Open object o1\n", rank); } - open12 = PDCobj_open(obj_name1, pdc); + open12 = PDCobj_open(obj_name1, cont); if (open12 == 0) { LOG_ERROR("Rank %d Fail to open object o1\n", rank); ret_value = 1; + goto done; + } + else if (open12 != open11){ + LOG_ERROR("Rank %d opened object o1 with different ID %llu / %llu\n", rank, open12, open11); + ret_value = 1; + goto done; } else { - LOG_INFO("Rank %d Open object o1\n", rank); + LOG_INFO("Rank %d Re-open object o1\n", rank); } // open second object once - open21 = PDCobj_open(obj_name2, pdc); + open21 = PDCobj_open(obj_name2, cont); if (open21 == 0) { LOG_ERROR("Rank %d Fail to open object o2\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Open object o2\n", rank); @@ -124,6 +134,7 @@ main(int argc, char **argv) if (PDCobj_close(obj1) < 0) { LOG_ERROR("Rank %d Fail to close object o1\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object o1\n", rank); @@ -131,6 +142,7 @@ main(int argc, char **argv) if (PDCobj_close(open11) < 0) { LOG_ERROR("Rank %d Fail to close object open11\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object open11\n", rank); @@ -138,6 +150,7 @@ main(int argc, char **argv) if (PDCobj_close(open12) < 0) { LOG_ERROR("Rank %d Fail to close object open12\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object open12\n", rank); @@ -145,6 +158,7 @@ main(int argc, char **argv) if (PDCobj_close(obj2) < 0) { LOG_ERROR("Rank %d Fail to close object o2\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object o2\n", rank); @@ -152,6 +166,7 @@ main(int argc, char **argv) if (PDCobj_close(open21) < 0) { LOG_ERROR("Rank %d Fail to close object open21\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object open21\n", rank); @@ -160,6 +175,7 @@ main(int argc, char **argv) if (PDCcont_close(cont) < 0) { LOG_ERROR("Rank %d Fail to close container c1\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed container c1\n", rank); @@ -168,6 +184,7 @@ main(int argc, char **argv) if (PDCprop_close(obj_prop) < 0) { LOG_ERROR("Rank %d Fail to close property\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed object property\n", rank); @@ -176,6 +193,7 @@ main(int argc, char **argv) if (PDCprop_close(cont_prop) < 0) { LOG_ERROR("Rank %d Fail to close property\n", rank); ret_value = 1; + goto done; } else { LOG_INFO("Rank %d Successfully closed container property\n", rank); @@ -184,7 +202,10 @@ main(int argc, char **argv) if (PDCclose(pdc) < 0) { LOG_ERROR("Rank %d Fail to close PDC\n", rank); ret_value = 1; + goto done; } + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif From ca498f95cd30f8e3fe74accd725fea7bb6c32c1c Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 8 May 2025 22:59:27 +0000 Subject: [PATCH 2/4] Committing clang-format changes --- src/api/pdc_obj/pdc_obj.c | 4 ++-- src/tests/open_obj.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/pdc_obj/pdc_obj.c b/src/api/pdc_obj/pdc_obj.c index 061043610..858ebfbed 100644 --- a/src/api/pdc_obj/pdc_obj.c +++ b/src/api/pdc_obj/pdc_obj.c @@ -535,8 +535,8 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) pdcid_t obj_prop; size_t i; uint32_t metadata_server_id; - obj_handle *oh; - struct pdc_obj_info *info; + obj_handle * oh; + struct pdc_obj_info * info; int is_opened = 0; FUNC_ENTER(NULL); diff --git a/src/tests/open_obj.c b/src/tests/open_obj.c index 66f0672fa..a9ee4d184 100644 --- a/src/tests/open_obj.c +++ b/src/tests/open_obj.c @@ -112,7 +112,7 @@ main(int argc, char **argv) ret_value = 1; goto done; } - else if (open12 != open11){ + else if (open12 != open11) { LOG_ERROR("Rank %d opened object o1 with different ID %llu / %llu\n", rank, open12, open11); ret_value = 1; goto done; From 9db27783a058b1be36b58d3624925e3642d829c1 Mon Sep 17 00:00:00 2001 From: Houjun Tang Date: Thu, 8 May 2025 16:02:07 -0700 Subject: [PATCH 3/4] Update doc --- docs/source/api.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/api.rst b/docs/source/api.rst index 4dc7dc226..bc26d33b8 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -205,7 +205,8 @@ PDC object APIs * pdc: PDC class ID, returned from PDCInit * Output: * Local object ID - * Open a PDC ID created previously by name. + * Open a PDC ID created previously by name, if an object is just created or already opened, + return the same obj_id. Each open requires a close. * For developers: see pdc_obj.c. Need to communicate with servers for metadata of the object. * perr_t PDCobj_close(pdcid_t obj_id) From 67f2871c0b5388a1ab8c949821b4f621fa52adc4 Mon Sep 17 00:00:00 2001 From: Houjun Tang Date: Mon, 12 May 2025 12:18:48 -0700 Subject: [PATCH 4/4] Update dependencies-macos.sh --- .github/workflows/dependencies-macos.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/dependencies-macos.sh b/.github/workflows/dependencies-macos.sh index 98b1d33d8..198da148b 100755 --- a/.github/workflows/dependencies-macos.sh +++ b/.github/workflows/dependencies-macos.sh @@ -2,9 +2,7 @@ set -eu -o pipefail -export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=FALSE - -brew install open-mpi automake +brew install open-mpi automake m4 libtool # libfabric wget https://github.com/ofiwg/libfabric/archive/refs/tags/v1.15.2.tar.gz