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 diff --git a/.github/workflows/gitlab-develop.yml b/.github/workflows/gitlab-develop.yml new file mode 100644 index 000000000..02a670a07 --- /dev/null +++ b/.github/workflows/gitlab-develop.yml @@ -0,0 +1,28 @@ +name: GitLab + +on: + push: + branches: + - develop + +jobs: + sync-with-gitlab: + runs-on: ubuntu-latest + timeout-minutes: 2 + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup git + run: | + git config --global user.name "PDC BOT" + git config --global user.email "pdc@example.com" + + - name: Update branch + run: | + git fetch origin develop + git remote add gitlab https://${{ secrets.GITLAB_TOKEN_NAME }}:${{ secrets.GITLAB_TOKEN }}@${{ secrets.GITLAB_URL }} + git checkout develop + git push -f gitlab -u develop diff --git a/.github/workflows/gitlab-stable.yml b/.github/workflows/gitlab-stable.yml new file mode 100644 index 000000000..c252f63bf --- /dev/null +++ b/.github/workflows/gitlab-stable.yml @@ -0,0 +1,28 @@ +name: GitLab + +on: + push: + branches: + - stable + +jobs: + sync-with-gitlab: + runs-on: ubuntu-latest + timeout-minutes: 2 + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Setup git + run: | + git config --global user.name "PDC BOT" + git config --global user.email "pdc@example.com" + + - name: Update branch + run: | + git fetch stable + git remote add gitlab https://${{ secrets.GITLAB_TOKEN_NAME }}:${{ secrets.GITLAB_TOKEN }}@${{ secrets.GITLAB_URL }} + git checkout stable + git push -f gitlab -u stable diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index a7c4ecbb6..075dad47b 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -33,4 +33,4 @@ jobs: sudo sh -c 'echo "`ipconfig getifaddr en0` PDC" >> /etc/hosts' sudo scutil --set HostName PDC export HG_TRANSPORT="sockets" - ctest -L serial + ctest -L serial --output-on-failure diff --git a/.github/workflows/ubuntu-cache-profiling.yml b/.github/workflows/ubuntu-cache-profiling.yml new file mode 100644 index 000000000..33020b9c9 --- /dev/null +++ b/.github/workflows/ubuntu-cache-profiling.yml @@ -0,0 +1,31 @@ +name: Ubuntu (profiling) + +on: + pull_request: + branches: [ stable, develop ] + + push: + branches: [ stable, develop ] + + workflow_dispatch: + +jobs: + PDC: + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v3 + + - name: Dependencies + run: .github/workflows/dependencies-linux.sh + + - name: Build PDC + run: | + mkdir build && cd build + cmake ../ -DBUILD_MPI_TESTING=ON -DBUILD_SHARED_LIBS=ON -DPDC_SERVER_CACHE=ON -DBUILD_TESTING=ON -DPDC_ENABLE_MPI=ON -DPDC_ENABLE_PROFILING=ON -DCMAKE_C_COMPILER=mpicc -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + make -j2 + + - name: Test PDC + working-directory: build + run: ctest -L serial --output-on-failure diff --git a/.github/workflows/ubuntu-cache.yml b/.github/workflows/ubuntu-cache.yml index b19896a2b..1b4cdcb68 100644 --- a/.github/workflows/ubuntu-cache.yml +++ b/.github/workflows/ubuntu-cache.yml @@ -28,4 +28,4 @@ jobs: - name: Test PDC working-directory: build - run: ctest -L serial + run: ctest -L serial --output-on-failure diff --git a/.github/workflows/ubuntu-no-cache.yaml b/.github/workflows/ubuntu-no-cache.yaml index 805c54f3f..fe284d118 100644 --- a/.github/workflows/ubuntu-no-cache.yaml +++ b/.github/workflows/ubuntu-no-cache.yaml @@ -28,4 +28,4 @@ jobs: - name: Test PDC working-directory: build - run: ctest -L serial + run: ctest -L serial --output-on-failure diff --git a/README.md b/README.md index 74795499d..d28ee130a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Proactive Data Containers (PDC) software provides an object-focused data managem Full documentation of PDC with installation instructions, code examples for using PDC API, and research publications are available at [pdc.readthedocs.io](https://pdc.readthedocs.io) -More information and publications on PDC is available at https://sdm.lbl.gov/pdc +More information and publications on PDC are available at https://sdm.lbl.gov/pdc If you use PDC in your research, please use the following citations: diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..531f8e413 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,2 @@ +_build +html diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..d203759b7 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,44 @@ +# PDC Documentation + +This walks you through setting up a local environment +for building the PDC project documentation. + +--- + +## Requirements + +Ensure the following versions are installed on your system. Other versions +may also work but have not been tested. + +- **Python 3.8.18** +- **pip 25.0.1** +- **Doxygen 1.13.2** + +You can check the versions with: +> ```bash +> python3.8 --version +> pip --version +> doxygen --version +> ``` + +--- + +## Setup Instructions + +### 1. Clone the repository (if not already) +```bash +git clone https://github.com/hpc-io/pdc.git +cd pdc/docs +``` + +### 2. Create Python environment install dependencies +```bash +python3.8 -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt +``` + +### 3. Build the html +```bash +python -m sphinx -T -b html -d _build/doctrees -D language=en source html +``` diff --git a/docs/readme.md b/docs/readme.md deleted file mode 100644 index 0525cab35..000000000 --- a/docs/readme.md +++ /dev/null @@ -1,1154 +0,0 @@ -# PDC Documentations -- [PDC Documentations](#pdc-documentations) -- [PDC user APIs](#pdc-user-apis) - - [PDC general APIs](#pdc-general-apis) - - [PDC container APIs](#pdc-container-apis) - - [PDC object APIs](#pdc-object-apis) - - [PDC region APIs](#pdc-region-apis) - - [PDC property APIs](#pdc-property-apis) - - [PDC query APIs](#pdc-query-apis) - - [PDC hist APIs](#pdc-hist-apis) -- [PDC Data types](#pdc-data-types) - - [Basic types](#basic-types) - - [region transfer partition type](#region-transfer-partition-type) - - [Object consistency semantics type](#object-consistency-semantics-type) - - [Histogram structure](#histogram-structure) - - [Container info](#container-info) - - [Container life time](#container-life-time) - - [Object property public](#object-property-public) - - [Object property](#object-property) - - [Object info](#object-info) - - [Object structure](#object-structure) - - [Region info](#region-info) - - [Access type](#access-type) - - [Transfer request status](#transfer-request-status) - - [Query operators](#query-operators) - - [Query structures](#query-structures) - - [Selection structure](#selection-structure) -- [Developers notes](#developers-notes) - - [How to implement an RPC from client to server](#how-to-implement-an-rpc-from-client-to-server) - - [PDC Server metadata overview](#pdc-server-metadata-overview) - - [PDC metadata structure](#pdc-metadata-structure) - - [Metadata operations at client side](#metadata-operations-at-client-side) - - [PDC metadata management strategy](#pdc-metadata-management-strategy) - - [Managing metadata and data by the same server](#managing-metadata-and-data-by-the-same-server) - - [Separate metadata server from data server](#separate-metadata-server-from-data-server) - - [Static object region mappings](#static-object-region-mappings) - - [Dynamic object region mappings](#dynamic-object-region-mappings) - - [PDC metadata management implementation](#pdc-metadata-management-implementation) - - [Create metadata](#create-metadata) - - [Binding metadata to object](#binding-metadata-to-object) - - [Register object metadata at metadata server](#register-object-metadata-at-metadata-server) - - [Retrieve metadata from metadata server](#retrieve-metadata-from-metadata-server) - - [Object metadata at client](#object-metadata-at-client) - - [Metadata at data server](#metadata-at-data-server) - - [Object metadata update](#object-metadata-update) - - [Object region metadata](#object-region-metadata) - - [Metadata checkpoint](#metadata-checkpoint) - - [Region transfer request at client](#region-transfer-request-at-client) - - [Region transfer request create and close](#region-transfer-request-create-and-close) - - [Region transfer request start](#region-transfer-request-start) - - [Region transfer request wait](#region-transfer-request-wait) - - [Region transfer request at server](#region-transfer-request-at-server) - - [Server region transfer request RPC](#server-region-transfer-request-rpc) - - [Server nonblocking control](#server-nonblocking-control) - - [Server region transfer request start](#server-region-transfer-request-start) - - [Server region transfer request wait](#server-region-transfer-request-wait) - - [Server region storage](#server-region-storage) - - [Storage by file offset](#storage-by-file-offset) - - [Storage by region](#storage-by-region) - - [Open tasks for PDC](#open-tasks-for-pdc) - - [Replacing individual modules with efficient Hash table data structures](#replacing-individual-modules-with-efficient-hash-table-data-structures) - - [Restarting pdc\_server.exe with different numbers of servers](#restarting-pdc_serverexe-with-different-numbers-of-servers) - - [Fast region search mechanisms](#fast-region-search-mechanisms) - - [Merge overlapping regions](#merge-overlapping-regions) -# PDC user APIs - ## PDC general APIs - + pdcid_t PDCinit(const char *pdc_name) - - Input: - + pdc_name is the reference for PDC class. Recommended use "pdc" - - Output: - + PDC class ID used for future reference or 0 on failure. - - All PDC client applications must call PDCinit before using it. This function will setup connections from clients to servers. A valid PDC server must be running. - - For developers: currently implemented in pdc.c. - + perr_t PDCclose(pdcid_t pdcid) - - Input: - + PDC class ID returned from PDCinit. - - Ouput: - + SUCCEED if no error, otherwise FAIL. - - This is a proper way to end a client-server connection for PDC. A PDCinit must correspond to one PDCclose. - - For developers: currently implemented in pdc.c. - + perr_t PDC_Client_close_all_server() - - Ouput: - + SUCCEED if no error, otherwise FAIL. - - Close all PDC servers that running. - - For developers: see PDC_client_connect.c - ## PDC container APIs - + pdcid_t PDCcont_create(const char *cont_name, pdcid_t cont_prop_id) - - Input: - + cont_name: the name of container. e.g "c1", "c2" - + cont_prop_id: property ID for inheriting a PDC property for container. - - Output: pdc_id for future referencing of this container, returned from PDC servers. - - Create a PDC container for future use. - - For developers: currently implemented in pdc_cont.c. This function will send a name to server and receive an container id. This function will allocate necessary memories and initialize properties for a container. - + pdcid_t PDCcont_create_col(const char *cont_name, pdcid_t cont_prop_id) - - Input: - + cont_name: the name to be assigned to a container. e.g "c1", "c2" - + cont_prop_id: property ID for inheriting a PDC property for container. - - Output: pdc_id for future referencing. - - Exactly the same as PDCcont_create, except all processes must call this function collectively. Create a PDC container for future use collectively. - - For developers: currently implemented in pdc_cont.c. - + pdcid_t PDCcont_open(const char *cont_name, pdcid_t pdc) - - Input: - + cont_name: the name of container used for PDCcont_create. - + pdc: PDC class ID returned from PDCinit. - - Output: - + error code. FAIL OR SUCCEED - - Open a container. Must make sure a container named cont_name is properly created (registered by PDCcont_create at remote servers). - - For developers: currently implemented in pdc_cont.c. This function will make sure the metadata for a container is returned from servers. For collective operations, rank 0 is going to broadcast this metadata ID to the rest of processes. A struct _pdc_cont_info is created locally for future reference. - + perr_t PDCcont_close(pdcid_t id) - - Input: - + container ID, returned from PDCcont_create. - - Output: - + error code, SUCCEED or FAIL. - - Correspond to PDCcont_open. Must be called only once when a container is no longer used in the future. - - For developers: currently implemented in pdc_cont.c. The reference counter of a container is decremented. When the counter reaches zero, the memory of the container can be freed later. - + struct pdc_cont_info *PDCcont_get_info(const char *cont_name) - - Input: - + name of the container - - Output: - + Pointer to a new structure that contains the container information [See container info](#container-info) - - Get container information - - For developers: See pdc_cont.c. Use name to search for pdc_id first by linked list lookup. Make a copy of the metadata to the newly malloced structure. - + perr_t PDCcont_persist(pdcid_t cont_id) - - Input: - + cont_id: container ID, returned from PDCcont_create. - - Output: - + error code, SUCCEED or FAIL. - - Make a PDC container persist. - - For developers, see pdc_cont.c. Set the container life field PDC_PERSIST. - + perr_t PDCprop_set_cont_lifetime(pdcid_t cont_prop, pdc_lifetime_t cont_lifetime) - - Input: - + cont_prop: Container property pdc_id - + cont_lifetime: See [container life time](#container-life-time) - - Output: - + error code, SUCCEED or FAIL. - - Set container life time for a property. - - For developers, see pdc_cont.c. - + pdcid_t PDCcont_get_id(const char *cont_name, pdcid_t pdc_id) - - Input: - + cont_name: Name of the container - + pdc_id: PDC class ID, returned by PDCinit - - Output: - + container ID - - Get container ID by name. This function is similar to open. - - For developers, see pdc_client_connect.c. It will query the servers for container information and create a container structure locally. - + perr_t PDCcont_del(pdcid_t cont_id) - - Input: - + cont_id: container ID, returned from PDCcont_create. - - Output: - + error code, SUCCEED or FAIL. - - Deleta a container - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - + perr_t PDCcont_put_tag(pdcid_t cont_id, char *tag_name, void *tag_value, psize_t value_size) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + tag_name: Name of the tag - + tag_value: Value to be written under the tag - + value_size: Number of bytes for the tag_value (tag_size may be more informative) - - Output: - + error code, SUCCEED or FAIL. - - Record a tag_value under the name tag_name for the container referenced by cont_id. - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - + perr_t PDCcont_get_tag(pdcid_t cont_id, char *tag_name, void **tag_value, psize_t *value_size) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + tag_name: Name of the tag - + value_size: Number of bytes for the tag_value (tag_size may be more informative) - - Output: - + tag_value: Pointer to the value to be read under the tag - + error code, SUCCEED or FAIL. - - Retrieve a tag value to the memory space pointed by the tag_value under the name tag_name for the container referenced by cont_id. - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata retrival. - + perr_t PDCcont_del_tag(pdcid_t cont_id, char *tag_name) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + tag_name: Name of the tag - - Output: - + error code, SUCCEED or FAIL. - - Delete a tag for a container by name - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - + perr_t PDCcont_put_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + nobj: Number of objects to be written - + obj_ids: Pointers to the object IDs - - Output: - + error code, SUCCEED or FAIL. - - Put an array of objects to a container. - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - + perr_t PDCcont_get_objids(pdcid_t cont_id ATTRIBUTE(unused), int *nobj ATTRIBUTE(unused), pdcid_t **obj_ids ATTRIBUTE(unused) ) - TODO: - + perr_t PDCcont_del_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + nobj: Number of objects to be deleted - + obj_ids: Pointers to the object IDs - - Output: - + error code, SUCCEED or FAIL. - - Delete an array of objects to a container. - - For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - ## PDC object APIs - + pdcid_t PDCobj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + obj_name: Name of objects to be created - + obj_prop_id: Property ID to be inherited from. - - Output: - + Local object ID - - Create a PDC object. - - For developers: see pdc_obj.c. This process need to send the name of the object to be created to the servers. Then it will receive an object ID. The object structure will inherit attributes from its container and input object properties. - + PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, int rank_id, MPI_Comm comm) - - Input: - + cont_id: Container ID, returned from PDCcont_create. - + obj_name: Name of objects to be created - + rank_id: Which rank ID the object is placed to - + comm: MPI communicator for the rank_id - - Output: - + Local object ID - - Create a PDC object at the rank_id in the communicator comm. Object is created based on the arguments provided by the process with rank_id. This function is a colllective operation. All MPI processes must call this function together. - - For developers: see pdc_mpi.c. - + pdcid_t PDCobj_open(const char *obj_name, pdcid_t pdc) - - Input: - + obj_name: Name of objects to be created - + pdc: PDC class ID, returned from PDCInit - - Output: - + Local object ID - - Open a PDC ID created previously by name. - - For developers: see pdc_obj.c. Need to communicate with servers for metadata of the object. - + pdcid_t PDCobj_open_col(const char *obj_name, pdcid_t pdc) - - Input: - + obj_name: Name of objects to be created, only rank 0 need to provide a value. - + pdc: PDC class ID, returned from PDCInit - - Output: - + Local object ID - - Open a PDC ID created previously by name collectively. All MPI processes must call this function together. - - For developers: see pdc_obj.c. Need to communicate with servers for metadata of the object. - + perr_t PDCobj_close(pdcid_t obj_id) - - Input: - + obj_id: Local object ID to be closed. - - Output: - + error code, SUCCEED or FAIL. - - Close an object. Must do this after open an object. - - For developers: see pdc_obj.c. Dereference an object by reducing its reference counter. - + struct pdc_obj_info *PDCobj_get_info(pdcid_t obj) - - Input: - + obj_name: Local object ID - - Output: - + object information see [object information](#object-info) - - Get a pointer to a structure that describes the object metadata. - - For developers: see pdc_obj.c. Pull out local object metadata by ID. - + pdcid_t PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id) - - Input: - + obj_name: Name of object - + data: Pointer to data memory - + size: Size of data - + cont_id: Container ID of this object - - Output: - + Local object ID created locally with the input name - - Write data to an object. - - For developers: see pdc_client_connect.c. Nedd to send RPCs to servers for this request. (TODO: change return value to perr_t) - + perr_t PDCobj_get_data(pdcid_t obj_id, void *data, uint64_t size) - - Input: - + obj_id: Local object ID - + size: Size of data - - Output: - + data: Pointer to data to be filled - + error code, SUCCEED or FAIL. - - Read data from an object. - - For developers: see pdc_client_connect.c. Use PDC_obj_get_info to retrieve name. Then forward name to servers to fulfill requests. - + perr_t PDCobj_del_data(pdcid_t obj_id) - - Input: - + obj_id: Local object ID - - Output: - + error code, SUCCEED or FAIL. - - Delete data from an object. - - For developers: see pdc_client_connect.c. Use PDC_obj_get_info to retrieve name. Then forward name to servers to fulfill requests. - + perr_t PDCobj_put_tag(pdcid_t obj_id, char *tag_name, void *tag_value, psize_t value_size) - - Input: - + obj_id: Local object ID - + tag_name: Name of the tag to be entered - + tag_value: Value of the tag - + value_size: Number of bytes for the tag_value - - Output: - + error code, SUCCEED or FAIL. - - Set the tag value for a tag - - For developers: see pdc_client_connect.c. Need to use PDC_add_kvtag to submit RPCs to the servers for metadata update. - + perr_t PDCobj_get_tag(pdcid_t obj_id, char *tag_name, void **tag_value, psize_t *value_size) - - Input: - + obj_id: Local object ID - + tag_name: Name of the tag to be entered - - Output: - + tag_value: Value of the tag - + value_size: Number of bytes for the tag_value - + error code, SUCCEED or FAIL. - - Get the tag value for a tag - - For developers: see pdc_client_connect.c. Need to use PDC_get_kvtag to submit RPCs to the servers for metadata update. - + perr_t PDCobj_del_tag(pdcid_t obj_id, char *tag_name) - - Input: - + obj_id: Local object ID - + tag_name: Name of the tag to be entered - - Output: - + error code, SUCCEED or FAIL. - - Delete a tag. - - For developers: see pdc_client_connect.c. Need to use PDCtag_delete to submit RPCs to the servers for metadata update. - + perr_t PDCobj_flush_start(pdcid_t obj_id) - - Input: - + obj_id: Local object ID - - Output: - + error code, SUCCEED or FAIL. - - Flush an object server cache data. This function is a dummy function if server cache is not enabled. - - For developers: pdc_obj.c. Start a RPC for each of the data servers to flush the input object. - + perr_t PDCobj_flush_start() - - Output: - + error code, SUCCEED or FAIL. - - Flush all objects' server cache data. This function is a dummy function if server cache is not enabled. - - For developers: pdc_obj.c. Start a RPC for each of the data servers to flush all objects. - + perr_t PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims) - - Input: - + obj_id: Local object ID - + ndim: Number of dimensions. (must be the same as the object dimension set previously) - + dims: Dimension array that has the size of ndim. - - Output: - + error code, SUCCEED or FAIL. - - Reset object dimension. In general, it is recommended to set an object's property before creating the object. However, this function allows users to enlarge or shrink an object's dimension. The motivation is to cover the functionality of H5Dset_extent. - - For developers: pdc_obj.c. Start a RPC and send the updated dimensions to metadata server. In addition, local memory is updated accordingly. There is no need to send the update for data server because every time a request submitted to the data server will include the up-to-dated object dimension information. - + perr_t PDCobj_get_dims(pdcid_t obj_id, int *ndim, uint64_t **dims) - - Input: - + obj_id: Local object ID - - Output: - + ndim: Number of dimensions. (must be the same as the object dimension set previously) - + dims: Dimension array that has the size of ndim. - + error code, SUCCEED or FAIL. - - Get object dimension dynamically. This operation allows users to query an object's dimension, in case PDCobj_set_dims is called on this object previously. - - For developers: pdc_obj.c. Start a RPC and retrieve object dimensions from metadata server. In addition, local memory is updated accordingly. - ## PDC region APIs - + pdcid_t PDCregion_create(psize_t ndims, uint64_t *offset, uint64_t *size) - - Input: - + ndims: Number of dimensions - + offset: Array of offsets - + size: Array of offset length - - Output: - + Region ID - - Create a region with ndims offset/length pairs - - For developers: see pdc_region.c. Need to use PDC_get_kvtag to submit RPCs to the servers for metadata update. - + perr_t PDCregion_close(pdcid_t region_id) - - Input: - + region_id: PDC ID returned from PDCregion_create - - Output: - + None - - Close a PDC region - - For developers: see pdc_region.c. Free offset and size arrays. - + (deprecated) perr_t PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t remote_obj, pdcid_t remote_reg) - - Input: - + buf: Memory buffer - + local_type: one of PDC basic types, see [PDC basic types](#basic-types) - + local_reg: Local region ID - + remote_obj: Remote object ID - + remote_reg: Remote region ID - - Output: - + Region ID - - Create a region with ndims offset/length pairs. At this stage of PDC development, the buffer has to be filled if you are performing PDC_WRITE with lock and release functions. - - For developers: see pdc_region.c. Need to use PDC_get_kvtag to submit RPCs to the servers for metadata update. - + (deprecated) perr_t PDCbuf_obj_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id) - - Input: - + remote_obj_id: remote object ID - + remote_reg_id: remote region ID - - Output: - + error code, SUCCEED or FAIL. - - Unmap a region to the user buffer. PDCbuf_obj_map must be called previously. - - For developers: see pdc_region.c. - + (deprecated) perr_t PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type, pdc_lock_mode_t lock_mode) - - Input: - + obj_id: local object ID - + reg_id: remote region ID - + access_type: [PDC access type](#access-type) - + lock_mode: PDC_BLOCK or PDC_NOBLOCK - - Output: - + error code, SUCCEED or FAIL. - - Obtain the lock to access a region in an object. - - For developers: see pdc_region.c. - + (deprecated) perr_t PDCreg_release_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type) - - Input: - + obj_id: local object ID - + reg_id: remote region ID - + access_type: [PDC access type](#access-type) - - Output: - + error code, SUCCESS or FAIL. - - Release the lock to access a region in an object. PDC_READ data is available after this lock release. - - For developers: see pdc_region.c. - + pdcid_t PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, pdcid_t local_reg, pdcid_t remote_reg) - - Input: - + buf: The data buffer to be transferred. - + access_type: PDC_WRITE for write operation. PDC_READ for read operation. - + obj_id: Local object id the region attached to. - + local_reg: Region ID describing the shape of buf (boundary aligns to object dimension). - + remote_reg: Region ID describing the region this request will access for the object at remote side. - - Output: - + Region ransfer request ID generated. - - Wrap necessary componenets for a region transfer request into a PDC ID to be referred later. local_reg and remote_reg are copied, so they can be closed immediately after this function. - - For developers: see pdc_region_transfer_request.c. This function only contains local memory operations. - + perr_t PDCregion_transfer_close(pdcid_t transfer_request_id) - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + SUCCEED or FAIL - - Clearn up function corresponds to PDCregion_transfer_create. transfer_request_id is no longer valid. If this request has been started and not waited, "PDCregion_transfer_wait" is automatically called inside this function. - - For developers: see pdc_region.c. This function only contains local memory operations, unless wait is triggered inside this function. - + perr_t PDCregion_transfer_start(pdcid_t transfer_request_id) - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + Region ID - - Start a region transfer from local region to remote region for an object on buf. By the end of this function, neither data transfer nor I/O are guaranteed be finished. It is not safe to free buf until a wait function (or close the request/object) call is made. - - For developers: see pdc_region_transfer_request.c. Bulk transfer and RPC are set up. The server side will immediately return upon receiving argument payload, ignoring completion of data transfers. - + perr_t PDCregion_transfer_wait(pdcid_t transfer_request_id) - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + Region ID - - Block until the region transfer process is finished for the input region transfer request. By the end of this function, data buffer passed by the buf argument in function PDCregion_transfer_create can be reused or freed. In addition, data consistency at server side is guaranteed for future region transfer request operations. - - For developers: see pdc_region_transfer_request.c. The server returns immediately after the request is finished without delay. See developer's note [Server region transfer request RPC](#server-region-transfer-request-rpc). - + perr_t PDCregion_transfer_start_all(pdcid_t *transfer_request_id, int size) - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + Region ID - - Start multiple region transfers from local region to remote region for an object on buf. This function is equivalent to calling PDCregion_transfer_start(pdcid_t transfer_request_id) for each of the element in the array (no guarantee of orders). - - For developers: see pdc_region_transfer_request.c. Bulk transfer and RPC are set up. The server side will immediately return upon receiving argument payload, ignoring completion of data transfers. - + perr_t PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + Region ID - - Wait multiple region transfers. This function is equivalent to calling PDCregion_transfer_wait(pdcid_t transfer_request_id) for each of the element in the array (no guarantee of orders). Block until all the input region transfer requests are finished. - - For developers: see pdc_region_transfer_request.c. - + perr_t PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *completed); - - Input: - + transfer_request_id: Region transfer request ID referred to - - Output: - + completed: [Transfer request status](#transfer-request-status) - + SUCCEED or FAIL - - Check for the completion of a region transfer request. PDC_TRANSFER_STATUS_COMPLETE is equivalent to the result of PDCregion_transfer_wait. PDC_TRANSFER_STATUS_PENDING refers to the case that the region transfer request is not completed. PDC_TRANSFER_STATUS_NOT_FOUND refers to the case either the request is invalid or the request completion has been checked by either this function or PDCregion_transfer_wait previously. - - For developers: see pdc_region_transfer_request.c. The server returns immediately after all the requests are finished without delay. See developer's note [Server region transfer request RPC](#server-region-transfer-request-rpc). -## PDC property APIs - + pdcid_t PDCprop_create(pdc_prop_type_t type, pdcid_t pdcid) - - Input: - + type: one of the followings - ``` - typedef enum { - PDC_CONT_CREATE = 0, - PDC_OBJ_CREATE - } pdc_prop_type_t; - ``` - - pdcid: PDC class ID, returned by PDCInit. - - Output: - + PDC property ID - - Initialize a property structure. - - For developers: see pdc_prop.c. - + perr_t PDCprop_close(pdcid_t id) - - Input: - + id: PDC property ID - - Output: - + error code, SUCCEED or FAIL. - - Close a PDC property after openning. - - For developers: see pdc_prop.c. Decrease reference counter for this property. - + perr_t PDCprop_set_obj_user_id(pdcid_t obj_prop, uint32_t user_id) - - Input: - + obj_prop: PDC property ID (has to be an object) - + user_id: PDC user ID - - Output: - + error code, SUCCEED or FAIL. - - Set the user ID of an object. - - For developers: see pdc_obj.c. Update the user_id field under [object property](#object-property). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_data_loc(pdcid_t obj_prop, char *loc) - - Input: - + obj_prop: PDC property ID (has to be an object) - + loc: location - - Output: - + error code, SUCCEED or FAIL. - - Set the location of an object. - - For developers: see pdc_obj.c. Update the data_loc field under [object property](#object-property). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_app_name(pdcid_t obj_prop, char *app_name) - - Input: - + obj_prop: PDC property ID (has to be an object) - + app_name: application name - - Output: - + error code, SUCCEED or FAIL. - - Set the application name of an object. - - For developers: see pdc_obj.c. Update the app_name field under [object property](#object-property). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_time_step(pdcid_t obj_prop, uint32_t time_step) - - Input: - + obj_prop: PDC property ID (has to be an object) - + time_step: time step - - Output: - + error code, SUCCEED or FAIL. - - Set the time step of an object. - - For developers: see pdc_obj.c. Update the time_step field under [object property](#object-property). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_tags(pdcid_t obj_prop, char *tags) - - Input: - + obj_prop: PDC property ID (has to be an object) - + tags: tags - - Output: - + error code, SUCCEED or FAIL. - - Set the tags of an object. - - For developers: see pdc_obj.c. Update the tags field under [object property](#object-property). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_dims(pdcid_t obj_prop, PDC_int_t ndim, uint64_t *dims) - - Input: - + obj_prop: PDC property ID (has to be an object) - + ndim: number of dimensions - + dims: array of dimensions - - Output: - + error code, SUCCEED or FAIL. - - Set the dimensions of an object. - - For developers: see pdc_obj.c. Update the obj_prop_pub->ndim and obj_prop_pub->dims fields under [object property public](#object-property-public). See developer's note for more details about this structure. - + perr_t PDCprop_set_obj_type(pdcid_t obj_prop, pdc_var_type_t type) - - Input: - + obj_prop: PDC property ID (has to be an object) - + type: one of PDC basic types, see [PDC basic types](#basic-types) - - Output: - + error code, SUCCEED or FAIL. - - Set the type of an object. - - For developers: see pdc_obj.c. Update the obj_prop_pub->type field under [object property public](#object-property-public). See developer's note for more details about this structure. - + PDCprop_set_obj_transfer_region_type(pdcid_t obj_prop, pdc_region_partition_t region_partition) - - Input: - + obj_prop: PDC property ID (has to be an object) - + type: one of PDC region transfer partition type, see [region transfer partition type](#region-transfer-partition-type) - - Output: - + error code, SUCCEED or FAIL. - - Set the region partition method for this object. The region transfer request operations will select implementations based on this property. See [PDC metadata management implementation](#pdc-metadata-management-implementation) for details. - - For developers: see pdc_obj.c. - + PDCprop_set_obj_consistency_semantics(pdcid_t obj_prop, pdc_consistency_t consistency) - - Input: - + obj_prop: PDC property ID (has to be an object) - + consistency: one of PDC object consistency, see [Object consistency semantics type](#object-consistency-semantics-type) - - Output: - + error code, SUCCEED or FAIL. - - Set the object consistency semantics for this object. The region transfer request operations will select implementations based on this property. PDC_CONSISTENCY_POSIX will call region_transfer_request_wait at the end of region_transfer_request_start automatically, so users do not need to explicitly call the wait function. The rest of the consistency types are not implemented yet, so they are equivalent to PDC_CONSISTENCY_DEFAULT. - - For developers: see pdc_obj.c. - + perr_t PDCprop_set_obj_buf(pdcid_t obj_prop, void *buf) - - Input: - + obj_prop: PDC property ID (has to be an object) - + buf: user memory buffer - - Output: - + error code, SUCCEED or FAIL. - - Set the user memory buffer of an object. - - For developers: see pdc_obj.c. Update the buf field under [object property public](#object-property-public). See developer's note for more details about this structure. - + pdcid_t PDCprop_obj_dup(pdcid_t prop_id) - - Input: - + prop_id: PDC property ID (has to be an object) - - Output: - + a new property ID copied. - - Duplicate an object property - - For developers: see pdc_prop.c. Duplicate the property structure. The ID will be registered with the PDC class. Similar to create and set all the fields. -## PDC query APIs - + pdc_query_t *PDCquery_create(pdcid_t obj_id, pdc_query_op_t op, pdc_var_type_t type, void *value) - - Input: - + obj_id: local PDC object ID - + op: one of the followings, see [PDC query operators](#query-operators) - + type: one of PDC basic types, see [PDC basic types](#basic-types) - + value: constraint value. - - Output: - + a new query structure, see [PDC query structure](#query-structure) - - Create a PDC query. - - For developers, see pdc_query.c. The constraint field of the new query structure is filled with the input arguments. Need to search for the metadata ID using object ID. - + void PDCquery_free(pdc_query_t *query) - - Input: - + query: PDC query from PDCquery_create - - Free a query structure. - - For developers, see pdc_client_server_common.c. - + void PDCquery_free_all(pdc_query_t *root) - - Input: - + root: root of queries to be freed - - Output: - + error code, SUCCEED or FAIL. - - Free all queries from a root. - - For developers, see pdc_client_server_common.c. Recursively free left and right branches. - + pdc_query_t *PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) - - Input: - + q1: First query - + q2: Second query - - Ouput: - + A new query after and operator. - - Perform the and operator on the two PDC queries. - - For developers, see pdc_query.c - + pdc_query_t *PDCquery_or(pdc_query_t *q1, pdc_query_t *q2) - - Input: - + q1: First query - + q2: Second query - - Ouput: - + A new query after or operator. - - Perform the or operator on the two PDC queries. - - For developers, see pdc_query.c - + perr_t PDCquery_sel_region(pdc_query_t *query, struct pdc_region_info *obj_region) - - Input: - + query: Query to select the region - + obj_region: An object region - - Ouput: - + error code, SUCCEED or FAIL. - - Select a region for a PDC query. - - For developers, see pdc_query.c. Set the region pointer of the query structure to the obj_region pointer. - + perr_t PDCquery_get_selection(pdc_query_t *query, pdc_selection_t *sel) - - Input: - + query: Query to get the selection - - Ouput: - + sel: PDC selection defined as the following. This selection describes the query shape, see [PDC selection structure](#selection-structure) - + error code, SUCCEED or FAIL. - - Get the selection information of a PDC query. - - For developers, see pdc_query.c and PDC_send_data_query in pdc_client_connect.c. Copy the selection structure received from servers to the sel pointer. - + perr_t PDCquery_get_nhits(pdc_query_t *query, uint64_t *n) - - Input: - + query: Query to calculate the number of hits - - Ouput: - + n: number of hits - + error code, SUCCEED or FAIL. - - Get the number of hits for a PDC query - - For developers, see pdc_query.c and PDC_send_data_query in pdc_client_connect.c. Copy the selection structure received from servers to the sel pointer. - + perr_t PDCquery_get_data(pdcid_t obj_id, pdc_selection_t *sel, void *obj_data) - - Input: - + obj_id: The object for query - + sel: Selection of the query, query_id is inside it. - - Output: - + obj_data: Pointer to the data memory filled with query data. - - Retrieve data from a PDC query for an object. - - For developers, see pdc_query.c and PDC_Client_get_sel_data in pdc_client_connect.c. - + perr_t PDCquery_get_histogram(pdcid_t obj_id) - - Input: - + obj_id: The object for query - - Output: - + error code, SUCCEED or FAIL. - - Retrieve histogram from a query for a PDC object. - - For developers, see pdc_query.c. This is a local operation that does not really do anything. - + void PDCselection_free(pdc_selection_t *sel) - - Input: - + sel: Pointer to the selection to be freed. - - Output: - + None - - Free a selection structure. - - For developers, see pdc_client_connect.c. Free the coordinates. - + void PDCquery_print(pdc_query_t *query) - - Input: - + query: the query to be printed - - Output: - + None - - Print the details of a PDC query structure. - - For developers, see pdc_client_server_common.c. - + void PDCselection_print(pdc_selection_t *sel) - - Input: - + sel: the PDC selection to be printed - - Output: - + None - - Print the details of a PDC selection structure. - - For developers, see pdc_client_server_common.c. - ## PDC hist APIs - + pdc_histogram_t *PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) - - Input: - + dtype: One of the PDC basic types see [PDC basic types](#basic-types) - + n: number of values with the basic types. - + data: pointer to the data buffer. - - Output: - + a new [PDC histogram structure](#histogram-structure) - - Generate a PDC histogram from data. This can be used to optimize performance. - - For developers, see pdc_hist_pkg.c - + pdc_histogram_t *PDC_dup_hist(pdc_histogram_t *hist) - - Input: - + hist: [PDC histogram structure](#histogram-structure) - - Output: - + a copied [PDC histogram structure](#histogram-structure) - - Copy a histogram from an existing one - - For developers, see pdc_hist_pkg.c - + pdc_histogram_t *PDC_merge_hist(int n, pdc_histogram_t **hists) - - Input: - + hists: an array of [PDC histogram structure](#histogram-structure) to be merged - - Output - + A merged [PDC histogram structure](#histogram-structure) - - Merge multiple PDC histograms into one - - For developers, see pdc_hist_pkg.c - + void PDC_free_hist(pdc_histogram_t *hist) - - Input: - + hist: the [PDC histogram structure](#histogram-structure) to be freed. - - Output: - + None - - Delete a histogram - - For developers, see pdc_hist_pkg.c, free structure's internal arrays. - + void PDC_print_hist(pdc_histogram_t *hist) - - Input: - + hist: the [PDC histogram structure](#histogram-structure) to be printed. - - Output: - + None: - - Print a PDC histogram's information. The counter for every bin is displayed. - - For developers, see pdc_hist_pkg.c. -# PDC Data types - ## Basic types - ``` - typedef enum { - PDC_UNKNOWN = -1, /* error */ - PDC_INT = 0, /* integer types (identical to int32_t) */ - PDC_FLOAT = 1, /* floating-point types */ - PDC_DOUBLE = 2, /* double types */ - PDC_CHAR = 3, /* character types */ - PDC_STRING = 4, /* string types */ - PDC_BOOLEAN = 5, /* boolean types */ - PDC_SHORT = 6, /* short types */ - PDC_UINT = 7, /* unsigned integer types (identical to uint32_t) */ - PDC_INT64 = 8, /* 64-bit integer types */ - PDC_UINT64 = 9, /* 64-bit unsigned integer types */ - PDC_INT16 = 10, /* 16-bit integer types */ - PDC_INT8 = 11, /* 8-bit integer types */ - PDC_UINT8 = 12, /* 8-bit unsigned integer types */ - PDC_UINT16 = 13, /* 16-bit unsigned integer types */ - PDC_INT32 = 14, /* 32-bit integer types */ - PDC_UINT32 = 15, /* 32-bit unsigned integer types */ - PDC_LONG = 16, /* long types */ - PDC_VOID_PTR = 17, /* void pointer type */ - PDC_SIZE_T = 18, /* size_t type */ - PDC_TYPE_COUNT = 19 /* this is the number of var types and has to be the last */ - } pdc_c_var_type_t; - ``` - ## region transfer partition type - ``` - typedef enum { - PDC_OBJ_STATIC = 0, - PDC_REGION_STATIC = 1, - PDC_REGION_DYNAMIC = 2, - PDC_REGION_LOCAL = 3 - } pdc_region_partition_t; - ``` - ## Object consistency semantics type - ``` - typedef enum { - PDC_CONSISTENCY_DEFAULT = 0, - PDC_CONSISTENCY_POSIX = 1, - PDC_CONSISTENCY_COMMIT = 2, - PDC_CONSISTENCY_SESSION = 3, - PDC_CONSISTENCY_EVENTUAL = 4 - } pdc_consistency_t; - ``` - ## Histogram structure - ``` - typedef struct pdc_histogram_t { - pdc_var_type_t dtype; - int nbin; - double incr; - double *range; - uint64_t *bin; - } pdc_histogram_t; - ``` - ## Container info - ``` - struct pdc_cont_info { - /*Inherited from property*/ - char *name; - /*Registered using PDC_id_register */ - pdcid_t local_id; - /* Need to register at server using function PDC_Client_create_cont_id */ - uint64_t meta_id; - }; - ``` - ## Container life time - ``` - typedef enum { - PDC_PERSIST, - PDC_TRANSIENT - } pdc_lifetime_t; - ``` - ## Object property public - ``` - struct pdc_obj_prop *obj_prop_pub { - /* This ID is the one returned from PDC_id_register . This is a property ID*/ - pdcid_t obj_prop_id; - /* object dimensions */ - size_t ndim; - uint64_t *dims; - pdc_var_type_t type; - pdc_region_partition_t region_partition; - pdc_consistency_t consistency; - }; - ``` - ## Object property - ``` - struct _pdc_obj_prop { - struct pdc_obj_prop *obj_prop_pub; - struct _pdc_class * pdc; - uint32_t user_id; - char * app_name; - uint32_t time_step; - char * data_loc; - char * tags; - void * buf; - pdc_kvtag_t * kvtag; - - /* The following have been added to support of PDC analysis and transforms */ - size_t type_extent; - uint64_t locus; - uint32_t data_state; - struct _pdc_transform_state transform_prop; - }; - ``` - ## Object info - ``` - struct pdc_obj_info { - /* Directly coped from user argument at object creation. */ - char *name; - /* 0 for location = PDC_OBJ_LOAL. - * When PDC_OBJ_GLOBAL = 1, use PDC_Client_send_name_recv_id to retrieve ID. */ - pdcid_t meta_id; - /* Registered using PDC_id_register */ - pdcid_t local_id; - /* Set to 0 at creation time. */ - int server_id; - /* Metadata server for this object */ - uint32_t metadata_server_id; - /* Object property. Directly copy from user argument at object creation. */ - struct pdc_obj_prop *obj_pt; - }; - ``` - ## Object structure - ``` - struct _pdc_obj_info { - struct pdc_obj_info * obj_info_pub; - _pdc_obj_location_t location; - void * metadata; - struct _pdc_cont_info * cont; - struct _pdc_obj_prop * obj_pt; - struct region_map_list * region_list_head; - pdc_local_transfer_request *local_transfer_request_head; - pdc_local_transfer_request *local_transfer_request_end; - int local_transfer_request_size; - }; - ``` - ## Region info - ``` - struct pdc_region_info { - pdcid_t local_id; - struct _pdc_obj_info *obj; - size_t ndim; - uint64_t *offset; - uint64_t *size; - bool mapping; - int registered_op; - void *buf; - size_t unit; - }; - ``` - ## Access type - ``` - typedef enum { PDC_NA=0, PDC_READ=1, PDC_WRITE=2 } - ``` - ## Transfer request status - ``` - typedef enum { - PDC_TRANSFER_STATUS_COMPLETE = 0, - PDC_TRANSFER_STATUS_PENDING = 1, - PDC_TRANSFER_STATUS_NOT_FOUND = 2 - } - ``` - ## Query operators - ``` - typedef enum { - PDC_OP_NONE = 0, - PDC_GT = 1, - PDC_LT = 2, - PDC_GTE = 3, - PDC_LTE = 4, - PDC_EQ = 5 - } pdc_query_op_t; - ``` - ## Query structures - ``` - typedef struct pdc_query_t { - pdc_query_constraint_t *constraint{ - pdcid_t obj_id; - pdc_query_op_t op; - pdc_var_type_t type; - double value; // Use it as a generic 64bit value - pdc_histogram_t *hist; - - int is_range; - pdc_query_op_t op2; - double value2; - - void *storage_region_list_head; - pdcid_t origin_server; - int n_sent; - int n_recv; - } - struct pdc_query_t *left; - struct pdc_query_t *right; - pdc_query_combine_op_t combine_op; - struct pdc_region_info *region; // used only on client - void *region_constraint; // used only on server - pdc_selection_t *sel; - } pdc_query_t; - ``` - ## Selection structure - ``` - typedef struct pdcquery_selection_t { - pdcid_t query_id; - size_t ndim; - uint64_t nhits; - uint64_t *coords; - uint64_t coords_alloc; - } pdc_selection_t; - ``` -# Developers notes -## How to implement an RPC from client to server -Mercury is not easy to use. Do not worry, I am going to make your life easier by doing a walk-through. This section teaches you how to implement a simple RPC from client to server. The outcome is that if you call a RPC at the client side, the server should be able to get the argument you passed from the client and execute the corresponding server RPC function. - -A concrete example is “PDC_region_transfer_wait_all”. Mercury transfers at the client side are implemented in “pdc_client_connect.c”. The name of the function we are using is “transfer_request_wait_all”. For each of the components I mentioned in the following, replace “transfer_request_wait_all” with your own function name. I am not going to discuss how “transfer_request_wait_all” is designed in this section. This section simply tells you where the mercury components are and how they interact with each other. - -Firstly, in “pdc_client_connect.c”, search for “transfer_request_wait_all_register_id_g”. Make another variable by replacing “transfer_request_wait_all” with your function name. Secondly, search for “client_send_transfer_request_wait_all_rpc_cb”, do the same text copy and replacement. This function is the call back function at the client side when the RPC is finished at the server side. For most of the cases, this function simply loads the server return arguments to a structure and returns the values to the client RPC function. There are also some error checking. Then, search for “PDC_transfer_request_wait_all_register(*hg_class)”. Do text copy and replacement. Finally, in the function “PDC_Client_transfer_request_wait_all”, do text copy and replacement. This function is the entry point of the mercury RPC call. It contains argument loading, which has the variable name “in”. This RPC creates a mercury bulk transfer inside it (). “HG_Create” and “HG_Bulk_create” are not needed if your mercury transfer does not transfer variable-sized data. As you can see, “HG_Forward” has an argument “client_send_transfer_request_wait_all_rpc_cb”. The return values from the callback function are placed in “transfer_args”. - -In file “pdc_client_connect.h”, search for “_pdc_transfer_request_wait_all_args”, do the text copy and replacement. This structure is the structure for returning values from client call back function “client_send_transfer_request_wait_all_rpc_cb” to client RPC function “PDC_Client_transfer_request_wait_all”. For most cases, an error code is sufficient. For other cases like creating some object IDs, you need to define the structure accordingly. Do not forget to load data in “_pdc_transfer_request_wait_all_args”. Search for “PDC_Client_transfer_request_wait_all”, make sure you register your client connect entry function in the same way. - -In file “pdc_server.c”, search for “PDC_transfer_request_wait_all_register(hg_class_g);”, make a copy and replace the “transfer_request_wait_all” part with your own function name. (Again, your function name has to be defined and used consistently throughout all these copy and replacement) - -In file “pdc_client_server_common.h”, search for “typedef struct transfer_request_wait_all_in_t”, this is the structure used by a client passing its argument to the server side. You can define whatever you want that is fixed-sized inside this structure. If you have variable-sized data, it can be passed through mercury bulk transfer. The handle is “hg_bulk_t local_bulk_handle”. “typedef struct transfer_request_wait_all_out_t” is the return arguments from server to client after the server RPC is finished. Next, search for “hg_proc_transfer_request_wait_all_in_t”, this function defines how arguments are transferred through mercury. There is nothing much you can do, just follow the conventions and documentations from Mochi website to transfer these arguments. Study how the rest of RPCs’ are implemented. Similarly, “hg_proc_transfer_request_wait_all_in_t” is the other way around. Next, search for “struct transfer_request_wait_all_local_bulk_args”. This structure is useful when bulk transfer is used. The server passes its variables from the RPC call to the bulk transfer call back function using this function. Finally, search for “PDC_transfer_request_wait_all_register”. All these structures and functions should be copied and replaced text “transfer_request_wait_all” with your own function name. - -In file “pdc_client_server_common.c”, search for “PDC_FUNC_DECLARE_REGISTER(transfer_request_wait_all)” and “HG_TEST_THREAD_CB(transfer_request_wait_all)”, do text copy and function name replacement. “pdc_server_region_request_handler.h” is included directly in “pdc_client_server_common.c”. The server RPC of “transfer_request_wait_all” is implemented in “pdc_server_region_request_handler.h”. However, it is possible to put it directly in the “pdc_client_server_common.c”. Let us open “pdc_server_region_request_handler.h”. Search for “HG_TEST_RPC_CB(transfer_request_wait_all, handle)”. This function is the entry point for the server RPC function call. “transfer_request_wait_all_in_t” contains the arguments you loaded previously from the client side. If you want to add more arguments, go back to “pdc_client_server_common.h” and do the correct modifications. “HG_Bulk_create” and “HG_Bulk_transfer” are the mercury bulk function calls. When the bulk transfer is finished, “transfer_request_wait_all_bulk_transfer_cb” is called. - -After a walk-through of “transfer_request_wait_all”, you should have learned where different components of a mercury RPC should be placed and how they interact with each other. You can trace other RPC by searching their function names. If you miss things that are not optional, it is likely that the program will hang there forever or show segmentation faults. -## PDC Server metadata overview - -PDC metadata servers, a subset of PDC servers, store metadata for PDC classes such as objects and containers. PDC data server, also a subset of PDC servers (potentially overlap with PDC metadata server), manages data from users. Such management includes server local caching and I/O to the file system. Both PDC metadata and data servers have some local metadata. In the section that describes the checkpoint for metadata, every single byte of the metadata will be discussed. - -### PDC metadata structure -PDC metadata is held in server memories. When servers are closed, metadata will be checkpointed into the local file system. Details about the checkpoint will be discussed in the metadata implementation in later sections. - -PDC metadata consists of three major parts at the moment. The first part contains metadata stored in the hash tables at the metadata server. This part of metadata stores persistent properties for PDC containers and PDC objects. When objects are created, these metadata are registered at the metadata server using mercury RPCs. The second part of metadata is called metadata query class at the metadata server. The main purpose is to map an object region to a data server, so clients can query for this information to access the corresponding data server. It is only used by dynamic region partition strategy. The third part contains object regions stored at the data server. This part includes file names and region chunking information inside the object file on the file system. - -### Metadata operations at client side -In general, PDC object metadata is initialized when an object is created. The metadata stored at the metadata server is permanent. When clients create the objects, PDC property is used as one of the arguments for the object creation function. Metadata for the object is set by using PDC property APIs. Most of the metadata are not subject to any changes. Currently, we support setting/getting object dimension using object API. In the future, we may add more APIs of this kind. - -## PDC metadata management strategy -This section discusses the metadata management approaches of PDC. First, we give a brief summary for how PDC managed metadata in the past. Then, we propose new infrastructures for metadata management. -### Managing metadata and data by the same server -Historically, a PDC server manages both metadata and data for objects it is responsible for. A client forwards I/O requests to the server computed based on MPI ranks statically. If a server is located on the same node as the client, the server will be chosen with a higher priority. This design can achieve high I/O parallelism if the I/O workloads from all clients are well-balanced. In addition, communication contention is minimized because servers are dedicated to serving disjoint subsets of clients. - -However, this design has two potential drawbacks. The first disadvantage is supporting general I/O access. For clients served by different PDC servers, accessing overlapping regions is infeasible. Therefore, this design is specialized in applications with a non-overlapping I/O pattern. The second disadvantage is a lack of dynamic load balancing mechanisms. For example, some applications use a subset of processes for processing I/O. A subset of servers may stay idle because the clients mapped to them are not sending I/O requests. -### Separate metadata server from data server -For distributed I/O applications with a one-sided communication design, metadata service processes are necessary. When a client attempts to modify or access an object, metadata provides the essential information such as object dimensions and the data server rank that contains the regions of interest. In general, a PDC client does not have the runtime global metadata information. As a result, the first task is to obtain the essential metadata of the object from the correct metadata server. - -Instead of managing metadata and data server together, we can separate the metadata management from region I/O. A metadata server stores and manages all attributes related to a subset of PDC objects. A PDC server can be both metadata and data servers. However, the metadata and data can refer to different sets of objects. - -The main advantage of this approach is that the assignment of object regions to data servers becomes more flexible. When an object is created, the name of the object maps to a unique metadata server. In our implementation, we adopt string hash values for object names and modulus operations to achieve this goal. The metadata information will be registered at the metadata server. Later, when other clients open the object, they can use the name of the object to locate the same metadata server. - -When a client accesses regions of an object, the metadata server informs the client the corresponding data servers it should transfer its I/O requests to. There are a few different methods how metadata servers can map object regions to data servers. -### Static object region mappings -A metadata server can partition the object space evenly to all data servers. For high-dimensional objects, it is possible to define block partitioning methods similar to HDF5’s chunking strategies. - -For applications with balanced workload, static object region partitioning can theoretically achieve optimal parallel performance. In addition, static partitioning determines the mapping from object regions to data servers at object create/open time. No additional metadata management is required. -### Dynamic object region mappings -For applications that access a subset of regions for different objects, some data servers can stay idle while the rest of servers are busy with fetching or storing data for these regions concentrated around coordinates of interests. Dynamic object partitioning allows metadata servers to balance data server workloads in runtime. The mapping from object regions to data server is determined at the time of starting region transfer request time. - -Partitioning object regions dynamically increases the complexity of metadata management. For example, a read from one client 0 after a write from another client 1 on overlapping regions demands metadata support. Client 0 has to locate the data server that client 1 writes the region data to using information from the metadata server. As a result, metadata servers must maintain up-to-date metadata of the objects they manage. There are a few options we can implement this feature. - -Option 1: When a client attempts to modify object regions, the client can send the metadata of this transfer request to the metadata server as well. Consequently, the metadata server serving for the modified objects always has the most up-to-date metadata. - -Advantage: No need to perform communications between the servers. ( Current strategy ) - -Disadvantage: Metadata server can be a bottleneck because the number of clients accessing the server may scale up quickly. - -Option 2: When a data server receives region transfer requests from any client, the data server forwards the corresponding metadata to the metadata server of the object. - -Advantage: The number of servers are less than the number of clients, we are having less chance of communication contention - -Disadvantage: Server-to-serve RPC infrastructures are not there yet. It takes some effort to implement. - -Option3: Similar to option2, but the data server will modify a metadata file. Later, a metadata server always checks the metadata file for updates of metadata information. - -Advantage: No communications are required if a metadata file is used. - -Disadvantage: Reading metadata files may take some time. If multiple servers are modifying the same metadata file, how should we proceed? - -The following table summarizes the communication of the three mapping methods from clients to types of PDC servers when different PDC functions are called. - -## PDC metadata management implementation -This section discusses how object metadata is implemented in the PDC production library. The following figure illustrates the flow of object metadata for different object operations. We label the 4 types of metadata in bold. -![alt text](pdc_metadata_flow.png) -### Create metadata -Metadata for an object is created by using PDC property. PDC property is created using client API “PDCprop_create(pdc_prop_type_t type, pdcid_t pdc_id)”. After a property instance is created, it is possible to set elements in this property using object property APIs. Details are in https://github.com/hpc-io/pdc/tree/stable/docs#pdc-property-apis. - -An alternative way is to use “pdcid_t PDCprop_obj_dup(pdcid_t prop_id);”, which copies all the existing entries in a property to a new object instance. - -### Binding metadata to object -Metadata is attached to an object at the object creation time. “PDCobj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id)” is the prototype for binding an object property when an object is created. - -### Register object metadata at metadata server -Once an object is created locally at a client, the object metadata is sent to the corresponding metadata server based on the hash value computed from the object name. Internally, search for “typedef struct pdc_metadata_t {...} pdc_metadata_t;” in the file pdc_client_server_common.h. This data structure contains essential metadata about the object, such as its dimension and name. - -### Retrieve metadata from metadata server -Object metadata can be obtained from metadata server when clients open an object using the prototype “pdcid_t PDCobj_open(const char *obj_name, pdcid_t pdc);”. The client contacts the corresponding metadata server to retrieve data from the data type “pdc_metadata_t” stored at the server. - -### Object metadata at client -The current implementation stores metadata at client in two separate places for historical reasons. Both places can be accessed from the data type “struct _pdc_obj_info*”, which is a data type defined in “pdc_obj_pkg.h”. - -In general, we can use “struct _pdc_id_info *PDC_find_id(pdcid_t obj_id)” to locate the object info pointer “obj”. Then, (struct _pdc_obj_info *)(obj->obj_ptr); allows use to obtain the “struct _pdc_obj_info*” structure. We call this pointer “obj_info_ptr” - -The first piece of local metadata, denoted as metadata buffer, is stored in “obj_info_ptr->metadata”. This value is a pointer that represents “pdc_metadata_t”. Its content matches the values stored at the metadata server side exactly. For object create, we copy the data from the pointer to the server memory using mercury RPCs. For object open, we copy from server memory to client memory. - -The second piece of local metadata, denoted as object public property, is stored in “obj_info_ptr->obj_pt”, which has type “struct pdc_obj_prop” defined in file “pdc_prop.h”. The values in this data type are copied from the first piece. This metadata data type contains essential information such as object dims and region partition types. In the future, more metadata may be added. - -### Metadata at data server -Details about the data server will not be discussed in this section. In general, a data server takes inputs (both metadata and data for an object) from clients and processes them accordingly. It is not supposed to store metadata information for objects. However, it is responsible for storing the locations of data in the file system, including path and offset for regions. - -If server cache is enabled, object dimension is stored by the server cache infrastructure when an object is registered for the first time. Object dimension is not used anywhere unless the I/O mode is set to be canonical file order storage. Currently, this mode does not allow clients to change object dimension, so it is not subject to metadata update, which is discussed in the next subsection. - -### Object metadata update -Object metadata is defined before creating an object. At the early stage of PDC, we did not plan to change any of the metadata after an object was created. However, it may be necessary to do this in the future. For example, sometimes applications want to change the sizes of PDC objects along different dimensions. An example is implemented as “perr_t PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims);”. This function can change object dimensions in runtime. As mentioned earlier, there are three places we need to update the metadata. Two places are at the client side and the other place is at the metadata server. - -### Object region metadata -Region metadata is required for dynamic region partitioning. Dynamic region partitioning strategy at metadata server assigns data server IDs for regions in runtime. The file “pdc_server_region_transfer_metadata_query.c” implements the assignments of data server ID for individual regions. For dynamic region partition and local region partition strategies, a metadata server receives client region transfer requests. The metadata server returns a data server ID back to the client, so the client can send data to the corresponding data server. Details about how the client connects to the metadata server will be discussed in the implementation of the region transfer request. - -### Metadata checkpoint -When PDC servers are closed, metadata stored by metadata servers are saved to the file system. Later, when users restart the servers, essential metadata are read back to the memory of the metadata server. In general, if servers are closed and restarted, client applications should not be aware of any changes. This subsection layouts the data format of PDC metadata when they are checkpointed. - -Implementation of server checkpoint is in the function “PDC_Server_checkpoint” and the corresponding restart is in the function “PDC_Server_restart(char *filename)”. The source file is “pdc_server.c”. - -There are four categories of metadata to be checkpointed. One category is concatenated after another seamlessly. We demonstrate the first three categories of metadata in the following figures. Before each of the brackets, an integer value will indicate the number of repetition for contents in the brackets.contents after the bracket will start from the next byte after the last repetition for contents in the bracket. The last category is managed by an independent module "pdc_server_region_transfer_metadata_query.c". The content of the metadata is subject to future changes. - -![Alt text](container_hashtable_checkpoint.png) -![Alt text](data_hashtable_checkpoint.png) -![Alt text](data_server_checkpoint.png) - -Region metadata checkpoint is placed at the end of the server checkpoint file, right after the last byte of data server region. Function “transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoint_size)” in file pdc_server_region_transfer_metadata_query.c handles the wrapping of region metadata. - -## Region transfer request at client -![Alt text](pdc_region_transfer_request_flow.png) -This section describes how the region transfer request module in PDC works. Region transfer request module is the core of PDC I/O. From the client's point of view, some data is written to regions of objects through transfer request APIs. PDC region transfer request module arranges how data is transferred from clients to servers and how data is stored at servers. -PDC region: -A PDC object abstracts a multi-dimensional array. The current implementation supports up to 3D. To access a subarray of the object, the PDC region can be used. A PDC region describes the offsets and lengths to access an multi-dimensional array. Its prototype for creation is “PDCregion_create(psize_t ndims, uint64_t *offset, uint64_t *size);”. The values of the input to this create function will be copied into PDC internal memories, so it is safe to free the pointers later. - -### Region transfer request create and close -Region transfer request create function has prototype “PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, pdcid_t local_reg, pdcid_t remote_reg);”. The function takes a contiguous data buffer as input. Content in this data buffer will be stored in the region described by “remote_reg” for objects with “obj_id”. Therefore, “remote_reg” has to be contained in the dimension boudaries of the object. The transfer request create function copies the region information into the transfer request’s memory, so it is safe to immediately close both “local_reg” and “remote_reg” after the create function is called. - -“local_reg” describes the shape of the data buffer, aligning to the object’s dimensions. For example, if “local_reg” is a 1D region, the start index of the buf to be stored begins at the “offset[0]” of the “local_reg”, with a size of “size[0]”. Recall that “offset” and “size” are the input argument. If “local_reg” has dimensions larger than 1, then the shape of the data buffer is a subarray described by “local_reg” that aligns to the boundaries of object dimensions. In summary, “local_reg” is analogous to HDF5’s memory space. “remote_reg” is parallel to HDF5’s data space for data set I/O operations. - -“PDCregion_transfer_close(pdcid_t transfer_request_id);” is used to clean up the internal memories associated with the “transfer_request_id”. - -Both create and close functions are local memory operations, so no mercury modules will be involved. - -### Region transfer request start -Starting a region transfer request function will trigger the I/O operation. Data will be transferred from client to server using the pdc_client_connect module. pdc_client_connect module is a middleware layer that transfers client data to a designated server and triggers a corresponding RPC at the server side. In addition, the RPC transfer also allows data transfer by argument. Variables transferred by argument are fixed-sized. For variable-sized variables, mercury bulk transfer is used to transfer a contiguous memory buffer. -Region transfer request start APIs: -To transfer metadata and data with the pdc_client_connect module, the “region_transfer_request.c” file contains mechanisms to wrap request data into a contiguous buffer. There are two ways to start a transfer request, the first prototype is “PDCregion_transfer_start(pdcid_t transfer_request_id);”. This function starts a single transfer request, specified by its ID. The second way is to use the aggregated prototype “PDCregion_transfer_start_all(pdcid_t *transfer_request_id, int size);”. This function can start multiple transfer requests. It is recommended to use the aggregated version when multiple requests can start together, because it allows both client and server to aggregate the requests and achieve better performance. - -For 1D local region, “PDCregion_transfer_start” passes the pointer pointing to the “offset[0] * unit” location of the input buffer to the pdc_client_connect module. For higher dimensions, user data will be copied to a new contiguous buffer using subregion copy based on local region shape. This implementation is in the static function “pack_region_buffer”. The new memory buffer will be passed to the pdc_client_conenct module. - -This memory buffer passed to the pdc_client_connect module is registered with mercury bulk transfer. If it is a read operation, the bulk transfer is a pull operation. Otherwise it is a push operation. Remote region information and some other relevant metadata are transferred using mercury RPC arguments. Once the pdc_client_connect module receives a return code and remote transfer request ID from the designated data server, “PDCregion_transfer_start” will cache the remote transfer request ID and exit. - -“PDCregion_transfer_start” can be interpreted as “PDCregion_transfer_start_all” with the size argument set to be 1, though the implementation is optimized. “PDCregion_transfer_start_all” performs aggregation of mercury bulk transfer, whenever it is possible. Firstly, the function split the read and write requests. Write requests are handled before the read requests. -Wrapping region transfer requests to internal transfer packages: -For each of the write requests, it is converted into one or more instances of structure described by “pdc_transfer_request_start_all_pkg” defined in “pdc_region_transfer.c”. This structure contains the data buffer to be transferred, remote region shapes, and a data server server rank to be transferred to. “PDCregion_transfer_start_all” implements the package translation in static function “prepare_start_all_requests”. - -As mentioned earlier in the metadata implementation, an abstract region for an object can be partitioned in different ways. There are 4 types of partitions: Object static partitioning, region static partitioning, region dynamic partitioning, and node-local region placement. “PDCprop_set_obj_transfer_region_type(pdcid_t obj_prop, pdc_region_partition_t region_partition)” allows users to set the partition method before creating an object at the client side. Different partitioning strategies have differences in the target data server rank when a transfer request is packed into “pdc_transfer_request_start_all_pkg”(s). We describe them separately. - -For object static partitioning strategy, the input transfer request is directly packed into “pdc_transfer_request_start_all_pkg” using a one-to-one mapping. The data server rank is determined at the object create/open time. - -For dynamic region partitioning or node-local placement, the static function “static perr_t register_metadata” (in “pdc_region_transfer.c”) is used to contact the metadata server. The metadata server selects a data server for the input region transfer request dynamically based on current system status. If local region placement is selected, metadata servers choose the data server that is on the same node (or as close as possible) of the client rank that transferred this request. If dynamic region partitioning is selected, the metadata server picks the data server that currently holds the minimum number of bytes of data. The metadata server holds the region to data server mapping in its metadata region query system “pdc_server_region_transfer_metadata_query.c”. Metadata held by this module will be permanently stored into the file system as part of the metadata checkpoint file at PDC server close time. After retrieving the correct data server ID, one “pdc_transfer_request_start_all_pkg” is created. The only difference in the process of creating “pdc_transfer_request_start_all_pkg” compared with the object static partitioning strategy is the way how data server ID is retrieved. - -For static region partitioning strategy, a region is equally partitioned across all data servers. As a result, one region transfer request generates the number of “pdc_transfer_request_start_all_pkg” equal to the total number of PDC servers. This implementation is in the static function “static_region_partition” in file “pdc_region_transfer_request.c” - -Sending internal transfer request packages from client to server: -For an aggregated region transfer request start all function call, two arrays of “pdc_transfer_request_start_all_pkg” are created as described in the previous subsection depending on the partitioning strategies. One is for PDC_WRITE and the other is for PDC_READ. This section describes how “pdc_region_transfer_request.c” implements the communication from client to transfer. The core implementation is in the static function “PDC_Client_start_all_requests”. - -Firstly, an array of “pdc_transfer_request_start_all_pkg” is sorted based on the target data server ID. Then, For adjacent “pdc_transfer_request_start_all_pkg” that sends to the same data server ID, these packages are packed into a single contiguous memory buffer using the static function “PDC_Client_pack_all_requests”. This memory buffer is passed to the pdc_client_connect layer for mercury transfer. - -Region transfer request wait: -Region transfer request start does not guarantee the finish of data communication or I/O at the server by default. To make sure the input memory buffer is reusable or deletable, a wait function can be used. Wait function is also called implicitly when the object is closed or special POSIX semantics is set ahead of time when the object is created. - -### Region transfer request wait - -Similar to the start case, wait API has single and aggregated versions “PDCregion_transfer_start” and “PDCregion_transfer_start_all”. It is possible to wait for more than one request using the aggregated version. - -The implementation of the wait all operation is similar to the implementation of the start all request. Firstly, packages defined by the structure “PDCregion_transfer_wait_all” are created. “PDCregion_transfer_wait_all” only contains the remote region transfer request ID and data server ID. These packages are sorted based on the data server ID. Region transfer requests that go to the same data server are packed into a contiguous buffer and sent through the PDC client connect module. - -Region transfer request wait client control: -As mentioned earlier, the region transfer request start all function packs many data packages into the same contiguous buffer and passes this buffer to the PDC client connect layer for mercury transfer. This buffer can be shared by more than one region transfer request. This buffer cannot be freed until wait operations are called on all of these requests (not necessarily in a single wait operation call). - -When a wait operation is called on a subset of these requests, we reduce the reference counter of the buffer. This reference counter is a pointer stored by the structure “pdc_transfer_request”. -In terms of implementation, “pdc_transfer_request” stores an array of reference counter pointers and an array of data buffer pointers. Both arrays have the same size, forming a one-to-one mapping. Each of the data buffer pointers points to an aggregated memory buffer that this region transfer request packs some of its metadata/data into. When the aggregated buffer is created, the corresponding reference counter is set to be the number of region transfer requests that store the reference counter/data buffer pointers. As a result, when all of these region transfer requests have been waited, the reference counter becomes zero and the data buffer can be freed. - -## Region transfer request at server -The region transfer request module at the server side is implemented in the folder “server/pdc_server_region”. This section describes how a data server is implemented at the server side. - -## Server region transfer request RPC - -At the PDC server side, “pdc_client_server_common.c” contains all the RPCs’ entrances from client calls. “pdc_server_region_request_handler.h” contains all the RPCs’ related to region transfer requests. The source code is directly included in the “pdc_client_server_common.c”. -“HG_TEST_RPC_CB(transfer_request, handle)” and “HG_TEST_RPC_CB(transfer_request_all, handle)” are the server RPCs for region transfer request start and region transfer request start all functions called at client side. “HG_TEST_RPC_CB(transfer_request_wait, handle)” and “HG_TEST_RPC_CB(transfer_request_wait_all, handle)” are the server RPCs for region transfer request wait and region transfer request wait all. - -All functions that contain “cb” at the end refer to the call back functions of the mercury bulk transfer. Mercury bulk transfer is used for transferring variable-sized data from client to server. When server RPC is triggered, the bulk transfer argument is passed through mercury RPC augment. This argument is used by “HG_Bulk_create” and “HG_Bulk_transfer” to initiate the transfer of data from client to server. Once the transfer is finished, the mercury bulk transfer function triggers the call back function (one of the arguments passed to “HG_Bulk_transfer”) and processes the data received (or sent to the client). - -### Server nonblocking control - -By design, region transfer request start does not guarantee the finish of data transfer or server I/O. In fact, this function should return to the application as soon as possible. Data transfer and server I/O can take place in the background, so client applications can take advantage of overlapping timings between application computations and PDC data management. - -### Server region transfer request start - -When server RPC for region transfer request start is triggered, it immediately starts the bulk transfer by calling the mercury bulk transfer functions. - -In addition, the region transfer request received by the data server triggers a register function “PDC_transfer_request_id_register” implemented “pdc_server_region_transfer.c”. This function returns a unique remote region transfer ID. This remote ID is returned back to the client for future references, so the wait operation can know which region transfer request should be finished at the data server side. - -Then, “PDC_commit_request” is called for request registration. This operation pushes the metadata for the region transfer request to the end of the data server’s linked list for temporary storage. - -Finally, the server RPC returns a finished code to the client, so the client can return to the application immediately. - -### Server region transfer request wait - -The request wait RPC at server side receives remote region transfer request ID from client. The RPC returns to the client when local data server I/O for this request is finished. - -The implementation is by using the “PDC_check_request” function in the file “pdc_server_region_transfer.c”. This function returns two possibilities. One possible return value is “PDC_TRANSFER_STATUS_COMPLETE”. In this case, the wait function can immediately return to the client. Another possibility is “PDC_TRANSFER_STATUS_PENDING”. This flag means that the local server I/O has not finished yet, so this RPC function will not return to the client. Instead, the mercury handle is binded to the structure “pdc_transfer_request_status” (defined in “pdc_server_region_transfer.h”) that stores the metadata of the region transfer request (search by its ID) within the function “PDC_check_request”. - -When the region transfer request call back function for this region transfer is triggered and the I/O operations are finished, the call back function calls “PDC_finish_request” to trigger the return of the wait mercury handle binded to the region transfer request. In case of a mercury handler is not found, “PDC_finish_request” sets the flag of “pdc_transfer_request_status” for the region transfer request to be “PDC_TRANSFER_STATUS_COMPLETE”, so a wait request called later can immediately return as described before. -Server region transfer request aggregated mode: -For aggregated region transfer request start and wait calls, the server acquired a contiguous memory buffer through mercury bulk transfer. This contiguous memory buffer contains packed request metadata/data from client side. These requests are parsed. For each of the requests, we process them one at a time. The processing method is described in the previous section. - -## Server region storage -PDC is a data management library. I/O is part of its service. Therefore, I/O operation is critical for data persistence. The function “PDC_Server_transfer_request_io” in file “pdc_server_region_transfer.c” implements the core I/O function. There are two I/O modes for PDC. - -In general, one PDC object is stored at one file per data server. - -### Storage by file offset -I/O by file only works for objects with fixed-dimension. Clients are not allowed to modify object dimensions by any means. When a region is written to an object, the region is translated into arrays of offsets and offset lengths based on the region shape using list I/O. Therefore, a region has fixed offsets to be placed on the file. - -### Storage by region -I/O by region is a special feature of the PDC I/O management system. Writing a region to an object will append the region to the end of a file. If the same region is read back again some time later, it only takes a single POSIX lseek and I/O operation to complete either write or read. - -However, when a new region is written to an object, it is necessary to scan all the previously written regions to check for overlapping. The overlapping areas must be updated accordingly. If the new region is fully contained in any of the previously stored regions, then it is unnecessary to append it to the end of the file. - -I/O by region will store repeated bytes when write requests contain overlapping parts. In addition, the region update mechanism generates extra I/O operations. This is one of its disadvantages. Optimization for region search (as R trees) in the future can relieve this problem. - -## Open tasks for PDC - -### Replacing individual modules with efficient Hash table data structures -For functionalities implemented in modules “pdc_server_region_transfer_metadata_query.c”, “pdc_server_region_cache.c”, and “pdc_server_region_transfer.c, the basic implementation for holding metadata are in form of linked list. It is frequent in these modules to search for a particular linked list node by comparing IDs. - -One project is to replace the search of linked list nodes with Hash table functions, so we can avoid the linear search of entries by IDs. - -### Restarting pdc_server.exe with different numbers of servers -Currently, PDC checkpoint restart function has an assumption that users use the same number of server processes every time they run on the pdc_server.exe. If servers are started with a different number of processes, undefined behavior will happen. This project should allow users to restart servers with different numbers of processes from previous runs without issues. Before you carry out this implementation, can you answer the following questions? -Have you carefully read and understood the PDC metadata checkpoint processes? - -How are metadata distributed to metadata servers given you have a smaller/larger number of servers? - -How are metadata distributed to data servers given you have a smaller/larger number of servers? - -For previously checkpointed files by different ranks, how are you reading them (must be a way to confirm how many these checkpoint files previously written)? - -### Fast region search mechanisms -Currently, PDC stores regions in linked lists. This implementation is used by both “pdc_server_region_cache.c” and “pdc_server_data.c”. For example, “PDC_Server_data_write_out” in “pdc_server_data.c” checks whether an input region overlaps with all previously stored regions by functions “check_overlap” and “PDC_region_overlap_detect” implemented in “pdc_region_utils.c” using a for loop. - -Tree structures for managing regions can relieve the need for going through the entire list of previously stored regions. For example, KD trees can rule out regions that will fail the overlapping test easily. - -### Merge overlapping regions -“PDC_Server_data_write_out” in “pdc_server_data.c” can frequently generate new regions, though these regions may have large overlapping portions. In the end, the many duplicated bytes are stored into file systems. With the help of efficient tree-based region management, it is possible to periodically merge many regions that have overlapping parts by separating the overlapping region out and splitting the rest of regions. Alternatively, it is possible to create a large region that contains a group of regions that have a lot of overlapping parts. Either way, we can reduce the number of bytes to be stored. Moreover, searching can become more efficient if regions are merged together. diff --git a/docs/source/Doxyfile.in b/docs/source/Doxyfile.in index f86c67d4a..070558adb 100644 --- a/docs/source/Doxyfile.in +++ b/docs/source/Doxyfile.in @@ -2237,7 +2237,7 @@ PERLMOD_MAKEVAR_PREFIX = # C-preprocessor directives found in the sources and include files. # The default value is: YES. -ENABLE_PREPROCESSING = NO +ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be @@ -2246,7 +2246,7 @@ ENABLE_PREPROCESSING = NO # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -2287,7 +2287,9 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED += ATTRIBUTE(x)= +PREDEFINED += __attribute__(x)= +PREDEFINED += __attribute__= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/docs/source/api.rst b/docs/source/api.rst index 4dc7dc226..56de98045 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -6,262 +6,276 @@ API Documentation with Examples PDC general APIs --------------------------- -* pdcid_t PDCinit(const char *pdc_name) +.. function:: pdcid_t PDCinit(const char *pdc_name) - * Input: - * pdc_name is the reference for PDC class. Recommended use "pdc" + :param pdc_name: Reference name for the PDC class. Recommended: "pdc". + :returns: PDC class ID used for future reference. - * Output: - * PDC class ID used for future reference. + All PDC client applications must call ``PDCinit`` before using any PDC functionality. + This function sets up connections from clients to servers. A valid PDC server must be running. - * All PDC client applications must call PDCinit before using it. This function will setup connections from clients to servers. A valid PDC server must be running. - * For developers: currently implemented in pdc.c. + For developers: currently implemented in `pdc.c`. -* perr_t PDCclose(pdcid_t pdcid) +.. function:: perr_t PDCclose(pdcid_t pdcid) - * Input: - * PDC class ID returned from PDCinit. + :param pdcid: PDC class ID returned from ``PDCinit``. + :returns: ``SUCCEED`` if no error; otherwise, ``FAIL``. - * Output: - * SUCCEED if no error, otherwise FAIL. + This is the proper way to end a client-server connection for PDC. + Every call to ``PDCinit`` must correspond to a call to ``PDCclose``. - * This is a proper way to end a client-server connection for PDC. A PDCinit must correspond to one PDCclose. - * For developers: currently implemented in pdc.c. + For developers: currently implemented in `pdc.c`. -* perr_t PDC_Client_close_all_server() +.. function:: perr_t PDC_Client_close_all_server() - * Output: - * SUCCEED if no error, otherwise FAIL. + :returns: ``SUCCEED`` if no error; otherwise, ``FAIL``. - * Close all PDC servers that running. - * For developers: see PDC_client_connect.c + Closes all running PDC servers. + For developers: see `PDC_client_connect.c`. --------------------------- PDC container APIs --------------------------- -* pdcid_t PDCcont_create(const char *cont_name, pdcid_t cont_prop_id) - * Input: - * cont_name: the name of container. e.g "c1", "c2" - * cont_prop_id: property ID for inheriting a PDC property for container. - * Output: pdc_id for future referencing of this container, returned from PDC servers. - * Create a PDC container for future use. - * For developers: currently implemented in pdc_cont.c. This function will send a name to server and receive an container id. This function will allocate necessary memories and initialize properties for a container. - -* pdcid_t PDCcont_create_col(const char *cont_name, pdcid_t cont_prop_id) - * Input: - * cont_name: the name to be assigned to a container. e.g "c1", "c2" - * cont_prop_id: property ID for inheriting a PDC property for container. - * Output: pdc_id for future referencing. - * Exactly the same as PDCcont_create, except all processes must call this function collectively. Create a PDC container for future use collectively. - * For developers: currently implemented in pdc_cont.c. - -* pdcid_t PDCcont_open(const char *cont_name, pdcid_t pdc) - * Input: - * cont_name: the name of container used for PDCcont_create. - * pdc: PDC class ID returned from PDCinit. - * Output: - * error code. FAIL OR SUCCEED - * Open a container. Must make sure a container named cont_name is properly created (registered by PDCcont_create at remote servers). - * For developers: currently implemented in pdc_cont.c. This function will make sure the metadata for a container is returned from servers. For collective operations, rank 0 is going to broadcast this metadata ID to the rest of processes. A struct _pdc_cont_info is created locally for future reference. - -* perr_t PDCcont_close(pdcid_t id) - * Input: - * container ID, returned from PDCcont_create. - * cont_prop_id: property ID for inheriting a PDC property for container. - * Output: - * error code, SUCCEED or FAIL. - - * Correspond to PDCcont_open. Must be called only once when a container is no longer used in the future. - * For developers: currently implemented in pdc_cont.c. The reference counter of a container is decremented. When the counter reaches zero, the memory of the container can be freed later. - -* struct pdc_cont_info *PDCcont_get_info(const char *cont_name) - * Input: - * name of the container - * Output: - * Pointer to a new structure that contains the container information See container info (Get Container Info link) - * Get container information - * For developers: See pdc_cont.c. Use name to search for pdc_id first by linked list lookup. Make a copy of the metadata to the newly malloced structure. - -* perr_t PDCcont_persist(pdcid_t cont_id) - * Input: - * cont_id: container ID, returned from PDCcont_create. - * Output: - * error code, SUCCEED or FAIL. - - * Make a PDC container persist. - * For developers, see pdc_cont.c. Set the container life field PDC_PERSIST. - -* perr_t PDCprop_set_cont_lifetime(pdcid_t cont_prop, pdc_lifetime_t cont_lifetime) - * Input: - * cont_prop: Container property pdc_id - * cont_lifetime: See container life time (Get container life time link) - * Output: - * error code, SUCCEED or FAIL. - * Set container life time for a property. - * For developers, see pdc_cont.c. - -* pdcid_t PDCcont_get_id(const char *cont_name, pdcid_t pdc_id) - * Input: - * cont_name: Name of the container - * pdc_id: PDC class ID, returned by PDCinit - * Output: - * container ID - * Get container ID by name. This function is similar to open. - * For developers, see pdc_client_connect.c. It will query the servers for container information and create a container structure locally. - -* perr_t PDCcont_del(pdcid_t cont_id) - * Input: - * cont_id: container ID, returned from PDCcont_create. - * Output: - * error code, SUCCEED or FAIL. - * Delete a container - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - -* perr_t PDCcont_put_tag(pdcid_t cont_id, char *tag_name, void *tag_value, psize_t value_size) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * tag_name: Name of the tag - * tag_value: Value to be written under the tag - * value_size: Number of bytes for the tag_value (tag_size may be more informative) - * Output: - * error code, SUCCEED or FAIL. - * Record a tag_value under the name tag_name for the container referenced by cont_id. - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - -* perr_t PDCcont_get_tag(pdcid_t cont_id, char *tag_name, void **tag_value, psize_t *value_size) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * tag_name: Name of the tag - * value_size: Number of bytes for the tag_value (tag_size may be more informative) - * Output: - * tag_value: Pointer to the value to be read under the tag - * error code, SUCCEED or FAIL. - * Retrieve a tag value to the memory space pointed by the tag_value under the name tag_name for the container referenced by cont_id. - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata retrival. - -* perr_t PDCcont_del_tag(pdcid_t cont_id, char *tag_name) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * tag_name: Name of the tag - * Output: - * error code, SUCCEED or FAIL. - * Delete a tag for a container by name - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - -* perr_t PDCcont_put_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * nobj: Number of objects to be written - * obj_ids: Pointers to the object IDs - * Output: - * error code, SUCCEED or FAIL. - * Put an array of objects to a container. - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. - -* perr_t PDCcont_get_objids(pdcid_t cont_id ATTRIBUTE(unused), int *nobj ATTRIBUTE(unused), pdcid_t **obj_ids ATTRIBUTE(unused) ) TODO: - -* perr_t PDCcont_del_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * nobj: Number of objects to be deleted - * obj_ids: Pointers to the object IDs - * Output: - * error code, SUCCEED or FAIL. - * Delete an array of objects to a container. - * For developers: see pdc_client_connect.c. Need to send RPCs to servers for metadata update. +.. function:: pdcid_t PDCcont_create(const char *cont_name, pdcid_t cont_prop_id) + :param cont_name: the name of container. e.g "c1", "c2" + :param cont_prop_id: property ID for inheriting a PDC property for container. + :returns: pdc_id for future referencing of this container, returned from PDC servers. + Create a PDC container for future use. + + For developers: currently implemented in `pdc_cont.c`. This function will send a name to server and receive a container id. This function will allocate necessary memories and initialize properties for a container. + +.. function:: pdcid_t PDCcont_create_col(const char *cont_name, pdcid_t cont_prop_id) + + :param cont_name: the name to be assigned to a container. e.g "c1", "c2" + :param cont_prop_id: property ID for inheriting a PDC property for container. + :returns: pdc_id for future referencing. + + Exactly the same as ``PDCcont_create``, except all processes must call this function collectively. Create a PDC container for future use collectively. + + For developers: currently implemented in `pdc_cont.c`. + +.. function:: pdcid_t PDCcont_open(const char *cont_name, pdcid_t pdc) + + :param cont_name: the name of container used for PDCcont_create. + :param pdc: PDC class ID returned from PDCinit. + :returns: error code. FAIL OR SUCCEED + + Open a container. Must make sure a container named ``cont_name`` is properly created (registered by PDCcont_create at remote servers). + + For developers: currently implemented in `pdc_cont.c`. This function will make sure the metadata for a container is returned from servers. For collective operations, rank 0 is going to broadcast this metadata ID to the rest of processes. A struct ``_pdc_cont_info`` is created locally for future reference. + +.. function:: perr_t PDCcont_close(pdcid_t id) + + :param id: container ID, returned from PDCcont_create. + :returns: error code, SUCCEED or FAIL. + + Corresponds to ``PDCcont_open``. Must be called only once when a container is no longer used in the future. + + For developers: currently implemented in `pdc_cont.c`. The reference counter of a container is decremented. When the counter reaches zero, the memory of the container can be freed later. + +.. function:: struct pdc_cont_info *PDCcont_get_info(const char *cont_name) + + :param cont_name: name of the container + :returns: Pointer to a new structure that contains the container information. + + Get container information. + + For developers: See `pdc_cont.c`. Use name to search for pdc_id first by linked list lookup. Make a copy of the metadata to the newly malloced structure. + +.. function:: perr_t PDCcont_persist(pdcid_t cont_id) + + :param cont_id: container ID, returned from PDCcont_create. + :returns: error code, SUCCEED or FAIL. + + Make a PDC container persist. + + For developers: see `pdc_cont.c`. Set the container life field ``PDC_PERSIST``. + +.. function:: perr_t PDCprop_set_cont_lifetime(pdcid_t cont_prop, pdc_lifetime_t cont_lifetime) + + :param cont_prop: Container property pdc_id + :param cont_lifetime: See container life time (Get container life time link) + :returns: error code, SUCCEED or FAIL. + + Set container life time for a property. + + For developers: see `pdc_cont.c`. + +.. function:: pdcid_t PDCcont_get_id(const char *cont_name, pdcid_t pdc_id) + + :param cont_name: Name of the container + :param pdc_id: PDC class ID, returned by PDCinit + :returns: container ID + + Get container ID by name. This function is similar to open. + + For developers: see `pdc_client_connect.c`. It will query the servers for container information and create a container structure locally. + +.. function:: perr_t PDCcont_del(pdcid_t cont_id) + + :param cont_id: container ID, returned from PDCcont_create. + :returns: error code, SUCCEED or FAIL. + + Delete a container. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata update. + +.. function:: perr_t PDCcont_put_tag(pdcid_t cont_id, char *tag_name, void *tag_value, psize_t value_size) + + :param cont_id: Container ID, returned from PDCcont_create. + :param tag_name: Name of the tag + :param tag_value: Value to be written under the tag + :param value_size: Number of bytes for the tag_value (tag_size may be more informative) + :returns: error code, SUCCEED or FAIL. + + Record a tag_value under the name ``tag_name`` for the container referenced by ``cont_id``. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata update. + +.. function:: perr_t PDCcont_get_tag(pdcid_t cont_id, char *tag_name, void **tag_value, psize_t *value_size) + + :param cont_id: Container ID, returned from PDCcont_create. + :param tag_name: Name of the tag + :param value_size: Number of bytes for the tag_value (tag_size may be more informative) + :returns: + * tag_value: Pointer to the value to be read under the tag + * error code, SUCCEED or FAIL. + + Retrieve a tag value to the memory space pointed by the ``tag_value`` under the name ``tag_name`` for the container referenced by ``cont_id``. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata retrival. + +.. function:: perr_t PDCcont_del_tag(pdcid_t cont_id, char *tag_name) + + :param cont_id: Container ID, returned from PDCcont_create. + :param tag_name: Name of the tag + :returns: error code, SUCCEED or FAIL. + + Delete a tag for a container by name. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata update. + +.. function:: perr_t PDCcont_put_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) + + :param cont_id: Container ID, returned from PDCcont_create. + :param nobj: Number of objects to be written + :param obj_ids: Pointers to the object IDs + :returns: error code, SUCCEED or FAIL. + + Put an array of objects to a container. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata update. + +.. function:: perr_t PDCcont_get_objids(pdcid_t cont_id ATTRIBUTE(unused), int *nobj ATTRIBUTE(unused), pdcid_t **obj_ids ATTRIBUTE(unused)) + + :returns: TODO + +.. function:: perr_t PDCcont_del_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) + + :param cont_id: Container ID, returned from PDCcont_create. + :param nobj: Number of objects to be deleted + :param obj_ids: Pointers to the object IDs + :returns: error code, SUCCEED or FAIL. + + Delete an array of objects from a container. + + For developers: see `pdc_client_connect.c`. Need to send RPCs to servers for metadata update. --------------------------- PDC object APIs --------------------------- -* pdcid_t PDCobj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * obj_name: Name of objects to be created - * obj_prop_id: Property ID to be inherited from. - * Output: - * Local object ID - * Create a PDC object. - * For developers: see pdc_obj.c. This process need to send the name of the object to be created to the servers. Then it will receive an object ID. The object structure will inherit attributes from its container and input object properties. - -* PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, int rank_id, MPI_Comm comm) - * Input: - * cont_id: Container ID, returned from PDCcont_create. - * obj_name: Name of objects to be created - * rank_id: Which rank ID the object is placed to - * comm: MPI communicator for the rank_id - * Output: - * Local object ID - * Create a PDC object at the rank_id in the communicator comm. This function is a colllective operation. - * For developers: see pdc_mpi.c. If rank_id equals local process rank, then a local object is created. Otherwise we create a global object. The object metadata ID is broadcasted to all processes if a global object is created using MPI_Bcast. - -* pdcid_t PDCobj_open(const char *obj_name, pdcid_t pdc) - * Input: - * obj_name: Name of objects to be created - * pdc: PDC class ID, returned from PDCInit - * Output: - * Local object ID - * Open a PDC ID created previously by name. - * For developers: see pdc_obj.c. Need to communicate with servers for metadata of the object. - -* perr_t PDCobj_close(pdcid_t obj_id) - * Input: - * obj_id: Local object ID to be closed. - * Output: - * error code, SUCCEED or FAIL. - * Close an object. Must do this after open an object. - * For developers: see pdc_obj.c. Dereference an object by reducing its reference counter. - -* struct pdc_obj_info *PDCobj_get_info(pdcid_t obj) - * Input: - * obj_name: Local object ID - * Output: - *object information see object information (insert link to object information) - * Get a pointer to a structure that describes the object metadata. - * For developers: see pdc_obj.c. Pull out local object metadata by ID. - -* pdcid_t PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id) - * Input: - * obj_name: Name of object - * data: Pointer to data memory - * size: Size of data - * cont_id: Container ID of this object - * Output: - * Local object ID created locally with the input name - * Write data to an object. - * For developers: see pdc_client_connect.c. Nedd to send RPCs to servers for this request. (TODO: change return value to perr_t) - -* perr_t PDCobj_get_data(pdcid_t obj_id, void *data, uint64_t size) - * Input: - * obj_id: Local object ID - * size: Size of data - * Output: - * data: Pointer to data to be filled - * error code, SUCCEED or FAIL. - * Read data from an object. - * For developers: see pdc_client_connect.c. Use PDC_obj_get_info to retrieve name. Then forward name to servers to fulfill requests. - -* perr_t PDCobj_del_data(pdcid_t obj_id) - * Input: - * obj_id: Local object ID - * Output: - * error code, SUCCEED or FAIL. - * Delete data from an object. - * For developers: see pdc_client_connect.c. Use PDC_obj_get_info to retrieve name. Then forward name to servers to fulfill requests. - ---------------------------- -PDC region APIs ---------------------------- - - ---------------------------- -PDC property APIs ---------------------------- +.. function:: pdcid_t PDCobj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id) + + :param cont_id: Container ID, returned from ``PDCcont_create``. + :param obj_name: Name of the object to be created. + :param obj_prop_id: Property ID to inherit from. + :returns: Local object ID. + + Create a PDC object. This function sends the object name to the servers and receives an object ID in response. + The created object inherits attributes from its container and the specified property. + + For developers: see `pdc_obj.c`. + +.. function:: pdcid_t PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, int rank_id, MPI_Comm comm) + + :param cont_id: Container ID, returned from ``PDCcont_create``. + :param obj_name: Name of the object to be created. + :param obj_prop_id: Property ID to inherit from. + :param rank_id: Rank ID where the object is placed. + :param comm: MPI communicator. + :returns: Local object ID. + + Collective operation to create a PDC object on the specified rank within the communicator. + If `rank_id` matches the local rank, a local object is created; otherwise, a global object is created. + The object metadata ID is broadcast to all processes using ``MPI_Bcast``. + + For developers: see `pdc_mpi.c`. + +.. function:: pdcid_t PDCobj_open(const char *obj_name, pdcid_t pdc) + + :param obj_name: Name of the object to open. + :param pdc: PDC class ID, returned from ``PDCinit``. + :returns: Local object ID. + + Open an existing PDC object by name. If the object has already been created or opened, the same ID is returned. + Each call to ``PDCobj_open`` must be followed by a corresponding call to ``PDCobj_close``. + + For developers: see `pdc_obj.c`. + +.. function:: perr_t PDCobj_close(pdcid_t obj_id) + + :param obj_id: Local object ID to be closed. + :returns: Error code, either ``SUCCEED`` or ``FAIL``. + Close an object and release associated resources. Each open must be matched with a close. + + For developers: see `pdc_obj.c`. + +.. function:: struct pdc_obj_info *PDCobj_get_info(pdcid_t obj) + + :param obj: Local object ID. + :returns: Pointer to object metadata structure. + + Retrieve metadata information associated with a local object. + + For developers: see `pdc_obj.c`. + +.. function:: pdcid_t PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id) + + :param obj_name: Name of the object. + :param data: Pointer to the data memory. + :param size: Size of the data in bytes. + :param cont_id: Container ID of the object. + :returns: Local object ID created locally with the input name. + + Write data to a PDC object. The operation sends RPCs to servers to perform the write. + + For developers: see `pdc_client_connect.c`. *(TODO: Change return value to `perr_t`.)* + +.. function:: perr_t PDCobj_get_data(pdcid_t obj_id, void *data, uint64_t size) + + :param obj_id: Local object ID. + :param size: Size of the data to read. + :returns: Error code, either ``SUCCEED`` or ``FAIL``. + :param data: Pointer to memory where data will be written. + + Read data from a PDC object. + + For developers: see `pdc_client_connect.c`. Uses ``PDCobj_get_info`` to look up the name, which is then forwarded to the servers to complete the request. + +.. function:: perr_t PDCobj_del_data(pdcid_t obj_id) + + :param obj_id: Local object ID. + :returns: Error code, either ``SUCCEED`` or ``FAIL``. + + Delete the data associated with a PDC object. + + For developers: see `pdc_client_connect.c`. Uses ``PDCobj_get_info`` to retrieve the object name, then sends the deletion request to the servers. --------------------------- PDC metadata APIs @@ -280,206 +294,222 @@ Either RocksDB or SQLite can be enabled by turning on the ``PDC_ENABLE_ROCKSDB`` Users can use the same PDC query APIs when RocksDB or SQLite is enabled. -* perr_t PDCobj_put_tag(pdcid_t obj_id, char *tag_name, void *tag_value, psize_t value_size) - * Input: - * obj_id: Local object ID - * tag_name: Name of the tag to be entered - * tag_value: Value of the tag - * value_size: Number of bytes for the tag_value - * Output: - * error code, SUCCEED or FAIL. - * Set the tag value for a tag - * For developers: see pdc_client_connect.c. Need to use PDC_add_kvtag to submit RPCs to the servers for metadata update. - -* perr_t PDCobj_get_tag(pdcid_t obj_id, char *tag_name, void **tag_value, psize_t *value_size) - * Input: - * obj_id: Local object ID - * tag_name: Name of the tag to be entered - * Output: - * tag_value: Value of the tag - * value_size: Number of bytes for the tag_value - * error code, SUCCEED or FAIL. - * Get the tag value for a tag - * For developers: see pdc_client_connect.c. Need to use PDC_get_kvtag to submit RPCs to the servers for metadata update. - -* perr_t PDCobj_del_tag(pdcid_t obj_id, char *tag_name) - * Input: - * obj_id: Local object ID - * tag_name: Name of the tag to be entered - * Output: - * error code, SUCCEED or FAIL. - * Delete a tag. - * For developers: see pdc_client_connect.c. Need to use PDCtag_delete to submit RPCs to the servers for metadata update. +.. function:: perr_t PDCobj_put_tag(pdcid_t obj_id, char *tag_name, void *tag_value, psize_t value_size) + + :param obj_id: Local object ID. + :param tag_name: Name of the tag to be set. + :param tag_value: Pointer to the value of the tag. + :param value_size: Size of the tag value in bytes. + :returns: Error code, SUCCEED or FAIL. + + Set the tag value for a given object. + + For developers: see `pdc_client_connect.c`. Uses ``PDC_add_kvtag`` to send RPCs to the servers for metadata updates. + +.. function:: perr_t PDCobj_get_tag(pdcid_t obj_id, char *tag_name, void **tag_value, psize_t *value_size) + + :param obj_id: Local object ID. + :param tag_name: Name of the tag to be retrieved. + :param tag_value: Pointer to the buffer to receive the tag value. + :param value_size: Pointer to the size of the tag value in bytes. + :returns: Error code, SUCCEED or FAIL. + + Retrieve the value of a tag associated with an object. + + For developers: see `pdc_client_connect.c`. Uses ``PDC_get_kvtag`` to send RPCs to the servers for metadata retrieval. + +.. function:: perr_t PDCobj_del_tag(pdcid_t obj_id, char *tag_name) + + :param obj_id: Local object ID. + :param tag_name: Name of the tag to be deleted. + :returns: Error code, SUCCEED or FAIL. + + Delete a tag associated with an object. + + For developers: see `pdc_client_connect.c`. Uses ``PDCtag_delete`` to send RPCs to the servers for metadata updates. --------------------------- PDC Data query APIs --------------------------- -* pdc_query_t *PDCquery_create(pdcid_t obj_id, pdc_query_op_t op, pdc_var_type_t type, void *value) - * Input: - * obj_id: local PDC object ID - * op: one of the followings, see PDC query operators (Insert PDC query operators link) - * type: one of PDC basic types, see PDC basic types (Insert PDC basic types link) - * value: constraint value - * Output: - * a new query structure, see PDC query structure (PDC query structure link) - * Create a PDC query. - * For developers, see pdc_query.c. The constraint field of the new query structure is filled with the input arguments. Need to search for the metadata ID using object ID. - -* void PDCquery_free(pdc_query_t *query) - * Input: - * query: PDC query from PDCquery_create - * Free a query structure. - * For developers, see pdc_client_server_common.c. - -* void PDCquery_free_all(pdc_query_t *root) - * Input: - * root: root of queries to be freed - * Output: - * error code, SUCCEED or FAIL. - * Free all queries from a root. - * For developers, see pdc_client_server_common.c. Recursively free left and right branches. - -* pdc_query_t *PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) - * Input: - * q1: First query - * q2: Second query - * Output: - * A new query after and operator. - * Perform the and operator on the two PDC queries. - * For developers, see pdc_query.c - -* pdc_query_t *PDCquery_or(pdc_query_t *q1, pdc_query_t *q2) - * Input: - * q1: First query - * q2: Second query - * Output: - * A new query after or operator. - * Perform the or operator on the two PDC queries. - * For developers, see pdc_query.c - -* perr_t PDCquery_sel_region(pdc_query_t *query, struct pdc_region_info *obj_region) - * Input: - * query: Query to select the region - * obj_region: An object region - * Output: - * error code, SUCCEED or FAIL. - * Select a region for a PDC query. - * For developers, see pdc_query.c. Set the region pointer of the query structure to the obj_region pointer. - -* perr_t PDCquery_get_selection(pdc_query_t *query, pdc_selection_t *sel) - * Input: - * query: Query to get the selection - * Output: - * sel: PDC selection defined as the following. This selection describes the query shape, see PDC selection structure (Insert link to PDC selection structure) - * error code, SUCCEED or FAIL. - * Get the selection information of a PDC query. - * For developers, see pdc_query.c and PDC_send_data_query in pdc_client_connect.c. Copy the selection structure received from servers to the sel pointer. - -* perr_t PDCquery_get_nhits(pdc_query_t *query, uint64_t *n) - * Input: - * query: Query to calculate the number of hits - * Output: - * n: number of hits - * error code, SUCCEED or FAIL. - * Get the number of hits for a PDC query - * For developers, see pdc_query.c and PDC_send_data_query in pdc_client_connect.c. Copy the selection structure received from servers to the sel pointer. - -* perr_t PDCquery_get_data(pdcid_t obj_id, pdc_selection_t *sel, void *obj_data) - * Input: - * obj_id: The object for query - * sel: Selection of the query, query_id is inside it. - * Output: - * obj_data: Pointer to the data memory filled with query data. - * Retrieve data from a PDC query for an object. - * For developers, see pdc_query.c and PDC_Client_get_sel_data in pdc_client_connect.c. - -* perr_t PDCquery_get_histogram(pdcid_t obj_id) - * Input: - * obj_id: The object for query - * Output: - * error code, SUCCEED or FAIL. - * Retrieve histogram from a query for a PDC object. - * For developers, see pdc_query.c. This is a local operation that does not really do anything. - -* void PDCselection_free(pdc_selection_t *sel) - * Input: - * sel: Pointer to the selection to be freed. - * Output: - * None - * Free a selection structure. - * For developers, see pdc_client_connect.c. Free the coordinates. - -* void PDCquery_print(pdc_query_t *query) - * Input: - * query: the query to be printed - * Output: - * None - * Print the details of a PDC query structure. - * For developers, see pdc_client_server_common.c. - -* void PDCselection_print(pdc_selection_t *sel) - * Input: - * sel: the PDC selection to be printed - * Output: - * None - * Print the details of a PDC selection structure. - * For developers, see pdc_client_server_common.c. +.. function:: pdc_query_t *PDCquery_create(pdcid_t obj_id, pdc_query_op_t op, pdc_var_type_t type, void *value) + + :param obj_id: Local PDC object ID. + :param op: One of the PDC query operators. + :param type: One of the PDC basic types. + :param value: Constraint value. + :returns: A new query structure. + + Create a PDC query. + + For developers: see `pdc_query.c`. The constraint field of the new query structure is filled with the input arguments. Searches for the metadata ID using the object ID. + +.. function:: void PDCquery_free(pdc_query_t *query) + + :param query: PDC query from `PDCquery_create`. + + Free a query structure. + + For developers: see `pdc_client_server_common.c`. + +.. function:: void PDCquery_free_all(pdc_query_t *root) + + :param root: Root of queries to be freed. + :returns: Error code, SUCCEED or FAIL. + + Free all queries from a root. + + For developers: see `pdc_client_server_common.c`. Recursively frees left and right branches. + +.. function:: pdc_query_t *PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) + + :param q1: First query. + :param q2: Second query. + :returns: A new query after applying the AND operator. + + Perform the AND operation on two PDC queries. + + For developers: see `pdc_query.c`. + +.. function:: pdc_query_t *PDCquery_or(pdc_query_t *q1, pdc_query_t *q2) + + :param q1: First query. + :param q2: Second query. + :returns: A new query after applying the OR operator. + + Perform the OR operation on two PDC queries. + + For developers: see `pdc_query.c`. + +.. function:: perr_t PDCquery_sel_region(pdc_query_t *query, struct pdc_region_info *obj_region) + + :param query: Query to select the region. + :param obj_region: An object region. + :returns: Error code, SUCCEED or FAIL. + + Select a region for a PDC query. + + For developers: see `pdc_query.c`. Sets the region pointer of the query structure to `obj_region`. + +.. function:: perr_t PDCquery_get_selection(pdc_query_t *query, pdc_selection_t *sel) + + :param query: Query to get the selection. + :param sel: Pointer to PDC selection structure. + :returns: Error code, SUCCEED or FAIL. + + Get the selection information of a PDC query. + + For developers: see `pdc_query.c` and `PDC_send_data_query` in `pdc_client_connect.c`. Copies the selection structure received from servers to the `sel` pointer. + +.. function:: perr_t PDCquery_get_nhits(pdc_query_t *query, uint64_t *n) + + :param query: Query to calculate the number of hits. + :param n: Pointer to number of hits. + :returns: Error code, SUCCEED or FAIL. + + Get the number of hits for a PDC query. + + For developers: see `pdc_query.c` and `PDC_send_data_query` in `pdc_client_connect.c`. Uses the same selection mechanism as `PDCquery_get_selection`. + +.. function:: perr_t PDCquery_get_data(pdcid_t obj_id, pdc_selection_t *sel, void *obj_data) + + :param obj_id: The object for query. + :param sel: Selection of the query (query ID is embedded). + :param obj_data: Pointer to memory for storing query data. + :returns: Error code, SUCCEED or FAIL. + + Retrieve data from a PDC query for an object. + + For developers: see `pdc_query.c` and `PDC_Client_get_sel_data` in `pdc_client_connect.c`. + +.. function:: perr_t PDCquery_get_histogram(pdcid_t obj_id) + + :param obj_id: The object for query. + :returns: Error code, SUCCEED or FAIL. + + Retrieve histogram from a query for a PDC object. + + For developers: see `pdc_query.c`. This is a local operation and is currently a no-op. +.. function:: void PDCselection_free(pdc_selection_t *sel) + :param sel: Pointer to the selection to be freed. + + Free a selection structure. + + For developers: see `pdc_client_connect.c`. Frees the coordinates. + +.. function:: void PDCquery_print(pdc_query_t *query) + + :param query: The query to be printed. + + Print the details of a PDC query structure. + + For developers: see `pdc_client_server_common.c`. + +.. function:: void PDCselection_print(pdc_selection_t *sel) + + :param sel: The PDC selection to be printed. + + Print the details of a PDC selection structure. + + For developers: see `pdc_client_server_common.c`. --------------------------- PDC hist APIs --------------------------- -* pdc_histogram_t *PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) - * Input: - * dtype: One of the PDC basic types see PDC basic types (Insert link to PDC basic types) - * n: number of values with the basic types. - * data: pointer to the data buffer. +.. function:: pdc_histogram_t *PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) - * Output: - * a new PDC histogram structure (Insert link to PDC histogram structure) - * Generate a PDC histogram from data. This can be used to optimize performance. - * For developers, see pdc_hist_pkg.c + :param dtype: One of the PDC basic types. See `PDC basic types <#>`_. + :param n: Number of values with the basic type. + :param data: Pointer to the data buffer. + :returns: A new PDC histogram structure. See `PDC histogram structure <#>`_. -* pdc_histogram_t *PDC_dup_hist(pdc_histogram_t *hist) - * Input: - * hist: PDC histogram structure (Insert link to PDC histogram structure) + Generate a PDC histogram from data. This can be used to optimize performance. - * Output: - * a copied PDC histogram structure (Insert link to PDC histogram structure) - * For developers, see pdc_hist_pkg.c + For developers: see `pdc_hist_pkg.c`. -* pdc_histogram_t *PDC_merge_hist(int n, pdc_histogram_t **hists) - * Input: - * hists: an array of PDC histogram structure to be merged (Insert link to PDC histogram structure) - * Output: - * A merged PDC histogram structure (Insert link to PDC histogram structure) - * Merge multiple PDC histograms into one - * For developers, see pdc_hist_pkg.c -* void PDC_free_hist(pdc_histogram_t *hist) - * Input: - * hist: the PDC histogram structure to be freed (Link to Histogram structure) - * Output: - * None - * Delete a histogram - * For developers, see pdc_hist_pkg.c, free structure's internal arrays. +.. function:: pdc_histogram_t *PDC_dup_hist(pdc_histogram_t *hist) -* void PDC_print_hist(pdc_histogram_t *hist) - * Input: - * hist: the PDC histogram structure to be printed (Insert link to histogram structure) + :param hist: A PDC histogram structure. See `PDC histogram structure <#>`_. + :returns: A copied PDC histogram structure. See `PDC histogram structure <#>`_. - * Output: - * None - * Print a PDC histogram's information. The counter for every bin is displayed. - * For developers, see pdc_hist_pkg.c. + Create a copy of an existing PDC histogram. + For developers: see `pdc_hist_pkg.c`. ---------------------------- -PDC Data types ---------------------------- + +.. function:: pdc_histogram_t *PDC_merge_hist(int n, pdc_histogram_t **hists) + + :param n: Number of histograms to merge. + :param hists: Array of PDC histogram structures. See `PDC histogram structure <#>`_. + :returns: A merged PDC histogram structure. See `PDC histogram structure <#>`_. + + Merge multiple PDC histograms into one. + + For developers: see `pdc_hist_pkg.c`. + + +.. function:: void PDC_free_hist(pdc_histogram_t *hist) + + :param hist: The PDC histogram structure to be freed. See `PDC histogram structure <#>`_. + :returns: None. + + Free the memory allocated for a PDC histogram. + + For developers: see `pdc_hist_pkg.c`. Frees the internal arrays of the structure. + + +.. function:: void PDC_print_hist(pdc_histogram_t *hist) + + :param hist: The PDC histogram structure to be printed. See `PDC histogram structure <#>`_. + :returns: None. + + Print the contents of a PDC histogram, including bin counters. + + For developers: see `pdc_hist_pkg.c`. --------------------------- Basic types @@ -511,8 +541,6 @@ Basic types PDC_TYPE_COUNT = 19 /* this is the number of var types and has to be the last */ } pdc_c_var_type_t; - - --------------------------- Histogram structure --------------------------- @@ -527,7 +555,6 @@ Histogram structure uint64_t *bin; } pdc_histogram_t; - --------------------------- Container info --------------------------- @@ -543,8 +570,6 @@ Container info uint64_t meta_id; }; - - --------------------------- Container life time --------------------------- @@ -556,8 +581,6 @@ Container life time PDC_TRANSIENT } pdc_lifetime_t; - - --------------------------- Object property public --------------------------- @@ -573,7 +596,6 @@ Object property public pdc_var_type_t type; }; - --------------------------- Object property --------------------------- @@ -620,8 +642,6 @@ Object property }; }; - - --------------------------- Object info --------------------------- @@ -642,8 +662,6 @@ Object info struct pdc_obj_prop *obj_pt; }; - - --------------------------- Object structure --------------------------- @@ -706,8 +724,6 @@ Region info void *buf; }; - - --------------------------- Access type --------------------------- @@ -716,7 +732,6 @@ Access type typedef enum { PDC_NA=0, PDC_READ=1, PDC_WRITE=2 } - --------------------------- Query operators --------------------------- @@ -732,7 +747,6 @@ Query operators PDC_EQ = 5 } pdc_query_op_t; - --------------------------- Query structures --------------------------- @@ -764,8 +778,6 @@ Query structures pdc_selection_t *sel; } pdc_query_t; - - --------------------------- Selection structure --------------------------- @@ -780,7 +792,6 @@ Selection structure uint64_t coords_alloc; } pdc_selection_t; - --------------------------- Developers notes --------------------------- diff --git a/docs/source/assumptions.rst b/docs/source/assumptions.rst deleted file mode 100644 index 7cb66b118..000000000 --- a/docs/source/assumptions.rst +++ /dev/null @@ -1,3 +0,0 @@ -================================ -Assumptions -================================ \ No newline at end of file diff --git a/docs/source/definitions.rst b/docs/source/definitions.rst deleted file mode 100644 index eb54c5413..000000000 --- a/docs/source/definitions.rst +++ /dev/null @@ -1,3 +0,0 @@ -================================ -Definitions -================================ \ No newline at end of file diff --git a/docs/source/developer-notes.rst b/docs/source/developer-notes.rst index de37e53f3..0a9820fe7 100644 --- a/docs/source/developer-notes.rst +++ b/docs/source/developer-notes.rst @@ -11,6 +11,7 @@ The following macros are defined in the header file `src/commons/logging/include The available macros, which follow a similar usage to `printf`, are: .. code-block:: C + LOG_ERROR LOG_WARNING LOG_INFO @@ -20,6 +21,7 @@ The available macros, which follow a similar usage to `printf`, are: Each of these macros automatically prepends a timestamp and log level prefix to the output: .. code-block:: C + [year-month-day hour:minute:second] [ERROR] [year-month-day hour:minute:second] [WARNING] [year-month-day hour:minute:second] [INFO] @@ -429,6 +431,7 @@ How to set up code formatter for PDC on Mac? 3. Then follow instruction here to install clang-format: https://clang.llvm.org/get_started.html. I would suggest you do the following (suppose if you already have homebrew installed) .. code-block:: Bash + cd $LLVM_SRC_ROOT mkdir build cd build @@ -441,6 +444,7 @@ How to set up code formatter for PDC on Mac? 4. To format all your source code, do the following .. code-block:: Bash + cd pdc clang-format-v10 -i -style=file src/* find src -iname *.h -o -iname *.c | xargs clang-format-v10 -i -style=file @@ -483,6 +487,7 @@ When calling your bridging functions, the best example you can follow is `src/te Remember, you must include all your bridging function calls inside the following code blocks, so that the process can have its own Julia runtime loaded. .. code-block:: C + jl_module_list_t modules = {.julia_modules = (char *[]){JULIA_HELPER_NAME}, .num_modules = 1}; init_julia(&modules); ...... @@ -505,6 +510,7 @@ We provide docker support for PDC on such purpose. To build the docker image, you can run the following command in the root directory of PDC project: .. code-block:: Bash + .docker/run_dev_base.sh This will mount your PDC project directory to `/workspaces/pdc` directory in the docker container and an initial step will be performed once you attach to the container. @@ -533,6 +539,7 @@ We currently only support to architectures, amd64 and arm64v8. To build the architecture-specific docker image on the machine with specific CPU architecture, you can run the following command in the root directory of PDC project: .. code-block:: Bash + .docker/publish_dev_base.sh If you run the above command on an ARM64v8 CPU (say, Apple Silicon Mac), it will generate an image named '/pdc_dev_base:-arm64v8'. @@ -540,6 +547,7 @@ If you run the above command on any Intel X64/AMD x64 CPU (say, Microsoft surfac Once the above is done, you can pick the image build machine with fastest network and run the following .. code-block:: Bash + .docker/publish_dev_base.sh 1 This will create a multi-arch image with both amd64 and arm64v8 architectures in your registry under your namespace. @@ -565,11 +573,13 @@ Debugging PDC on Perlmutter with LinaroForge First, you need to start an interactive session on Perlmutter: .. code-block:: Bash + salloc -N 1 -C cpu -q interactive -t 1:00:00 Then, you can load the ``forge`` module: .. code-block:: Bash + module load forge module list @@ -582,6 +592,7 @@ Go to this website https://www.linaroforge.com/download-documentation and find t To run a test, let's lunch pdc_server with 4 cores: .. code-block:: Bash + cd $PDC_HOME/build rm -rf ./pdc_tmp # optional if you need to clean up the PDC tmp directory srun -N 1 -n 4 -c 2 --mem=25600 --cpu_bind=cores ./bin/pdc_server.exe & @@ -589,12 +600,14 @@ To run a test, let's lunch pdc_server with 4 cores: To debug the client, you can run the following command: .. code-block:: Bash + cd $PDC_HOME/build ddt --connect srun -N 1 -n 4 -c 2 --mem=25600 --cpu_bind=cores ./bin/pdc_client.exe But if you need to debug the server, you can prepend ``srun`` with ``ddt --connect``: .. code-block:: Bash + cd $PDC_HOME/build rm -rf ./pdc_tmp # optional if you need to clean up the PDC tmp directory ddt --connect srun -N 1 -n 4 -c 2 --mem=25600 --cpu_bind=cores ./bin/pdc_server.exe & diff --git a/docs/source/examples.rst b/docs/source/examples.rst index 6b699dcc9..fdb85cdd7 100644 --- a/docs/source/examples.rst +++ b/docs/source/examples.rst @@ -16,7 +16,6 @@ Usage: ./mpi_test.sh ./pdc_client_application MPIRUN_CMD number_of_servers number_of_clients arg1 arg2 .... ./run_multiple_test.sh ./pdc_client_application_1 ./pdc_client_application_2 ...... - --------------------------- PDC Hello World --------------------------- @@ -42,7 +41,6 @@ PDC Hello World * The above command will start a server with 2 processes. Then it will start the application program with 4 processes. Finally, all servers are closed. * On supercomputers, "mpiexec" can be replaced with "srun", "jsrun" or "aprun". - --------------------------- Simple I-O --------------------------- @@ -58,7 +56,6 @@ Simple I-O ./run_test.sh ./obj_get_data ./mpi_test.sh ./obj_get_data mpiexec 2 4 - --------------------------- I-O with region mapping --------------------------- @@ -76,7 +73,6 @@ I-O with region mapping ./run_test.sh ./region_obj_map_3D ./mpi_test.sh ./region_obj_map_3D mpiexec 2 4 - --------------------------- VPIC-IO and BD-CATS-IO --------------------------- @@ -89,7 +85,6 @@ VPIC-IO and BD-CATS-IO ./run_multiple_test.sh ./vpicio ./bdcats - * VPIC-IO: * vpicio.c * VPIC I/O is an example for writing multiple objects using PDC, where each object is a variable of particles. @@ -108,7 +103,6 @@ VPIC-IO and BD-CATS-IO HACC-IO --------------------------- - * The purpose of this benchmark is to evaluate the performance of the I/O system for the Hardware Accelerated Cosmology Code (HACC) simulation. The HACC framework uses N-body techniques to simulate the formation of structure in collisionless fluids under the influence of gravity in an expanding universe. * Each MPI rank writes 9 variables (with different data types) per particle for a total of 38 bytes. @@ -116,7 +110,6 @@ HACC-IO ./mpi_test.sh ./haccio mpiexec 1 num-procs num-particles - --------------------------- Tile-IO --------------------------- diff --git a/docs/source/futurework.rst b/docs/source/futurework.rst deleted file mode 100644 index 09405e013..000000000 --- a/docs/source/futurework.rst +++ /dev/null @@ -1,3 +0,0 @@ -================================ -Future Work -================================ \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index 7d6a774eb..13f3fbf96 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -19,8 +19,6 @@ Byna, Suren, Dong, Bin, Tang, Houjun, Koziol, Quincey, Mu, Jingqing, Soumagne, J :caption: Getting Started getting_started - .. definitions - .. assumptions .. toctree:: :maxdepth: 2 @@ -28,17 +26,15 @@ Byna, Suren, Dong, Bin, Tang, Houjun, Koziol, Quincey, Mu, Jingqing, Soumagne, J introduction hdf5vol - .. performance .. toctree:: :maxdepth: 2 :caption: Resources hellopdcexample + examples api tools - .. inflightanalysis - .. futurework .. toctree:: diff --git a/docs/source/inflightanalysis.rst b/docs/source/inflightanalysis.rst deleted file mode 100644 index c64c515f1..000000000 --- a/docs/source/inflightanalysis.rst +++ /dev/null @@ -1,3 +0,0 @@ -================================ -In-flight Analysis -================================ \ No newline at end of file diff --git a/docs/source/performance.rst b/docs/source/performance.rst deleted file mode 100644 index 6e194ba79..000000000 --- a/docs/source/performance.rst +++ /dev/null @@ -1,3 +0,0 @@ -================================ -Performance -================================ \ No newline at end of file diff --git a/examples/C_plus_plus_example/multidataset_plugin.cc b/examples/C_plus_plus_example/multidataset_plugin.cc index 3c1d71848..e5782a2e9 100644 --- a/examples/C_plus_plus_example/multidataset_plugin.cc +++ b/examples/C_plus_plus_example/multidataset_plugin.cc @@ -8,38 +8,43 @@ static pdcid_t cont; static std::map dp2event; -static std::vector cached_objs; -static std::vector cached_requests; -static std::vector cached_bufs; +static std::vector cached_objs; +static std::vector cached_requests; +static std::vector cached_bufs; static std::set existing_objs; static int hdf5_method_g = -1; #endif -static std::map multi_datasets; +static std::map multi_datasets; -int init_multidataset() { +int +init_multidataset() +{ char *p = getenv("HEP_IO_TYPE"); - if ( p != NULL ) { + if (p != NULL) { set_hdf5_method(atoi(p)); - } else { + } + else { set_hdf5_method(1); } #ifdef PDC_PATCH pdcid_t cont_prop; - pdc = PDCinit("pdc"); + pdc = PDCinit("pdc"); cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - cont = PDCcont_create("C", cont_prop); + cont = PDCcont_create("C", cont_prop); PDCprop_close(cont_prop); #endif return 0; } -int finalize_multidataset() { - unsigned i; - std::map::iterator it; - std::vector::iterator it2; - double start_time; +int +finalize_multidataset() +{ + unsigned i; + std::map::iterator it; + std::vector::iterator it2; + double start_time; #ifdef PDC_PATCH flush_multidatasets(); @@ -47,25 +52,25 @@ int finalize_multidataset() { #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - //PDCregion_transfer_wait_all(&cached_requests[0], cached_requests.size()); + // PDCregion_transfer_wait_all(&cached_requests[0], cached_requests.size()); #ifdef H5_TIMING_ENABLE register_PDCwait_timer_end(start_time); #endif - for ( i = 0; i < cached_requests.size(); ++i ) { + for (i = 0; i < cached_requests.size(); ++i) { PDCregion_transfer_close(cached_requests[i]); } - for ( i = 0; i < cached_bufs.size(); ++i ) { + for (i = 0; i < cached_bufs.size(); ++i) { free(cached_bufs[i]); } - for ( i = 0; i < cached_objs.size(); ++i ) { + for (i = 0; i < cached_objs.size(); ++i) { PDCobj_close(cached_objs[i]); } } PDCcont_close(cont); PDCclose(pdc); #else - for ( it = multi_datasets.begin(); it != multi_datasets.end(); ++it ) { - for ( it2 = it->second->temp_mem->begin(); it2 != it->second->temp_mem->end(); ++it2 ) { + for (it = multi_datasets.begin(); it != multi_datasets.end(); ++it) { + for (it2 = it->second->temp_mem->begin(); it2 != it->second->temp_mem->end(); ++it2) { free(*it2); } if (it->second->did != -1) { @@ -77,39 +82,46 @@ int finalize_multidataset() { register_H5Dclose_timer_end(start_time); #endif } - delete it->second->start; - delete it->second->end; - delete it->second->temp_mem; + delete it->second->start; + delete it->second->end; + delete it->second->temp_mem; free(it->second); } #endif return 0; } -int set_hdf5_method(int hdf5_method) { +int +set_hdf5_method(int hdf5_method) +{ hdf5_method_g = hdf5_method; return 0; } -int get_hdf5_method() { +int +get_hdf5_method() +{ return hdf5_method_g; } -static int wrap_hdf5_spaces(int total_requests, hsize_t *start, hsize_t *end, hid_t did, hid_t* dsid_ptr, hid_t *msid_ptr) { +static int +wrap_hdf5_spaces(int total_requests, hsize_t *start, hsize_t *end, hid_t did, hid_t *dsid_ptr, + hid_t *msid_ptr) +{ const hsize_t ndims = 1; - hsize_t old_dims[ndims]; //our datasets are 1D - hsize_t new_dims[ndims]; - hsize_t max_dims[ndims]; //= {H5S_UNLIMITED}; - hsize_t max_offset, data_size, total_data_size; - hid_t dsid, msid; - int i; + hsize_t old_dims[ndims]; // our datasets are 1D + hsize_t new_dims[ndims]; + hsize_t max_dims[ndims]; //= {H5S_UNLIMITED}; + hsize_t max_offset, data_size, total_data_size; + hid_t dsid, msid; + int i; dsid = H5Dget_space(did); H5Sget_simple_extent_dims(dsid, old_dims, max_dims); - + max_offset = end[0]; - for ( i = 1; i < total_requests; ++i ) { - if ( max_offset < end[i] ) { + for (i = 1; i < total_requests; ++i) { + if (max_offset < end[i]) { max_offset = end[i]; } } @@ -123,49 +135,54 @@ static int wrap_hdf5_spaces(int total_requests, hsize_t *start, hsize_t *end, hi data_size = end[0] - start[0]; H5Sselect_hyperslab(dsid, H5S_SELECT_SET, start, NULL, &data_size, NULL); total_data_size = data_size; - for ( i = 1; i < total_requests; ++i ) { + for (i = 1; i < total_requests; ++i) { data_size = end[i] - start[i]; total_data_size += data_size; H5Sselect_hyperslab(dsid, H5S_SELECT_OR, start + i, NULL, &data_size, NULL); } max_dims[0] = H5S_UNLIMITED; - msid = H5Screate_simple(ndims, &total_data_size, max_dims); + msid = H5Screate_simple(ndims, &total_data_size, max_dims); *dsid_ptr = dsid; *msid_ptr = msid; return 0; } #ifdef PDC_PATCH -int register_multidataset_request(const char *name, void *buf, hsize_t start, hsize_t end, hid_t mtype) { +int +register_multidataset_request(const char *name, void *buf, hsize_t start, hsize_t end, hid_t mtype) +{ #else -int register_multidataset_request(const char *name, hid_t gid, void *buf, hsize_t start, hsize_t end, hid_t mtype) { +int +register_multidataset_request(const char *name, hid_t gid, void *buf, hsize_t start, hsize_t end, hid_t mtype) +{ #endif - std::string s(name); - std::map::iterator it; - char *temp_mem; - size_t esize = H5Tget_size (mtype) * (end - start); - int flag = 0; + std::string s(name); + std::map::iterator it; + char *temp_mem; + size_t esize = H5Tget_size(mtype) * (end - start); + int flag = 0; it = multi_datasets.find(s); - if ( it == multi_datasets.end()) { - multidataset_array *multi_dataset = (multidataset_array *) malloc(sizeof(multidataset_array)); - multi_dataset->start = new std::vector; - multi_dataset->end =new std::vector; - multi_dataset->temp_mem = new std::vector; - multi_datasets[s] = multi_dataset; - it = multi_datasets.find(s); - flag = 1; + if (it == multi_datasets.end()) { + multidataset_array *multi_dataset = (multidataset_array *)malloc(sizeof(multidataset_array)); + multi_dataset->start = new std::vector; + multi_dataset->end = new std::vector; + multi_dataset->temp_mem = new std::vector; + multi_datasets[s] = multi_dataset; + it = multi_datasets.find(s); + flag = 1; } #ifdef PDC_PATCH - int ndim = 1; + int ndim = 1; uint64_t dims; if (flag) { if (existing_objs.find(s) == existing_objs.end()) { pdcid_t obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); - if (mtype == H5T_NATIVE_ULLONG){ + if (mtype == H5T_NATIVE_ULLONG) { PDCprop_set_obj_type(obj_prop, PDC_UINT64); - } else { + } + else { PDCprop_set_obj_type(obj_prop, PDC_CHAR); } dims = end - start; @@ -174,7 +191,8 @@ int register_multidataset_request(const char *name, hid_t gid, void *buf, hsize_ it->second->did = PDCobj_create(cont, name, obj_prop); PDCprop_close(obj_prop); existing_objs.insert(s); - } else { + } + else { it->second->did = PDCobj_open(name, pdc); } } @@ -185,28 +203,31 @@ int register_multidataset_request(const char *name, hid_t gid, void *buf, hsize_ #endif it->second->start->push_back(start); it->second->end->push_back(end); - temp_mem = (char*) malloc(esize); + temp_mem = (char *)malloc(esize); it->second->temp_mem->push_back(temp_mem); memcpy(temp_mem, buf, esize); it->second->last_end = end; - it->second->mtype = mtype; + it->second->mtype = mtype; return 0; } -int register_multidataset_request_append(const char *name, hid_t gid, void *buf, hsize_t data_size, hid_t mtype) { +int +register_multidataset_request_append(const char *name, hid_t gid, void *buf, hsize_t data_size, hid_t mtype) +{ std::string s(name); - hsize_t start, end; + hsize_t start, end; - std::map::iterator it; + std::map::iterator it; it = multi_datasets.find(s); - if ( it != multi_datasets.end() ){ + if (it != multi_datasets.end()) { start = it->second->last_end; - end = it->second->last_end + data_size; - } else { + end = it->second->last_end + data_size; + } + else { start = 0; - end = data_size; + end = data_size; } #ifdef PDC_PATCH @@ -217,38 +238,42 @@ int register_multidataset_request_append(const char *name, hid_t gid, void *buf, return 0; } -static int merge_requests(std::vector *start, std::vector *end, int request_size, std::vector *buf, hsize_t **new_start, hsize_t **new_end, char** new_buf, hid_t mtype, int *request_size_ptr) { - int i, index; - int merged_requests = request_size; - char* ptr; - size_t esize = H5Tget_size (mtype); +static int +merge_requests(std::vector *start, std::vector *end, int request_size, + std::vector *buf, hsize_t **new_start, hsize_t **new_end, char **new_buf, hid_t mtype, + int *request_size_ptr) +{ + int i, index; + int merged_requests = request_size; + char *ptr; + size_t esize = H5Tget_size(mtype); size_t total_data_size = end[0][0] - start[0][0]; - for ( i = 1; i < request_size; ++i ) { + for (i = 1; i < request_size; ++i) { total_data_size += end[0][i] - start[0][i]; - if ( end[0][i-1] == start[0][i] ) { + if (end[0][i - 1] == start[0][i]) { merged_requests--; } } - *new_start = (hsize_t*) malloc(sizeof(hsize_t) * merged_requests * 2); - *new_end = new_start[0] + merged_requests; + *new_start = (hsize_t *)malloc(sizeof(hsize_t) * merged_requests * 2); + *new_end = new_start[0] + merged_requests; - index = 0; + index = 0; new_start[0][0] = start[0][0]; - new_end[0][0] = end[0][0]; + new_end[0][0] = end[0][0]; - *new_buf = (char*) malloc(esize * total_data_size); - ptr = *new_buf; + *new_buf = (char *)malloc(esize * total_data_size); + ptr = *new_buf; memcpy(ptr, buf[0][0], (end[0][0] - start[0][0]) * esize); ptr += (end[0][0] - start[0][0]) * esize; free(buf[0][0]); - for ( i = 1; i < request_size; ++i ) { + for (i = 1; i < request_size; ++i) { memcpy(ptr, buf[0][i], (end[0][i] - start[0][i]) * esize); ptr += (end[0][i] - start[0][i]) * esize; free(buf[0][i]); - if ( end[0][i-1] < start[0][i] ) { + if (end[0][i - 1] < start[0][i]) { index++; new_start[0][index] = start[0][i]; } @@ -258,85 +283,89 @@ static int merge_requests(std::vector *start, std::vector *end return 0; } -int flush_multidatasets() { +int +flush_multidatasets() +{ unsigned i; - int j; + int j; #ifndef PDC_PATCH - size_t esize; - hsize_t dims[H5S_MAX_RANK], mdims[H5S_MAX_RANK]; + size_t esize; + hsize_t dims[H5S_MAX_RANK], mdims[H5S_MAX_RANK]; H5D_rw_multi_t *multi_datasets_temp; - hid_t msid, dsid; + hid_t msid, dsid; #endif - hsize_t *new_start, *new_end; - int new_request_size; - std::map::iterator it; - int dataset_size = multi_datasets.size(); - char **temp_buf = (char**) malloc(sizeof(char*) * dataset_size); + hsize_t *new_start, *new_end; + int new_request_size; + std::map::iterator it; + int dataset_size = multi_datasets.size(); + char **temp_buf = (char **)malloc(sizeof(char *) * dataset_size); #ifdef H5_TIMING_ENABLE double start_time; #endif i = 0; - LOG_DEBUG("Rank %d number of datasets to be written %d\n", rank, dataset_size); -#if ENABLE_MULTIDATASET==1 - #ifdef H5_TIMING_ENABLE + LOG_DEBUG("Number of datasets to be written %d\n", rank, dataset_size); +#if ENABLE_MULTIDATASET == 1 +#ifdef H5_TIMING_ENABLE increment_H5Dwrite(); - #endif - multi_datasets_temp = (H5D_rw_multi_t*) malloc(sizeof(H5D_rw_multi_t) * dataset_size); - for ( it = multi_datasets.begin(); it != multi_datasets.end(); ++it ) { +#endif + multi_datasets_temp = (H5D_rw_multi_t *)malloc(sizeof(H5D_rw_multi_t) * dataset_size); + for (it = multi_datasets.begin(); it != multi_datasets.end(); ++it) { if (it->second->did == -1) { - i++; + i++; continue; } - //MPI_Barrier(MPI_COMM_WORLD); - #ifdef H5_TIMING_ENABLE +// MPI_Barrier(MPI_COMM_WORLD); +#ifdef H5_TIMING_ENABLE increment_H5Dwrite(); - #endif +#endif - merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, &new_start, &new_end, &(temp_buf[i]), it->second->mtype, &new_request_size); - multi_datasets_temp[i].dset_id = it->second->did; + merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, + &new_start, &new_end, &(temp_buf[i]), it->second->mtype, &new_request_size); + multi_datasets_temp[i].dset_id = it->second->did; multi_datasets_temp[i].mem_type_id = it->second->mtype; - multi_datasets_temp[i].u.wbuf = temp_buf[i]; + multi_datasets_temp[i].u.wbuf = temp_buf[i]; - wrap_hdf5_spaces(new_request_size, new_start, new_end, it->second->did, &(multi_datasets_temp[i].dset_space_id), &(multi_datasets_temp[i].mem_space_id)); - i++; + wrap_hdf5_spaces(new_request_size, new_start, new_end, it->second->did, + &(multi_datasets_temp[i].dset_space_id), &(multi_datasets_temp[i].mem_space_id)); + i++; } H5Dwrite_multi(H5P_DEFAULT, dataset_size, multi_datasets_temp); - for ( it = multi_datasets.begin(); it != multi_datasets.end(); ++it ) { + for (it = multi_datasets.begin(); it != multi_datasets.end(); ++it) { if (it->second->did == -1) { continue; } H5Sclose(multi_datasets_temp[i].dset_space_id); H5Sclose(multi_datasets_temp[i].mem_space_id); H5Dclose(multi_datasets_temp[i].dset_id); - delete it->second->start; - delete it->second->end; - delete it->second->temp_mem; + delete it->second->start; + delete it->second->end; + delete it->second->temp_mem; free(temp_buf[i]); } free(multi_datasets_temp); #else - LOG_DEBUG("rank %d has dataset_size %lld\n", rank, (long long int) dataset_size); + LOG_DEBUG("Dataset_size %lld\n", rank, (long long int)dataset_size); #ifdef PDC_PATCH if (cached_objs.size()) { #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - //PDCregion_transfer_wait_all(&cached_requests[0], cached_requests.size()); + // PDCregion_transfer_wait_all(&cached_requests[0], cached_requests.size()); #ifdef H5_TIMING_ENABLE register_PDCwait_timer_end(start_time); #endif - for ( i = 0; i < cached_requests.size(); ++i ) { + for (i = 0; i < cached_requests.size(); ++i) { PDCregion_transfer_close(cached_requests[i]); } - for ( i = 0; i < cached_bufs.size(); ++i ) { + for (i = 0; i < cached_bufs.size(); ++i) { free(cached_bufs[i]); } - for ( i = 0; i < cached_objs.size(); ++i ) { + for (i = 0; i < cached_objs.size(); ++i) { PDCobj_close(cached_objs[i]); } cached_objs.clear(); @@ -344,32 +373,36 @@ int flush_multidatasets() { cached_bufs.clear(); } i = 0; - for ( it = multi_datasets.begin(); it != multi_datasets.end(); ++it ) { + for (it = multi_datasets.begin(); it != multi_datasets.end(); ++it) { #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, &new_start, &new_end, temp_buf + i, it->second->mtype, &new_request_size); + merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, + &new_start, &new_end, temp_buf + i, it->second->mtype, &new_request_size); #ifdef H5_TIMING_ENABLE register_merge_requests_timer_end(start_time); #endif uint64_t max_dim = new_end[new_request_size - 1]; PDCobj_set_dims(it->second->did, 1, &max_dim); - char* ptr = temp_buf[i]; - for ( j = 0; j < new_request_size; ++j ) { + char *ptr = temp_buf[i]; + for (j = 0; j < new_request_size; ++j) { uint64_t offset, offset_length; - offset = new_start[j]; + offset = new_start[j]; offset_length = new_end[j] - new_start[j]; - pdcid_t reg = PDCregion_create(1, &offset, &offset_length); - pdcid_t transfer_request_id = PDCregion_transfer_create(ptr, PDC_WRITE, it->second->did, reg, reg); - LOG_DEBUG("did = %lu, starting request offset = %lu, size = %lu, j = %d\n", it->second->did, offset, offset_length, j); + pdcid_t reg = PDCregion_create(1, &offset, &offset_length); + pdcid_t transfer_request_id = + PDCregion_transfer_create(ptr, PDC_WRITE, it->second->did, reg, reg); + LOG_DEBUG("did = %lu, starting request offset = %lu, size = %lu, j = %d\n", it->second->did, + offset, offset_length, j); PDCregion_transfer_start(transfer_request_id); PDCregion_transfer_wait(transfer_request_id); cached_requests.push_back(transfer_request_id); if (it->second->mtype == H5T_NATIVE_CHAR) { ptr += new_end[j] - new_start[j]; - } else { + } + else { ptr += (new_end[j] - new_start[j]) * sizeof(uint64_t); } } @@ -379,33 +412,34 @@ int flush_multidatasets() { delete it->second->start; delete it->second->end; delete it->second->temp_mem; - #ifdef H5_TIMING_ENABLE +#ifdef H5_TIMING_ENABLE increment_PDCwrite(); - #endif +#endif i++; } #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - //PDCregion_transfer_start_all(&cached_requests[0], cached_requests.size()); + // PDCregion_transfer_start_all(&cached_requests[0], cached_requests.size()); #ifdef H5_TIMING_ENABLE register_PDCstart_timer_end(start_time); #endif #else - for ( it = multi_datasets.begin(); it != multi_datasets.end(); ++it ) { + for (it = multi_datasets.begin(); it != multi_datasets.end(); ++it) { if (it->second->did == -1) { - i++; + i++; continue; } - #ifdef H5_TIMING_ENABLE +#ifdef H5_TIMING_ENABLE increment_H5Dwrite(); - #endif +#endif #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, &new_start, &new_end, temp_buf + i, it->second->mtype, &new_request_size); + merge_requests(it->second->start, it->second->end, it->second->start->size(), it->second->temp_mem, + &new_start, &new_end, temp_buf + i, it->second->mtype, &new_request_size); #ifdef H5_TIMING_ENABLE register_merge_requests_timer_end(start_time); @@ -421,7 +455,7 @@ int flush_multidatasets() { #ifdef H5_TIMING_ENABLE register_timer_start(&start_time); #endif - H5Dwrite (it->second->did, it->second->mtype, msid, dsid, H5P_DEFAULT, temp_buf[i]); + H5Dwrite(it->second->did, it->second->mtype, msid, dsid, H5P_DEFAULT, temp_buf[i]); #ifdef H5_TIMING_ENABLE register_H5Dwrite_timer_end(start_time); #endif @@ -435,11 +469,11 @@ int flush_multidatasets() { #ifdef H5_TIMING_ENABLE register_H5Dclose_timer_end(start_time); #endif - delete it->second->start; - delete it->second->end; - delete it->second->temp_mem; + delete it->second->start; + delete it->second->end; + delete it->second->temp_mem; free(temp_buf[i]); - i++; + i++; } #endif free(temp_buf); diff --git a/examples/C_plus_plus_example/region_transfer_1D_append.cc b/examples/C_plus_plus_example/region_transfer_1D_append.cc index cce884945..52ce6ae53 100644 --- a/examples/C_plus_plus_example/region_transfer_1D_append.cc +++ b/examples/C_plus_plus_example/region_transfer_1D_append.cc @@ -27,17 +27,17 @@ #include #include "multidataset_plugin.h" -#define DATA_SIZE 128 +#define DATA_SIZE 128 #define ARRAY_SIZE 10 int main(int argc, char **argv) { - int rank = 0, size = 1; - int ret_value = 0; - int *data; - int i; - char data_name[1024]; + int rank = 0, size = 1; + int ret_value = 0; + int *data; + int i; + char data_name[1024]; // create a pdc #ifdef ENABLE_MPI @@ -52,21 +52,21 @@ main(int argc, char **argv) init_multidataset(); - data = (int*) malloc(sizeof(int) * DATA_SIZE); - for ( i = 0; i < DATA_SIZE; ++i ) { + data = (int *)malloc(sizeof(int) * DATA_SIZE); + for (i = 0; i < DATA_SIZE; ++i) { data[i] = i; } sprintf(data_name, "data0_%d", rank); - LOG_INFO("rank %d C++ example for writing %d lists of arrays with size %d\n", rank, ARRAY_SIZE, DATA_SIZE); - for ( i = 0; i < ARRAY_SIZE; ++i ) { + LOG_INFO("C++ example for writing %d lists of arrays with size %d\n", rank, ARRAY_SIZE, DATA_SIZE); + for (i = 0; i < ARRAY_SIZE; ++i) { register_multidataset_request_append(data_name, 0, data, sizeof(int) * DATA_SIZE, H5T_NATIVE_CHAR); } sprintf(data_name, "data1_%d", rank); - LOG_INFO("rank %d C++ example for writing %d lists of arrays with size %d\n", rank, ARRAY_SIZE, DATA_SIZE); - for ( i = 0; i < ARRAY_SIZE; ++i ) { + LOG_INFO("C++ example for writing %d lists of arrays with size %d\n", rank, ARRAY_SIZE, DATA_SIZE); + for (i = 0; i < ARRAY_SIZE; ++i) { register_multidataset_request_append(data_name, 0, data, sizeof(int) * DATA_SIZE, H5T_NATIVE_CHAR); } flush_multidatasets(); diff --git a/examples/obj_get_data.c b/examples/obj_get_data.c index c0f23d660..2c6396e8e 100644 --- a/examples/obj_get_data.c +++ b/examples/obj_get_data.c @@ -63,7 +63,7 @@ main(int argc, char **argv) sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); + LOG_INFO("Created a container %s\n", cont_name); } else { LOG_ERROR("Failed to create container"); @@ -74,7 +74,7 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_put_data(obj_name1, (void *)data, 16 * sizeof(double), cont); if (obj1 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name1); + LOG_INFO("Put data to %s\n", obj_name1); } else { LOG_ERROR("Failed to put data into object"); @@ -85,7 +85,7 @@ main(int argc, char **argv) sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_put_data(obj_name2, (void *)data, 128 * sizeof(double), cont); if (obj2 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name2); + LOG_INFO("Put data to %s\n", rank, obj_name2); } else { LOG_ERROR("Failed to put data into object"); diff --git a/examples/region_transfer_2D.c b/examples/region_transfer_2D.c index 6aad007c5..37328c3bd 100644 --- a/examples/region_transfer_2D.c +++ b/examples/region_transfer_2D.c @@ -68,7 +68,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -78,7 +78,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -87,13 +87,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, 2, dims); @@ -109,7 +109,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -119,7 +119,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -143,19 +143,19 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -183,65 +183,65 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/examples/region_transfer_3D.c b/examples/region_transfer_3D.c index 6aefd40d5..7336e5d58 100644 --- a/examples/region_transfer_3D.c +++ b/examples/region_transfer_3D.c @@ -66,29 +66,29 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -107,20 +107,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -146,19 +146,19 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -188,65 +188,65 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/api/close_server.c b/src/api/close_server.c index b3bdcdb1c..853826980 100644 --- a/src/api/close_server.c +++ b/src/api/close_server.c @@ -35,6 +35,8 @@ int main(int argc, char *argv[]) { + FUNC_ENTER(NULL); + pdcid_t pdc; #ifdef ENABLE_MPI int rank; @@ -57,5 +59,6 @@ main(int argc, char *argv[]) } MPI_Finalize(); #endif - return 0; + + FUNC_LEAVE(0); } diff --git a/src/api/include/pdc.h b/src/api/include/pdc.h index 714120dab..ae790d42b 100644 --- a/src/api/include/pdc.h +++ b/src/api/include/pdc.h @@ -30,6 +30,7 @@ #include "pdc_prop.h" #include "pdc_cont.h" #include "pdc_logger.h" +#include "pdc_client_connect.h" #ifdef ENABLE_MPI #include "pdc_mpi.h" diff --git a/src/api/pdc.c b/src/api/pdc.c index 68f64f728..6f3a462fb 100644 --- a/src/api/pdc.c +++ b/src/api/pdc.c @@ -45,31 +45,30 @@ perr_t PDC_class__close(struct _pdc_class *p); static perr_t PDC_class_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* Initialize the atom group for the container property IDs */ if (PDC_register_type(PDC_CLASS, (PDC_free_t)PDC_class__close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize pdc class interface"); + PGOTO_ERROR(FAIL, "Unable to initialize pdc class interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static pdcid_t PDC_class_create(const char *pdc_name) { + FUNC_ENTER(NULL); + pdcid_t ret_value = SUCCEED; pdcid_t pdcid; struct _pdc_class *p = NULL; - FUNC_ENTER(NULL); - p = (struct _pdc_class *)PDC_malloc(sizeof(struct _pdc_class)); if (!p) - PGOTO_ERROR(FAIL, "PDC class property memory allocation failed\n"); + PGOTO_ERROR(FAIL, "PDC class property memory allocation failed"); p->name = strdup(pdc_name); pdcid = PDC_id_register(PDC_CLASS, p); @@ -77,18 +76,17 @@ PDC_class_create(const char *pdc_name) ret_value = pdcid; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCinit(const char *pdc_name) { + FUNC_ENTER(NULL); + pdcid_t ret_value = SUCCEED; pdcid_t pdcid; - FUNC_ENTER(NULL); - if (NULL == (pdc_id_list_g = (struct pdc_id_list *)PDC_calloc(1, sizeof(struct pdc_id_list)))) PGOTO_ERROR(0, "PDC global id list: memory allocation failed"); @@ -116,22 +114,22 @@ PDCinit(const char *pdc_name) ret_value = pdcid; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_class__close(struct _pdc_class *p) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); #ifdef PDC_TIMING PDC_timing_finalize(); #endif - free(p->name); - p = (struct _pdc_class *)(intptr_t)PDC_free(p); + p->name = (char *)PDC_free(p->name); + p = (struct _pdc_class *)(intptr_t)PDC_free(p); FUNC_LEAVE(ret_value); } @@ -139,41 +137,39 @@ PDC_class__close(struct _pdc_class *p) perr_t PDC_class_close(pdcid_t pdc) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(pdc) < 0) PGOTO_ERROR(FAIL, "PDC: problem of freeing id"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_class_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (PDC_destroy_type(PDC_CLASS) < 0) - PGOTO_ERROR(FAIL, "unable to destroy pdc class interface"); + PGOTO_ERROR(FAIL, "Unable to destroy pdc class interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCclose(pdcid_t pdcid) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + #ifdef ENABLE_APP_CLOSE_SERVER PDC_Client_close_all_server(); #endif @@ -221,6 +217,5 @@ PDCclose(pdcid_t pdcid) PDC_Client_finalize(); done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_analysis/include/pdc_analysis_and_transforms_common.h b/src/api/pdc_analysis/include/pdc_analysis_and_transforms_common.h index 79ccbf3db..d812c65c7 100644 --- a/src/api/pdc_analysis/include/pdc_analysis_and_transforms_common.h +++ b/src/api/pdc_analysis/include/pdc_analysis_and_transforms_common.h @@ -26,6 +26,7 @@ #include "pdc_prop_pkg.h" #include "pdc_transforms_pkg.h" +#include "pdc_timing.h" #include "mercury_proc_string.h" #include "mercury_atomic.h" #include @@ -202,195 +203,175 @@ typedef struct obj_data_iterator_out_t { static HG_INLINE hg_return_t hg_proc_analysis_ftn_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; analysis_ftn_in_t *struct_data = (analysis_ftn_in_t *)data; ret = hg_proc_hg_const_string_t(proc, &struct_data->ftn_name); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_const_string_t(proc, &struct_data->loadpath); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->local_obj_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->iter_in); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->iter_out); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_obj_data_iterator_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; obj_data_iterator_in_t *struct_data = (obj_data_iterator_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->client_iter_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->object_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->reg_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->sliceCount); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->sliceNext); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->sliceResetCount); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->elementsPerSlice); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->slicePerBlock); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->elementsPerPlane); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->elementsPerBlock); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->skipCount); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->element_size); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->srcBlockCount); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->contigBlockSize); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->totalElements); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims_0); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims_1); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims_2); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims_3); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->storageinfo); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->server_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_analysis_ftn_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; analysis_ftn_out_t *struct_data = (analysis_ftn_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->remote_ftn_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_obj_data_iterator_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; obj_data_iterator_out_t *struct_data = (obj_data_iterator_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->server_iter_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->client_iter_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->server_region_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /***************************************/ diff --git a/src/api/pdc_analysis/pdc_analysis.c b/src/api/pdc_analysis/pdc_analysis.c index 0add84746..872c9a403 100644 --- a/src/api/pdc_analysis/pdc_analysis.c +++ b/src/api/pdc_analysis/pdc_analysis.c @@ -51,14 +51,17 @@ static char *default_pdc_analysis_lib = "libpdcanalysis.so"; void * PDC_Server_get_region_data_ptr(pdcid_t object_id) { + FUNC_ENTER(NULL); UNUSED(object_id); - return NULL; + FUNC_LEAVE(NULL); } #endif static int iterator_init(pdcid_t objectId, pdcid_t reg_id, int blocks, struct _pdc_iterator_info *iter) { + FUNC_ENTER(NULL); + int ret_value = 0; int k, d_offset; size_t i, element_size = 0; @@ -74,8 +77,6 @@ iterator_init(pdcid_t objectId, pdcid_t reg_id, int blocks, struct _pdc_iterator struct _pdc_obj_info * object_info = PDC_obj_get_info(objectId); struct _pdc_obj_prop * obj_prop_ptr; - FUNC_ENTER(NULL); - /* Gather Information about the underlying object, e.g. * the object data type, object size, etc. refers to the * containing array. These are for the most part, applicable @@ -101,7 +102,8 @@ iterator_init(pdcid_t objectId, pdcid_t reg_id, int blocks, struct _pdc_iterator } } iter->totalElements = 1; - if ((iter->srcDims = (size_t *)calloc(obj_prop_ptr->obj_prop_pub->ndim, sizeof(size_t))) != NULL) { + if ((iter->srcDims = (size_t *)PDC_calloc(obj_prop_ptr->obj_prop_pub->ndim, sizeof(size_t))) != + NULL) { iter->ndim = obj_prop_ptr->obj_prop_pub->ndim; for (i = 0; i < iter->ndim; i++) { iter->srcDims[i] = (size_t)obj_prop_ptr->obj_prop_pub->dims[i]; @@ -121,7 +123,7 @@ iterator_init(pdcid_t objectId, pdcid_t reg_id, int blocks, struct _pdc_iterator iter->contigBlockSize = obj_elementsPerSlice * element_size; } else - PGOTO_ERROR(-1, "Error: object (%" PRIu64 ") has not been initalized correctly!", objectId); + PGOTO_ERROR(FAIL, "Error: Object (%" PRIu64 ") has not been initalized correctly", objectId); iter->element_size = element_size; iter->objectId = objectId; @@ -247,19 +249,18 @@ iterator_init(pdcid_t objectId, pdcid_t reg_id, int blocks, struct _pdc_iterator ret_value = 0; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCobj_data_block_iterator_create(pdcid_t obj_id, pdcid_t reg_id, int contig_blocks) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; pdcid_t iterId; struct _pdc_iterator_info *p = NULL; - FUNC_ENTER(NULL); - iterId = PDCiter_get_nextId(); p = &PDC_Block_iterator_cache[iterId]; @@ -271,7 +272,6 @@ PDCobj_data_block_iterator_create(pdcid_t obj_id, pdcid_t reg_id, int contig_blo PGOTO_ERROR(0, "Unable to register a new iterator"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -281,11 +281,10 @@ PDCobj_data_block_iterator_create(pdcid_t obj_id, pdcid_t reg_id, int contig_blo pdcid_t PDCobj_data_iter_create(pdcid_t obj_id, pdcid_t reg_id) { - pdcid_t ret_value = 0; - FUNC_ENTER(NULL); - ret_value = PDCobj_data_block_iterator_create(obj_id, reg_id, 1); + pdcid_t ret_value = 0; + ret_value = PDCobj_data_block_iterator_create(obj_id, reg_id, 1); FUNC_LEAVE(ret_value); } @@ -308,6 +307,8 @@ PDCobj_data_iter_create(pdcid_t obj_id, pdcid_t reg_id) char * PDC_get_argv0_() { + FUNC_ENTER(NULL); + char * ret_value = NULL; static char *_argv0 = NULL; char fullPath[PATH_MAX] = { @@ -322,8 +323,6 @@ PDC_get_argv0_() FILE * shellcmd = NULL; size_t cmdLength; - FUNC_ENTER(NULL); - if (_argv0 == NULL) { // UNIX derived systems e.g. linux, allow us to find the // command line as the user (or another application) @@ -336,13 +335,13 @@ PDC_get_argv0_() procpath = strdup(fullPath); shellcmd = fopen(procpath, "r"); if (shellcmd == NULL) { - free(procpath); - PGOTO_ERROR(NULL, "fopen failed!"); + procpath = (char *)PDC_free(procpath); + PGOTO_ERROR(NULL, "fopen failed"); } else { cmdLength = fread(fullPath, 1, sizeof(fullPath), shellcmd); if (procpath) - free(procpath); + procpath = (char *)PDC_free(procpath); if (cmdLength > 0) { _argv0 = strdup(fullPath); /* truncate the cmdline if any whitespace (space or tab) */ @@ -366,32 +365,31 @@ PDC_get_argv0_() /* Get rid of the copy (strdup) of fullPath now in _argv0. * and replace it with the next (modified/fully_qualified?) version. */ - free(_argv0); + _argv0 = (char *)PDC_free(_argv0); _argv0 = next; } } } if (_argv0 == NULL) - PGOTO_ERROR(NULL, "ERROR: Unable to resolve user application name!"); + PGOTO_ERROR(NULL, "Unable to resolve user application name"); ret_value = _argv0; done: - fflush(stdout); FUNC_LEAVE(ret_value); } char * PDC_get_realpath(char *fname, char *app_path) { + FUNC_ENTER(NULL); + char *ret_value = NULL; int notreadable; char fullPath[PATH_MAX] = { 0, }; - FUNC_ENTER(NULL); - do { if (app_path) { sprintf(fullPath, "%s/%s", app_path, fname); @@ -407,13 +405,14 @@ PDC_get_realpath(char *fname, char *app_path) ret_value = strdup(fullPath); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_analysis_register(char *func, pdcid_t iterIn, pdcid_t iterOut) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Return value */ void * ftnHandle = NULL; int (*ftnPtr)(pdcid_t, pdcid_t) = NULL; @@ -428,8 +427,6 @@ PDCobj_analysis_register(char *func, pdcid_t iterIn, pdcid_t iterOut) char * userdefinedftn = NULL; char * loadpath = NULL; - FUNC_ENTER(NULL); - thisApp = PDC_get_argv0_(); if (thisApp) { applicationDir = dirname(strdup(thisApp)); @@ -448,7 +445,7 @@ PDCobj_analysis_register(char *func, pdcid_t iterIn, pdcid_t iterOut) // loadpath = PDC_get_realpath(analyislibrary, applicationDir); if (PDC_get_ftnPtr_((const char *)userdefinedftn, (const char *)loadpath, &ftnHandle) < 0) - PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error!"); + PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error"); if ((ftnPtr = ftnHandle) == NULL) PGOTO_ERROR(FAIL, "Analysis function lookup failed"); @@ -460,7 +457,7 @@ PDCobj_analysis_register(char *func, pdcid_t iterIn, pdcid_t iterOut) thisFtn->ftnPtr = (int (*)())ftnPtr; thisFtn->n_args = 2; /* Allocate for iterator ids and region ids */ - if ((thisFtn->object_id = (pdcid_t *)calloc(4, sizeof(pdcid_t))) != NULL) { + if ((thisFtn->object_id = (pdcid_t *)PDC_calloc(4, sizeof(pdcid_t))) != NULL) { thisFtn->object_id[0] = iterIn; thisFtn->object_id[1] = iterOut; } @@ -493,28 +490,27 @@ PDCobj_analysis_register(char *func, pdcid_t iterIn, pdcid_t iterOut) // Add to our own list of analysis functions if (PDC_add_analysis_ptr_to_registry_(thisFtn) < 0) - PGOTO_ERROR(FAIL, "PDC unable to register analysis function!"); + PGOTO_ERROR(FAIL, "PDC unable to register analysis function"); done: if (applicationDir) - free(applicationDir); + applicationDir = (char *)PDC_free(applicationDir); if (userdefinedftn) - free(userdefinedftn); + userdefinedftn = (char *)PDC_free(userdefinedftn); if (loadpath) - free(loadpath); + loadpath = (char *)PDC_free(loadpath); - fflush(stdout); FUNC_LEAVE(ret_value); } size_t PDCobj_data_getSliceCount(pdcid_t iter) { + FUNC_ENTER(NULL); + size_t ret_value = 0; struct _pdc_iterator_info *thisIter = NULL; - FUNC_ENTER(NULL); - /* Special case to handle a NULL iterator */ if (iter == 0) PGOTO_DONE(0); @@ -527,21 +523,20 @@ PDCobj_data_getSliceCount(pdcid_t iter) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } size_t PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) { + FUNC_ENTER(NULL); + size_t ret_value = 0; struct _pdc_iterator_info *thisIter = NULL; size_t current_total, remaining, offset; struct _pdc_obj_info * object_info; struct _pdc_obj_prop * obj_prop_ptr; - FUNC_ENTER(NULL); - /* Special case to handle a NULL iterator */ if (iter == 0) { if (nextBlock != NULL) @@ -556,9 +551,9 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) if (thisIter->srcStart == NULL) { if (execution_locus == SERVER_MEMORY) { if ((thisIter->srcNext = PDC_Server_get_region_data_ptr(thisIter->objectId)) == NULL) - thisIter->srcNext = malloc(thisIter->totalElements * thisIter->element_size); + thisIter->srcNext = PDC_malloc(thisIter->totalElements * thisIter->element_size); if ((thisIter->srcStart = thisIter->srcNext) == NULL) - PGOTO_ERROR(0, "==PDC_ANALYSIS_SERVER: Unable to allocate iterator storage"); + PGOTO_ERROR(0, "Unable to allocate iterator storage"); thisIter->srcNext += thisIter->startOffset + thisIter->skipCount; } @@ -627,17 +622,15 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_analysis_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; PDC_free_analysis_registry(); FUNC_LEAVE(ret_value); @@ -646,10 +639,9 @@ PDC_analysis_end() perr_t PDC_iterator_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; PDC_free_iterator_cache(); FUNC_LEAVE(ret_value); diff --git a/src/api/pdc_analysis/pdc_analysis_and_transforms_connect.c b/src/api/pdc_analysis/pdc_analysis_and_transforms_connect.c index 4fd664e4c..8346f8502 100644 --- a/src/api/pdc_analysis/pdc_analysis_and_transforms_connect.c +++ b/src/api/pdc_analysis/pdc_analysis_and_transforms_connect.c @@ -42,13 +42,13 @@ static hg_return_t client_register_iterator_rpc_cb(const struct hg_cb_info *info static hg_return_t client_register_analysis_rpc_cb(const struct hg_cb_info *info); static hg_return_t client_register_transform_rpc_cb(const struct hg_cb_info *info); -perr_t PDC_free_obj_info(struct _pdc_obj_info *obj); - /* Client APIs */ perr_t PDC_Client_send_iter_recv_id(pdcid_t iter_id, pdcid_t *meta_id) { + FUNC_ENTER(NULL); + uint64_t ret_value = SUCCEED; struct _pdc_iterator_info *thisIter = NULL; struct _pdc_my_rpc_state * my_rpc_state_p; @@ -58,12 +58,11 @@ PDC_Client_send_iter_recv_id(pdcid_t iter_id, pdcid_t *meta_id) int n_retry = 0; struct _pdc_obj_info * object_info; - FUNC_ENTER(NULL); if (atomic_work_todo_g == NULL) { hg_atomic_init32(atomic_work_todo_g, 0); } - my_rpc_state_p = (struct _pdc_my_rpc_state *)calloc(1, sizeof(struct _pdc_my_rpc_state)); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_calloc(1, sizeof(struct _pdc_my_rpc_state)); if (my_rpc_state_p == NULL) PGOTO_ERROR(FAIL, "PDC_Client_send_iter_recv_id(): Could not allocate my_rpc_state"); @@ -105,7 +104,7 @@ PDC_Client_send_iter_recv_id(pdcid_t iter_id, pdcid_t *meta_id) if (n_retry > 0) break; if (PDC_Client_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_lookup_server"); n_retry++; } @@ -128,9 +127,8 @@ PDC_Client_send_iter_recv_id(pdcid_t iter_id, pdcid_t *meta_id) *meta_id = my_rpc_state_p->value; done: - fflush(stdout); HG_Destroy(my_rpc_state_p->handle); - free(my_rpc_state_p); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_free(my_rpc_state_p); FUNC_LEAVE(ret_value); } @@ -140,23 +138,21 @@ PDC_Client_send_iter_recv_id(pdcid_t iter_id, pdcid_t *meta_id) static hg_return_t client_register_iterator_rpc_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_my_rpc_state *my_rpc_state_p = info->arg; obj_data_iterator_out_t output; - FUNC_ENTER(NULL); - if (info->ret == HG_SUCCESS) { ret_value = HG_Get_output(info->info.forward.handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(FAIL, - "PDC_CLIENT: register_iterator_rpc_cb(): Unable to read the server return values"); + PGOTO_ERROR(FAIL, "Unable to read the server return values"); my_rpc_state_p->value = output.server_iter_id; } done: - fflush(stdout); hg_atomic_decr32(atomic_work_todo_g); HG_Free_output(info->info.forward.handle, &output); @@ -168,6 +164,8 @@ PDC_Client_register_obj_analysis(struct _pdc_region_analysis_ftn_info *thisFtn, const char *loadpath, pdcid_t in_local, pdcid_t out_local, pdcid_t in_meta, pdcid_t out_meta) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t server_id = 0; hg_return_t hg_ret; @@ -178,12 +176,11 @@ PDC_Client_register_obj_analysis(struct _pdc_region_analysis_ftn_info *thisFtn, int input_server = -1, output_server = -1; struct _pdc_obj_info * obj_prop; - FUNC_ENTER(NULL); if (atomic_work_todo_g == NULL) { hg_atomic_init32(atomic_work_todo_g, 0); } - my_rpc_state_p = (struct _pdc_my_rpc_state *)calloc(1, sizeof(struct _pdc_my_rpc_state)); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_calloc(1, sizeof(struct _pdc_my_rpc_state)); if (my_rpc_state_p == NULL) PGOTO_ERROR(FAIL, "PDC_Client_register_obj_analysis(): Could not allocate my_rpc_state"); @@ -219,7 +216,7 @@ PDC_Client_register_obj_analysis(struct _pdc_region_analysis_ftn_info *thisFtn, if (n_retry > 0) break; if (PDC_Client_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_lookup_server"); n_retry++; } @@ -248,9 +245,8 @@ PDC_Client_register_obj_analysis(struct _pdc_region_analysis_ftn_info *thisFtn, thisFtn->meta_index = my_rpc_state_p->value; done: - fflush(stdout); HG_Destroy(my_rpc_state_p->handle); - free(my_rpc_state_p); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_free(my_rpc_state_p); FUNC_LEAVE(ret_value); } @@ -260,23 +256,21 @@ PDC_Client_register_obj_analysis(struct _pdc_region_analysis_ftn_info *thisFtn, static hg_return_t client_register_analysis_rpc_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_my_rpc_state *my_rpc_state_p = info->arg; analysis_ftn_out_t output; - FUNC_ENTER(NULL); - if (info->ret == HG_SUCCESS) { ret_value = HG_Get_output(info->info.forward.handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, - "PDC_CLIENT: register_analysis_rpc_cb(): Unable to read the server return values"); + PGOTO_ERROR(ret_value, "Unable to read the server return values"); my_rpc_state_p->value = output.remote_ftn_id; } done: - fflush(stdout); hg_atomic_decr32(atomic_work_todo_g); HG_Free_output(info->info.forward.handle, &output); @@ -289,6 +283,8 @@ PDC_Client_register_region_transform(const char *func, const char *loadpath, pdcid_t obj_id, int start_state, int next_state, int op_type, int when, int client_index) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t server_id = 0; hg_return_t hg_ret; @@ -296,12 +292,11 @@ PDC_Client_register_region_transform(const char *func, const char *loadpath, struct _pdc_obj_info * object_info = NULL; struct _pdc_my_rpc_state *my_rpc_state_p; - FUNC_ENTER(NULL); if (atomic_work_todo_g == NULL) { hg_atomic_init32(atomic_work_todo_g, 0); } - my_rpc_state_p = (struct _pdc_my_rpc_state *)calloc(1, sizeof(struct _pdc_my_rpc_state)); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_calloc(1, sizeof(struct _pdc_my_rpc_state)); if (my_rpc_state_p == NULL) PGOTO_ERROR(FAIL, "Could not allocate my_rpc_state"); @@ -341,11 +336,10 @@ PDC_Client_register_region_transform(const char *func, const char *loadpath, // Here, we should update the local registry with the returned valued from my_rpc_state_p; done: - fflush(stdout); if (object_info) PDC_free_obj_info(object_info); HG_Destroy(my_rpc_state_p->handle); - free(my_rpc_state_p); + my_rpc_state_p = (struct _pdc_my_rpc_state *)PDC_free(my_rpc_state_p); FUNC_LEAVE(ret_value); } @@ -355,21 +349,20 @@ PDC_Client_register_region_transform(const char *func, const char *loadpath, static hg_return_t client_register_transform_rpc_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; transform_ftn_out_t output; - FUNC_ENTER(NULL); - if (info->ret == HG_SUCCESS) { ret_value = HG_Get_output(info->info.forward.handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "PDC_CLIENT: Unable to read the server return values"); + PGOTO_ERROR(ret_value, "Unable to read the server return values"); PDC_update_transform_server_meta_index(output.client_index, output.ret); } done: - fflush(stdout); hg_atomic_decr32(atomic_work_todo_g); HG_Free_output(info->info.forward.handle, &output); diff --git a/src/api/pdc_analysis/pdc_analysis_common.c b/src/api/pdc_analysis/pdc_analysis_common.c index 51fd1f5d6..c04b3f7d5 100644 --- a/src/api/pdc_analysis/pdc_analysis_common.c +++ b/src/api/pdc_analysis/pdc_analysis_common.c @@ -34,6 +34,7 @@ #include "pdc_analysis_and_transforms_common.h" #include "pdc_client_server_common.h" #include "pdc_analysis_pkg.h" +#include "pdc_malloc.h" #include "pdc_region.h" #include "pdc_server_analysis.h" #include "pdc_logger.h" @@ -66,17 +67,20 @@ perr_t PDC_Server_instantiate_data_iterator(obj_data_iterator_in_t *in ATTRIBUTE(unused), obj_data_iterator_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } void * PDC_Server_get_ftn_reference(char *ftn ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(NULL); } int PDC_get_analysis_registry(struct _pdc_region_analysis_ftn_info ***registry ATTRIBUTE(unused)) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); }; #endif @@ -84,13 +88,13 @@ PDC_get_analysis_registry(struct _pdc_region_analysis_ftn_info ***registry ATTRI static int pdc_analysis_registry_init_(size_t newSize) { + FUNC_ENTER(NULL); + int ret_value = 0; struct _pdc_region_analysis_ftn_info **new_registry; - FUNC_ENTER(NULL); - if (pdc_region_analysis_registry == NULL) { - new_registry = (struct _pdc_region_analysis_ftn_info **)calloc(sizeof(void *), newSize); + new_registry = (struct _pdc_region_analysis_ftn_info **)PDC_calloc(sizeof(void *), newSize); if (new_registry) { hg_atomic_init32(®istered_analysis_ftn_count_g, 0); pdc_region_analysis_registry = new_registry; @@ -99,11 +103,12 @@ pdc_analysis_registry_init_(size_t newSize) } } else if (newSize > analysis_registry_size) { - new_registry = (struct _pdc_region_analysis_ftn_info **)calloc(sizeof(void *), newSize); + new_registry = (struct _pdc_region_analysis_ftn_info **)PDC_calloc(sizeof(void *), newSize); if (new_registry) { size_t copysize = analysis_registry_size * sizeof(void *); memcpy(new_registry, pdc_region_analysis_registry, copysize); - free(pdc_region_analysis_registry); + pdc_region_analysis_registry = + (struct _pdc_region_analysis_ftn_info **)PDC_free(pdc_region_analysis_registry); pdc_region_analysis_registry = new_registry; analysis_registry_size = newSize; PGOTO_DONE(newSize); @@ -111,21 +116,20 @@ pdc_analysis_registry_init_(size_t newSize) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } static int pdc_transform_registry_init_(size_t newSize) { + FUNC_ENTER(NULL); + int ret_value = 0; struct _pdc_region_transform_ftn_info **new_registry; size_t copysize; - FUNC_ENTER(NULL); - if (pdc_region_transform_registry == NULL) { - new_registry = (struct _pdc_region_transform_ftn_info **)calloc(sizeof(void *), newSize); + new_registry = (struct _pdc_region_transform_ftn_info **)PDC_calloc(sizeof(void *), newSize); if (new_registry) { hg_atomic_init32(®istered_transform_ftn_count_g, 0); pdc_region_transform_registry = new_registry; @@ -134,11 +138,12 @@ pdc_transform_registry_init_(size_t newSize) } } else if (newSize > transform_registry_size) { - new_registry = (struct _pdc_region_transform_ftn_info **)calloc(sizeof(void *), newSize); + new_registry = (struct _pdc_region_transform_ftn_info **)PDC_calloc(sizeof(void *), newSize); if (new_registry) { copysize = transform_registry_size * sizeof(void *); memcpy(new_registry, pdc_region_transform_registry, copysize); - free(pdc_region_transform_registry); + pdc_region_transform_registry = + (struct _pdc_region_transform_ftn_info **)PDC_free(pdc_region_transform_registry); pdc_region_transform_registry = new_registry; transform_registry_size = newSize; PGOTO_DONE(newSize); @@ -146,26 +151,26 @@ pdc_transform_registry_init_(size_t newSize) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } int pdc_analysis_registry_finalize_() { + FUNC_ENTER(NULL); + int ret_value = 0; hg_atomic_int32_t i; - FUNC_ENTER(NULL); - if ((pdc_region_analysis_registry != NULL) && (analysis_registry_size > 0)) { while (hg_atomic_get32(&i) > 0) { if (pdc_region_analysis_registry[i - 1]) - free(pdc_region_analysis_registry[i - 1]); - pdc_region_analysis_registry[i - 1] = NULL; + pdc_region_analysis_registry[i - 1] = + (struct _pdc_region_analysis_ftn_info *)PDC_free(pdc_region_analysis_registry[i - 1]); hg_atomic_decr32(&i); } - free(pdc_region_analysis_registry); + pdc_region_analysis_registry = + (struct _pdc_region_analysis_ftn_info **)PDC_free(pdc_region_analysis_registry); analysis_registry_size = 0; hg_atomic_init32(®istered_analysis_ftn_count_g, 0); } @@ -176,11 +181,11 @@ pdc_analysis_registry_finalize_() int check_analysis(pdc_obj_transform_t op_type ATTRIBUTE(unused), struct pdc_region_info *dest_region) { + FUNC_ENTER(NULL); + int ret_value = 0; int i, count; - FUNC_ENTER(NULL); - if (analysis_registry_size > 0) { count = hg_atomic_get32(®istered_analysis_ftn_count_g); for (i = 0; i < count; i++) { @@ -192,23 +197,22 @@ check_analysis(pdc_obj_transform_t op_type ATTRIBUTE(unused), struct pdc_region_ } done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_add_analysis_ptr_to_registry_(struct _pdc_region_analysis_ftn_info *ftn_infoPtr) { + FUNC_ENTER(NULL); + int ret_value = 0; size_t initial_registry_size = 64; size_t i, currentCount; int registry_index; - FUNC_ENTER(NULL); - if (analysis_registry_size == 0) { if (pdc_analysis_registry_init_(initial_registry_size) == 0) { - perror("Unable to initialize analysis registry!"); + perror("Unable to initialize analysis registry"); PGOTO_DONE(-1); } } @@ -234,28 +238,27 @@ PDC_add_analysis_ptr_to_registry_(struct _pdc_region_analysis_ftn_info *ftn_info ret_value = registry_index; done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDCiter_get_nextId(void) { + FUNC_ENTER(NULL); + int ret_value = 0; size_t nextId = 0; int * previous_i_cache_freed = 0; int next_free = 0; struct _pdc_iterator_info *previous_state; - FUNC_ENTER(NULL); - if (PDC_Block_iterator_cache == NULL) { - PDC_Block_iterator_cache = - (struct _pdc_iterator_info *)calloc(iterator_cache_entries, sizeof(struct _pdc_iterator_info)); + PDC_Block_iterator_cache = (struct _pdc_iterator_info *)PDC_calloc(iterator_cache_entries, + sizeof(struct _pdc_iterator_info)); if (PDC_Block_iterator_cache == NULL) - PGOTO_ERROR(-1, "calloc failed"); + PGOTO_ERROR(FAIL, "calloc failed"); - i_cache_freed = (int *)calloc(iterator_cache_entries, sizeof(int)); + i_cache_freed = (int *)PDC_calloc(iterator_cache_entries, sizeof(int)); /* Index 0 is NOT-USED other than to indicate an empty iterator */ hg_atomic_init32(&i_cache_index, 1); hg_atomic_init32(&i_free_index, 0); @@ -274,21 +277,20 @@ PDCiter_get_nextId(void) /* Realloc the cache and free list */ previous_i_cache_freed = i_cache_freed; previous_state = PDC_Block_iterator_cache; - PDC_Block_iterator_cache = (struct _pdc_iterator_info *)calloc(iterator_cache_entries * 2, - sizeof(struct _pdc_iterator_info)); + PDC_Block_iterator_cache = (struct _pdc_iterator_info *)PDC_calloc(iterator_cache_entries * 2, + sizeof(struct _pdc_iterator_info)); memcpy(PDC_Block_iterator_cache, previous_state, iterator_cache_entries * sizeof(struct _pdc_iterator_info)); - i_cache_freed = (int *)calloc(iterator_cache_entries * 2, sizeof(int)); + i_cache_freed = (int *)PDC_calloc(iterator_cache_entries * 2, sizeof(int)); memcpy(i_cache_freed, previous_i_cache_freed, iterator_cache_entries * sizeof(int)); iterator_cache_entries *= 2; - free(previous_i_cache_freed); - free(previous_state); + previous_i_cache_freed = (int *)PDC_free(previous_i_cache_freed); + previous_state = (struct _pdc_iterator_info *)PDC_free(previous_state); } ret_value = nextId; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -298,11 +300,11 @@ PDCiter_get_nextId(void) int PDC_check_transform(pdc_obj_transform_t op_type, struct pdc_region_info *dest_region) { + FUNC_ENTER(NULL); + int ret_value = 0; int i, count; - FUNC_ENTER(NULL); - if (transform_registry_size > 0) { count = hg_atomic_get32(®istered_transform_ftn_count_g); for (i = 0; i < count; i++) { @@ -315,45 +317,43 @@ PDC_check_transform(pdc_obj_transform_t op_type, struct pdc_region_info *dest_re } done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_get_transforms(struct _pdc_region_transform_ftn_info ***registry) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = 0; + if (registry) { *registry = pdc_region_transform_registry; PGOTO_DONE(hg_atomic_get32(®istered_transform_ftn_count_g)); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_add_transform_ptr_to_registry_(struct _pdc_region_transform_ftn_info *ftn_infoPtr) { + FUNC_ENTER(NULL); + int ret_value = 0; size_t initial_registry_size = 64; size_t i, currentCount; int registry_index; - FUNC_ENTER(NULL); - if (transform_registry_size == 0) { if (pdc_transform_registry_init_(initial_registry_size) == 0) - PGOTO_ERROR(-1, "Unable to initialize transform registry!"); + PGOTO_ERROR(FAIL, "Unable to initialize transform registry"); } currentCount = (size_t)hg_atomic_get32(®istered_transform_ftn_count_g); if (currentCount == transform_registry_size) { if (pdc_transform_registry_init_(transform_registry_size * 2) == 0) - PGOTO_ERROR(-1, "memory allocation failed"); + PGOTO_ERROR(FAIL, "Memory allocation failed"); } /* If the new function is already registered * simply return the OLD index. @@ -372,27 +372,25 @@ PDC_add_transform_ptr_to_registry_(struct _pdc_region_transform_ftn_info *ftn_in ret_value = registry_index; done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_update_transform_server_meta_index(int client_index, int meta_index) { + FUNC_ENTER(NULL); + int ret_value = 0; struct _pdc_region_transform_ftn_info *ftnPtr; - FUNC_ENTER(NULL); - if (client_index < registered_transform_ftn_count_g) { ftnPtr = pdc_region_transform_registry[client_index]; ftnPtr->meta_index = meta_index; } else - PGOTO_ERROR(-1, "Bad client index(%d)", client_index); + PGOTO_ERROR(FAIL, "Bad client index(%d)", client_index); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -403,17 +401,16 @@ PDC_set_execution_locus(_pdc_loci_t locus_identifier) execution_locus = locus_identifier; - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } _pdc_loci_t PDC_get_execution_locus() { - _pdc_loci_t ret_value = 0; - FUNC_ENTER(NULL); - ret_value = execution_locus; + _pdc_loci_t ret_value = 0; + ret_value = execution_locus; FUNC_LEAVE(ret_value); } @@ -421,35 +418,36 @@ PDC_get_execution_locus() int PDC_get_ftnPtr_(const char *ftn, const char *loadpath, void **ftnPtr) { + FUNC_ENTER(NULL); + int ret_value = 0; static void *appHandle = NULL; void * ftnHandle = NULL; char * this_error = NULL; - FUNC_ENTER(NULL); - if (appHandle == NULL) { if ((appHandle = dlopen(loadpath, RTLD_NOW)) == NULL) { this_error = dlerror(); - PGOTO_ERROR(-1, "dlopen failed: %s", this_error); + PGOTO_ERROR(FAIL, "dlopen failed: %s", this_error); } } ftnHandle = dlsym(appHandle, ftn); if (ftnHandle == NULL) - PGOTO_ERROR(-1, "dlsym failed: %s", dlerror()); + PGOTO_ERROR(FAIL, "dlsym failed: %s", dlerror()); *ftnPtr = ftnHandle; ret_value = 0; done: - fflush(stdout); FUNC_LEAVE(ret_value); } // analysis_ftn_cb(hg_handle_t handle) HG_TEST_RPC_CB(analysis_ftn, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; analysis_ftn_in_t in; analysis_ftn_out_t out; @@ -468,7 +466,7 @@ HG_TEST_RPC_CB(analysis_ftn, handle) HG_Get_input(handle, &in); if (PDC_get_ftnPtr_(in.ftn_name, in.loadpath, &ftnHandle) < 0) - PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error!"); + PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error"); if ((ftnPtr = ftnHandle) == NULL) PGOTO_ERROR(FAIL, "Transforms function lookup failed"); @@ -492,11 +490,11 @@ HG_TEST_RPC_CB(analysis_ftn, handle) * Otherwise, go ahead and register... */ if (nulliter_count < 2) { - if ((thisFtn = (struct _pdc_region_analysis_ftn_info *)calloc( + if ((thisFtn = (struct _pdc_region_analysis_ftn_info *)PDC_calloc( sizeof(struct _pdc_region_analysis_ftn_info), 1)) != NULL) { thisFtn->ftnPtr = (int (*)())ftnPtr; thisFtn->n_args = 2; - thisFtn->object_id = (pdcid_t *)calloc(2, sizeof(pdcid_t)); + thisFtn->object_id = (pdcid_t *)PDC_calloc(2, sizeof(pdcid_t)); registrationId = PDC_add_analysis_ptr_to_registry_(thisFtn); out.remote_ftn_id = registrationId; } @@ -533,7 +531,6 @@ HG_TEST_RPC_CB(analysis_ftn, handle) } done: - fflush(stdout); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -543,16 +540,16 @@ HG_TEST_RPC_CB(analysis_ftn, handle) // obj_data_iterator_cb(hg_handle_t handle) HG_TEST_RPC_CB(obj_data_iterator, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; obj_data_iterator_in_t in; obj_data_iterator_out_t out; - FUNC_ENTER(NULL); - memset(&in, 0, sizeof(in)); // Decode input HG_Get_input(handle, &in); - // LOG_INFO("obj_data_iterator_cb entered!\n"); + // LOG_INFO("obj_data_iterator_cb entered\n"); ret_value = PDC_Server_instantiate_data_iterator(&in, &out); HG_Respond(handle, NULL, NULL, &out); @@ -569,10 +566,9 @@ HG_TEST_THREAD_CB(analysis_ftn) hg_id_t PDC_analysis_ftn_register(hg_class_t *hg_class) { - hg_id_t ret_value; - FUNC_ENTER(NULL); + hg_id_t ret_value; ret_value = MERCURY_REGISTER(hg_class, "analysis_ftn", analysis_ftn_in_t, analysis_ftn_out_t, analysis_ftn_cb); @@ -582,10 +578,9 @@ PDC_analysis_ftn_register(hg_class_t *hg_class) hg_id_t PDC_obj_data_iterator_register(hg_class_t *hg_class) { - hg_id_t ret_value; - FUNC_ENTER(NULL); + hg_id_t ret_value; ret_value = MERCURY_REGISTER(hg_class, "obj_data_iterator", obj_data_iterator_in_t, obj_data_iterator_out_t, obj_data_iterator_cb); @@ -595,48 +590,46 @@ PDC_obj_data_iterator_register(hg_class_t *hg_class) void PDC_free_analysis_registry() { - int index; - FUNC_ENTER(NULL); + int index; if (pdc_region_analysis_registry && (registered_analysis_ftn_count_g > 0)) { for (index = 0; index < registered_analysis_ftn_count_g; index++) { - free(pdc_region_analysis_registry[index]); + pdc_region_analysis_registry[index] = + (struct _pdc_region_analysis_ftn_info *)PDC_free(pdc_region_analysis_registry[index]); } - free(pdc_region_analysis_registry); - pdc_region_analysis_registry = NULL; + pdc_region_analysis_registry = + (struct _pdc_region_analysis_ftn_info **)PDC_free(pdc_region_analysis_registry); } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_free_transform_registry() { - int index; - FUNC_ENTER(NULL); + int index; if (pdc_region_transform_registry && (registered_transform_ftn_count_g > 0)) { for (index = 0; index < registered_transform_ftn_count_g; index++) { - free(pdc_region_transform_registry[index]); + pdc_region_transform_registry[index] = + (struct _pdc_region_transform_ftn_info *)PDC_free(pdc_region_transform_registry[index]); } - free(pdc_region_transform_registry); - pdc_region_transform_registry = NULL; + pdc_region_transform_registry = + (struct _pdc_region_transform_ftn_info **)PDC_free(pdc_region_transform_registry); } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_free_iterator_cache() { - FUNC_ENTER(NULL); if (PDC_Block_iterator_cache != NULL) - free(PDC_Block_iterator_cache); - PDC_Block_iterator_cache = NULL; + PDC_Block_iterator_cache = (struct _pdc_iterator_info *)PDC_free(PDC_Block_iterator_cache); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } diff --git a/src/api/pdc_analysis/pdc_hist_pkg.c b/src/api/pdc_analysis/pdc_hist_pkg.c index 7f99e8463..72117fd96 100644 --- a/src/api/pdc_analysis/pdc_hist_pkg.c +++ b/src/api/pdc_analysis/pdc_hist_pkg.c @@ -2,6 +2,8 @@ #include #include #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #define MACRO_SAMPLE_MIN_MAX(TYPE, n, data, sample_pct, min, max) \ ({ \ @@ -22,10 +24,10 @@ perr_t PDC_sample_min_max(pdc_var_type_t dtype, uint64_t n, void *data, double sample_pct, double *min, double *max) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (NULL == data || NULL == min || NULL == max) PGOTO_DONE(FAIL); @@ -42,23 +44,22 @@ PDC_sample_min_max(pdc_var_type_t dtype, uint64_t n, void *data, double sample_p else if (PDC_UINT == dtype) MACRO_SAMPLE_MIN_MAX(uint32_t, n, data, sample_pct, *min, *max); else { - PGOTO_ERROR(FAIL, "== datatype %d not supported!", dtype); + PGOTO_ERROR(FAIL, "Datatype %d not supported", dtype); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } double ceil_power_of_2(double number) { + FUNC_ENTER(NULL); + double ret_value = 0; double res = 1.0; double sign = number > 0 ? 1.0 : -1.0; - FUNC_ENTER(NULL); - number *= sign; if (number >= res) { @@ -81,12 +82,12 @@ ceil_power_of_2(double number) double floor_power_of_2(double number) { + FUNC_ENTER(NULL); + double ret_value = 0; double res = 1.0; double sign = number > 0 ? 1.0 : -1.0; - FUNC_ENTER(NULL); - number *= sign; if (number >= res) { @@ -110,24 +111,24 @@ floor_power_of_2(double number) pdc_histogram_t * PDC_create_hist(pdc_var_type_t dtype, int nbin, double min, double max) { + FUNC_ENTER(NULL); + pdc_histogram_t *ret_value = NULL; pdc_histogram_t *hist; int i; double min_bin, max_bin, bin_incr; - FUNC_ENTER(NULL); - if (nbin < 4 || min > max) PGOTO_DONE(NULL); bin_incr = floor_power_of_2((max - min) / (nbin - 2)); // Excluding first and last bin (open ended) nbin = ceil((max - min) / bin_incr); - hist = (pdc_histogram_t *)malloc(sizeof(pdc_histogram_t)); + hist = (pdc_histogram_t *)PDC_malloc(sizeof(pdc_histogram_t)); hist->incr = bin_incr; hist->dtype = dtype; - hist->range = (double *)calloc(sizeof(double), nbin * 2); - hist->bin = (uint64_t *)calloc(sizeof(uint64_t), nbin); + hist->range = (double *)PDC_calloc(sizeof(double), nbin * 2); + hist->bin = (uint64_t *)PDC_calloc(sizeof(uint64_t), nbin); hist->nbin = nbin; min_bin = floor(min); @@ -154,7 +155,6 @@ PDC_create_hist(pdc_var_type_t dtype, int nbin, double min, double max) ret_value = hist; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -214,10 +214,10 @@ PDC_create_hist(pdc_var_type_t dtype, int nbin, double min, double max) perr_t PDC_hist_incr_all(pdc_histogram_t *hist, pdc_var_type_t dtype, uint64_t n, void *data) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (dtype != hist->dtype || 0 == n || NULL == data) return FAIL; @@ -234,16 +234,17 @@ PDC_hist_incr_all(pdc_histogram_t *hist, pdc_var_type_t dtype, uint64_t n, void else if (PDC_UINT == dtype) MACRO_HIST_INCR_ALL(uint32_t, hist, n, data); else - PGOTO_ERROR(FAIL, "== datatype %d not supported!", dtype); + PGOTO_ERROR(FAIL, "Datatype %d not supported", dtype); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdc_histogram_t * PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) { + FUNC_ENTER(NULL); + pdc_histogram_t *ret_value = NULL; pdc_histogram_t *hist; double min, max; @@ -252,8 +253,6 @@ PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) struct timeval pdc_timer_start, pdc_timer_end; #endif - FUNC_ENTER(NULL); - if (0 == n || NULL == data) { PGOTO_DONE(NULL); } @@ -266,21 +265,19 @@ PDC_gen_hist(pdc_var_type_t dtype, uint64_t n, void *data) hist = PDC_create_hist(dtype, 50, min, max); if (NULL == hist) - PGOTO_ERROR(NULL, "== error with PDC_create_hist!"); + PGOTO_ERROR(NULL, "Error with PDC_create_hist"); PDC_hist_incr_all(hist, dtype, n, data); #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); gen_hist_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_INFO("== generate histogram of %lu elements with %d bins takes %.2fs\n", n, hist->nbin, - gen_hist_time); + LOG_INFO("Generate histogram of %lu elements with %d bins takes %.2fs\n", n, hist->nbin, gen_hist_time); #endif ret_value = hist; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -292,22 +289,21 @@ PDC_free_hist(pdc_histogram_t *hist) if (NULL == hist) PGOTO_DONE_VOID; - free(hist->range); - free(hist->bin); - free(hist); + hist->range = (double *)PDC_free(hist->range); + hist->bin = (uint64_t *)PDC_free(hist->bin); + hist = (pdc_histogram_t *)PDC_free(hist); done: - fflush(stdout); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_print_hist(pdc_histogram_t *hist) { - int i; - FUNC_ENTER(NULL); + int i; + if (NULL == hist) PGOTO_DONE_VOID; @@ -320,28 +316,27 @@ PDC_print_hist(pdc_histogram_t *hist) LOG_INFO("\n\n"); done: - fflush(stdout); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } pdc_histogram_t * PDC_dup_hist(pdc_histogram_t *hist) { + FUNC_ENTER(NULL); + pdc_histogram_t *ret_value = NULL; pdc_histogram_t *res; int nbin; - FUNC_ENTER(NULL); - if (NULL == hist) PGOTO_DONE(NULL); nbin = hist->nbin; - res = (pdc_histogram_t *)malloc(sizeof(pdc_histogram_t)); + res = (pdc_histogram_t *)PDC_malloc(sizeof(pdc_histogram_t)); res->dtype = hist->dtype; res->nbin = nbin; - res->range = (double *)calloc(sizeof(double), nbin * 2); - res->bin = (uint64_t *)calloc(sizeof(uint64_t), nbin); + res->range = (double *)PDC_calloc(sizeof(double), nbin * 2); + res->bin = (uint64_t *)PDC_calloc(sizeof(uint64_t), nbin); res->incr = hist->incr; memcpy(res->range, hist->range, sizeof(double) * nbin * 2); @@ -350,20 +345,19 @@ PDC_dup_hist(pdc_histogram_t *hist) ret_value = res; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdc_histogram_t * PDC_merge_hist(int n, pdc_histogram_t **hists) { + FUNC_ENTER(NULL); + pdc_histogram_t *ret_value = NULL; int i, j, incr_max_idx = 0, hi, lo, mid = 0; double tot_min, tot_max, incr_max; pdc_histogram_t *res; - FUNC_ENTER(NULL); - if (n == 0 || NULL == hists) PGOTO_DONE(NULL); @@ -373,7 +367,7 @@ PDC_merge_hist(int n, pdc_histogram_t **hists) for (i = 1; i < n; i++) { if (hists[i]->dtype != hists[i - 1]->dtype) { - PGOTO_ERROR(NULL, "== cannot merge histograms of different types!"); + PGOTO_ERROR(NULL, "Cannot merge histograms of different types"); } if (hists[i]->incr > incr_max) { incr_max = hists[i]->incr; @@ -391,7 +385,7 @@ PDC_merge_hist(int n, pdc_histogram_t **hists) // Duplicate the base hist to result res = PDC_dup_hist(hists[incr_max_idx]); if (NULL == res) - PGOTO_ERROR(NULL, "== error with PDC_dup_hist!"); + PGOTO_ERROR(NULL, "Error with PDC_dup_hist"); res->range[0] = tot_min; res->range[(res->nbin) * 2 - 1] = tot_max; @@ -420,26 +414,25 @@ PDC_merge_hist(int n, pdc_histogram_t **hists) ret_value = res; done: - fflush(stdout); FUNC_LEAVE(ret_value); } void PDC_copy_hist(pdc_histogram_t *to, pdc_histogram_t *from) { - int nbin = from->nbin; - FUNC_ENTER(NULL); + int nbin = from->nbin; + to->incr = from->incr; to->dtype = from->dtype; if (NULL == to->range) - to->range = (double *)calloc(sizeof(double), nbin * 2); + to->range = (double *)PDC_calloc(sizeof(double), nbin * 2); memcpy(to->range, from->range, sizeof(double) * nbin * 2); if (NULL == to->bin) - to->bin = (uint64_t *)calloc(sizeof(uint64_t), nbin); + to->bin = (uint64_t *)PDC_calloc(sizeof(uint64_t), nbin); memcpy(to->bin, from->bin, sizeof(uint64_t) * nbin); to->nbin = from->nbin; - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } diff --git a/src/api/pdc_client_connect.c b/src/api/pdc_client_connect.c index d9cf379e5..ef503178e 100644 --- a/src/api/pdc_client_connect.c +++ b/src/api/pdc_client_connect.c @@ -43,6 +43,8 @@ #include "pdc_transforms_common.h" #include "pdc_client_connect.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #include "mercury.h" #include "mercury_macros.h" @@ -64,9 +66,7 @@ #include #include #include -#include "pdc_timing.h" - -/* #define TANG_DEBUG 1 */ +#include int is_client_debug_g = 0; pdc_server_selection_t pdc_server_selection_g = PDC_SERVER_DEFAULT; @@ -205,53 +205,56 @@ static int hg_progress_task_cnt_g = 0; static inline uint32_t get_server_id_by_hash_name(const char *name) { - return (uint32_t)(PDC_get_hash_by_name(name) % pdc_server_num_g); + FUNC_ENTER(NULL); + FUNC_LEAVE((uint32_t)(PDC_get_hash_by_name(name) % pdc_server_num_g)); } static inline uint32_t get_server_id_by_obj_id(uint64_t obj_id) { - return (uint32_t)((obj_id / PDC_SERVER_ID_INTERVEL - 1) % pdc_server_num_g); + FUNC_ENTER(NULL); + FUNC_LEAVE((uint32_t)((obj_id / PDC_SERVER_ID_INTERVEL - 1) % pdc_server_num_g)); } uint32_t PDC_get_client_data_server() { - return PDC_CLIENT_DATA_SERVER(); + FUNC_ENTER(NULL); + FUNC_LEAVE(PDC_CLIENT_DATA_SERVER()); } int PDC_Client_get_var_type_size(pdc_var_type_t dtype) { - return PDC_get_var_type_size(dtype); + FUNC_ENTER(NULL); + FUNC_LEAVE(PDC_get_var_type_size(dtype)); } // Generic function to check the return value (RPC receipt) is 1 hg_return_t pdc_client_check_int_ret_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_int_ret_t output; hg_handle_t handle; struct _pdc_client_lookup_args *lookup_args; - FUNC_ENTER(NULL); - handle = callback_info->info.forward.handle; lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==Error with HG_Get_output"); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); if (output.ret != 1) - LOG_ERROR("==() - Return value [%d] is NOT expected\n", output.ret); + LOG_ERROR("Return value [%d] is NOT expected\n", output.ret); if (lookup_args != NULL) lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -261,16 +264,12 @@ pdc_client_check_int_ret_cb(const struct hg_cb_info *callback_info) static void * hg_progress_fn(void *foo) { + FUNC_ENTER(NULL); + hg_return_t ret; unsigned int actual_count; hg_context_t *hg_context = (hg_context_t *)foo; -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_INFO("enter %s \n", cur_time); -#endif - while (hg_progress_flag_g != 1) { do { ret = HG_Trigger(hg_context, 0, 1, &actual_count); @@ -280,29 +279,19 @@ hg_progress_fn(void *foo) usleep(1000); } -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("leaving %s\n", cur_time); -#endif - - return (NULL); + FUNC_LEAVE(NULL); } perr_t PDC_Client_transfer_pthread_create() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (hg_progress_flag_g == -1) { pthread_create(&hg_progress_tid_g, NULL, hg_progress_fn, send_context_g); hg_progress_flag_g = 0; -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s created pthread\n", cur_time); -#endif } FUNC_LEAVE(ret_value); @@ -311,19 +300,14 @@ PDC_Client_transfer_pthread_create() perr_t PDC_Client_transfer_pthread_terminate() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (hg_progress_flag_g == 0 && hg_progress_task_cnt_g == 0) { hg_progress_flag_g = 1; pthread_join(hg_progress_tid_g, NULL); hg_progress_flag_g = -1; -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s terminated pthread\n", cur_time); -#endif } FUNC_LEAVE(ret_value); @@ -332,15 +316,9 @@ PDC_Client_transfer_pthread_terminate() perr_t PDC_Client_transfer_pthread_cnt_add(int n) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s change cnt from %d to %d\n", cur_time, hg_progress_task_cnt_g, hg_progress_task_cnt_g + n); -#endif + perr_t ret_value = SUCCEED; hg_progress_task_cnt_g += n; FUNC_LEAVE(ret_value); @@ -351,12 +329,12 @@ PDC_Client_transfer_pthread_cnt_add(int n) perr_t PDC_Client_check_response(hg_context_t **hg_context) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; unsigned int actual_count; - FUNC_ENTER(NULL); - do { do { hg_ret = HG_Trigger(*hg_context, 0 /* timeout */, 1 /* max count */, &actual_count); @@ -378,14 +356,20 @@ PDC_Client_check_response(hg_context_t **hg_context) inline static void PDC_Client_wait_pthread_progress() { + FUNC_ENTER(NULL); + while (hg_atomic_get32(&atomic_work_todo_g) > 0) { usleep(1000); } + + FUNC_LEAVE_VOID(); } perr_t PDC_Client_read_server_addr_from_file() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int max_tries = 9, sleeptime = 1; int i = 0, is_server_ready = 0; @@ -394,8 +378,6 @@ PDC_Client_read_server_addr_from_file() char config_fname[PATH_MAX]; char n_server_string[PATH_MAX]; - FUNC_ENTER(NULL); - if (pdc_client_mpi_rank_g == 0) { sprintf(config_fname, "%s/%s", pdc_client_tmp_dir_g, pdc_server_cfg_name_g); @@ -404,15 +386,14 @@ PDC_Client_read_server_addr_from_file() is_server_ready = 1; break; } - LOG_WARNING("==PDC_CLIENT[%d]: Config file from default location [%s] not available, " + LOG_WARNING("Config file from default location [%s] not available, " "waiting %d seconds\n", - pdc_client_mpi_rank_g, config_fname, sleeptime); - fflush(stdout); + config_fname, sleeptime); sleep(sleeptime); sleeptime *= 2; } if (is_server_ready != 1) - PGOTO_ERROR(FAIL, "server is not ready"); + PGOTO_ERROR(FAIL, "Server is not ready"); na_config = fopen(config_fname, "r"); if (!na_config) @@ -420,7 +401,7 @@ PDC_Client_read_server_addr_from_file() // Get the first line as $pdc_server_num_g if (fgets(n_server_string, PATH_MAX, na_config) == NULL) { - PGOTO_ERROR(FAIL, "Get first line failed\n"); + PGOTO_ERROR(FAIL, "Get first line failed"); } pdc_server_num_g = atoi(n_server_string); } @@ -430,18 +411,19 @@ PDC_Client_read_server_addr_from_file() #endif if (pdc_server_num_g == 0) { - LOG_ERROR("==PDC_CLIENT[%d]: server number error %d\n", pdc_client_mpi_rank_g, pdc_server_num_g); - return -1; + LOG_ERROR("Server number error %d\n", pdc_server_num_g); + FUNC_LEAVE(-1); } // Allocate $pdc_server_info_g - pdc_server_info_g = (struct _pdc_server_info *)calloc(sizeof(struct _pdc_server_info), pdc_server_num_g); + pdc_server_info_g = + (struct _pdc_server_info *)PDC_calloc(sizeof(struct _pdc_server_info), pdc_server_num_g); i = 0; while (i < pdc_server_num_g) { if (pdc_client_mpi_rank_g == 0) { if (fgets(pdc_server_info_g[i].addr_string, ADDR_MAX, na_config) == NULL) { - PGOTO_ERROR(FAIL, "Get first line failed\n"); + PGOTO_ERROR(FAIL, "Get first line failed"); } p = strrchr(pdc_server_info_g[i].addr_string, '\n'); if (p != NULL) @@ -462,32 +444,28 @@ PDC_Client_read_server_addr_from_file() ret_value = SUCCEED; done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t client_send_flush_obj_all_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; flush_obj_all_out_t output; int * rpc_return; - FUNC_ENTER(NULL); - handle = callback_info->info.forward.handle; rpc_return = (int *)callback_info->arg; ret_value = HG_Get_output(handle, &output); *rpc_return = output.ret; - if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: flush_obj_all_rpc_cb error with HG_Get_output\n", pdc_client_mpi_rank_g); - goto done; - } + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -497,25 +475,23 @@ client_send_flush_obj_all_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t obj_reset_dims_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_obj_reset_dims_args *region_transfer_args; obj_reset_dims_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_obj_reset_dims_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: obj_reset_dims_rpc_cb error with HG_Get_output\n", pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "obj_reset_dims_rpc_cb error with HG_Get_output"); } region_transfer_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -525,25 +501,23 @@ obj_reset_dims_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_flush_obj_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; flush_obj_out_t output; int * rpc_return; - FUNC_ENTER(NULL); - handle = callback_info->info.forward.handle; rpc_return = (int *)callback_info->arg; ret_value = HG_Get_output(handle, &output); *rpc_return = output.ret; - if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: flush_obj_rpc_cb error with HG_Get_output\n", pdc_client_mpi_rank_g); - goto done; - } + + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -553,26 +527,22 @@ client_send_flush_obj_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_close_all_server_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; close_server_out_t output; int * rpc_return; - FUNC_ENTER(NULL); - handle = callback_info->info.forward.handle; rpc_return = (int *)callback_info->arg; ret_value = HG_Get_output(handle, &output); *rpc_return = output.ret; - if (ret_value != HG_SUCCESS || output.ret != 88) { - LOG_ERROR("PDC_CLIENT[%d]: close_all_server_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); - goto done; - } + if (ret_value != HG_SUCCESS || output.ret != 88) + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -582,29 +552,25 @@ client_send_close_all_server_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_transfer_request_metadata_query_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_metadata_query_args *region_transfer_args; transfer_request_metadata_query_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_metadata_query_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR( - "PDC_CLIENT[%d]: client_send_transfer_request_metadata_query_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->query_id = output.query_id; region_transfer_args->total_buf_size = output.total_buf_size; region_transfer_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -615,27 +581,23 @@ static hg_return_t client_send_transfer_request_metadata_query2_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_metadata_query2_args *region_transfer_args; transfer_request_metadata_query2_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_metadata_query2_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR( - "PDC_CLIENT[%d]: client_send_transfer_request_metadata_query2_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -645,33 +607,25 @@ client_send_transfer_request_metadata_query2_rpc_cb(const struct hg_cb_info *cal static hg_return_t client_send_transfer_request_all_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_all_args *region_transfer_args; transfer_request_all_out_t output; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] enter\n", cur_time, pdc_client_mpi_rank_g); -#endif - region_transfer_args = (struct _pdc_transfer_request_all_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: error with HG_Get_output\n", pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; region_transfer_args->metadata_id = output.metadata_id; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -681,26 +635,23 @@ client_send_transfer_request_all_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_transfer_request_wait_all_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_wait_all_args *region_transfer_args; transfer_request_wait_all_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_wait_all_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: client_send_transfer_request_wait_all_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -710,27 +661,25 @@ client_send_transfer_request_wait_all_rpc_cb(const struct hg_cb_info *callback_i static hg_return_t client_send_transfer_request_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_args *region_transfer_args; transfer_request_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: error with HG_Get_output\n", pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; region_transfer_args->metadata_id = output.metadata_id; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -740,29 +689,26 @@ client_send_transfer_request_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_transfer_request_status_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_status_args *region_transfer_args; transfer_request_status_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_status_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: client_send_transfer_request_status_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; region_transfer_args->status = output.status; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -772,29 +718,26 @@ client_send_transfer_request_status_rpc_cb(const struct hg_cb_info *callback_inf static hg_return_t client_send_transfer_request_wait_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_transfer_request_wait_args *region_transfer_args; transfer_request_wait_out_t output; - FUNC_ENTER(NULL); - region_transfer_args = (struct _pdc_transfer_request_wait_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: client_send_transfer_request_wait_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); region_transfer_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_transfer_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -806,29 +749,25 @@ client_send_transfer_request_wait_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_buf_unmap_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_buf_map_args *region_unmap_args; buf_unmap_out_t output; - FUNC_ENTER(NULL); - region_unmap_args = (struct _pdc_buf_map_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("PDC_CLIENT[%d]: client_send_buf_unmap_rpc_cb error with HG_Get_output\n", - pdc_client_mpi_rank_g); - fflush(stdout); region_unmap_args->ret = -1; - PGOTO_DONE(ret_value); + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } region_unmap_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -840,27 +779,25 @@ client_send_buf_unmap_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_send_buf_map_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_buf_map_args *buf_map_args; buf_map_out_t output; - FUNC_ENTER(NULL); - buf_map_args = (struct _pdc_buf_map_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { buf_map_args->ret = -1; - PGOTO_ERROR(ret_value, "PDC_CLIENT[%d]: client_send_buf_map_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } buf_map_args->ret = output.ret; done: - fflush(stdout); hg_atomic_set32(&atomic_work_todo_g, 0); HG_Free_output(handle, &output); @@ -872,10 +809,9 @@ client_send_buf_map_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_test_connect_rpc_cb(const struct hg_cb_info *callback_info) { - hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_client_lookup_args *client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; hg_handle_t handle = callback_info->info.forward.handle; @@ -883,13 +819,12 @@ client_test_connect_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "PDC_CLIENT[%d]: error with HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_set32(&atomic_work_todo_g, 0); HG_Free_output(handle, &output); HG_Destroy(callback_info->info.forward.handle); @@ -901,14 +836,14 @@ client_test_connect_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_test_connect_lookup_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint32_t server_id; struct _pdc_client_lookup_args *client_lookup_args; client_test_connect_in_t in; hg_handle_t client_test_handle; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; server_id = client_lookup_args->server_id; @@ -929,28 +864,26 @@ client_test_connect_lookup_cb(const struct hg_cb_info *callback_info) PGOTO_ERROR(ret_value, "Could not start HG_Forward"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_lookup_server(int server_id, int is_init) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; struct _pdc_client_lookup_args lookup_args; char self_addr[ADDR_MAX]; char * target_addr_string; - FUNC_ENTER(NULL); - if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with server id input %d", pdc_client_mpi_rank_g, - server_id); + PGOTO_ERROR(FAIL, "Error with server id input %d", server_id); ret_value = PDC_get_self_addr(send_class_g, self_addr); if (ret_value != SUCCEED) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: ERROR geting self addr", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error getting self addr"); lookup_args.client_id = pdc_client_mpi_rank_g; lookup_args.server_id = server_id; @@ -958,54 +891,46 @@ PDC_Client_lookup_server(int server_id, int is_init) lookup_args.is_init = is_init; target_addr_string = pdc_server_info_g[lookup_args.server_id].addr_string; - if (is_client_debug_g == 1) { - LOG_DEBUG("==PDC_CLIENT[%d]: - Testing connection to server %d [%s]\n", pdc_client_mpi_rank_g, - lookup_args.server_id, target_addr_string); - fflush(stdout); - } + if (is_client_debug_g == 1) + LOG_DEBUG("Testing connection to server %d [%s]\n", lookup_args.server_id, target_addr_string); hg_ret = HG_Addr_lookup(send_context_g, client_test_connect_lookup_cb, &lookup_args, target_addr_string, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Connection to server FAILED!"); + PGOTO_ERROR(FAIL, "Connection to server failed"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); - if (is_client_debug_g == 1) { - LOG_DEBUG("==PDC_CLIENT[%5d]: - connected to server %5d\n", pdc_client_mpi_rank_g, - lookup_args.server_id); - fflush(stdout); - } + if (is_client_debug_g == 1) + LOG_DEBUG("Connected to server %5d\n", lookup_args.server_id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_try_lookup_server(int server_id, int is_init) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int n_retry = 1; - FUNC_ENTER(NULL); - if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid server ID %d", pdc_client_mpi_rank_g, server_id); + PGOTO_ERROR(FAIL, "Invalid server ID %d", server_id); while (pdc_server_info_g[server_id].addr_valid != 1) { if (n_retry > PDC_MAX_TRIAL_NUM) break; ret_value = PDC_Client_lookup_server(server_id, is_init); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_lookup_server"); n_retry++; } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -1024,13 +949,11 @@ send_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: metadata_add_tag_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "metadata_add_tag_rpc_cb error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -1040,22 +963,22 @@ send_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_send_rpc(int server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; struct _pdc_client_lookup_args lookup_args; hg_handle_t handle; send_rpc_in_t in; - FUNC_ENTER(NULL); - if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid server ID %d", pdc_client_mpi_rank_g, server_id); + PGOTO_ERROR(FAIL, "Invalid server ID %d", server_id); // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, send_rpc_register_id_g, &handle); @@ -1063,7 +986,7 @@ PDC_Client_send_rpc(int server_id) hg_ret = HG_Forward(handle, send_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - HG_Forward Error!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "HG_Forward Error"); // No need to wait // Wait for response from server @@ -1072,7 +995,6 @@ PDC_Client_send_rpc(int server_id) PDC_Client_check_response(&send_context_g); done: - fflush(stdout); HG_Destroy(handle); FUNC_LEAVE(ret_value); @@ -1083,13 +1005,13 @@ PDC_Client_send_rpc(int server_id) static hg_return_t client_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_client_lookup_args *client_lookup_args; gen_obj_id_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -1097,13 +1019,11 @@ client_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->obj_id = 0; - PGOTO_ERROR(ret_value, "PDC_CLIENT[%d]: client_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } client_lookup_args->obj_id = output.obj_id; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -1113,13 +1033,13 @@ client_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_region_lock_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_region_lock_args *client_lookup_args; region_lock_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_region_lock_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -1127,13 +1047,12 @@ client_region_lock_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "PDC_CLIENT[%d]: error with HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -1143,74 +1062,37 @@ client_region_lock_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t client_region_release_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct _pdc_client_lookup_args *client_lookup_args; region_lock_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; /* Get output from server*/ ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: client_region_release_rpc_cb - HG_Get_output error!"); + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); FUNC_LEAVE(ret_value); } -/* -static hg_return_t -client_region_release_with_transform_cb(const struct hg_cb_info *callback_info) -{ - hg_return_t ret_value = HG_SUCCESS; - hg_handle_t handle; - struct _pdc_client_transform_args *transform_args; - region_lock_out_t output; - size_t size; - size_t (*this_transform)(void *, pdc_var_type_t, int, uint64_t *, void **, pdc_var_type_t) = NULL; - void *result; - - FUNC_ENTER(NULL); - transform_args = (struct _pdc_client_transform_args *)callback_info->arg; - result = transform_args->transform_result; - handle = callback_info->info.forward.handle; - this_transform = transform_args->this_transform->ftnPtr; - size = this_transform(transform_args->data, transform_args->this_transform->dest_type, - transform_args->region_info->ndim, transform_args->region_info->size, &result, - transform_args->this_transform->dest_type); - - transform_args->size = size; - - // Get output from server - ret_value = HG_Get_output(handle, &output); - if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT: client_region_release_rpc_cb - HG_Get_output error!"); - - transform_args->ret = output.ret; - -done: - fflush(stdout); - hg_atomic_decr32(&atomic_work_todo_g); - HG_Free_output(handle, &output); - - FUNC_LEAVE(ret_value); -} -*/ // Bulk // Callback after bulk transfer is received by client static hg_return_t hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct bulk_args_t *bulk_args; hg_bulk_t local_bulk_handle; @@ -1225,8 +1107,6 @@ hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) uint64_t * u64_arr_ptr; uint32_t bulk_sgnum; - FUNC_ENTER(NULL); - bulk_args = (struct bulk_args_t *)hg_cb_info->arg; local_bulk_handle = hg_cb_info->info.bulk.local_handle; @@ -1240,13 +1120,13 @@ hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) if (hg_cb_info->ret == HG_SUCCESS) { if (bulk_args->is_id == 1) { bulk_sgnum = HG_Bulk_get_segment_count(local_bulk_handle); - ids_buf = (void **)calloc(sizeof(void *), bulk_sgnum); - ids_buf_sizes = (uint64_t *)calloc(sizeof(uint64_t), bulk_sgnum); + ids_buf = (void **)PDC_calloc(sizeof(void *), bulk_sgnum); + ids_buf_sizes = (uint64_t *)PDC_calloc(sizeof(uint64_t), bulk_sgnum); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, bulk_sgnum, ids_buf, ids_buf_sizes, &actual_cnt); u64_arr_ptr = ((uint64_t **)(ids_buf))[0]; - bulk_args->obj_ids = (uint64_t *)calloc(sizeof(uint64_t), n_meta); + bulk_args->obj_ids = (uint64_t *)PDC_calloc(sizeof(uint64_t), n_meta); for (i = 0; i < n_meta; i++) { bulk_args->obj_ids[i] = *u64_arr_ptr; u64_arr_ptr++; @@ -1256,7 +1136,7 @@ hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, &buf, buf_sizes, &actual_cnt); meta_ptr = (pdc_metadata_t *)(buf); - bulk_args->meta_arr = (pdc_metadata_t **)calloc(sizeof(pdc_metadata_t *), n_meta); + bulk_args->meta_arr = (pdc_metadata_t **)PDC_calloc(sizeof(pdc_metadata_t *), n_meta); for (i = 0; i < n_meta; i++) { bulk_args->meta_arr[i] = meta_ptr; meta_ptr++; @@ -1276,9 +1156,6 @@ hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) // checking the following flag will make sure the current bulk transfer is done. hg_atomic_cas32(&(bulk_args->bulk_done_flag), 0, 1); - fflush(stdout); - // free(bulk_args); - FUNC_LEAVE(ret_value); } @@ -1287,12 +1164,12 @@ hg_test_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) int PDC_Client_check_bulk(hg_context_t *hg_context) { + FUNC_ENTER(NULL); + int ret_value; hg_return_t hg_ret; unsigned int actual_count; - FUNC_ENTER(NULL); - /* Poke progress engine and check for events */ do { actual_count = 0; @@ -1325,11 +1202,11 @@ PDC_Client_check_bulk(hg_context_t *hg_context) static const char * drc_strerror(int errnum) { + FUNC_ENTER(NULL); + char * ret_value = NULL; const char *errstring = "UNDEFINED"; - FUNC_ENTER(NULL); - DRC_ERROR_STRING_MACRO(DRC_SUCCESS, errnum, errstring); DRC_ERROR_STRING_MACRO(DRC_EINVAL, errnum, errstring); DRC_ERROR_STRING_MACRO(DRC_EPERM, errnum, errstring); @@ -1352,10 +1229,14 @@ drc_strerror(int errnum) perr_t PDC_Client_mercury_init(hg_class_t **hg_class, hg_context_t **hg_context, int port) { - perr_t ret_value = SUCCEED; - char na_info_string[NA_STRING_INFO_LEN]; - char hostname[HOSTNAME_LEN]; - int local_server_id; + FUNC_ENTER(NULL); + + perr_t ret_value = SUCCEED; + char na_info_string[NA_STRING_INFO_LEN]; + char * hostname; + pbool_t free_hostname = false; + int local_server_id; + /* Set the default mercury transport * but enable overriding that to any of: * "ofi+gni" @@ -1373,18 +1254,28 @@ PDC_Client_mercury_init(hg_class_t **hg_class, hg_context_t **hg_context, int po int rc; #endif - FUNC_ENTER(NULL); - if ((hg_transport = getenv("HG_TRANSPORT")) == NULL) { + LOG_INFO("Environment variable HG_TRANSPORT was NOT set\n"); hg_transport = default_hg_transport; } - memset(hostname, 0, sizeof(hostname)); - gethostname(hostname, sizeof(hostname)); - sprintf(na_info_string, "%s://%s:%d", hg_transport, hostname, port); - if (pdc_client_mpi_rank_g == 0) { - LOG_INFO("==PDC_CLIENT: using %.7s\n", na_info_string); - fflush(stdout); + else + LOG_INFO("Environment variable HG_TRANSPORT was set\n"); + if ((hostname = getenv("HG_HOST")) == NULL) { + LOG_INFO("Environment variable HG_HOST was NOT set\n"); + hostname = PDC_malloc(HOSTNAME_LEN); + memset(hostname, 0, HOSTNAME_LEN); + gethostname(hostname, HOSTNAME_LEN - 1); + free_hostname = true; } + else + LOG_INFO("Environment variable HG_HOST was set\n"); + + sprintf(na_info_string, "%s://%s:%d", hg_transport, hostname, port); + + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Connection string: %s\n", na_info_string); + if (free_hostname) + hostname = (char *)PDC_free(hostname); // gni starts here #ifdef PDC_HAS_CRAY_DRC @@ -1400,18 +1291,16 @@ PDC_Client_mercury_init(hg_class_t **hg_class, hg_context_t **hg_context, int po if (rc != DRC_SUCCESS) { /* failed to access credential */ if (rc == -DRC_EINVAL) { sleep(1); - goto drc_access_again; + PGOTO_DONE(drc_access_again); } LOG_ERROR("client drc_access() failed (%d, %s)", rc, drc_strerror(-rc)); - fflush(stdout); - PGOTO_ERROR(FAIL, "client drc_access() failed"); + PGOTO_ERROR(FAIL, "Client drc_access() failed"); } cookie = drc_get_first_cookie(credential_info); if (pdc_client_mpi_rank_g == 0) { LOG_INFO("# Credential is %u\n", credential); LOG_INFO("# Cookie is %u\n", cookie); - fflush(stdout); } sprintf(pdc_auth_key, "%u", cookie); init_info.na_init_info.auth_key = strdup(pdc_auth_key); @@ -1528,47 +1417,42 @@ PDC_Client_mercury_init(hg_class_t **hg_class, hg_context_t **hg_context, int po local_server_id = PDC_get_local_server_id(pdc_client_mpi_rank_g, pdc_nclient_per_server_g, pdc_server_num_g); if (PDC_Client_try_lookup_server(local_server_id, 1) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR lookup server %d\n", pdc_client_mpi_rank_g, - local_server_id); + PGOTO_ERROR(FAIL, "Error lookup server %d", local_server_id); } else if (strcmp(client_lookup_env, "ALL") == 0) { if (pdc_client_mpi_rank_g == 0) - LOG_INFO("==PDC_CLIENT[%d]: Client lookup all servers at start time!\n", pdc_client_mpi_rank_g); + LOG_INFO("Client lookup all servers at start time\n"); for (local_server_id = 0; local_server_id < pdc_server_num_g; local_server_id++) { if (pdc_client_mpi_size_g > 1000) PDC_msleep(pdc_client_mpi_rank_g % 300); if (PDC_Client_try_lookup_server(local_server_id, 1) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR lookup server %d", pdc_client_mpi_rank_g, - local_server_id); + PGOTO_ERROR(FAIL, "Error lookup server %d", local_server_id); } } else { if (pdc_client_mpi_rank_g == 0) - LOG_INFO("==PDC_CLIENT[%d]: Client lookup server at start time disabled!\n", - pdc_client_mpi_rank_g); + LOG_INFO("Client lookup server at start time disabled\n"); } - if (is_client_debug_g == 1 && pdc_client_mpi_rank_g == 0) { - LOG_INFO("==PDC_CLIENT[%d]: Successfully established connection to %d PDC metadata server%s\n\n", - pdc_client_mpi_rank_g, pdc_server_num_g, pdc_client_mpi_size_g == 1 ? "" : "s"); - fflush(stdout); - } + if (is_client_debug_g == 1 && pdc_client_mpi_rank_g == 0) + LOG_INFO("Successfully established connection to %d PDC metadata server%s\n\n", pdc_server_num_g, + pdc_client_mpi_size_g == 1 ? "" : "s"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_init() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_server_info_g = NULL; char * tmp_dir; uint32_t port; int is_mpi_init = 0; - FUNC_ENTER(NULL); // Get up tmp dir env var tmp_dir = getenv("PDC_TMPDIR"); if (tmp_dir == NULL) @@ -1595,16 +1479,16 @@ PDC_Client_init() MPI_Comm_dup(MPI_COMM_WORLD, &PDC_CLIENT_COMM_WORLD_g); MPI_Comm_rank(PDC_CLIENT_COMM_WORLD_g, &pdc_client_mpi_rank_g); MPI_Comm_size(PDC_CLIENT_COMM_WORLD_g, &pdc_client_mpi_size_g); - LOG_DEBUG("my client rank = %d, client communicator size = %d\n", pdc_client_mpi_rank_g, + LOG_DEBUG("My client rank = %d, client communicator size = %d\n", pdc_client_mpi_rank_g, pdc_client_mpi_size_g); #endif if (pdc_client_mpi_rank_g == 0) - LOG_INFO("==PDC_CLIENT: PDC_DEBUG set to %d!\n", is_client_debug_g); + LOG_INFO("PDC_DEBUG set to %d\n", is_client_debug_g); // get server address and fill in $pdc_server_info_g if (PDC_Client_read_server_addr_from_file() != SUCCEED) { - LOG_ERROR("==PDC_CLIENT[%d]: Error getting PDC Metadata servers info, exiting ...", pdc_server_num_g); + LOG_ERROR("Error getting PDC Metadata servers info, exiting..."); exit(0); } @@ -1631,17 +1515,17 @@ PDC_Client_init() PDC_set_execution_locus(CLIENT_MEMORY); if (pdc_client_mpi_rank_g == 0) { - LOG_INFO("==PDC_CLIENT[0]: Found %d PDC Metadata servers, running with %d PDC clients\n", - pdc_server_num_g, pdc_client_mpi_size_g); + LOG_INFO("Found %d PDC Metadata servers, running with %d PDC clients\n", pdc_server_num_g, + pdc_client_mpi_size_g); } // Init debug info if (pdc_server_num_g > 0) { - debug_server_id_count = (int *)malloc(sizeof(int) * pdc_server_num_g); + debug_server_id_count = (int *)PDC_malloc(sizeof(int) * pdc_server_num_g); memset(debug_server_id_count, 0, sizeof(int) * pdc_server_num_g); } else - LOG_ERROR("==PDC_CLIENT: Server number not properly initialized!\n"); + LOG_ERROR("Server number not properly initialized\n"); // Cori KNL has 68 cores per node, Haswell 32 port = pdc_client_mpi_rank_g % PDC_MAX_CORE_PER_NODE + 8000; @@ -1649,7 +1533,7 @@ PDC_Client_init() // Init Mercury network connection ret_value = PDC_Client_mercury_init(&send_class_g, &send_context_g, port); if (ret_value != SUCCEED || send_class_g == NULL || send_context_g == NULL) { - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with Mercury Init, exiting...", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_mercury_init, exiting..."); } hg_atomic_init32(&atomic_work_todo_g, 0); @@ -1660,40 +1544,33 @@ PDC_Client_init() } if (pdc_client_mpi_rank_g == 0) { - LOG_INFO("==PDC_CLIENT[%d]: using [%s] as tmp dir, %d clients per server\n", pdc_client_mpi_rank_g, - pdc_client_tmp_dir_g, pdc_nclient_per_server_g); + LOG_INFO("Using [%s] as tmp dir, %d clients per server\n", pdc_client_tmp_dir_g, + pdc_nclient_per_server_g); } if (mercury_has_init_g) { srand(time(NULL)); /* Initialize DART space */ - dart_g = (DART *)calloc(1, sizeof(DART)); + dart_g = (DART *)PDC_calloc(1, sizeof(DART)); dart_space_init(dart_g, pdc_server_num_g); - server_time_total_g = (int64_t *)calloc(pdc_server_num_g, sizeof(int64_t)); - server_call_count_g = (int64_t *)calloc(pdc_server_num_g, sizeof(int64_t)); - server_mem_usage_g = (int64_t *)calloc(pdc_server_num_g, sizeof(int64_t)); + server_time_total_g = (int64_t *)PDC_calloc(pdc_server_num_g, sizeof(int64_t)); + server_call_count_g = (int64_t *)PDC_calloc(pdc_server_num_g, sizeof(int64_t)); + server_mem_usage_g = (int64_t *)PDC_calloc(pdc_server_num_g, sizeof(int64_t)); } - /* if (hg_progress_flag_g == -1) { */ - /* hg_progress_flag_g = 0; */ - /* pthread_create(&hg_progress_tid_g, NULL, hg_progress_fn, send_context_g); */ - /* } */ - done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_get_nproc_per_node() { - int ret_value = 0; - FUNC_ENTER(NULL); - ret_value = pdc_client_same_node_size_g; + int ret_value = 0; + ret_value = pdc_client_same_node_size_g; FUNC_LEAVE(ret_value); } @@ -1701,21 +1578,22 @@ PDC_get_nproc_per_node() perr_t PDC_Client_destroy_all_handles() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); FUNC_LEAVE(ret_value); } perr_t PDC_Client_finalize() { + FUNC_ENTER(NULL); + hg_return_t hg_ret; perr_t ret_value = SUCCEED; int i; - FUNC_ENTER(NULL); - // Finalize Mercury for (i = 0; i < pdc_server_num_g; i++) { if (pdc_server_info_g[i].addr_valid) { @@ -1725,7 +1603,7 @@ PDC_Client_finalize() } if (pdc_server_info_g != NULL) - free(pdc_server_info_g); + pdc_server_info_g = (struct _pdc_server_info *)PDC_free(pdc_server_info_g); // Terminate thread if (hg_progress_flag_g == 0) { @@ -1741,23 +1619,22 @@ PDC_Client_finalize() #endif // free debug info if (debug_server_id_count != NULL) - free(debug_server_id_count); + debug_server_id_count = (int *)PDC_free(debug_server_id_count); #ifdef ENABLE_TIMING if (pdc_client_mpi_rank_g == 0) - LOG_INFO("==PDC_CLIENT[%d]: T_memcpy: %.2f\n", pdc_client_mpi_rank_g, memcpy_time_g); + LOG_INFO("T_memcpy: %.2f\n", memcpy_time_g); #endif hg_ret = HG_Context_destroy(send_context_g); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with HG_Context_destroy", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with HG_Context_destroy"); hg_ret = HG_Finalize(send_class_g); - /* if (hg_ret != HG_SUCCESS) */ - /* PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with HG_Finalize", pdc_client_mpi_rank_g); */ + if (hg_ret != HG_SUCCESS) + LOG_WARNING("Error with HG_Finalize\n"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -1765,6 +1642,8 @@ PDC_Client_finalize() static hg_return_t metadata_query_bulk_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct bulk_args_t * client_lookup_args; hg_handle_t handle; @@ -1777,15 +1656,13 @@ metadata_query_bulk_cb(const struct hg_cb_info *callback_info) struct bulk_args_t * bulk_args; void * recv_meta; - FUNC_ENTER(NULL); - client_lookup_args = (struct bulk_args_t *)callback_info->arg; handle = callback_info->info.forward.handle; // Get output from server ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: - error HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); n_meta = output.ret; client_lookup_args->n_meta = n_meta; @@ -1794,20 +1671,20 @@ metadata_query_bulk_cb(const struct hg_cb_info *callback_info) PGOTO_DONE(ret_value); } else - client_lookup_args->meta_arr = (pdc_metadata_t **)calloc(n_meta, sizeof(pdc_metadata_t *)); + client_lookup_args->meta_arr = (pdc_metadata_t **)PDC_calloc(n_meta, sizeof(pdc_metadata_t *)); // We have received the bulk handle from server (server uses hg_respond) // Use this to initiate a bulk transfer origin_bulk_handle = output.bulk_handle; hg_info = HG_Get_info(handle); - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); bulk_args->handle = handle; bulk_args->nbytes = HG_Bulk_get_size(origin_bulk_handle); bulk_args->n_meta = client_lookup_args->n_meta; - recv_meta = (void *)calloc(sizeof(pdc_metadata_t), n_meta); + recv_meta = (void *)PDC_calloc(sizeof(pdc_metadata_t), n_meta); /* Create a new bulk handle to read the data */ HG_Bulk_create(hg_info->hg_class, 1, (void **)&recv_meta, (hg_size_t *)&bulk_args->nbytes, @@ -1827,7 +1704,6 @@ metadata_query_bulk_cb(const struct hg_cb_info *callback_info) client_lookup_args->meta_arr = bulk_args->meta_arr; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -1838,10 +1714,9 @@ metadata_query_bulk_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_list_all(int *n_res, pdc_metadata_t ***out) { - perr_t ret_value; - FUNC_ENTER(NULL); + perr_t ret_value; ret_value = PDC_partial_query(1, -1, NULL, NULL, -1, -1, -1, NULL, n_res, out); FUNC_LEAVE(ret_value); @@ -1852,6 +1727,8 @@ PDC_partial_query(int is_list_all, int user_id, const char *app_name, const char int time_step_from, int time_step_to, int ndim, const char *tags, int *n_res, pdc_metadata_t ***out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; int n_recv = 0; @@ -1860,8 +1737,6 @@ PDC_partial_query(int is_list_all, int user_id, const char *app_name, const char hg_handle_t query_partial_handle; struct bulk_args_t lookup_args; - FUNC_ENTER(NULL); - // Fill input structure metadata_query_transfer_in_t in; in.is_list_all = is_list_all; @@ -1907,17 +1782,17 @@ PDC_partial_query(int is_list_all, int user_id, const char *app_name, const char for (server_id = my_server_start; server_id < my_server_end; server_id++) { if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, query_partial_register_id_g, &query_partial_handle); if (query_partial_handle == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: Error with query_partial_handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with query_partial_handle"); hg_ret = HG_Forward(query_partial_handle, metadata_query_bulk_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_client_list_all(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); hg_atomic_set32(&bulk_transfer_done_g, 0); @@ -1936,11 +1811,11 @@ PDC_partial_query(int is_list_all, int user_id, const char *app_name, const char if (*out == NULL) { out_size = sizeof(pdc_metadata_t *) * (lookup_args.n_meta); - *out = (pdc_metadata_t **)malloc(out_size); + *out = (pdc_metadata_t **)PDC_malloc(out_size); } else { out_size += sizeof(pdc_metadata_t *) * (lookup_args.n_meta); - *out = (pdc_metadata_t **)realloc(*out, out_size); + *out = (pdc_metadata_t **)PDC_realloc(*out, out_size); } *n_res += lookup_args.n_meta; @@ -1954,13 +1829,14 @@ PDC_partial_query(int is_list_all, int user_id, const char *app_name, const char // TODO: need to be careful when freeing the lookup_args, as it include the results returned to user done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; int n_recv = 0; @@ -1970,10 +1846,8 @@ PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) hg_handle_t query_partial_handle; struct bulk_args_t lookup_args; - FUNC_ENTER(NULL); - if (tags == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: input tag is NULL!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "tags was NULL"); // Fill input structure metadata_query_transfer_in_t in; @@ -1991,17 +1865,17 @@ PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) for (server_id = 0; server_id < pdc_server_num_g; server_id++) { if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, query_partial_register_id_g, &query_partial_handle); if (query_partial_handle == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: Error with query_partial_handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with query_partial_handle"); hg_ret = HG_Forward(query_partial_handle, metadata_query_bulk_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_client_list_all(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward()"); hg_atomic_set32(&bulk_transfer_done_g, 0); @@ -2020,11 +1894,11 @@ PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) if (*out == NULL) { out_size = sizeof(pdc_metadata_t *) * ((lookup_args.n_meta)); - *out = (pdc_metadata_t **)malloc(out_size); + *out = (pdc_metadata_t **)PDC_malloc(out_size); } else { out_size += sizeof(pdc_metadata_t *) * ((lookup_args.n_meta)); - *out = (pdc_metadata_t **)realloc(*out, out_size); + *out = (pdc_metadata_t **)PDC_realloc(*out, out_size); } *n_res += (lookup_args.n_meta); @@ -2038,7 +1912,6 @@ PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) // TODO: need to be careful when freeing the lookup_args, as it include the results returned to user done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2046,31 +1919,28 @@ PDC_Client_query_tag(const char *tags, int *n_res, pdc_metadata_t ***out) static hg_return_t metadata_query_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct _pdc_metadata_query_args *client_lookup_args; hg_handle_t handle; metadata_query_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_metadata_query_args *)callback_info->arg; handle = callback_info->info.forward.handle; /* Get output from server*/ ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: metadata_query_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "metadata_query_rpc_cb error with HG_Get_output"); if (output.ret.user_id == -1 && output.ret.obj_id == 0 && output.ret.time_step == -1) { client_lookup_args->data = NULL; } else { - client_lookup_args->data = (pdc_metadata_t *)malloc(sizeof(pdc_metadata_t)); + client_lookup_args->data = (pdc_metadata_t *)PDC_malloc(sizeof(pdc_metadata_t)); if (client_lookup_args->data == NULL) - PGOTO_ERROR(HG_OTHER_ERROR, - "==PDC_CLIENT[%d]: - cannnot allocate space for client_lookup_args->data", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Cannnot allocate space for client_lookup_args->data"); // Now copy the received metadata info ret_value = PDC_metadata_init(client_lookup_args->data); @@ -2078,7 +1948,6 @@ metadata_query_rpc_cb(const struct hg_cb_info *callback_info) } done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -2090,13 +1959,13 @@ metadata_query_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t metadata_delete_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct _pdc_client_lookup_args *client_lookup_args; hg_handle_t handle; metadata_delete_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -2104,13 +1973,11 @@ metadata_delete_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: metadata_delete_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -2120,6 +1987,8 @@ metadata_delete_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t metadata_delete_by_id_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct _pdc_client_lookup_args *client_lookup_args; hg_handle_t handle; @@ -2134,13 +2003,11 @@ metadata_delete_by_id_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: metadata_delete_by_id_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -2164,13 +2031,11 @@ metadata_add_tag_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: metadata_add_tag_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -2180,6 +2045,8 @@ metadata_add_tag_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_add_tag(pdcid_t obj_id, const char *tag) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; hg_handle_t metadata_add_tag_handle; @@ -2189,10 +2056,8 @@ PDC_Client_add_tag(pdcid_t obj_id, const char *tag) struct _pdc_client_lookup_args lookup_args; metadata_add_tag_in_t in; - FUNC_ENTER(NULL); - if (tag == NULL || tag[0] == 0) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - invalid tag content!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid tag content"); obj_prop = PDC_obj_get_info(obj_id); meta_id = obj_prop->obj_info_pub->meta_id; @@ -2202,7 +2067,7 @@ PDC_Client_add_tag(pdcid_t obj_id, const char *tag) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_add_tag_register_id_g, &metadata_add_tag_handle); @@ -2214,17 +2079,16 @@ PDC_Client_add_tag(pdcid_t obj_id, const char *tag) hg_ret = HG_Forward(metadata_add_tag_handle, metadata_add_tag_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - HG_Forward Error!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - add tag NOT successful ...", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Add tag NOT successful"); done: - fflush(stdout); HG_Destroy(metadata_add_tag_handle); FUNC_LEAVE(ret_value); @@ -2236,13 +2100,13 @@ PDC_Client_add_tag(pdcid_t obj_id, const char *tag) static hg_return_t metadata_update_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct _pdc_client_lookup_args *client_lookup_args; hg_handle_t handle; metadata_update_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -2250,13 +2114,11 @@ metadata_update_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: metadata_update_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "metadata_update_rpc_cb error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -2266,6 +2128,8 @@ metadata_update_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_update_metadata(pdc_metadata_t *old, pdc_metadata_t *new) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; int hash_name_value; @@ -2274,10 +2138,8 @@ PDC_Client_update_metadata(pdc_metadata_t *old, pdc_metadata_t *new) struct _pdc_client_lookup_args lookup_args; hg_handle_t metadata_update_handle; - FUNC_ENTER(NULL); - if (old == NULL || new == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_update_metadata() - NULL inputs!"); + PGOTO_ERROR(FAIL, "old or new was NULL"); hash_name_value = PDC_get_hash_by_name(old->obj_name); server_id = (hash_name_value + old->time_step); @@ -2287,7 +2149,7 @@ PDC_Client_update_metadata(pdc_metadata_t *old, pdc_metadata_t *new) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_update_register_id_g, &metadata_update_handle); @@ -2337,17 +2199,16 @@ PDC_Client_update_metadata(pdc_metadata_t *old, pdc_metadata_t *new) hg_ret = HG_Forward(metadata_update_handle, metadata_update_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_update_metadata_with_name(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: update NOT successful ..."); + PGOTO_ERROR(FAIL, "Update NOT successful"); done: - fflush(stdout); HG_Destroy(metadata_update_handle); FUNC_LEAVE(ret_value); @@ -2356,6 +2217,8 @@ PDC_Client_update_metadata(pdc_metadata_t *old, pdc_metadata_t *new) perr_t PDC_Client_delete_metadata_by_id(uint64_t obj_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; metadata_delete_by_id_in_t in; @@ -2363,8 +2226,6 @@ PDC_Client_delete_metadata_by_id(uint64_t obj_id) struct _pdc_client_lookup_args lookup_args; hg_handle_t metadata_delete_by_id_handle; - FUNC_ENTER(NULL); - // Fill input structure in.obj_id = obj_id; server_id = PDC_get_server_by_obj_id(obj_id, pdc_server_num_g); @@ -2376,26 +2237,25 @@ PDC_Client_delete_metadata_by_id(uint64_t obj_id) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_delete_by_id_register_id_g, &metadata_delete_by_id_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_Client_delete_by_id_metadata_with_name(): Could not create handle"); + PGOTO_ERROR(FAIL, "Could not create handle"); hg_ret = HG_Forward(metadata_delete_by_id_handle, metadata_delete_by_id_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_delete_by_id_metadata_with_name(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret < 0) - PGOTO_ERROR(FAIL, "PDC_CLIENT: delete_by_id NOT successful ..."); + PGOTO_ERROR(FAIL, "Failed to delete_by_id"); done: - fflush(stdout); HG_Destroy(metadata_delete_by_id_handle); FUNC_LEAVE(ret_value); @@ -2404,6 +2264,8 @@ PDC_Client_delete_metadata_by_id(uint64_t obj_id) perr_t PDC_Client_delete_metadata(char *delete_name, pdcid_t obj_delete_prop) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; struct _pdc_obj_prop * delete_prop; @@ -2413,8 +2275,6 @@ PDC_Client_delete_metadata(char *delete_name, pdcid_t obj_delete_prop) struct _pdc_client_lookup_args lookup_args; hg_handle_t metadata_delete_handle; - FUNC_ENTER(NULL); - delete_prop = PDC_obj_prop_get_info(obj_delete_prop); // Fill input structure in.obj_name = delete_name; @@ -2433,23 +2293,22 @@ PDC_Client_delete_metadata(char *delete_name, pdcid_t obj_delete_prop) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_delete_register_id_g, &metadata_delete_handle); hg_ret = HG_Forward(metadata_delete_handle, metadata_delete_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_delete_metadata_with_name(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - LOG_ERROR("PDC_CLIENT: delete NOT successful ... ret_value = %d\n", lookup_args.ret); + LOG_ERROR("Delete NOT successful ... ret_value = %d\n", lookup_args.ret); done: - fflush(stdout); HG_Destroy(metadata_delete_handle); FUNC_LEAVE(ret_value); @@ -2460,6 +2319,8 @@ PDC_Client_delete_metadata(char *delete_name, pdcid_t obj_delete_prop) perr_t PDC_Client_query_metadata_name_only(const char *obj_name, pdc_metadata_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; metadata_query_in_t in; @@ -2468,27 +2329,25 @@ PDC_Client_query_metadata_name_only(const char *obj_name, pdc_metadata_t **out) uint32_t i, count = 0; hg_handle_t * metadata_query_handle; - FUNC_ENTER(NULL); - - metadata_query_handle = (hg_handle_t *)malloc(sizeof(hg_handle_t) * pdc_server_num_g); + metadata_query_handle = (hg_handle_t *)PDC_malloc(sizeof(hg_handle_t) * pdc_server_num_g); // Fill input structure in.obj_name = obj_name; in.time_step = 0; in.hash_value = PDC_get_hash_by_name(obj_name); - lookup_args = (struct _pdc_metadata_query_args **)malloc(sizeof(struct _pdc_metadata_query_args *) * - pdc_server_num_g); + lookup_args = (struct _pdc_metadata_query_args **)PDC_malloc(sizeof(struct _pdc_metadata_query_args *) * + pdc_server_num_g); for (server_id = 0; server_id < (uint32_t)pdc_server_num_g; server_id++) { lookup_args[server_id] = - (struct _pdc_metadata_query_args *)malloc(sizeof(struct _pdc_metadata_query_args)); + (struct _pdc_metadata_query_args *)PDC_malloc(sizeof(struct _pdc_metadata_query_args)); // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_query_register_id_g, &metadata_query_handle[server_id]); @@ -2508,14 +2367,12 @@ PDC_Client_query_metadata_name_only(const char *obj_name, pdc_metadata_t **out) *out = lookup_args[i]->data; count++; } - // TODO lookup_args[i] are not freed HG_Destroy(metadata_query_handle[i]); } done: - fflush(stdout); - free(metadata_query_handle); + metadata_query_handle = (hg_handle_t *)PDC_free(metadata_query_handle); FUNC_LEAVE(ret_value); } @@ -2524,6 +2381,8 @@ perr_t PDC_Client_query_metadata_name_timestep(const char *obj_name, int time_step, pdc_metadata_t **out, uint32_t *metadata_server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint32_t hash_name_value; @@ -2532,8 +2391,6 @@ PDC_Client_query_metadata_name_timestep(const char *obj_name, int time_step, pdc struct _pdc_metadata_query_args lookup_args; hg_handle_t metadata_query_handle; - FUNC_ENTER(NULL); - // Compute server id hash_name_value = PDC_get_hash_by_name(obj_name); server_id = (hash_name_value + time_step); @@ -2545,7 +2402,7 @@ PDC_Client_query_metadata_name_timestep(const char *obj_name, int time_step, pdc debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_query_register_id_g, &metadata_query_handle); @@ -2555,16 +2412,13 @@ PDC_Client_query_metadata_name_timestep(const char *obj_name, int time_step, pdc in.hash_value = PDC_get_hash_by_name(obj_name); in.time_step = time_step; - lookup_args.data = (pdc_metadata_t *)malloc(sizeof(pdc_metadata_t)); + lookup_args.data = (pdc_metadata_t *)PDC_malloc(sizeof(pdc_metadata_t)); if (lookup_args.data == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: ERROR - PDC_Client_query_metadata_with_name() " - "cannnot allocate space for client_lookup_args->data"); + PGOTO_ERROR(FAIL, "Cannnot allocate space for client_lookup_args->data"); hg_ret = HG_Forward(metadata_query_handle, metadata_query_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, - "==PDC_CLIENT[%d] - PDC_Client_query_metadata_with_name(): Could not start HG_Forward()", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -2573,7 +2427,6 @@ PDC_Client_query_metadata_name_timestep(const char *obj_name, int time_step, pdc LOG_DEBUG("rank = %d, PDC_Client_query_metadata_name_timestep = %u\n", pdc_client_mpi_rank_g, out[0]->data_server_id); done: - fflush(stdout); HG_Destroy(metadata_query_handle); FUNC_LEAVE(ret_value); @@ -2584,31 +2437,30 @@ perr_t PDC_Client_query_metadata_name_timestep_agg(const char *obj_name, int time_step, pdc_metadata_t **out, uint32_t *metadata_server_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + #ifdef ENABLE_MPI if (pdc_client_mpi_rank_g == 0) ret_value = PDC_Client_query_metadata_name_timestep(obj_name, time_step, out, metadata_server_id); MPI_Bcast(&ret_value, 1, MPI_INT, 0, PDC_CLIENT_COMM_WORLD_g); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - ERROR with query [%s]", pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(FAIL, "Error with query [%s]", obj_name); if (pdc_client_mpi_rank_g != 0) - *out = (pdc_metadata_t *)calloc(1, sizeof(pdc_metadata_t)); + *out = (pdc_metadata_t *)PDC_calloc(1, sizeof(pdc_metadata_t)); MPI_Bcast(*out, sizeof(pdc_metadata_t), MPI_CHAR, 0, PDC_CLIENT_COMM_WORLD_g); MPI_Bcast(metadata_server_id, 1, MPI_UINT32_T, 0, PDC_CLIENT_COMM_WORLD_g); #else ret_value = PDC_Client_query_metadata_name_timestep(obj_name, time_step, out, metadata_server_id); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - ERROR with query [%s]", pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(FAIL, "Error with query [%s]", obj_name); #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2616,6 +2468,8 @@ PDC_Client_query_metadata_name_timestep_agg(const char *obj_name, int time_step, perr_t PDC_Client_create_cont_id(const char *cont_name, pdcid_t cont_create_prop ATTRIBUTE(unused), pdcid_t *cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; uint32_t server_id = 0; @@ -2624,8 +2478,6 @@ PDC_Client_create_cont_id(const char *cont_name, pdcid_t cont_create_prop ATTRIB struct _pdc_client_lookup_args lookup_args; hg_handle_t rpc_handle; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -2649,14 +2501,14 @@ PDC_Client_create_cont_id(const char *cont_name, pdcid_t cont_create_prop ATTRIB debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, gen_cont_register_id_g, &rpc_handle); hg_ret = HG_Forward(rpc_handle, client_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -2678,7 +2530,6 @@ PDC_Client_create_cont_id(const char *cont_name, pdcid_t cont_create_prop ATTRIB #endif done: - fflush(stdout); HG_Destroy(rpc_handle); FUNC_LEAVE(ret_value); @@ -2688,10 +2539,10 @@ PDC_Client_create_cont_id(const char *cont_name, pdcid_t cont_create_prop ATTRIB perr_t PDC_Client_create_cont_id_mpi(const char *cont_name, pdcid_t cont_create_prop, pdcid_t *cont_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (pdc_client_mpi_rank_g == 0) { ret_value = PDC_Client_create_cont_id(cont_name, cont_create_prop, cont_id); } @@ -2705,6 +2556,8 @@ PDC_Client_create_cont_id_mpi(const char *cont_name, pdcid_t cont_create_prop, p perr_t PDC_Client_obj_reset_dims(const char *obj_name, int time_step, int ndim, uint64_t *dims, int *reset) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint32_t hash_name_value; @@ -2713,8 +2566,6 @@ PDC_Client_obj_reset_dims(const char *obj_name, int time_step, int ndim, uint64_ struct _pdc_obj_reset_dims_args lookup_args; hg_handle_t obj_reset_dims_handle; - FUNC_ENTER(NULL); - // Compute server id hash_name_value = PDC_get_hash_by_name(obj_name); server_id = (hash_name_value + time_step); @@ -2724,7 +2575,7 @@ PDC_Client_obj_reset_dims(const char *obj_name, int time_step, int ndim, uint64_ debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, obj_reset_dims_register_id_g, &obj_reset_dims_handle); @@ -2746,9 +2597,7 @@ PDC_Client_obj_reset_dims(const char *obj_name, int time_step, int ndim, uint64_ hg_ret = HG_Forward(obj_reset_dims_handle, obj_reset_dims_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, - "==PDC_CLIENT[%d] - PDC_Client_query_metadata_with_name(): Could not start HG_Forward()", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error[%d] Could not start HG_Forward()", pdc_client_mpi_rank_g); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -2760,7 +2609,6 @@ PDC_Client_obj_reset_dims(const char *obj_name, int time_step, int ndim, uint64_ *reset = 0; } done: - fflush(stdout); HG_Destroy(obj_reset_dims_handle); FUNC_LEAVE(ret_value); @@ -2771,6 +2619,8 @@ perr_t PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj_create_prop, pdcid_t *meta_id, uint32_t *data_server_id, uint32_t *metadata_server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; uint32_t server_id = 0; @@ -2780,8 +2630,6 @@ PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj struct _pdc_client_lookup_args lookup_args; hg_handle_t rpc_handle; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -2847,13 +2695,10 @@ PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; - if (is_client_debug_g == 1) { - LOG_INFO("==PDC_CLIENT[%d]: obj [%s] to be created on server%u\n", pdc_client_mpi_rank_g, obj_name, - server_id); - fflush(stdout); - } + if (is_client_debug_g == 1) + LOG_INFO("obj [%s] to be created on server%u\n", obj_name, server_id); if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); // We have already filled in the pdc_server_info_g[server_id].addr in previous // client_test_connect_lookup_cb @@ -2861,7 +2706,7 @@ PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj hg_ret = HG_Forward(rpc_handle, client_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -2883,7 +2728,6 @@ PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj #endif done: - fflush(stdout); if (create_prop) PDC_obj_prop_free(create_prop); HG_Destroy(rpc_handle); @@ -2894,6 +2738,8 @@ PDC_Client_send_name_recv_id(const char *obj_name, uint64_t cont_id, pdcid_t obj perr_t PDC_Client_close_all_server() { + FUNC_ENTER(NULL); + uint64_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; uint32_t server_id = 0; @@ -2902,21 +2748,17 @@ PDC_Client_close_all_server() hg_handle_t close_server_handle; int rpc_return; - FUNC_ENTER(NULL); - if (pdc_client_mpi_size_g < pdc_server_num_g) { if (pdc_client_mpi_rank_g == 0) - LOG_INFO( - "==CLIENT[%d]: run close_server with equal ranks of servers (%d) for faster checkpoint!\n", - pdc_client_mpi_rank_g, pdc_server_num_g); + LOG_INFO("Run close_server with equal ranks of servers (%d) for faster checkpoint\n", + pdc_server_num_g); } if (pdc_client_mpi_size_g >= pdc_server_num_g) { if (pdc_client_mpi_rank_g < pdc_server_num_g) { server_id = pdc_client_mpi_rank_g; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, close_server_register_id_g, &close_server_handle); @@ -2941,8 +2783,7 @@ PDC_Client_close_all_server() for (i = 0; i < (uint32_t)pdc_server_num_g; i++) { server_id = pdc_server_num_g - 1 - i; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, close_server_register_id_g, &close_server_handle); @@ -2971,7 +2812,6 @@ PDC_Client_close_all_server() #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2979,6 +2819,8 @@ perr_t PDC_Client_buf_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id, struct pdc_region_info *reginfo, pdc_var_type_t data_type, struct _pdc_obj_info *object_info) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; buf_unmap_in_t in; @@ -2987,8 +2829,6 @@ PDC_Client_buf_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id, struct pdc_re struct _pdc_buf_map_args unmap_args; hg_handle_t client_send_buf_unmap_handle; - - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3009,7 +2849,7 @@ PDC_Client_buf_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id, struct pdc_re debug_server_id_count[data_server_id]++; if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, buf_unmap_register_id_g, &client_send_buf_unmap_handle); @@ -3031,10 +2871,9 @@ PDC_Client_buf_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id, struct pdc_re pdc_timestamp_register(pdc_client_buf_obj_unmap_timestamps, function_start, end); #endif if (unmap_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: buf unmap failed..."); + PGOTO_ERROR(FAIL, "buf unmap failed"); done: - fflush(stdout); HG_Destroy(client_send_buf_unmap_handle); FUNC_LEAVE(ret_value); @@ -3043,41 +2882,22 @@ PDC_Client_buf_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id, struct pdc_re static perr_t pack_region_metadata(int ndim, uint64_t *offset, uint64_t *size, region_info_transfer_t *transfer) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + transfer->ndim = ndim; + + PDC_copy_region_desc(offset, transfer->start, ndim, ndim); + PDC_copy_region_desc(size, transfer->count, ndim, ndim); - FUNC_ENTER(NULL); - transfer->ndim = ndim; - if (ndim >= 1) { - transfer->start_0 = offset[0]; - transfer->count_0 = size[0]; - } - else { - transfer->start_0 = 0; - transfer->count_0 = 0; - } - if (ndim >= 2) { - transfer->count_1 = size[1]; - transfer->start_1 = offset[1]; - } - else { - transfer->start_1 = 0; - transfer->count_1 = 0; - } - if (ndim >= 3) { - transfer->count_2 = size[2]; - transfer->start_2 = offset[2]; - } - else { - transfer->start_2 = 0; - transfer->count_2 = 0; - } - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_flush_obj(uint64_t obj_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; uint32_t server_id = 0; @@ -3086,11 +2906,10 @@ PDC_Client_flush_obj(uint64_t obj_id) hg_handle_t flush_obj_handle; int rpc_return; - FUNC_ENTER(NULL); for (i = 0; i < (uint32_t)pdc_server_num_g; i++) { server_id = pdc_server_num_g - 1 - i; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, flush_obj_register_id_g, &flush_obj_handle); @@ -3111,13 +2930,14 @@ PDC_Client_flush_obj(uint64_t obj_id) PGOTO_ERROR(FAIL, "PDC_Client_flush_obj(): Could not destroy handle"); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_flush_obj_all() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; uint32_t server_id = 0; @@ -3126,11 +2946,10 @@ PDC_Client_flush_obj_all() hg_handle_t flush_obj_all_handle; int rpc_return; - FUNC_ENTER(NULL); for (i = 0; i < (uint32_t)pdc_server_num_g; i++) { server_id = pdc_server_num_g - 1 - i; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, flush_obj_all_register_id_g, &flush_obj_all_handle); @@ -3139,7 +2958,7 @@ PDC_Client_flush_obj_all() in.tag = 44; hg_ret = HG_Forward(flush_obj_all_handle, client_send_flush_obj_all_rpc_cb, &rpc_return, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_flush_obj_all(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server @@ -3151,7 +2970,6 @@ PDC_Client_flush_obj_all() PGOTO_ERROR(FAIL, "PDC_Client_flush_obj_all(): Could not destroy handle"); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3164,6 +2982,8 @@ PDC_Client_transfer_request_all(int n_objs, pdc_access_t access_type, uint32_t d int comm) #endif { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_all_in_t in; @@ -3173,36 +2993,23 @@ PDC_Client_transfer_request_all(int n_objs, pdc_access_t access_type, uint32_t d struct _pdc_transfer_request_all_args transfer_args; char cur_time[64]; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] enter\n", cur_time, pdc_client_mpi_rank_g); -#endif - #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; #endif - if (!(access_type == PDC_WRITE || access_type == PDC_READ)) { - ret_value = FAIL; - LOG_ERROR("Invalid PDC type"); - goto done; - } + if (!(access_type == PDC_WRITE || access_type == PDC_READ)) + PGOTO_ERROR(FAIL, "Invalid PDC type"); in.n_objs = n_objs; in.access_type = access_type; in.total_buf_size = bulk_size; in.client_id = pdc_client_mpi_rank_g; - // Compute metadata server id - // meta_server_id = PDC_get_server_by_obj_id(obj_id[0], pdc_server_num_g); - debug_server_id_count[data_server_id]++; hg_class = HG_Context_get_class(send_context_g); if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, transfer_request_all_register_id_g, &client_send_transfer_request_all_handle); @@ -3211,18 +3018,13 @@ PDC_Client_transfer_request_all(int n_objs, pdc_access_t access_type, uint32_t d hg_ret = HG_Bulk_create(hg_class, 1, (void **)&bulk_buf, &bulk_size, HG_BULK_READWRITE, &(in.local_bulk_handle)); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_atomic_set32(&atomic_work_todo_g, 1); hg_ret = HG_Forward(client_send_transfer_request_all_handle, client_send_transfer_request_all_rpc_cb, &transfer_args, &in); -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] forwarded to %d\n", cur_time, pdc_client_mpi_rank_g, data_server_id); -#endif - #ifdef ENABLE_MPI if (comm != 0) MPI_Barrier(comm); @@ -3241,17 +3043,10 @@ PDC_Client_transfer_request_all(int n_objs, pdc_access_t access_type, uint32_t d #endif if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request_all(): Could not start HG_Forward()\n"); - - /* PDC_Client_check_response(&send_context_g); */ + PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request_all(): Could not start HG_Forward()"); PDC_Client_wait_pthread_progress(); -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] received response\n", cur_time, pdc_client_mpi_rank_g); -#endif - #ifdef ENABLE_MPI if (comm != 0) MPI_Barrier(comm); @@ -3272,17 +3067,11 @@ PDC_Client_transfer_request_all(int n_objs, pdc_access_t access_type, uint32_t d metadata_id[i] = transfer_args.metadata_id + i; } if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer request failed..."); + PGOTO_ERROR(FAIL, "Transfer request failed"); HG_Destroy(client_send_transfer_request_all_handle); -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] leaving\n", cur_time, pdc_client_mpi_rank_g); -#endif - done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3290,6 +3079,8 @@ perr_t PDC_Client_transfer_request_metadata_query2(char *buf, uint64_t total_buf_size, uint64_t query_id, uint32_t metadata_server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_metadata_query2_in_t in; @@ -3297,7 +3088,6 @@ PDC_Client_transfer_request_metadata_query2(char *buf, uint64_t total_buf_size, hg_handle_t client_send_transfer_request_metadata_query2_handle; struct _pdc_transfer_request_metadata_query2_args transfer_args; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3311,8 +3101,7 @@ PDC_Client_transfer_request_metadata_query2(char *buf, uint64_t total_buf_size, hg_class = HG_Context_get_class(send_context_g); if (PDC_Client_try_lookup_server(metadata_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server @ line", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[metadata_server_id].addr, transfer_request_metadata_query2_register_id_g, &client_send_transfer_request_metadata_query2_handle); @@ -3322,19 +3111,18 @@ PDC_Client_transfer_request_metadata_query2(char *buf, uint64_t total_buf_size, hg_ret = HG_Bulk_create(hg_class, 1, (void **)&buf, (hg_size_t *)&(in.total_buf_size), HG_BULK_READWRITE, &(in.local_bulk_handle)); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_ret = HG_Forward(client_send_transfer_request_metadata_query2_handle, client_send_transfer_request_metadata_query2_rpc_cb, &transfer_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, - "PDC_Client_send_transfer_request_metadata_query2(): Could not start HG_Forward()\n"); + PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request_metadata_query2(): Could not start HG_Forward()"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer_request_metadata_query2 failed..."); + PGOTO_ERROR(FAIL, "transfer_request_metadata_query2 failed"); HG_Destroy(client_send_transfer_request_metadata_query2_handle); @@ -3345,7 +3133,6 @@ PDC_Client_transfer_request_metadata_query2(char *buf, uint64_t total_buf_size, #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3354,6 +3141,8 @@ PDC_Client_transfer_request_metadata_query(char *buf, uint64_t total_buf_size, i uint32_t metadata_server_id, uint8_t is_write, uint64_t *output_buf_size, uint64_t *query_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_metadata_query_in_t in; @@ -3361,7 +3150,6 @@ PDC_Client_transfer_request_metadata_query(char *buf, uint64_t total_buf_size, i hg_handle_t client_send_transfer_request_metadata_query_handle; struct _pdc_transfer_request_metadata_query_args transfer_args; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3377,7 +3165,7 @@ PDC_Client_transfer_request_metadata_query(char *buf, uint64_t total_buf_size, i hg_class = HG_Context_get_class(send_context_g); if (PDC_Client_try_lookup_server(metadata_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[metadata_server_id].addr, transfer_request_metadata_query_register_id_g, &client_send_transfer_request_metadata_query_handle); @@ -3387,18 +3175,17 @@ PDC_Client_transfer_request_metadata_query(char *buf, uint64_t total_buf_size, i hg_ret = HG_Bulk_create(hg_class, 1, (void **)&buf, (hg_size_t *)&(in.total_buf_size), HG_BULK_READWRITE, &(in.local_bulk_handle)); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_ret = HG_Forward(client_send_transfer_request_metadata_query_handle, client_send_transfer_request_metadata_query_rpc_cb, &transfer_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, - "PDC_Client_send_transfer_request_metadata_query(): Could not start HG_Forward()\n"); + PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request_metadata_query(): Could not start HG_Forward()"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer_request_metadata_query failed..."); + PGOTO_ERROR(FAIL, "Transfer_request_metadata_query failed"); *output_buf_size = transfer_args.total_buf_size; *query_id = transfer_args.query_id; @@ -3412,13 +3199,14 @@ PDC_Client_transfer_request_metadata_query(char *buf, uint64_t total_buf_size, i #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, uint32_t data_server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_wait_all_in_t in; @@ -3427,14 +3215,6 @@ PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, u struct _pdc_transfer_request_wait_all_args transfer_args; char cur_time[64]; - FUNC_ENTER(NULL); - - /* if (hg_progress_flag_g == 0) { */ - /* hg_progress_flag_g = 1; */ - /* pthread_join(hg_progress_tid_g, NULL); */ - /* hg_progress_flag_g = -1; */ - /* } */ - #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3449,7 +3229,7 @@ PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, u hg_class = HG_Context_get_class(send_context_g); if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, transfer_request_wait_all_register_id_g, &client_send_transfer_request_wait_all_handle); @@ -3459,7 +3239,7 @@ PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, u hg_ret = HG_Bulk_create(hg_class, 1, (void **)&transfer_request_id, (hg_size_t *)&(in.total_buf_size), HG_BULK_READWRITE, &(in.local_bulk_handle)); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_ret = HG_Forward(client_send_transfer_request_wait_all_handle, client_send_transfer_request_wait_all_rpc_cb, &transfer_args, &in); @@ -3469,12 +3249,12 @@ PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, u start = MPI_Wtime(); #endif if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request_wait_all(): Could not start HG_Forward()\n"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer request wait all failed..."); + PGOTO_ERROR(FAIL, "Transfer request wait all failed"); HG_Destroy(client_send_transfer_request_wait_all_handle); @@ -3485,7 +3265,6 @@ PDC_Client_transfer_request_wait_all(int n_objs, pdcid_t *transfer_request_id, u #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3495,6 +3274,8 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, uint64_t *remote_size, size_t unit, pdc_access_t access_type, pdcid_t *metadata_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_in_t in; @@ -3511,26 +3292,16 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, double start = MPI_Wtime(), end; double function_start = start; #endif - if (!(access_type == PDC_WRITE || access_type == PDC_READ)) { - ret_value = FAIL; - LOG_ERROR("Invalid PDC type\n"); - goto done; - } + if (!(access_type == PDC_WRITE || access_type == PDC_READ)) + PGOTO_ERROR(FAIL, "Invalid PDC type"); LOG_DEBUG("rank = %d, data_server_id = %u\n", pdc_client_mpi_rank_g, data_server_id); in.access_type = access_type; in.remote_unit = unit; in.obj_id = obj_id; - in.obj_ndim = obj_ndim; - if (in.obj_ndim >= 1) { - in.obj_dim0 = obj_dims[0]; - } - if (in.obj_ndim >= 2) { - in.obj_dim1 = obj_dims[1]; - } - if (in.obj_ndim >= 3) { - in.obj_dim2 = obj_dims[2]; - } + + in.obj_ndim = obj_ndim; + PDC_copy_region_desc(obj_dims, in.obj_dims, in.obj_ndim, in.obj_ndim); // Compute metadata server id meta_server_id = PDC_get_server_by_obj_id(obj_id, pdc_server_num_g); @@ -3549,7 +3320,7 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, pack_region_metadata(remote_ndim, remote_offset, remote_size, &(in.remote_region)); if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, transfer_request_register_id_g, &client_send_transfer_request_handle); @@ -3559,7 +3330,7 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, &(in.local_bulk_handle)); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_atomic_set32(&atomic_work_todo_g, 1); @@ -3579,14 +3350,7 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, PDC_Client_transfer_pthread_create(); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request(): Could not start HG_Forward()\n"); - /* hg_atomic_set32(&atomic_work_todo_g, 1); */ - /* PDC_Client_check_response(&send_context_g); */ - - /* if (hg_progress_flag_g == -1) { */ - /* pthread_create(&hg_progress_tid_g, NULL, hg_progress_fn, send_context_g); */ - /* hg_progress_flag_g = 0; */ - /* } */ + PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request(): Could not start HG_Forward()"); PDC_Client_wait_pthread_progress(); @@ -3604,11 +3368,10 @@ PDC_Client_transfer_request(void *buf, pdcid_t obj_id, uint32_t data_server_id, *metadata_id = transfer_args.metadata_id; if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer request failed..."); + PGOTO_ERROR(FAIL, "Transfer request failed"); HG_Destroy(client_send_transfer_request_handle); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3616,39 +3379,39 @@ perr_t PDC_Client_transfer_request_status(pdcid_t transfer_request_id, uint32_t data_server_id, pdc_transfer_status_t *completed) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_status_in_t in; hg_handle_t client_send_transfer_request_status_handle; struct _pdc_transfer_request_status_args transfer_args; - FUNC_ENTER(NULL); in.transfer_request_id = transfer_request_id; if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, transfer_request_status_register_id_g, &client_send_transfer_request_status_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_ret = HG_Forward(client_send_transfer_request_status_handle, client_send_transfer_request_status_rpc_cb, &transfer_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request(): Could not start HG_Forward() @ line %d\n"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer request failed..."); + PGOTO_ERROR(FAIL, "Transfer request failed"); HG_Destroy(client_send_transfer_request_status_handle); *completed = transfer_args.status; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3656,6 +3419,8 @@ perr_t PDC_Client_transfer_request_wait(pdcid_t transfer_request_id, uint32_t data_server_id, int access_type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; transfer_request_wait_in_t in; @@ -3663,8 +3428,6 @@ PDC_Client_transfer_request_wait(pdcid_t transfer_request_id, uint32_t data_serv struct _pdc_transfer_request_wait_args transfer_args; char cur_time[64]; - FUNC_ENTER(NULL); - // Join the thread of trasfer start /* if (hg_progress_flag_g == 0) { */ /* hg_progress_flag_g = 1; */ @@ -3683,13 +3446,13 @@ PDC_Client_transfer_request_wait(pdcid_t transfer_request_id, uint32_t data_serv in.access_type = access_type; if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, transfer_request_wait_register_id_g, &client_send_transfer_request_wait_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "Could not create local bulk data handle\n"); + PGOTO_ERROR(FAIL, "Could not create local bulk data handle"); hg_ret = HG_Forward(client_send_transfer_request_wait_handle, client_send_transfer_request_wait_rpc_cb, &transfer_args, &in); @@ -3705,7 +3468,7 @@ PDC_Client_transfer_request_wait(pdcid_t transfer_request_id, uint32_t data_serv #endif if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request(): Could not start HG_Forward()\n"); + PGOTO_ERROR(FAIL, "PDC_Client_send_transfer_request(): Could not start HG_Forward()"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); @@ -3722,12 +3485,11 @@ PDC_Client_transfer_request_wait(pdcid_t transfer_request_id, uint32_t data_serv #endif if (transfer_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: transfer request failed..."); + PGOTO_ERROR(FAIL, "Transfer request failed"); HG_Destroy(client_send_transfer_request_wait_handle); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3737,6 +3499,8 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, pdc_var_type_t remote_type, struct pdc_region_info *local_region, struct pdc_region_info *remote_region, struct _pdc_obj_info *object_info) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; buf_map_in_t in; @@ -3751,7 +3515,6 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, struct _pdc_buf_map_args map_args; hg_handle_t client_send_buf_map_handle; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3784,15 +3547,15 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, if (ndim == 1 && local_offset[0] == 0) { local_count = 1; - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(sizeof(void *)); + data_size = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs = local_data; *data_size = unit * local_dims[0]; } else if (ndim == 1) { local_count = 1; - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(sizeof(void *)); + data_size = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs = local_data + unit * local_offset[0]; *data_size = unit * local_dims[0]; LOG_DEBUG("offset size = %d, local dim = %d, unit = %d, data_ptrs[0] = %d, data_ptrs[1] = %d\n", @@ -3801,15 +3564,15 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, } else if (ndim == 2 && local_offset[1] == 0) { local_count = 1; - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(sizeof(void *)); + data_size = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs = local_data; *data_size = unit * local_dims[0] * local_dims[1]; } else if (ndim == 2) { local_count = local_dims[0]; - data_ptrs = (void **)malloc(local_count * sizeof(void *)); - data_size = (size_t *)malloc(local_count * sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(local_count * sizeof(void *)); + data_size = (size_t *)PDC_malloc(local_count * sizeof(size_t)); data_ptrs[0] = local_data + unit * (local_dims[1] * local_offset[0] + local_offset[1]); data_size[0] = local_dims[1]; data_size[0] = unit * local_dims[1]; @@ -3820,15 +3583,15 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, } else if (ndim == 3 && local_offset[2] == 0) { local_count = 1; - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(sizeof(void *)); + data_size = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs = local_data; *data_size = unit * local_dims[0] * local_dims[1] * local_dims[2]; } else if (ndim == 3) { local_count = local_dims[0] * local_dims[1]; - data_ptrs = (void **)malloc(local_count * sizeof(void *)); - data_size = (size_t *)malloc(local_count * sizeof(size_t)); + data_ptrs = (void **)PDC_malloc(local_count * sizeof(void *)); + data_size = (size_t *)PDC_malloc(local_count * sizeof(size_t)); data_ptrs[0] = local_data + unit * (local_dims[2] * local_dims[1] * local_offset[0] + local_dims[2] * local_offset[1] + local_offset[2]); data_size[0] = local_dims[2]; @@ -3850,10 +3613,10 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, } } else - PGOTO_ERROR(FAIL, "mapping for array of dimension greater than 4 is not supproted"); + PGOTO_ERROR(FAIL, "Mapping for array of dimension greater than 4 is not supproted"); if (PDC_Client_try_lookup_server(data_server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[data_server_id].addr, buf_map_register_id_g, &client_send_buf_map_handle); @@ -3883,12 +3646,11 @@ PDC_Client_buf_map(pdcid_t local_region_id, pdcid_t remote_obj_id, size_t ndim, pdc_timestamp_register(pdc_client_buf_obj_map_timestamps, function_start, end); #endif if (map_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: buf map failed..."); + PGOTO_ERROR(FAIL, "buf map failed"); done: - fflush(stdout); - free(data_ptrs); - free(data_size); + data_ptrs = (void **)PDC_free(data_ptrs); + data_size = (size_t *)PDC_free(data_size); HG_Destroy(client_send_buf_map_handle); FUNC_LEAVE(ret_value); @@ -3899,6 +3661,8 @@ PDC_Client_region_lock(pdcid_t remote_obj_id, struct _pdc_obj_info *object_info, struct pdc_region_info *region_info, pdc_access_t access_type, pdc_lock_mode_t lock_mode, pdc_var_type_t data_type, pbool_t *status) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; uint32_t server_id, meta_server_id; @@ -3906,7 +3670,6 @@ PDC_Client_region_lock(pdcid_t remote_obj_id, struct _pdc_obj_info *object_info, struct _pdc_region_lock_args lookup_args; hg_handle_t region_lock_handle; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; @@ -3936,7 +3699,7 @@ PDC_Client_region_lock(pdcid_t remote_obj_id, struct _pdc_obj_info *object_info, PDC_region_info_t_to_transfer_unit(region_info, &(in.region), in.data_unit); if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, region_lock_register_id_g, ®ion_lock_handle); @@ -3952,572 +3715,48 @@ PDC_Client_region_lock(pdcid_t remote_obj_id, struct _pdc_obj_info *object_info, #endif if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); - - // Wait for response from server - hg_atomic_set32(&atomic_work_todo_g, 1); -#ifdef PDC_TIMING - start = MPI_Wtime(); -#endif - PDC_Client_check_response(&send_context_g); -#ifdef PDC_TIMING - end = MPI_Wtime(); - if (access_type == PDC_READ) { - pdc_timings.PDCreg_obtain_lock_read_rpc_wait += end - start; - pdc_timestamp_register(pdc_client_obtain_lock_read_timestamps, function_start, end); - } - else { - pdc_timings.PDCreg_obtain_lock_write_rpc_wait += end - start; - pdc_timestamp_register(pdc_client_obtain_lock_write_timestamps, function_start, end); - } -#endif - // Now the return value is stored in lookup_args.ret - if (lookup_args.ret == 1) { - *status = TRUE; - ret_value = SUCCEED; - } - else { - *status = FALSE; - ret_value = FAIL; - } - -done: - fflush(stdout); - HG_Destroy(region_lock_handle); - - FUNC_LEAVE(ret_value); -} -/* -static perr_t -pdc_region_release_with_server_transform(struct _pdc_obj_info * object_info, - struct pdc_region_info *region_info, pdc_access_t access_type, - pdc_var_type_t data_type, size_t type_extent, int transform_state, - struct _pdc_region_transform_ftn_info *this_transform, - size_t client_transform_size, void *client_transform_result, - pbool_t *status) -{ - perr_t ret_value = SUCCEED; - void ** data_ptrs = NULL; - size_t unit = 1, *data_size = NULL; - hg_class_t * hg_class = NULL; - hg_return_t hg_ret; - uint32_t server_id, meta_server_id; - region_transform_and_lock_in_t in; - struct _pdc_client_lookup_args lookup_args; - hg_handle_t region_release_handle = HG_HANDLE_NULL; - - FUNC_ENTER(NULL); - - // Compute local data server id - if (pdc_server_selection_g != PDC_SERVER_DEFAULT) { - server_id = object_info->obj_info_pub->server_id; - meta_server_id = server_id; - } - else { - // Compute metadata server id - meta_server_id = PDC_get_server_by_obj_id(object_info->obj_info_pub->meta_id, pdc_server_num_g); - // Compute local data server id - server_id = PDC_CLIENT_DATA_SERVER(); - } - if (this_transform == NULL) - in.transform_id = -1; - else { - in.transform_id = this_transform->meta_index; - in.data_type = this_transform->type; - } - in.dest_type = data_type; - in.meta_server_id = meta_server_id; - in.obj_id = object_info->obj_info_pub->meta_id; - in.access_type = access_type; - in.mapping = region_info->mapping; - in.local_reg_id = region_info->local_id; - in.transform_state = transform_state; - in.transform_data_size = client_transform_size; - in.client_data_ptr = (uint64_t)client_transform_result; - - - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); - *data_ptrs = client_transform_result; - *data_size = client_transform_size; - - hg_class = HG_Context_get_class(send_context_g); - - unit = type_extent; - PDC_region_info_t_to_transfer_unit(region_info, &(in.region), unit); - - if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); - - // Create a bulk handle for the temp buffer used by the transform - hg_ret = HG_Bulk_create(hg_class, 1, (void **)data_ptrs, (hg_size_t *)data_size, HG_BULK_READWRITE, - &(in.local_bulk_handle)); - if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "HG_Bulk_create() failed"); - - HG_Create(send_context_g, pdc_server_info_g[server_id].addr, transform_region_release_register_id_g, - ®ion_release_handle); - - hg_ret = HG_Forward(region_release_handle, client_region_release_rpc_cb, &lookup_args, &in); - if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); - - // Wait for response from server - hg_atomic_set32(&atomic_work_todo_g, 1) ; - PDC_Client_check_response(&send_context_g); - - // RPC is complete - // We can free up the bulk handle - // We can also free the local transform result... - HG_Bulk_free(in.local_bulk_handle); - if (transform_state && client_transform_result) - free(client_transform_result); - - // Now the return value is stored in lookup_args.ret - if (lookup_args.ret == 1) { - *status = TRUE; - ret_value = SUCCEED; - } - else { - *status = FALSE; - ret_value = FAIL; - } - -done: - if (data_ptrs) - free(data_ptrs); - if (data_size) - free(data_size); - - if (region_release_handle != HG_HANDLE_NULL) - HG_Destroy(region_release_handle); - - fflush(stdout); - FUNC_LEAVE(ret_value); -} - -static perr_t -pdc_region_release_with_server_analysis(struct _pdc_obj_info * object_info, - struct pdc_region_info *region_info, pdc_access_t access_type, - pdc_var_type_t data_type, size_t type_extent, - struct _pdc_region_analysis_ftn_info *registry, pbool_t *status) -{ - perr_t ret_value = SUCCEED; - size_t unit; - size_t output_extent; - pdc_var_type_t output_datatype; - hg_return_t hg_ret; - uint32_t server_id, meta_server_id; - region_analysis_and_lock_in_t in; - struct _pdc_client_lookup_args lookup_args; - struct _pdc_iterator_info * inputIter, *outputIter; - hg_handle_t region_release_handle = HG_HANDLE_NULL; - pdcid_t result_obj = 0; - struct _pdc_id_info * obj_info; - struct _pdc_obj_prop * obj_prop; - - FUNC_ENTER(NULL); - - if (pdc_server_selection_g != PDC_SERVER_DEFAULT) { - - server_id = object_info->obj_info_pub->server_id; - meta_server_id = server_id; - } - else { - // Compute metadata server id - meta_server_id = PDC_get_server_by_obj_id(object_info->obj_info_pub->meta_id, pdc_server_num_g); - // Compute local data server id - server_id = PDC_CLIENT_DATA_SERVER(); - } - in.meta_server_id = meta_server_id; - in.obj_id = object_info->obj_info_pub->meta_id; - in.access_type = access_type; - in.local_reg_id = region_info->local_id; - in.mapping = region_info->mapping; - in.data_type = data_type; - in.lock_mode = 0; - unit = type_extent; - - PDC_region_info_t_to_transfer_unit(region_info, &(in.region), unit); - in.type_extent = unit; - in.analysis_meta_index = registry->meta_index; - inputIter = &PDC_Block_iterator_cache[registry->object_id[0]]; - in.input_iter = inputIter->meta_id; - in.n_args = registry->n_args; - outputIter = &PDC_Block_iterator_cache[registry->object_id[registry->n_args - 1]]; - output_datatype = PDC_Block_iterator_cache[registry->object_id[registry->n_args - 1]].pdc_datatype; - output_extent = PDC_get_var_type_size(output_datatype); - in.output_type_extent = output_extent; - - result_obj = outputIter->objectId; - obj_info = PDC_find_id(result_obj); - obj_prop = (struct _pdc_obj_prop *)(obj_info->obj_ptr); - in.output_obj_id = obj_prop->obj_prop_pub->obj_prop_id; - in.output_iter = outputIter->meta_id; - - if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); - - HG_Create(send_context_g, pdc_server_info_g[server_id].addr, region_analysis_release_register_id_g, - ®ion_release_handle); - - hg_ret = HG_Forward(region_release_handle, client_region_release_rpc_cb, &lookup_args, &in); - if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); - - // Wait for response from server - hg_atomic_set32(&atomic_work_todo_g, 1) ; - PDC_Client_check_response(&send_context_g); - - // Now the return value is stored in lookup_args.ret - if (lookup_args.ret == 1) { - - *status = TRUE; - ret_value = SUCCEED; - } - else { - *status = FALSE; - ret_value = FAIL; - } - -done: - fflush(stdout); - if (region_release_handle != HG_HANDLE_NULL) - HG_Destroy(region_release_handle); - - FUNC_LEAVE(ret_value); -} -*/ - -/* -// This function supports transforms which are to occur -// post-READ (mapping operations) on the client. -static perr_t -pdc_region_release_with_client_transform(struct _pdc_obj_info * object_info, - struct pdc_region_info *region_info, pdc_access_t access_type, - pdc_var_type_t data_type, int type_extent, int transform_state, - struct _pdc_region_transform_ftn_info *this_transform, - size_t *client_transform_size, void *client_transform_result, - pbool_t *status) -{ - perr_t ret_value = SUCCEED; - void ** data_ptrs = NULL; - size_t unit = 1, *data_size = NULL; - hg_class_t * hg_class = NULL; - hg_return_t hg_ret; - uint32_t server_id, meta_server_id; - region_transform_and_lock_in_t in; - struct _pdc_client_transform_args transform_args; - hg_handle_t region_release_handle = HG_HANDLE_NULL; - - FUNC_ENTER(NULL); - - // Compute local data server id - if (pdc_server_selection_g != PDC_SERVER_DEFAULT) { - server_id = object_info->obj_info_pub->server_id; - meta_server_id = server_id; - } - else { - // Compute metadata server id - meta_server_id = PDC_get_server_by_obj_id(object_info->obj_info_pub->meta_id, pdc_server_num_g); - // Compute local data server id - server_id = PDC_CLIENT_DATA_SERVER(); - } - if (this_transform == NULL) - in.transform_id = -1; - else { - in.transform_id = this_transform->meta_index; - in.data_type = this_transform->type; - } - if (object_info->obj_pt->data_state == 0) - in.dest_type = data_type; - else - in.dest_type = object_info->obj_pt->transform_prop.dtype; - - in.meta_server_id = meta_server_id; - in.obj_id = object_info->obj_info_pub->meta_id; - in.access_type = access_type; - in.mapping = region_info->mapping; - in.local_reg_id = region_info->local_id; - in.transform_state = transform_state; - in.transform_data_size = *client_transform_size; - - data_ptrs = (void **)malloc(sizeof(void *)); - data_size = (size_t *)malloc(sizeof(size_t)); - data_ptrs[0] = malloc(*client_transform_size); - data_size[0] = *client_transform_size; - - hg_class = HG_Context_get_class(send_context_g); - - // The following values need to specify the actual region info - // since the server uses that to locate the matching server info - // which includes the relevant file pointer, etc... - unit = type_extent; - PDC_region_info_t_to_transfer_unit(region_info, &(in.region), unit); - - if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); - - transform_args.data = data_ptrs[0]; - transform_args.transform_result = client_transform_result; - transform_args.size = *client_transform_size; - transform_args.this_transform = this_transform; - transform_args.transform_state = transform_state; - transform_args.type_extent = type_extent; - transform_args.region_info = region_info; - - // Create a bulk handle for the temp buffer used by the transform - hg_ret = HG_Bulk_create(hg_class, 1, (void **)data_ptrs, (hg_size_t *)data_size, HG_BULK_READWRITE, - &(in.local_bulk_handle)); - - transform_args.local_bulk_handle = in.local_bulk_handle; - - HG_Create(send_context_g, pdc_server_info_g[server_id].addr, transform_region_release_register_id_g, - ®ion_release_handle); - - hg_ret = HG_Forward(region_release_handle, client_region_release_with_transform_cb, &transform_args, &in); - if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); - - // Wait for response from server - hg_atomic_set32(&atomic_work_todo_g, 1) ; - PDC_Client_check_response(&send_context_g); - - ret_value = HG_Bulk_free(in.local_bulk_handle); - - // Now the return value is stored in lookup_args.ret - if (transform_args.ret == 1) { - // Update size with what the transform produced... - *client_transform_size = transform_args.size; - *status = TRUE; - ret_value = SUCCEED; - } - else { - *status = FALSE; - ret_value = FAIL; - } - -done: - if (data_ptrs) { - free(data_ptrs[0]); - free(data_ptrs); - } - if (data_size) - free(data_size); - - if (region_release_handle != HG_HANDLE_NULL) - HG_Destroy(region_release_handle); - - fflush(stdout); - FUNC_LEAVE(ret_value); -} - -static void -update_metadata(struct _pdc_obj_info *object_info, pdc_var_type_t data_type, size_t type_extent, - int transform_state, size_t transform_size, struct _pdc_region_transform_ftn_info *transform) -{ - pdc_metadata_t meta; - size_t expected_size; - - FUNC_ENTER(NULL); - -#ifdef ENABLE_MPI - // This is symetric with how the query_metadata works, i.e. - // MPI rank 0 does some work and broadcasts the results. In - // this example, we don't need to broadcast anything, but only - // a single rank should update the metadata. - // - // FIXME: The above may or may not be correct, e.g. when - // using PDCobj_create_mpi, each MPI rank does the same work, - // but the total object extent is the sum of all rank instances. - // Does the metadata reflect this correctly? - - if (pdc_client_mpi_rank_g == 0) { - PDC_metadata_init(&meta); - strcpy(meta.obj_name, object_info->obj_info_pub->name); - meta.time_step = object_info->obj_pt->time_step; - meta.obj_id = object_info->obj_info_pub->meta_id; - meta.cont_id = object_info->cont->cont_info_pub->meta_id; - meta.data_type = data_type; - meta.ndim = object_info->obj_pt->obj_prop_pub->ndim; - - meta.dims[0] = object_info->obj_pt->obj_prop_pub->dims[0]; - expected_size = (size_t)meta.dims[0] * type_extent; - if (meta.ndim > 1) { - meta.dims[1] = object_info->obj_pt->obj_prop_pub->dims[1]; - expected_size *= (size_t)meta.dims[1]; - } - if (meta.ndim > 2) { - meta.dims[2] = object_info->obj_pt->obj_prop_pub->dims[2]; - expected_size *= (size_t)meta.dims[2]; - } - if (meta.ndim > 3) { - meta.dims[3] = object_info->obj_pt->obj_prop_pub->dims[3]; - expected_size *= (size_t)meta.dims[3]; - } - - meta.transform_state = transform_state; - meta.current_state.meta_index = transform->meta_index; - - if (transform_size != expected_size) { - meta.current_state.dtype = PDC_INT8; - meta.current_state.ndim = 1; - meta.current_state.dims[0] = transform_size; - meta.current_state.dims[1] = 0; - meta.current_state.dims[2] = 0; - meta.current_state.dims[3] = 0; - } - else { - meta.current_state.dtype = data_type; - meta.current_state.ndim = meta.ndim; - meta.current_state.dims[0] = meta.dims[0]; - meta.current_state.dims[1] = meta.dims[1]; - meta.current_state.dims[2] = meta.dims[2]; - meta.current_state.dims[3] = meta.dims[3]; - } - PDC_Client_update_metadata(&meta, &meta); - } -#endif - - FUNC_LEAVE_VOID; -} -*/ - -/* -static size_t - -get_transform_size(struct _pdc_transform_state *transform_state) -{ - size_t ret_value = 0; - size_t i, transform_size; - int type_size; - - FUNC_ENTER(NULL); - - type_size = PDC_get_var_type_size(transform_state->dtype); - transform_size = transform_state->dims[0] * type_size; - for (i = 1; i < transform_state->ndim; i++) - transform_size *= transform_state->dims[i]; - - ret_value = transform_size; - - FUNC_LEAVE(ret_value); -} - -static hg_return_t -maybe_run_transform(struct _pdc_obj_info *object_info, struct pdc_region_info *region_info, - pdc_access_t access_type, pdc_var_type_t data_type, int *readyState, int *transform_index, - void **transform_result, size_t *transform_size) -{ - pbool_t status = TRUE; - perr_t ret_value = SUCCEED; - size_t i, client_transform_size = 0, server_transform_size = 0; - pdc_var_type_t dest_type = PDC_UNKNOWN; - struct _pdc_region_transform_ftn_info **registry = NULL; - int k, type_size, registered_count = PDC_get_transforms(®istry); - - // FIXME: In theory, the transforms will be enabled ONLY - // when the identified readyState value is reached. - // For now we are relying on the ordering in which - // functions are registered. To fix this, after each - // transform, we should restart the scan loop to choose - // a "next" transform if there is one... - - FUNC_ENTER(NULL); - - if (access_type == PDC_WRITE) { - for (k = 0; k < registered_count; k++) { - if ((registry[k]->op_type == PDC_DATA_MAP) && (registry[k]->when == DATA_OUT) && - (registry[k]->readyState == *readyState)) { - size_t (*this_transform)(void *, pdc_var_type_t, int, uint64_t *, void **, pdc_var_type_t) = - registry[k]->ftnPtr; - dest_type = registry[k]->dest_type; - *transform_result = registry[k]->result; - client_transform_size = - this_transform(registry[k]->data, registry[k]->type, region_info->ndim, region_info->size, - transform_result, dest_type); - *readyState = registry[k]->nextState; - *transform_index = k; - } - - } - //Check next for SERVER (post-data-xfer) transforms - for (k = 0; k < registered_count; k++) { - if ((registry[k]->dest_region == region_info) && (registry[k]->op_type == PDC_DATA_MAP) && - (registry[k]->when == DATA_IN) && (registry[k]->readyState == *readyState)) { - if (client_transform_size == 0) { - // No previous transforms, so just use the current region data - *transform_result = registry[k]->data; - server_transform_size = region_info->size[0]; - for (i = 1; i < region_info->ndim; i++) - server_transform_size *= region_info->size[i]; - } - else - server_transform_size = region_info->size[0]; - *transform_index = k; - } - } - - type_size = PDC_get_var_type_size(registry[*transform_index]->type); - - //Client side transform only - if ((client_transform_size > 0) && (server_transform_size == 0)) { - *transform_size = client_transform_size; - ret_value = pdc_region_release_with_server_transform( - object_info, region_info, access_type, data_type, type_size, *readyState, NULL, - client_transform_size, *transform_result, &status); - } - //Client and Server side transforms - else if ((client_transform_size > 0) && (server_transform_size > 0)) { - *transform_size = server_transform_size; - ret_value = pdc_region_release_with_server_transform( - object_info, region_info, access_type, data_type, type_size, *readyState, - registry[*transform_index], client_transform_size, *transform_result, &status); - } - //Server side transform only - else if (server_transform_size > 0) { - *transform_size = server_transform_size; - ret_value = pdc_region_release_with_server_transform( - object_info, region_info, access_type, data_type, type_size, *readyState, - registry[*transform_index], server_transform_size, *transform_result, &status); - } + PGOTO_ERROR(FAIL, "PDC_Client_send_name_to_server(): Could not start HG_Forward()"); + + // Wait for response from server + hg_atomic_set32(&atomic_work_todo_g, 1); +#ifdef PDC_TIMING + start = MPI_Wtime(); +#endif + PDC_Client_check_response(&send_context_g); +#ifdef PDC_TIMING + end = MPI_Wtime(); + if (access_type == PDC_READ) { + pdc_timings.PDCreg_obtain_lock_read_rpc_wait += end - start; + pdc_timestamp_register(pdc_client_obtain_lock_read_timestamps, function_start, end); } - else if (access_type == PDC_READ) { - for (k = 0; k < registered_count; k++) { - // Check for SERVER (pre-data-xfer) transforms - if ((registry[k]->op_type == PDC_DATA_MAP) && (registry[k]->when == DATA_OUT) && - (registry[k]->readyState == *readyState)) - puts("Server READ transform identified"); - } - for (k = 0; k < registered_count; k++) { - //Check for CLIENT (post-data-xfer) transforms - if ((registry[k]->dest_region == region_info) && (registry[k]->op_type == PDC_DATA_MAP) && - (registry[k]->when == DATA_IN) && (registry[k]->readyState == *readyState)) { - - type_size = PDC_get_var_type_size(registry[k]->type); - *transform_result = registry[k]->data; - *transform_size = get_transform_size(&object_info->obj_pt->transform_prop); - ret_value = pdc_region_release_with_client_transform( - object_info, region_info, access_type, data_type, type_size, *readyState, registry[k], - transform_size, registry[k]->data, &status); - if (ret_value == SUCCEED) { - *readyState = registry[k]->nextState; - *transform_index = k; - } - } - } + else { + pdc_timings.PDCreg_obtain_lock_write_rpc_wait += end - start; + pdc_timestamp_register(pdc_client_obtain_lock_write_timestamps, function_start, end); + } +#endif + // Now the return value is stored in lookup_args.ret + if (lookup_args.ret == 1) { + *status = TRUE; + ret_value = SUCCEED; + } + else { + *status = FALSE; + ret_value = FAIL; } - fflush(stdout); +done: + HG_Destroy(region_lock_handle); + FUNC_LEAVE(ret_value); } -*/ perr_t PDC_Client_region_release(pdcid_t remote_obj_id, struct _pdc_obj_info *object_info, struct pdc_region_info *region_info, pdc_access_t access_type, pdc_var_type_t data_type, pbool_t *status) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; // int readyState = 0, currentState; hg_return_t hg_ret; @@ -4526,46 +3765,11 @@ PDC_Client_region_release(pdcid_t remote_obj_id, struct _pdc_obj_info *object_in // size_t type_extent; struct _pdc_client_lookup_args lookup_args; hg_handle_t region_release_handle = HG_HANDLE_NULL; - // void *transform_result = NULL; - // size_t transform_size = 0; - // struct _pdc_region_transform_ftn_info **registry = NULL; - // int transform_index; - // int k, registered_count; - // struct _pdc_region_analysis_ftn_info **analysis_registry; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; double function_start = start; #endif - // type_extent = object_info->obj_pt->type_extent; - /* - if (region_info->registered_op & PDC_TRANSFORM) { - transform_index = -1; - PDC_get_transforms(®istry); - // Get the current data_state of this object:: - readyState = currentState = object_info->obj_pt->data_state; - ret_value = maybe_run_transform(object_info, region_info, access_type, data_type, - ¤tState, &transform_index, &transform_result, &transform_size); - if ((ret_value == SUCCEED) && (readyState != currentState)) { - update_metadata(object_info, data_type, type_extent, currentState, - transform_size, registry[transform_index]); - PGOTO_DONE(ret_value); - } - } - // FIXME: What if the user has coupled a transform with an analysis function? - // How do we provide the transformed data into the analysis? - if (region_info->registered_op & PDC_ANALYSIS) { - registered_count = PDC_get_analysis_registry(&analysis_registry); - for (k=0; k < registered_count; k++) { - if (analysis_registry[k]->region_id[0] == region_info->local_id) { - ret_value = pdc_region_release_with_server_analysis(object_info, region_info, - access_type, data_type, type_extent, analysis_registry[k], status); - PGOTO_DONE(ret_value); - } - } - } - */ // Compute data server and metadata server ids. server_id = ((pdc_metadata_t *)object_info->metadata)->data_server_id; meta_server_id = PDC_get_server_by_obj_id(remote_obj_id, pdc_server_num_g); @@ -4588,7 +3792,7 @@ PDC_Client_region_release(pdcid_t remote_obj_id, struct _pdc_obj_info *object_in in.data_unit = PDC_get_var_type_size(data_type); PDC_region_info_t_to_transfer_unit(region_info, &(in.region), in.data_unit); if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, region_release_register_id_g, ®ion_release_handle); @@ -4633,7 +3837,6 @@ PDC_Client_region_release(pdcid_t remote_obj_id, struct _pdc_obj_info *object_in } done: - fflush(stdout); if (region_release_handle != HG_HANDLE_NULL) HG_Destroy(region_release_handle); @@ -4647,11 +3850,11 @@ PDC_Client_region_release(pdcid_t remote_obj_id, struct _pdc_obj_info *object_in static hg_return_t data_server_read_check_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_client_lookup_args *client_lookup_args; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; hg_handle_t handle = callback_info->info.forward.handle; @@ -4661,19 +3864,18 @@ data_server_read_check_rpc_cb(const struct hg_cb_info *callback_info) if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; client_lookup_args->ret_string = " "; - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: error with HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; if (output.shm_addr != NULL) { - client_lookup_args->ret_string = (char *)malloc(strlen(output.shm_addr) + 1); + client_lookup_args->ret_string = (char *)PDC_malloc(strlen(output.shm_addr) + 1); strcpy(client_lookup_args->ret_string, output.shm_addr); } else client_lookup_args->ret_string = NULL; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -4684,6 +3886,7 @@ data_server_read_check_rpc_cb(const struct hg_cb_info *callback_info) hg_return_t PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; @@ -4700,8 +3903,6 @@ PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info) struct timeval pdc_timer_end; #endif - FUNC_ENTER(NULL); - read_info = (client_read_info_t *)callback_info->arg; shm_addr = read_info->shm_addr; @@ -4716,9 +3917,8 @@ PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info) } if (target_region == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: request region not found!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Request region not found"); - // Calculate data_size, TODO: this should be done in other places? data_size = 1; for (i = 0; i < target_region->ndim; i++) { data_size *= target_region->size[i]; @@ -4727,13 +3927,12 @@ PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info) /* open the shared memory segment as if it was a file */ shm_fd = shm_open(shm_addr, O_RDONLY, 0666); if (shm_fd == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: - Shared memory open failed [%s]!", pdc_client_mpi_rank_g, - shm_addr); + PGOTO_ERROR(FAIL, "Shared memory open failed [%s]", shm_addr); /* map the shared memory segment to the address space of the process */ shm_base = mmap(0, data_size, PROT_READ, MAP_SHARED, shm_fd, 0); if (shm_base == MAP_FAILED) { - LOG_ERROR("==PDC_CLIENT: Map failed\n"); + LOG_ERROR("Map failed\n"); ret_value = FAIL; goto close; } @@ -4758,14 +3957,13 @@ PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info) close: /* close the shared memory segment as if it was a file */ if (close(shm_fd) == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Close failed!"); + PGOTO_ERROR(FAIL, "Close failed"); /* remove the shared memory segment from the file system */ if (shm_unlink(shm_addr) == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Error removing %s", shm_addr); + PGOTO_ERROR(FAIL, "Error removing %s", shm_addr); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); FUNC_LEAVE(ret_value); @@ -4776,6 +3974,8 @@ perr_t PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadata_t *meta, struct pdc_region_info *region, int *status, void *buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; struct _pdc_client_lookup_args lookup_args; @@ -4791,14 +3991,11 @@ PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadat struct timeval pdc_timer_end; #endif - FUNC_ENTER(NULL); - if (meta == NULL || region == NULL || status == NULL || buf == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: NULL input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "NULL input"); if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid server id %d/%d", pdc_client_mpi_rank_g, server_id, - pdc_server_num_g); + PGOTO_ERROR(FAIL, "Invalid server id %d/%d", server_id, pdc_server_num_g); // Dummy value fill in.client_id = client_id; @@ -4810,14 +4007,14 @@ PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadat } if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, data_server_read_check_register_id_g, &data_server_read_check_handle); hg_ret = HG_Forward(data_server_read_check_handle, data_server_read_check_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "== Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward()"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -4827,8 +4024,7 @@ PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadat if (lookup_args.ret != 1 && lookup_args.ret != 111) { ret_value = SUCCEED; if (is_client_debug_g) - LOG_DEBUG("==PDC_CLIENT[%d]: IO request has not been fulfilled by server\n", - pdc_client_mpi_rank_g); + LOG_DEBUG("IO request has not been fulfilled by server\n"); HG_Destroy(data_server_read_check_handle); if (lookup_args.ret == -1) ret_value = FAIL; @@ -4840,15 +4036,12 @@ PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadat /* open the shared memory segment as if it was a file */ shm_fd = shm_open(shm_addr, O_RDONLY, 0666); if (shm_fd == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Shared memory open failed [%s]!", pdc_client_mpi_rank_g, - shm_addr); + PGOTO_ERROR(FAIL, "Shared memory open failed [%s]", shm_addr); /* map the shared memory segment to the address space of the process */ shm_base = mmap(0, read_size, PROT_READ, MAP_SHARED, shm_fd, 0); - if (shm_base == MAP_FAILED) { - // PGOTO_ERROR(FAIL, "==PDC_CLIENT: Map failed: %s", strerror(errno)); - } - // close and unlink? + if (shm_base == MAP_FAILED) + PGOTO_ERROR(FAIL, "Map failed: %s", strerror(errno)); #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_start, 0); @@ -4863,34 +4056,30 @@ PDC_Client_data_server_read_check(int server_id, uint32_t client_id, pdc_metadat #endif /* remove the mapped shared memory segment from the address space of the process */ - if (munmap(shm_base, read_size) == -1) { - // PGOTO_ERROR(FAIL, "==PDC_CLIENT: Unmap failed: %s", strerror(errno)); - } + if (munmap(shm_base, read_size) == -1) + PGOTO_ERROR(FAIL, "Unmap failed: %s", strerror(errno)); HG_Destroy(data_server_read_check_handle); - } // end of check io + } - // close: /* close the shared memory segment as if it was a file */ if (close(shm_fd) == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Close failed!"); + PGOTO_ERROR(FAIL, "Close failed"); - // TODO: need to make sure server has cached it to BB - free(lookup_args.ret_string); + lookup_args.ret_string = (char *)PDC_free(lookup_args.ret_string); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t data_server_read_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_client_lookup_args *client_lookup_args; data_server_read_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; hg_handle_t handle = callback_info->info.forward.handle; @@ -4898,13 +4087,11 @@ data_server_read_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: data_server_read_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "data_server_read_rpc_cb error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -4914,6 +4101,8 @@ data_server_read_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_data_server_read(struct pdc_request *request) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; struct _pdc_client_lookup_args lookup_args; @@ -4923,8 +4112,6 @@ PDC_Client_data_server_read(struct pdc_request *request) pdc_metadata_t * meta; struct pdc_region_info * region; - FUNC_ENTER(NULL); - server_id = request->server_id; n_client = request->n_client; n_update = request->n_update; @@ -4932,11 +4119,10 @@ PDC_Client_data_server_read(struct pdc_request *request) region = request->region; if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "PDC_CLIENT[%d]: invalid server id %d/%d", pdc_client_mpi_rank_g, server_id, - pdc_server_num_g); + PGOTO_ERROR(FAIL, "Invalid server ID %d/%d", server_id, pdc_server_num_g); if (meta == NULL || region == NULL) - PGOTO_ERROR(FAIL, "PDC_CLIENT[%d]: invalid metadata or region", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid metadata or region"); // TODO TEMPWORK char *tmp_env = getenv("PDC_CACHE_PERCENTAGE"); @@ -4957,7 +4143,7 @@ PDC_Client_data_server_read(struct pdc_request *request) PDC_region_info_t_to_transfer(region, &in.region); if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, data_server_read_register_id_g, &data_server_read_handle); @@ -4971,10 +4157,9 @@ PDC_Client_data_server_read(struct pdc_request *request) PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - PGOTO_ERROR(FAIL, "PDC_CLIENT: ERROR from server"); + PGOTO_ERROR(FAIL, "Error from server"); done: - fflush(stdout); HG_Destroy(data_server_read_handle); FUNC_LEAVE(ret_value); @@ -4986,43 +4171,36 @@ PDC_Client_data_server_read(struct pdc_request *request) perr_t PDC_Client_close_shm(struct pdc_request *req) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - if (req == NULL || req->shm_fd == 0 || req->shm_base == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); /* remove the mapped memory segment from the address space of the process */ if (munmap(req->shm_base, req->shm_size) == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Unmap failed", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Unmap failed"); /* close the shared memory segment as if it was a file */ if (close(req->shm_fd) == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: close shm failed", pdc_client_mpi_rank_g); - - /* remove the shared memory segment from the file system */ - // TODO: fix error - /* if (shm_unlink(req->shm_addr) == -1) */ - /* PGOTO_ERROR(FAIL, "==PDC_CLIENT: Error removing %s", req->shm_addr); */ + PGOTO_ERROR(FAIL, "close shm failed"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t data_server_write_check_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_client_lookup_args *client_lookup_args; hg_handle_t handle; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -5031,13 +4209,11 @@ data_server_write_check_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: data_server_write_check_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "data_server_write_check_rpc_cb error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -5047,6 +4223,8 @@ data_server_write_check_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_data_server_write_check(struct pdc_request *request, int *status) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; struct _pdc_client_lookup_args lookup_args; @@ -5058,15 +4236,12 @@ PDC_Client_data_server_write_check(struct pdc_request *request, int *status) uint64_t write_size = 1; uint32_t i; - FUNC_ENTER(NULL); - server_id = request->server_id; meta = request->metadata; region = request->region; if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "PDC_CLIENT[%d]: invalid server id %d/%d", pdc_client_mpi_rank_g, server_id, - pdc_server_num_g); + PGOTO_ERROR(FAIL, "Invalid server id %d/%d", server_id, pdc_server_num_g); in.client_id = pdc_client_mpi_rank_g; PDC_metadata_t_to_transfer_t(meta, &in.meta); @@ -5077,7 +4252,7 @@ PDC_Client_data_server_write_check(struct pdc_request *request, int *status) } if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, data_server_write_check_register_id_g, &data_server_write_check_handle); @@ -5095,7 +4270,7 @@ PDC_Client_data_server_write_check(struct pdc_request *request, int *status) ret_value = SUCCEED; if (is_client_debug_g == 1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: IO request not done by server yet", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "IO request not done by server yet"); if (lookup_args.ret == -1) PGOTO_DONE(FAIL); @@ -5106,7 +4281,6 @@ PDC_Client_data_server_write_check(struct pdc_request *request, int *status) } done: - fflush(stdout); HG_Destroy(data_server_write_check_handle); FUNC_LEAVE(ret_value); @@ -5115,13 +4289,13 @@ PDC_Client_data_server_write_check(struct pdc_request *request, int *status) static hg_return_t data_server_write_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct _pdc_client_lookup_args *client_lookup_args; hg_handle_t handle; data_server_write_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_client_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; @@ -5129,14 +4303,12 @@ data_server_write_rpc_cb(const struct hg_cb_info *callback_info) ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: data_server_write_rpc_cb error with HG_Get_output", - pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "data_server_write_rpc_cb error with HG_Get_output"); } client_lookup_args->ret = output.ret; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -5146,6 +4318,8 @@ data_server_write_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_data_server_write(struct pdc_request *request) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; uint32_t i; @@ -5165,8 +4339,6 @@ PDC_Client_data_server_write(struct pdc_request *request) struct timeval pdc_timer_end; #endif - FUNC_ENTER(NULL); - server_id = request->server_id; n_client = request->n_client; @@ -5176,20 +4348,19 @@ PDC_Client_data_server_write(struct pdc_request *request) buf = request->buf; if (NULL == meta || NULL == region || NULL == buf) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: input NULL", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Input NULL"); if (server_id < 0 || server_id >= pdc_server_num_g) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid server id %d/%d", pdc_client_mpi_rank_g, server_id, - pdc_server_num_g); + PGOTO_ERROR(FAIL, "Invalid server id %d/%d", server_id, pdc_server_num_g); if (region->ndim > 4) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid dim %lu", pdc_client_mpi_rank_g, region->ndim); + PGOTO_ERROR(FAIL, "Invalid dim %lu", region->ndim); // Calculate region size for (i = 0; i < region->ndim; i++) { region_size *= region->size[i]; if (region_size == 0) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: size[%d]=0", pdc_client_mpi_rank_g, i); + PGOTO_ERROR(FAIL, "size[%d]=0", i); } // Create shared memory @@ -5201,18 +4372,18 @@ PDC_Client_data_server_write(struct pdc_request *request) /* create the shared memory segment as if it was a file */ request->shm_fd = shm_open(request->shm_addr, O_CREAT | O_RDWR, 0666); if (request->shm_fd == -1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Shared memory creation with shm_open failed"); + PGOTO_ERROR(FAIL, "Shared memory creation with shm_open failed"); /* configure the size of the shared memory segment */ if (ftruncate(request->shm_fd, region_size) != 0) { - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Memory truncate failed"); + PGOTO_ERROR(FAIL, "Memory truncate failed"); } request->shm_size = region_size; /* map the shared memory segment to the address space of the process */ request->shm_base = mmap(0, region_size, PROT_READ | PROT_WRITE, MAP_SHARED, request->shm_fd, 0); if (request->shm_base == MAP_FAILED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: Shared memory mmap failed, region size = %" PRIu64 "", region_size); + PGOTO_ERROR(FAIL, "Shared memory mmap failed, region size = %" PRIu64 "", region_size); // close and shm_unlink? #ifdef ENABLE_TIMING @@ -5242,17 +4413,17 @@ PDC_Client_data_server_write(struct pdc_request *request) PDC_region_info_t_to_transfer(region, &in.region); if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, data_server_write_register_id_g, &data_server_write_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==Could not HG_Create()"); + PGOTO_ERROR(FAIL, "Could not HG_Create()"); hg_ret = HG_Forward(data_server_write_handle, data_server_write_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) { HG_Destroy(data_server_write_handle); - PGOTO_ERROR(FAIL, "==Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward()"); } // Wait for response from server @@ -5264,46 +4435,46 @@ PDC_Client_data_server_write(struct pdc_request *request) server_ret = lookup_args.ret; if (server_ret != 1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR from server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error from server"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_test(struct pdc_request *request, int *completed) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (request == NULL || completed == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: request and/or completed is NULL!"); + PGOTO_ERROR(FAIL, "request and/or completed is NULL"); if (request->access_type == PDC_READ) { ret_value = PDC_Client_data_server_read_check(request->server_id, pdc_client_mpi_rank_g, request->metadata, request->region, completed, request->buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC Client read check ERROR!"); + PGOTO_ERROR(FAIL, "Read check error"); } else if (request->access_type == PDC_WRITE) { ret_value = PDC_Client_data_server_write_check(request, completed); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC Client write check ERROR!"); + PGOTO_ERROR(FAIL, "Write check error"); } else - PGOTO_ERROR(FAIL, "==PDC_CLIENT: error with request access type!"); + PGOTO_ERROR(FAIL, "Error with request access type"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_wait(struct pdc_request *request, unsigned long max_wait_ms, unsigned long check_interval_ms) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int completed = 0; struct timeval start_time; @@ -5311,40 +4482,36 @@ PDC_Client_wait(struct pdc_request *request, unsigned long max_wait_ms, unsigned unsigned long elapsed_ms; int cnt = 0; - FUNC_ENTER(NULL); - gettimeofday(&start_time, 0); // TODO: Calculate region size and estimate the wait time // Write is 4-5x faster while (completed == 0 && cnt < PDC_MAX_TRIAL_NUM) { ret_value = PDC_Client_test(request, &completed); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: PDC_Client_test ERROR!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "PDC_Client_test error"); gettimeofday(&end_time, 0); elapsed_ms = ((end_time.tv_sec - start_time.tv_sec) * 1000000LL + end_time.tv_usec - start_time.tv_usec) / 1000; if (elapsed_ms > max_wait_ms) { - LOG_WARNING("==PDC_CLIENT[%d]: exceeded max IO request waiting time...\n", pdc_client_mpi_rank_g); + LOG_WARNING("Exceeded max IO request waiting time...\n"); break; } PDC_msleep(check_interval_ms); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_wait(struct pdc_request *request, unsigned long max_wait_ms, unsigned long check_interval_ms) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDC_Client_wait(request, max_wait_ms, check_interval_ms); + perr_t ret_value = SUCCEED; + ret_value = PDC_Client_wait(request, max_wait_ms, check_interval_ms); FUNC_LEAVE(ret_value); } @@ -5353,10 +4520,10 @@ perr_t PDC_Client_iwrite(pdc_metadata_t *meta, struct pdc_region_info *region, struct pdc_request *request, void *buf) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + request->server_id = (pdc_client_mpi_rank_g / pdc_nclient_per_server_g) % pdc_server_num_g; if (request->n_client == 0) request->n_client = pdc_nclient_per_server_g; // Set by env var PDC_NCLIENT_PER_SERVER, default 1 @@ -5375,11 +4542,10 @@ PDC_Client_iwrite(pdc_metadata_t *meta, struct pdc_region_info *region, struct p perr_t PDC_iwrite(void *meta, struct pdc_region_info *region, struct pdc_request *request, void *buf) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDC_Client_iwrite((pdc_metadata_t *)meta, region, request, buf); + perr_t ret_value = SUCCEED; + ret_value = PDC_Client_iwrite((pdc_metadata_t *)meta, region, request, buf); FUNC_LEAVE(ret_value); } @@ -5387,33 +4553,34 @@ PDC_iwrite(void *meta, struct pdc_region_info *region, struct pdc_request *reque hg_return_t PDC_Client_work_done_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { + FUNC_ENTER(NULL); + // server_lookup_client_out_t *validate = callback_info->arg; hg_atomic_decr32(&atomic_work_todo_g); - return HG_SUCCESS; + FUNC_LEAVE(HG_SUCCESS); } // PDC_Client_write is done using PDC_Client_iwrite and PDC_Client_wait perr_t PDC_Client_write(pdc_metadata_t *meta, struct pdc_region_info *region, void *buf) { + FUNC_ENTER(NULL); + struct pdc_request request; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - request.n_update = 1; request.n_client = 1; ret_value = PDC_Client_iwrite(meta, region, &request, buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_write - PDC_Client_iwrite error"); + PGOTO_ERROR(FAIL, "PDC_Client_write - PDC_Client_iwrite error"); ret_value = PDC_Client_wait(&request, 60000, 500); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_write - PDC_Client_wait error"); + PGOTO_ERROR(FAIL, "PDC_Client_write - PDC_Client_wait error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5421,6 +4588,8 @@ PDC_Client_write(pdc_metadata_t *meta, struct pdc_region_info *region, void *buf perr_t PDC_Client_write_id(pdcid_t local_obj_id, struct pdc_region_info *region, void *buf) { + FUNC_ENTER(NULL); + struct pdc_request request; struct _pdc_id_info *info; @@ -5428,41 +4597,37 @@ PDC_Client_write_id(pdcid_t local_obj_id, struct pdc_region_info *region, void * pdc_metadata_t * meta; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - info = PDC_find_id(local_obj_id); if (info == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: obj_id %" PRIu64 " invalid!", pdc_client_mpi_rank_g, - local_obj_id); + PGOTO_ERROR(FAIL, "obj_id %" PRIu64 " invalid", local_obj_id); object = (struct _pdc_obj_info *)(info->obj_ptr); meta = object->metadata; if (meta == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: metadata is NULL!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "metadata is NULL"); request.n_update = 1; request.n_client = 1; ret_value = PDC_Client_iwrite(meta, region, &request, buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_write - PDC_Client_iwrite error"); + PGOTO_ERROR(FAIL, "PDC_Client_write - PDC_Client_iwrite error"); ret_value = PDC_Client_wait(&request, 60000, 500); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_write - PDC_Client_wait error"); + PGOTO_ERROR(FAIL, "PDC_Client_write - PDC_Client_wait error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_iread(pdc_metadata_t *meta, struct pdc_region_info *region, struct pdc_request *request, void *buf) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + request->server_id = (pdc_client_mpi_rank_g / pdc_nclient_per_server_g) % pdc_server_num_g; if (request->n_client == 0) request->n_client = pdc_nclient_per_server_g; // Set by env var PDC_NCLIENT_PER_SERVER, default 1 @@ -5475,76 +4640,70 @@ PDC_Client_iread(pdc_metadata_t *meta, struct pdc_region_info *region, struct pd ret_value = PDC_Client_data_server_read(request); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT: PDC_Client_iread- PDC_Client_data_server_read error"); + PGOTO_ERROR(FAIL, "PDC_Client_iread- PDC_Client_data_server_read error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_read(pdc_metadata_t *meta, struct pdc_region_info *region, void *buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct pdc_request request; - FUNC_ENTER(NULL); - request.n_update = 1; ret_value = PDC_Client_iread(meta, region, &request, buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: PDC_Client_iread error", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "PDC_Client_iread error"); PDC_msleep(500); ret_value = PDC_Client_wait(&request, 60000, 500); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: PDC_Client_wait error", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "PDC_Client_wait error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_write_wait_notify(pdc_metadata_t *meta, struct pdc_region_info *region, void *buf) { - perr_t ret_value = SUCCEED; - struct pdc_request *request = (struct pdc_request *)malloc(sizeof(struct pdc_request)); - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + struct pdc_request *request = (struct pdc_request *)PDC_malloc(sizeof(struct pdc_request)); + ret_value = PDC_Client_iwrite(meta, region, request, buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Failed to send write request to server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Failed to send write request to server"); DL_PREPEND(pdc_io_request_list_g, request); - LOG_INFO("==PDC_CLIENT[%d]: Finished sending write request to server, waiting for notification\n", - pdc_client_mpi_rank_g); - fflush(stdout); + LOG_INFO("Finished sending write request to server, waiting for notification\n"); hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); - LOG_INFO("==PDC_CLIENT[%d]: received write finish notification\n", pdc_client_mpi_rank_g); - fflush(stdout); + LOG_INFO("Received write finish notification\n"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_read_wait_notify(pdc_metadata_t *meta, struct pdc_region_info *region, void *buf) { - perr_t ret_value = SUCCEED; - struct pdc_request *request = (struct pdc_request *)malloc(sizeof(struct pdc_request)); - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + struct pdc_request *request = (struct pdc_request *)PDC_malloc(sizeof(struct pdc_request)); + ret_value = PDC_Client_iread(meta, region, request, buf); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Faile to send read request to server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Failed to send read request to server"); DL_PREPEND(pdc_io_request_list_g, request); @@ -5552,20 +4711,19 @@ PDC_Client_read_wait_notify(pdc_metadata_t *meta, struct pdc_region_info *region PDC_Client_check_response(&send_context_g); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t PDC_Client_add_del_objects_to_container_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle = callback_info->info.forward.handle; pdc_int_ret_t bulk_rpc_ret; update_region_storage_meta_bulk_args_t *cb_args; - FUNC_ENTER(NULL); - cb_args = (update_region_storage_meta_bulk_args_t *)callback_info->arg; // Sent the bulk handle with rpc and get a response ret_value = HG_Get_output(handle, &bulk_rpc_ret); @@ -5584,7 +4742,6 @@ PDC_Client_add_del_objects_to_container_cb(const struct hg_cb_info *callback_inf HG_Destroy(cb_args->rpc_handle); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); FUNC_LEAVE(ret_value); @@ -5594,6 +4751,8 @@ PDC_Client_add_del_objects_to_container_cb(const struct hg_cb_info *callback_inf perr_t PDC_Client_add_del_objects_to_container(int nobj, uint64_t *obj_ids, uint64_t cont_meta_id, int op) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t rpc_handle; @@ -5604,15 +4763,13 @@ PDC_Client_add_del_objects_to_container(int nobj, uint64_t *obj_ids, uint64_t co // Reuse the existing args structure update_region_storage_meta_bulk_args_t cb_args; - FUNC_ENTER(NULL); - server_id = PDC_get_server_by_obj_id(cont_meta_id, pdc_server_num_g); // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); // Send the bulk handle to the target with RPC hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, cont_add_del_objs_rpc_register_id_g, @@ -5646,7 +4803,6 @@ PDC_Client_add_del_objects_to_container(int nobj, uint64_t *obj_ids, uint64_t co PDC_Client_check_response(&send_context_g); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5654,15 +4810,15 @@ PDC_Client_add_del_objects_to_container(int nobj, uint64_t *obj_ids, uint64_t co perr_t PDC_Client_add_objects_to_container(int nobj, pdcid_t *local_obj_ids, pdcid_t local_cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; uint64_t * obj_ids; uint64_t cont_meta_id; struct _pdc_id_info *id_info = NULL; - FUNC_ENTER(NULL); - - obj_ids = (uint64_t *)malloc(sizeof(uint64_t) * nobj); + obj_ids = (uint64_t *)PDC_malloc(sizeof(uint64_t) * nobj); for (i = 0; i < nobj; i++) { id_info = PDC_find_id(local_obj_ids[i]); obj_ids[i] = ((struct _pdc_obj_info *)(id_info->obj_ptr))->obj_info_pub->meta_id; @@ -5680,15 +4836,15 @@ PDC_Client_add_objects_to_container(int nobj, pdcid_t *local_obj_ids, pdcid_t lo perr_t PDC_Client_del_objects_to_container(int nobj, pdcid_t *local_obj_ids, pdcid_t local_cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; uint64_t * obj_ids; uint64_t cont_meta_id; struct _pdc_id_info *id_info = NULL; - FUNC_ENTER(NULL); - - obj_ids = (uint64_t *)malloc(sizeof(uint64_t) * nobj); + obj_ids = (uint64_t *)PDC_malloc(sizeof(uint64_t) * nobj); for (i = 0; i < nobj; i++) { id_info = PDC_find_id(local_obj_ids[i]); obj_ids[i] = ((struct _pdc_obj_info *)(id_info->obj_ptr))->obj_info_pub->meta_id; @@ -5706,6 +4862,8 @@ PDC_Client_del_objects_to_container(int nobj, pdcid_t *local_obj_ids, pdcid_t lo perr_t PDC_Client_add_tags_to_container(pdcid_t cont_id, char *tags) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t rpc_handle; @@ -5715,11 +4873,9 @@ PDC_Client_add_tags_to_container(pdcid_t cont_id, char *tags) uint64_t cont_meta_id; cont_add_tags_rpc_in_t add_tag_rpc_in; - FUNC_ENTER(NULL); - info = PDC_find_id(cont_id); if (info == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: cont_id %" PRIu64 " invalid!", pdc_client_mpi_rank_g, cont_id); + PGOTO_ERROR(FAIL, "cont_id %" PRIu64 " invalid", cont_id); object = (struct _pdc_cont_info *)(info->obj_ptr); cont_meta_id = object->cont_info_pub->meta_id; @@ -5730,7 +4886,7 @@ PDC_Client_add_tags_to_container(pdcid_t cont_id, char *tags) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); // Send the bulk handle to the target with RPC hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, cont_add_tags_rpc_register_id_g, @@ -5753,7 +4909,6 @@ PDC_Client_add_tags_to_container(pdcid_t cont_id, char *tags) ret_value = SUCCEED; done: - fflush(stdout); HG_Destroy(rpc_handle); FUNC_LEAVE(ret_value); @@ -5762,24 +4917,23 @@ PDC_Client_add_tags_to_container(pdcid_t cont_id, char *tags) static hg_return_t container_query_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct _pdc_container_query_args *client_lookup_args; hg_handle_t handle; container_query_out_t output; - FUNC_ENTER(NULL); - client_lookup_args = (struct _pdc_container_query_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: error with HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); client_lookup_args->cont_id = output.cont_id; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -5790,6 +4944,8 @@ container_query_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint32_t hash_name_value, server_id; @@ -5797,8 +4953,6 @@ PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) struct _pdc_container_query_args lookup_args; hg_handle_t container_query_handle; - FUNC_ENTER(NULL); - // Compute server id hash_name_value = PDC_get_hash_by_name(cont_name); server_id = hash_name_value % pdc_server_num_g; @@ -5807,7 +4961,7 @@ PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, container_query_register_id_g, &container_query_handle); @@ -5819,10 +4973,7 @@ PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) hg_ret = HG_Forward(container_query_handle, container_query_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - - PGOTO_ERROR(FAIL, - "==PDC_CLIENT[%d] - PDC_Client_query_container_with_name(): Could not start HG_Forward()", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not start HG_Forward()"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); @@ -5831,7 +4982,6 @@ PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) *cont_meta_id = lookup_args.cont_id; done: - fflush(stdout); HG_Destroy(container_query_handle); FUNC_LEAVE(ret_value); @@ -5840,39 +4990,36 @@ PDC_Client_query_container_name(const char *cont_name, uint64_t *cont_meta_id) perr_t PDC_Client_query_container_name_col(const char *cont_name, uint64_t *cont_meta_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + #ifdef ENABLE_MPI if (pdc_client_mpi_rank_g == 0) { ret_value = PDC_Client_query_container_name(cont_name, cont_meta_id); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDC_Client_query_container_name", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_query_container_name"); } MPI_Bcast(cont_meta_id, 1, MPI_LONG_LONG, 0, PDC_CLIENT_COMM_WORLD_g); #else - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Calling MPI collective operation without enabling MPI!", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Calling MPI collective operation without enabling MPI"); #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t PDC_Client_query_read_obj_name_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle = callback_info->info.forward.handle; pdc_int_ret_t bulk_rpc_ret; update_region_storage_meta_bulk_args_t *cb_args; - FUNC_ENTER(NULL); - cb_args = (update_region_storage_meta_bulk_args_t *)callback_info->arg; // Sent the bulk handle with rpc and get a response @@ -5893,7 +5040,6 @@ PDC_Client_query_read_obj_name_cb(const struct hg_cb_info *callback_info) HG_Destroy(cb_args->rpc_handle); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); FUNC_LEAVE(ret_value); @@ -5902,56 +5048,53 @@ PDC_Client_query_read_obj_name_cb(const struct hg_cb_info *callback_info) perr_t PDC_add_request_to_list(struct pdc_request **list_head, struct pdc_request *request) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (list_head == NULL || request == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); request->seq_id = pdc_io_request_seq_id++; DL_PREPEND(*list_head, request); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_del_request_from_list(struct pdc_request **list_head, struct pdc_request *request) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (list_head == NULL || request == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); request->seq_id = pdc_io_request_seq_id++; DL_DELETE(*list_head, request); done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_request * PDC_find_request_from_list_by_seq_id(struct pdc_request **list_head, int seq_id) { + FUNC_ENTER(NULL); + struct pdc_request *ret_value = NULL; struct pdc_request *elt; - FUNC_ENTER(NULL); - if (list_head == NULL || seq_id < PDC_SEQ_ID_INIT_VALUE || seq_id > 99999) - PGOTO_ERROR(NULL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(NULL, "Invalid input"); DL_FOREACH(*list_head, elt) if (elt->seq_id == seq_id) ret_value = elt; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5959,6 +5102,7 @@ PDC_find_request_from_list_by_seq_id(struct pdc_request **list_head, int seq_id) perr_t PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_buf, uint64_t *out_buf_sizes) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; @@ -5972,11 +5116,9 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu update_region_storage_meta_bulk_args_t cb_args; struct pdc_request * request; - FUNC_ENTER(NULL); - if (nobj == 0 || obj_names == NULL || out_buf == NULL || out_buf_sizes == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); server_id = PDC_get_local_server_id(pdc_client_mpi_rank_g, pdc_nclient_per_server_g, pdc_server_num_g); @@ -5984,7 +5126,7 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); // Send the bulk handle to the target with RPC hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, query_read_obj_name_register_id_g, @@ -5993,7 +5135,7 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu PGOTO_ERROR(FAIL, "Could not create handle"); total_size = 0; - buf_sizes = (uint64_t *)calloc(sizeof(uint64_t), nobj); + buf_sizes = (uint64_t *)PDC_calloc(sizeof(uint64_t), nobj); for (i = 0; i < nobj; i++) { buf_sizes[i] = strlen(obj_names[i]) + 1; total_size += buf_sizes[i]; @@ -6005,7 +5147,7 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu if (hg_ret != HG_SUCCESS) PGOTO_ERROR(FAIL, "Could not create bulk data handle"); - request = (struct pdc_request *)calloc(1, sizeof(struct pdc_request)); + request = (struct pdc_request *)PDC_calloc(1, sizeof(struct pdc_request)); request->server_id = server_id; request->access_type = PDC_READ; request->n_buf_arr = nobj; @@ -6037,7 +5179,6 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu PDC_Client_check_response(&send_context_g); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -6046,6 +5187,8 @@ PDC_Client_query_name_read_entire_obj(int nobj, char **obj_names, void ***out_bu perr_t PDC_Client_complete_read_request(int nbuf, struct pdc_request *req) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; #ifdef ENABLE_TIMING @@ -6055,23 +5198,22 @@ PDC_Client_complete_read_request(int nbuf, struct pdc_request *req) FUNC_ENTER(NULL); - *req->buf_arr = (void **)calloc(nbuf, sizeof(void *)); - req->shm_fd_arr = (int *)calloc(nbuf, sizeof(int)); - req->shm_base_arr = (char **)calloc(nbuf, sizeof(char *)); + *req->buf_arr = (void **)PDC_calloc(nbuf, sizeof(void *)); + req->shm_fd_arr = (int *)PDC_calloc(nbuf, sizeof(int)); + req->shm_base_arr = (char **)PDC_calloc(nbuf, sizeof(char *)); for (i = 0; i < nbuf; i++) { /* open the shared memory segment as if it was a file */ req->shm_fd_arr[i] = shm_open(req->shm_addr_arr[i], O_RDONLY, 0666); if (req->shm_fd_arr[i] == -1) { - LOG_ERROR("==PDC_CLIENT[%d]: Shared memory open failed [%s]!\n", pdc_client_mpi_rank_g, - req->shm_addr_arr[i]); + LOG_ERROR("Shared memory open failed [%s]\n", req->shm_addr_arr[i]); continue; } /* map the shared memory segment to the address space of the process */ req->shm_base_arr[i] = mmap(0, (req->shm_size_arr)[i], PROT_READ, MAP_SHARED, req->shm_fd_arr[i], 0); if (req->shm_base_arr[i] == MAP_FAILED) { - LOG_ERROR("==PDC_CLIENT: Map failed\n"); + LOG_ERROR("Map failed\n"); continue; } @@ -6080,7 +5222,7 @@ PDC_Client_complete_read_request(int nbuf, struct pdc_request *req) #endif // Copy data - (*req->buf_arr)[i] = (void *)malloc((req->shm_size_arr)[i]); + (*req->buf_arr)[i] = (void *)PDC_malloc((req->shm_size_arr)[i]); memcpy((*req->buf_arr)[i], req->shm_base_arr[i], (req->shm_size_arr)[i]); #ifdef ENABLE_TIMING @@ -6089,42 +5231,42 @@ PDC_Client_complete_read_request(int nbuf, struct pdc_request *req) #endif /* remove the mapped shared memory segment from the address space of the process */ + errno = 0; if (munmap(req->shm_base_arr[i], (req->shm_size_arr)[i]) == -1) { + LOG_ERROR("Unmap failed: %s\n", strerror(errno)); + continue; } - // PGOTO_ERROR(FAIL, "==PDC_CLIENT: Unmap failed: %s", strerror(errno)); /* close the shared memory segment as if it was a file */ if (close(req->shm_fd_arr[i]) == -1) { - LOG_ERROR("==PDC_CLIENT: Close failed!\n"); + LOG_ERROR("Close failed\n"); continue; } /* remove the shared memory segment from the file system */ if (shm_unlink(req->shm_addr_arr[i]) == -1) { - LOG_ERROR("==PDC_CLIENT: Error removing %s\n", req->shm_addr_arr[i]); + LOG_ERROR("Error removing %s\n", req->shm_addr_arr[i]); continue; } } - // done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_query_read_complete(char *shm_addrs, int size, int n_shm, int seq_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i, cnt; struct pdc_request *request; - FUNC_ENTER(NULL); - request = PDC_find_request_from_list_by_seq_id(&pdc_io_request_list_g, seq_id); if (request == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: cannot find previous request", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Cannot find previous request"); - request->shm_addr_arr = (char **)calloc(n_shm, sizeof(char *)); + request->shm_addr_arr = (char **)PDC_calloc(n_shm, sizeof(char *)); cnt = 0; for (i = 0; i < size - 1; i++) { @@ -6143,7 +5285,6 @@ PDC_Client_query_read_complete(char *shm_addrs, int size, int n_shm, int seq_id) PDC_del_request_from_list(&pdc_io_request_list_g, request); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); FUNC_LEAVE(ret_value); @@ -6153,36 +5294,35 @@ PDC_Client_query_read_complete(char *shm_addrs, int size, int n_shm, int seq_id) perr_t PDC_Client_server_checkpoint(uint32_t server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; pdc_int_send_t in; struct _pdc_client_lookup_args lookup_args; hg_handle_t rpc_handle; - FUNC_ENTER(NULL); - // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, server_checkpoint_rpc_register_id_g, &rpc_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Could not create handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not create handle"); in.origin = pdc_client_mpi_rank_g; hg_ret = HG_Forward(rpc_handle, pdc_client_check_int_ret_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Could not start forward to server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not start forward to server"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); done: - fflush(stdout); HG_Destroy(rpc_handle); FUNC_LEAVE(ret_value); @@ -6191,13 +5331,13 @@ PDC_Client_server_checkpoint(uint32_t server_id) perr_t PDC_Client_all_server_checkpoint() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; - FUNC_ENTER(NULL); - if (pdc_server_num_g == 0) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: server number not initialized!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Server number not initialized"); // only let client rank 0 send all requests if (pdc_client_mpi_rank_g != 0) @@ -6207,62 +5347,30 @@ PDC_Client_all_server_checkpoint() ret_value = PDC_Client_server_checkpoint(i); done: - fflush(stdout); FUNC_LEAVE(ret_value); } -/* -perr_t -PDC_Client_attach_metadata_to_local_obj(const char *obj_name, uint64_t obj_id, uint64_t cont_id, - uint32_t data_server_id, struct _pdc_obj_info *obj_info) -{ - perr_t ret_value = SUCCEED; - - FUNC_ENTER(NULL); - - obj_info->metadata = (pdc_metadata_t *)calloc(1, sizeof(pdc_metadata_t)); - ((pdc_metadata_t *)obj_info->metadata)->user_id = obj_info->obj_pt->user_id; - if (NULL != obj_info->obj_pt->app_name) - strcpy(((pdc_metadata_t *)obj_info->metadata)->app_name, obj_info->obj_pt->app_name); - if (NULL != obj_name) - strcpy(((pdc_metadata_t *)obj_info->metadata)->obj_name, obj_name); - ((pdc_metadata_t *)obj_info->metadata)->time_step = obj_info->obj_pt->time_step; - ((pdc_metadata_t *)obj_info->metadata)->obj_id = obj_id; - ((pdc_metadata_t *)obj_info->metadata)->cont_id = cont_id; - ((pdc_metadata_t *)obj_info->metadata)->data_server_id = data_server_id; - if (NULL != obj_info->obj_pt->tags) - strcpy(((pdc_metadata_t *)obj_info->metadata)->tags, obj_info->obj_pt->tags); - if (NULL != obj_info->obj_pt->data_loc) - - strcpy(((pdc_metadata_t *)obj_info->metadata)->data_location, obj_info->obj_pt->data_loc); - ((pdc_metadata_t *)obj_info->metadata)->ndim = obj_info->obj_pt->obj_prop_pub->ndim; - if (NULL != obj_info->obj_pt->obj_prop_pub->dims) - memcpy(((pdc_metadata_t *)obj_info->metadata)->dims, obj_info->obj_pt->obj_prop_pub->dims, - sizeof(uint64_t) * obj_info->obj_pt->obj_prop_pub->ndim); - FUNC_LEAVE(ret_value); -} -*/ perr_t PDC_Client_send_client_shm_info(uint32_t server_id, char *shm_addr, uint64_t size) { + FUNC_ENTER(NULL); + perr_t ret_value; hg_return_t hg_ret; send_shm_in_t in; struct _pdc_client_lookup_args lookup_args; hg_handle_t rpc_handle; - FUNC_ENTER(NULL); - // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, send_shm_register_id_g, &rpc_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Could not create handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not create handle"); in.client_id = pdc_client_mpi_rank_g; @@ -6271,14 +5379,13 @@ PDC_Client_send_client_shm_info(uint32_t server_id, char *shm_addr, uint64_t siz hg_ret = HG_Forward(rpc_handle, pdc_client_check_int_ret_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Could not forward to server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Could not forward to server"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); done: - fflush(stdout); HG_Destroy(rpc_handle); FUNC_LEAVE(ret_value); @@ -6287,6 +5394,8 @@ PDC_Client_send_client_shm_info(uint32_t server_id, char *shm_addr, uint64_t siz static region_list_t * PDC_get_storage_meta_from_io_list(pdc_data_server_io_list_t **list, region_storage_meta_t *storage_meta) { + FUNC_ENTER(NULL); + pdc_data_server_io_list_t *io_list_elt, *io_list_target = NULL; region_list_t * ret_value = NULL; @@ -6312,14 +5421,13 @@ static perr_t PDC_add_storage_meta_to_io_list(pdc_data_server_io_list_t **list, region_storage_meta_t *storage_meta, void *buf) { + FUNC_ENTER(NULL); pdc_data_server_io_list_t *io_list_elt, *io_list_target = NULL; region_list_t * new_region; int j; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - DL_FOREACH(*list, io_list_elt) if (storage_meta->obj_id == io_list_elt->obj_id) { io_list_target = io_list_elt; @@ -6328,7 +5436,7 @@ PDC_add_storage_meta_to_io_list(pdc_data_server_io_list_t **list, region_storage // If not found, create and insert one to the read list if (NULL == io_list_target) { - io_list_target = (pdc_data_server_io_list_t *)calloc(1, sizeof(pdc_data_server_io_list_t)); + io_list_target = (pdc_data_server_io_list_t *)PDC_calloc(1, sizeof(pdc_data_server_io_list_t)); io_list_target->obj_id = storage_meta->obj_id; io_list_target->total = 0; io_list_target->count = 0; @@ -6342,7 +5450,7 @@ PDC_add_storage_meta_to_io_list(pdc_data_server_io_list_t **list, region_storage io_list_target->total++; io_list_target->count++; - new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&storage_meta->region_transfer, new_region); strcpy(new_region->shm_addr, storage_meta->storage_location); new_region->offset = storage_meta->offset; @@ -6358,6 +5466,8 @@ PDC_add_storage_meta_to_io_list(pdc_data_server_io_list_t **list, region_storage perr_t PDC_send_region_storage_meta_shm(uint32_t server_id, int n, region_storage_meta_t *storage_meta) { + FUNC_ENTER(NULL); + perr_t ret_value; hg_return_t hg_ret; bulk_rpc_in_t bulk_rpc_in; @@ -6366,13 +5476,11 @@ PDC_send_region_storage_meta_shm(uint32_t server_id, int n, region_storage_meta_ update_region_storage_meta_bulk_args_t cb_args; hg_bulk_t bulk_handle; - FUNC_ENTER(NULL); - // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, send_region_storage_meta_shm_bulk_rpc_register_id_g, &rpc_handle); @@ -6402,15 +5510,15 @@ PDC_send_region_storage_meta_shm(uint32_t server_id, int n, region_storage_meta_ PDC_Client_check_response(&send_context_g); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage_meta, void ***buf_arr, size_t *size_arr) - { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t ndim, server_id; uint64_t total_size = 0, cp_loc = 0; @@ -6419,8 +5527,6 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage int i, *total_obj = NULL, ntotal_obj = nobj, *recvcounts = NULL, *displs = NULL; region_storage_meta_t *all_region_storage_meta_1d = NULL, *my_region_storage_meta_1d = NULL; - FUNC_ENTER(NULL); - for (i = 0; i < nobj; i++) { total_size += size_arr[i]; // Add padding for shared memory access, as it must be multiple of page size @@ -6434,14 +5540,12 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage // Copy data to the shm segment for (i = 0; i < nobj; i++) { if (NULL == all_storage_meta[i]) { - LOG_ERROR("==PDC_CLIENT[%d]: NULL storage meta for %dth object!\n", pdc_client_mpi_rank_g, i); - fflush(stdout); + LOG_ERROR("NULL storage meta for %dth object\n", i); continue; } ndim = all_storage_meta[i]->region_transfer.ndim; if (ndim != 1) { - LOG_ERROR("==PDC_CLIENT[%d]: only support for 1D data now (%u)!\n", pdc_client_mpi_rank_g, ndim); - fflush(stdout); + LOG_ERROR("PDC only supports for 1D data now (%u)\n", ndim); continue; } @@ -6458,9 +5562,9 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage } #ifdef ENABLE_MPI - displs = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); - recvcounts = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); - total_obj = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); + displs = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); + recvcounts = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); + total_obj = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); // Gather number of objects to each client MPI_Allgather(&nobj, 1, MPI_INT, total_obj, 1, MPI_INT, PDC_SAME_NODE_COMM_g); @@ -6477,11 +5581,11 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage } all_region_storage_meta_1d = - (region_storage_meta_t *)malloc(ntotal_obj * sizeof(region_storage_meta_t)); + (region_storage_meta_t *)PDC_malloc(ntotal_obj * sizeof(region_storage_meta_t)); } // Copy data to 1 buffer - my_region_storage_meta_1d = (region_storage_meta_t *)malloc(nobj * sizeof(region_storage_meta_t)); + my_region_storage_meta_1d = (region_storage_meta_t *)PDC_malloc(nobj * sizeof(region_storage_meta_t)); for (i = 0; i < nobj; i++) memcpy(&my_region_storage_meta_1d[i], all_storage_meta[i], sizeof(region_storage_meta_t)); @@ -6497,23 +5601,23 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage ret_value = PDC_send_region_storage_meta_shm(server_id, ntotal_obj, all_region_storage_meta_1d); } - free(displs); - free(recvcounts); - free(total_obj); - free(my_region_storage_meta_1d); + displs = (int *)PDC_free(displs); + recvcounts = (int *)PDC_free(recvcounts); + total_obj = (int *)PDC_free(total_obj); + my_region_storage_meta_1d = (region_storage_meta_t *)PDC_free(my_region_storage_meta_1d); if (pdc_client_same_node_rank_g == 0) - free(all_region_storage_meta_1d); + all_region_storage_meta_1d = (region_storage_meta_t *)PDC_free(all_region_storage_meta_1d); #else // send to node local server - all_region_storage_meta_1d = (region_storage_meta_t *)calloc(nobj, sizeof(region_storage_meta_t)); + all_region_storage_meta_1d = (region_storage_meta_t *)PDC_calloc(nobj, sizeof(region_storage_meta_t)); for (i = 0; i < nobj; i++) memcpy(&all_region_storage_meta_1d[i], all_storage_meta[i], sizeof(region_storage_meta_t)); server_id = PDC_get_local_server_id(pdc_client_mpi_rank_g, pdc_nclient_per_server_g, pdc_server_num_g); ret_value = PDC_send_region_storage_meta_shm(server_id, nobj, all_region_storage_meta_1d); - free(all_region_storage_meta_1d); + all_region_storage_meta_1d = (region_storage_meta_t *)PDC_free(all_region_storage_meta_1d); #endif FUNC_LEAVE(ret_value); @@ -6522,8 +5626,9 @@ PDC_Client_cp_data_to_local_server(int nobj, region_storage_meta_t **all_storage perr_t PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_meta, void ***buf_arr, size_t *size_arr) - { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; char * fname, *prev_fname; @@ -6533,9 +5638,7 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ size_t read_bytes; region_list_t *cache_region = NULL; - FUNC_ENTER(NULL); - - *buf_arr = (void **)calloc(sizeof(void *), nobj); + *buf_arr = (void **)PDC_calloc(sizeof(void *), nobj); cache_count_g = 0; cache_total_g = nobj * cache_percentage_g / 100; @@ -6545,13 +5648,13 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ prev_fname = NULL; for (i = 0; i < nobj; i++) { if (NULL == all_storage_meta[i]) { - LOG_ERROR("==PDC_CLIENT[%d]: NULL storage meta for %dth object!\n", pdc_client_mpi_rank_g, i); + LOG_ERROR("NULL storage meta for %dth object\n", i); continue; } ndim = all_storage_meta[i]->region_transfer.ndim; if (ndim != 1) { - LOG_ERROR("==PDC_CLIENT[%d]: only support for 1D data now (%u)!\n", pdc_client_mpi_rank_g, ndim); + LOG_ERROR("PDC only supports 1D data now (%u)\n", ndim); continue; } @@ -6560,7 +5663,7 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ cache_region = PDC_get_storage_meta_from_io_list(&client_cache_list_head_g, all_storage_meta[i]); if (cache_region != NULL) { buf_size = all_storage_meta[i]->size; - (*buf_arr)[i] = malloc(buf_size); + (*buf_arr)[i] = PDC_malloc(buf_size); memcpy((*buf_arr)[i], cache_region->buf, buf_size); cache_count_g++; continue; @@ -6577,8 +5680,7 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ fp_read = fopen(fname, "r"); nfopen_g++; if (fp_read == NULL) { - LOG_ERROR("==PDC_CLIENT[%d]: fopen failed [%s] objid %" PRIu64 "\n", pdc_client_mpi_rank_g, - fname, all_storage_meta[i]->obj_id); + LOG_ERROR("fopen failed [%s] objid %" PRIu64 "\n", fname, all_storage_meta[i]->obj_id); prev_fname = fname; continue; } @@ -6586,21 +5688,20 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ prev_fname = fname; // TODO: currently assumes 1d data and 1 storage region per object - storage_start = all_storage_meta[i]->region_transfer.start_0; - storage_count = all_storage_meta[i]->region_transfer.count_0; + storage_start = all_storage_meta[i]->region_transfer.start[0]; + storage_count = all_storage_meta[i]->region_transfer.count[0]; req_start = storage_start; req_count = storage_count; file_offset = all_storage_meta[i]->offset; buf_size = all_storage_meta[i]->size; // malloc the buf array, this array should be freed by user afterwards. - (*buf_arr)[i] = malloc(buf_size); + (*buf_arr)[i] = PDC_malloc(buf_size); PDC_Client_read_overlap_regions(ndim, &req_start, &req_count, &storage_start, &storage_count, fp_read, file_offset, (*buf_arr)[i], &read_bytes); size_arr[i] = read_bytes; if (read_bytes != buf_size) { - LOG_ERROR("==PDC_CLIENT[%d]: actual read size %zu is not expected %" PRIu64 "\n", - pdc_client_mpi_rank_g, read_bytes, buf_size); + LOG_ERROR("Actual read size %zu is not expected %" PRIu64 "\n", read_bytes, buf_size); } if (strstr(fname, "PDCcacheBB") != NULL) { @@ -6609,7 +5710,6 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ } } - fflush(stdout); if (fp_read != NULL) fclose(fp_read); FUNC_LEAVE(ret_value); @@ -6617,11 +5717,13 @@ PDC_Client_read_with_storage_meta(int nobj, region_storage_meta_t **all_storage_ // Query and retrieve all the storage regions of objects with their names // It is possible that an object has multiple storage regions, they will be stored sequintially in -// storage_meta The storage_meta is also ordered based on the order in obj_names, the mapping can be easily -// formed by checking the obj_id in region_storage_meta_t +// storage_meta The storage_meta is also ordered based on the order in obj_names, the mapping can be +// easily formed by checking the obj_id in region_storage_meta_t perr_t PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_meta_t ***all_storage_meta) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t rpc_handle; @@ -6638,22 +5740,20 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m update_region_storage_meta_bulk_args_t cb_args; struct pdc_request ** requests, *request; - FUNC_ENTER(NULL); - if (nobj == 0) PGOTO_DONE(SUCCEED); else if (obj_names == NULL || all_storage_meta == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); // One request to each metadata server - requests = (struct pdc_request **)calloc(sizeof(struct pdc_request *), pdc_server_num_g); + requests = (struct pdc_request **)PDC_calloc(sizeof(struct pdc_request *), pdc_server_num_g); - obj_names_by_server = (char ***)calloc(sizeof(char **), pdc_server_num_g); - n_obj_name_by_server = (int *)calloc(sizeof(int), pdc_server_num_g); - obj_names_server_seq_mapping = (int **)calloc(sizeof(int *), pdc_server_num_g); - obj_names_server_seq_mapping_1d = (int *)calloc(sizeof(int), nobj * pdc_server_num_g); + obj_names_by_server = (char ***)PDC_calloc(sizeof(char **), pdc_server_num_g); + n_obj_name_by_server = (int *)PDC_calloc(sizeof(int), pdc_server_num_g); + obj_names_server_seq_mapping = (int **)PDC_calloc(sizeof(int *), pdc_server_num_g); + obj_names_server_seq_mapping_1d = (int *)PDC_calloc(sizeof(int), nobj * pdc_server_num_g); for (i = 0; i < pdc_server_num_g; i++) { - obj_names_by_server[i] = (char **)calloc(sizeof(char *), nobj); + obj_names_by_server[i] = (char **)PDC_calloc(sizeof(char *), nobj); obj_names_server_seq_mapping[i] = obj_names_server_seq_mapping_1d + i * nobj; } @@ -6677,8 +5777,7 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); // Send the bulk handle to the target with RPC hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, @@ -6687,7 +5786,7 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m PGOTO_ERROR(FAIL, "Could not create handle"); total_size = 0; - buf_sizes = (uint64_t *)calloc(sizeof(uint64_t), n_obj_name_by_server[server_id]); + buf_sizes = (uint64_t *)PDC_calloc(sizeof(uint64_t), n_obj_name_by_server[server_id]); for (i = 0; i < n_obj_name_by_server[server_id]; i++) { buf_sizes[i] = strlen(obj_names_by_server[server_id][i]) + 1; total_size += buf_sizes[i]; @@ -6699,7 +5798,7 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m if (hg_ret != HG_SUCCESS) PGOTO_ERROR(FAIL, "Could not create bulk data handle"); - requests[server_id] = (struct pdc_request *)calloc(1, sizeof(struct pdc_request)); + requests[server_id] = (struct pdc_request *)PDC_calloc(1, sizeof(struct pdc_request)); requests[server_id]->server_id = server_id; requests[server_id]->access_type = PDC_READ; @@ -6733,7 +5832,7 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m // Now we have all the storage meta stored in the requests structure // Reorgaze them and fill the output buffer - (*all_storage_meta) = (region_storage_meta_t **)calloc(sizeof(region_storage_meta_t *), nobj); + (*all_storage_meta) = (region_storage_meta_t **)PDC_calloc(sizeof(region_storage_meta_t *), nobj); for (iter = 0; iter < pdc_server_num_g; iter++) { request = requests[iter]; if (request == NULL || request->storage_meta == NULL) @@ -6749,14 +5848,12 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m } done: - fflush(stdout); - if (NULL != obj_names_by_server) - free(obj_names_by_server); + obj_names_by_server = (char ***)PDC_free(obj_names_by_server); if (NULL != n_obj_name_by_server) - free(n_obj_name_by_server); + n_obj_name_by_server = (int *)PDC_free(n_obj_name_by_server); if (NULL != obj_names_by_server_2d) - free(obj_names_by_server_2d); + obj_names_by_server_2d = (char **)PDC_free(obj_names_by_server_2d); FUNC_LEAVE(ret_value); } @@ -6765,13 +5862,13 @@ PDC_Client_query_multi_storage_info(int nobj, char **obj_names, region_storage_m perr_t PDC_get_io_stats_mpi(double read_time, double query_time, int nfopen) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; double read_time_max, read_time_min, read_time_avg, reduce_overhead; double query_time_max, query_time_min, query_time_avg; int nfopen_min, nfopen_max, nfopen_avg; - FUNC_ENTER(NULL); - reduce_overhead = MPI_Wtime(); MPI_Reduce(&read_time, &read_time_max, 1, MPI_DOUBLE, MPI_MAX, 0, PDC_CLIENT_COMM_WORLD_g); MPI_Reduce(&read_time, &read_time_min, 1, MPI_DOUBLE, MPI_MIN, 0, PDC_CLIENT_COMM_WORLD_g); @@ -6790,7 +5887,7 @@ PDC_get_io_stats_mpi(double read_time, double query_time, int nfopen) reduce_overhead = MPI_Wtime() - reduce_overhead; if (pdc_client_mpi_rank_g == 0) { - LOG_INFO("==PDC_CLIENT: IO STATS (MIN, AVG, MAX)\n" + LOG_INFO("IO STATS (MIN, AVG, MAX)\n" " #fopen (%d, %d, %d)\n" " Tquery (%6.4f, %6.4f, %6.4f)\n" " #readBB %d, size %.2f MB\n" @@ -6807,6 +5904,8 @@ perr_t PDC_Client_query_name_read_entire_obj_client(int nobj, char **obj_names, void ***out_buf, uint64_t *out_buf_sizes) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_storage_meta_t **all_storage_meta = NULL; #ifdef ENABLE_TIMING @@ -6815,10 +5914,8 @@ PDC_Client_query_name_read_entire_obj_client(int nobj, char **obj_names, void ** double query_time, read_time; #endif - FUNC_ENTER(NULL); - if (nobj == 0 || obj_names == NULL || out_buf == NULL || out_buf_sizes == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: invalid input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Invalid input"); #ifdef ENABLE_TIMING gettimeofday(&pdc_timer1, 0); @@ -6850,7 +5947,6 @@ PDC_Client_query_name_read_entire_obj_client(int nobj, char **obj_names, void ** PDC_Client_cp_data_to_local_server(nobj, all_storage_meta, out_buf, (size_t *)out_buf_sizes); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -6858,6 +5954,8 @@ perr_t PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_names, void ***out_buf, size_t *out_buf_sizes) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; char ** all_names = my_obj_names; char * local_names_1d, *all_names_1d = NULL; @@ -6872,20 +5970,17 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name double query_time, read_time; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_MPI - local_names_1d = (char *)calloc(my_nobj, max_name_len); + local_names_1d = (char *)PDC_calloc(my_nobj, max_name_len); for (i = 0; i < my_nobj; i++) { if (strlen(my_obj_names[i]) > max_name_len) - LOG_ERROR("==PDC_CLIENT[%2d]: object name longer than %lu [%s]!\n", pdc_client_mpi_rank_g, - max_name_len, my_obj_names[i]); + LOG_ERROR("Object name longer than %lu [%s]\n", max_name_len, my_obj_names[i]); strncpy(local_names_1d + i * max_name_len, my_obj_names[i], max_name_len - 1); } - displs = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); - recvcounts = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); - total_obj = (int *)malloc(sizeof(int) * pdc_client_same_node_size_g); + displs = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); + recvcounts = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); + total_obj = (int *)PDC_malloc(sizeof(int) * pdc_client_same_node_size_g); MPI_Allgather(&my_nobj, 1, MPI_INT, total_obj, 1, MPI_INT, PDC_SAME_NODE_COMM_g); ntotal_obj = 0; @@ -6903,8 +5998,8 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name } if (pdc_client_same_node_rank_g == 0) { - all_names = (char **)calloc(sizeof(char *), ntotal_obj); - all_names_1d = (char *)malloc(ntotal_obj * max_name_len); + all_names = (char **)PDC_calloc(sizeof(char *), ntotal_obj); + all_names_1d = (char *)PDC_malloc(ntotal_obj * max_name_len); for (i = 0; i < ntotal_obj; i++) all_names[i] = all_names_1d + i * max_name_len; } @@ -6922,8 +6017,9 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name ret_value = PDC_Client_query_multi_storage_info(ntotal_obj, all_names, &all_storage_meta); // Copy the result to the result array for scatter - // res_storage_meta_1d = (region_storage_meta_t *)calloc(sizeof(region_storage_meta_t), ntotal_obj); - res_storage_meta_1d = (region_storage_meta_t *)malloc(sizeof(region_storage_meta_t) * ntotal_obj); + // res_storage_meta_1d = (region_storage_meta_t *)PDC_calloc(sizeof(region_storage_meta_t), + // ntotal_obj); + res_storage_meta_1d = (region_storage_meta_t *)PDC_malloc(sizeof(region_storage_meta_t) * ntotal_obj); for (i = 0; i < ntotal_obj; i++) memcpy(&res_storage_meta_1d[i], all_storage_meta[i], sizeof(region_storage_meta_t)); } @@ -6935,8 +6031,8 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name #endif // allocate space for storage meta results - my_storage_meta = (region_storage_meta_t **)calloc(sizeof(region_storage_meta_t *), my_nobj); - my_storage_meta_1d = (region_storage_meta_t *)calloc(sizeof(region_storage_meta_t), my_nobj); + my_storage_meta = (region_storage_meta_t **)PDC_calloc(sizeof(region_storage_meta_t *), my_nobj); + my_storage_meta_1d = (region_storage_meta_t *)PDC_calloc(sizeof(region_storage_meta_t), my_nobj); for (i = 0; i < my_nobj; i++) my_storage_meta[i] = &(my_storage_meta_1d[i]); @@ -6979,16 +6075,16 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name #ifdef ENABLE_MPI if (pdc_client_same_node_rank_g == 0) { - free(all_names); - free(all_names_1d); + all_names = (char **)PDC_free(all_names); + all_names_1d = (char *)PDC_free(all_names_1d); } - free(recvcounts); - free(displs); - free(total_obj); + recvcounts = (int *)PDC_free(recvcounts); + displs = (int *)PDC_free(displs); + total_obj = (int *)PDC_free(total_obj); if (NULL != my_storage_meta) - free(my_storage_meta); + my_storage_meta = (region_storage_meta_t **)PDC_free(my_storage_meta); if (NULL != my_storage_meta_1d) - free(my_storage_meta_1d); + my_storage_meta_1d = (region_storage_meta_t *)PDC_free(my_storage_meta_1d); #endif FUNC_LEAVE(ret_value); @@ -6998,18 +6094,18 @@ PDC_Client_query_name_read_entire_obj_client_agg(int my_nobj, char **my_obj_name perr_t PDC_Client_recv_bulk_storage_meta(process_bulk_storage_meta_args_t *process_args) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct pdc_request *request; - FUNC_ENTER(NULL); - if (NULL == process_args) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: NULL input", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "NULL input"); // Now find the task and assign the storage meta to corresponding query request request = PDC_find_request_from_list_by_seq_id(&pdc_io_request_list_g, process_args->seq_id); if (NULL == request) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: cannot find previous IO request", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Cannot find previous IO request"); // Attach the received storage meta to the request request->storage_meta = process_args; @@ -7017,7 +6113,6 @@ PDC_Client_recv_bulk_storage_meta(process_bulk_storage_meta_args_t *process_args ret_value = PDC_del_request_from_list(&pdc_io_request_list_g, request); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); FUNC_LEAVE(ret_value); @@ -7026,9 +6121,11 @@ PDC_Client_recv_bulk_storage_meta(process_bulk_storage_meta_args_t *process_args hg_return_t PDC_Client_recv_bulk_storage_meta_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + PDC_Client_recv_bulk_storage_meta((process_bulk_storage_meta_args_t *)callback_info->arg); - return HG_SUCCESS; + FUNC_LEAVE(HG_SUCCESS); } perr_t @@ -7036,6 +6133,8 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re uint64_t *storage_start, uint64_t *storage_count, FILE *fp, uint64_t file_offset, void *buf, size_t *total_read_bytes) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t overlap_start[DIM_MAX] = {0}, overlap_count[DIM_MAX] = {0}; uint64_t buf_start[DIM_MAX] = {0}; @@ -7051,16 +6150,14 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re struct timeval pdc_timer_end1; #endif - FUNC_ENTER(NULL); - *total_read_bytes = 0; if (ndim > 3 || ndim <= 0) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: dim=%" PRIu32 " unsupported yet!", pdc_client_mpi_rank_g, ndim); + PGOTO_ERROR(FAIL, "dim=%" PRIu32 " unsupported yet", ndim); // Get the actual start and count of region in storage if (PDC_get_overlap_start_count(ndim, req_start, req_count, storage_start, storage_count, overlap_start, overlap_count) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: PDC_get_overlap_start_count FAILED!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "PDC_get_overlap_start_count failed"); total_bytes = 1; for (i = 0; i < ndim; i++) { @@ -7105,8 +6202,8 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re } if (is_client_debug_g == 1) { - LOG_DEBUG("==PDC_CLIENT[%d]: read storage offset %" PRIu64 ", buf_offset %" PRIu64 "\n", - pdc_client_mpi_rank_g, storage_offset, buf_offset); + LOG_DEBUG("Read storage offset %" PRIu64 ", buf_offset %" PRIu64 "\n", storage_offset, + buf_offset); } read_bytes = fread(buf + buf_offset, 1, total_bytes, fp); @@ -7114,25 +6211,20 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end1, 0); double region_read_time1 = PDC_get_elapsed_time_double(&pdc_timer_start1, &pdc_timer_end1); - if (is_client_debug_g) { - LOG_DEBUG("==PDC_CLIENT[%d]: fseek + fread %" PRIu64 " bytes, %.2fs\n", pdc_client_mpi_rank_g, - read_bytes, region_read_time1); - fflush(stdout); - } + if (is_client_debug_g) + LOG_DEBUG("fseek + fread %" PRIu64 " bytes, %.2fs\n", read_bytes, region_read_time1); #endif n_contig_MB += read_bytes / 1048576.0; n_contig_read++; if (read_bytes != total_bytes) - PGOTO_ERROR(FAIL, - "==PDC_CLIENT[%d]: fread failed actual read bytes %" PRIu64 ", should be %" PRIu64 "", - pdc_client_mpi_rank_g, read_bytes, total_bytes); + PGOTO_ERROR(FAIL, "fread failed actual read bytes %" PRIu64 ", should be %" PRIu64 "\n", + read_bytes, total_bytes); *total_read_bytes += read_bytes; if (is_client_debug_g == 1) { - LOG_DEBUG("==PDC_CLIENT[%d]: Read entire storage region, size=%" PRIu64 "", pdc_client_mpi_rank_g, - read_bytes); + LOG_DEBUG("Read entire storage region, size=%" PRIu64 "\n", read_bytes); } } // end if else { @@ -7150,7 +6242,7 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re n_contig_MB += read_bytes / 1048576.0; n_contig_read++; if (read_bytes != overlap_count[0]) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: fread failed!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "fread failed"); *total_read_bytes += read_bytes; } // for each row @@ -7181,7 +6273,7 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re n_contig_MB += read_bytes / 1048576.0; n_contig_read++; if (read_bytes != overlap_count[0]) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: fread failed!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "fread failed"); *total_read_bytes += read_bytes; if (is_client_debug_g == 1) { @@ -7194,10 +6286,9 @@ PDC_Client_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re } // end else (ndim != 1 && !is_all_selected); if (total_bytes != *total_read_bytes) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: read size error!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Read size error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7205,11 +6296,10 @@ perr_t PDC_Client_query_name_read_entire_obj_client_agg_cache_iter(int my_nobj, char **my_obj_names, void ***out_buf, size_t *out_buf_sizes, int cache_percentage) { - perr_t ret_value = SUCCEED; - cache_percentage_g = cache_percentage; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + cache_percentage_g = cache_percentage; ret_value = PDC_Client_query_name_read_entire_obj_client_agg(my_nobj, my_obj_names, out_buf, out_buf_sizes); @@ -7219,6 +6309,8 @@ PDC_Client_query_name_read_entire_obj_client_agg_cache_iter(int my_nobj, char ** static perr_t PDC_add_kvtag(pdcid_t obj_id, pdc_kvtag_t *kvtag, int is_cont) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint64_t meta_id; @@ -7229,8 +6321,6 @@ PDC_add_kvtag(pdcid_t obj_id, pdc_kvtag_t *kvtag, int is_cont) struct _pdc_cont_info * cont_prop; struct _pdc_client_lookup_args lookup_args; - FUNC_ENTER(NULL); - if (is_cont == 0) { obj_prop = PDC_obj_get_info(obj_id); meta_id = obj_prop->obj_info_pub->meta_id; @@ -7244,16 +6334,13 @@ PDC_add_kvtag(pdcid_t obj_id, pdc_kvtag_t *kvtag, int is_cont) in.hash_value = PDC_get_hash_by_name(cont_prop->cont_info_pub->name); } - // TODO: delete this line after debugging. - // LOG_INFO("==CLIENT[%d]: PDC_add_kvtag::in.obj_id = %llu \n ", pdc_client_mpi_rank_g, in.obj_id); - server_id = PDC_get_server_by_obj_id(meta_id, pdc_server_num_g); // Debug statistics for counting number of messages sent to each server. debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_add_kvtag_register_id_g, &metadata_add_kvtag_handle); @@ -7267,21 +6354,20 @@ PDC_add_kvtag(pdcid_t obj_id, pdc_kvtag_t *kvtag, int is_cont) in.kvtag.size = kvtag->size; } else - PGOTO_ERROR(FAIL, "==PDC_Client_add_kvtag(): invalid tag content!"); + PGOTO_ERROR(FAIL, "Invalid tag content"); hg_ret = HG_Forward(metadata_add_kvtag_handle, metadata_add_tag_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "PDC_Client_add_kvtag_metadata_with_name(): Could not start HG_Forward()"); + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - LOG_INFO("PDC_CLIENT: add kvtag NOT successful ... ret_value = %d\n", lookup_args.ret); + LOG_ERROR("Add kvtag NOT successful, ret_value = %d\n", lookup_args.ret); done: - fflush(stdout); HG_Destroy(metadata_add_kvtag_handle); FUNC_LEAVE(ret_value); @@ -7290,18 +6376,17 @@ PDC_add_kvtag(pdcid_t obj_id, pdc_kvtag_t *kvtag, int is_cont) static hg_return_t metadata_get_kvtag_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; struct _pdc_get_kvtag_args *client_lookup_args = (struct _pdc_get_kvtag_args *)callback_info->arg; hg_handle_t handle = callback_info->info.forward.handle; metadata_get_kvtag_out_t output; - FUNC_ENTER(NULL); - ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { client_lookup_args->ret = -1; - PGOTO_ERROR(ret_value, "==PDC_CLIENT[%d]: error with HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } client_lookup_args->ret = output.ret; if (output.kvtag.name) @@ -7309,14 +6394,13 @@ metadata_get_kvtag_rpc_cb(const struct hg_cb_info *callback_info) client_lookup_args->kvtag->size = output.kvtag.size; client_lookup_args->kvtag->type = output.kvtag.type; if (output.kvtag.size > 0) { - client_lookup_args->kvtag->value = malloc(output.kvtag.size); + client_lookup_args->kvtag->value = PDC_malloc(output.kvtag.size); memcpy(client_lookup_args->kvtag->value, output.kvtag.value, output.kvtag.size); } else client_lookup_args->kvtag->value = NULL; done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -7326,6 +6410,8 @@ metadata_get_kvtag_rpc_cb(const struct hg_cb_info *callback_info) static perr_t PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint64_t meta_id; @@ -7336,8 +6422,6 @@ PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) struct _pdc_obj_info * obj_prop; struct _pdc_cont_info * cont_prop; - FUNC_ENTER(NULL); - if (is_cont == 0) { obj_prop = PDC_obj_get_info(obj_id); meta_id = obj_prop->obj_info_pub->meta_id; @@ -7355,7 +6439,7 @@ PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_get_kvtag_register_id_g, &metadata_get_kvtag_handle); @@ -7364,9 +6448,9 @@ PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) in.key = tag_name; } else - PGOTO_ERROR(FAIL, "PDC_get_kvtag: invalid tag content!"); + PGOTO_ERROR(FAIL, "PDC_get_kvtag: invalid tag content"); - *kvtag = (pdc_kvtag_t *)malloc(sizeof(pdc_kvtag_t)); + *kvtag = (pdc_kvtag_t *)PDC_malloc(sizeof(pdc_kvtag_t)); lookup_args.kvtag = *kvtag; hg_ret = HG_Forward(metadata_get_kvtag_handle, metadata_get_kvtag_rpc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) @@ -7377,10 +6461,9 @@ PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - LOG_INFO("PDC_CLIENT: get kvtag NOT successful ... ret_value = %d\n", lookup_args.ret); + LOG_INFO("Get kvtag NOT successful ... ret_value = %d\n", lookup_args.ret); done: - fflush(stdout); HG_Destroy(metadata_get_kvtag_handle); FUNC_LEAVE(ret_value); @@ -7389,6 +6472,8 @@ PDC_get_kvtag(pdcid_t obj_id, char *tag_name, pdc_kvtag_t **kvtag, int is_cont) static hg_return_t kvtag_query_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct bulk_args_t *bulk_args; hg_bulk_t origin_bulk_handle = hg_cb_info->info.bulk.origin_handle; @@ -7401,34 +6486,26 @@ kvtag_query_bulk_cb(const struct hg_cb_info *hg_cb_info) void ** ids_buf; uint64_t * u64_arr_ptr; - FUNC_ENTER(NULL); - bulk_args = (struct bulk_args_t *)hg_cb_info->arg; n_meta = bulk_args->n_meta; if (hg_cb_info->ret == HG_SUCCESS) { bulk_sgnum = HG_Bulk_get_segment_count(local_bulk_handle); - ids_buf = (void **)calloc(sizeof(void *), bulk_sgnum); - ids_buf_sizes = (uint64_t *)calloc(sizeof(uint64_t), bulk_sgnum); + ids_buf = (void **)PDC_calloc(sizeof(void *), bulk_sgnum); + ids_buf_sizes = (uint64_t *)PDC_calloc(sizeof(uint64_t), bulk_sgnum); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, bulk_sgnum, ids_buf, ids_buf_sizes, &actual_cnt); u64_arr_ptr = ((uint64_t **)(ids_buf))[0]; - bulk_args->obj_ids = (uint64_t *)calloc(sizeof(uint64_t), n_meta); + bulk_args->obj_ids = (uint64_t *)PDC_calloc(sizeof(uint64_t), n_meta); for (int i = 0; i < n_meta; i++) { bulk_args->obj_ids[i] = *u64_arr_ptr; u64_arr_ptr++; } - - // HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, &buf, buf_sizes, - // &actual_cnt); - - // bulk_args->obj_ids = (uint64_t *)calloc(sizeof(uint64_t), n_meta); - // memcpy(bulk_args->obj_ids, buf, sizeof(uint64_t) * n_meta); } else - PGOTO_ERROR(HG_PROTOCOL_ERROR, "==PDC_CLIENT[%d]: Error with bulk handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error with bulk handle"); // Free local bulk handle ret_value = HG_Bulk_free(local_bulk_handle); @@ -7442,7 +6519,6 @@ kvtag_query_bulk_cb(const struct hg_cb_info *hg_cb_info) done: hg_atomic_decr32(&bulk_todo_g); hg_atomic_cas32(&bulk_transfer_done_g, 0, 1); - fflush(stdout); HG_Destroy(bulk_args->handle); FUNC_LEAVE(ret_value); @@ -7451,6 +6527,8 @@ kvtag_query_bulk_cb(const struct hg_cb_info *hg_cb_info) static hg_return_t kvtag_query_forward_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct bulk_args_t * bulk_arg; hg_handle_t handle; @@ -7461,22 +6539,19 @@ kvtag_query_forward_cb(const struct hg_cb_info *callback_info) hg_bulk_t origin_bulk_handle = HG_BULK_NULL; const struct hg_info * hg_info = NULL; - FUNC_ENTER(NULL); - bulk_arg = (struct bulk_args_t *)callback_info->arg; handle = callback_info->info.forward.handle; // Get output from server ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error HG_Get_output", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error HG_Get_output"); bulk_arg->server_time_elapsed = output.server_time_elapsed; bulk_arg->server_memory_consumption = output.server_memory_consumption; if (output.bulk_handle == HG_BULK_NULL || output.ret == 0) { hg_atomic_decr32(&bulk_todo_g); - // hg_atomic_decr32(&atomic_work_todo_g); bulk_arg->n_meta = 0; bulk_arg->obj_ids = NULL; HG_Free_output(handle, &output); @@ -7507,7 +6582,6 @@ kvtag_query_forward_cb(const struct hg_cb_info *callback_info) PGOTO_ERROR(FAIL, "Could not read bulk data"); done: - fflush(stdout); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); @@ -7517,20 +6591,20 @@ kvtag_query_forward_cb(const struct hg_cb_info *callback_info) static perr_t PDC_Client_query_kvtag_server(uint32_t server_id, const pdc_kvtag_t *kvtag, int *n_res, uint64_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t query_kvtag_server_handle; pdc_kvtag_t in; struct bulk_args_t *bulk_arg; - FUNC_ENTER(NULL); - if (kvtag == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: kvtag is NULL!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "kvtag is NULL"); if (n_res == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: n_res is NULL!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "n_res is NULL"); if (out == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: out is NULL!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "out is NULL"); if (kvtag->name == NULL) in.name = " "; @@ -7552,14 +6626,14 @@ PDC_Client_query_kvtag_server(uint32_t server_id, const pdc_kvtag_t *kvtag, int *n_res = 0; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); hg_ret = HG_Create(send_context_g, pdc_server_info_g[server_id].addr, query_kvtag_register_id_g, &query_kvtag_server_handle); - bulk_arg = (struct bulk_args_t *)calloc(1, sizeof(struct bulk_args_t)); + bulk_arg = (struct bulk_args_t *)PDC_calloc(1, sizeof(struct bulk_args_t)); if (query_kvtag_server_handle == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: Error with query_kvtag_server_handle", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with query_kvtag_server_handle"); hg_ret = HG_Forward(query_kvtag_server_handle, kvtag_query_forward_cb, bulk_arg, &in); if (hg_ret != HG_SUCCESS) @@ -7578,11 +6652,10 @@ PDC_Client_query_kvtag_server(uint32_t server_id, const pdc_kvtag_t *kvtag, int *n_res = bulk_arg->n_meta; if (*n_res > 0) *out = bulk_arg->obj_ids; - free(bulk_arg); + bulk_arg = (struct bulk_args_t *)PDC_free(bulk_arg); // TODO: need to be careful when freeing the lookup_args, as it include the results returned to user done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7590,40 +6663,35 @@ PDC_Client_query_kvtag_server(uint32_t server_id, const pdc_kvtag_t *kvtag, int perr_t PDC_Client_query_kvtag(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ids) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int32_t i; int nmeta = 0; uint64_t *temp_ids = NULL; uint32_t server_id; - FUNC_ENTER(NULL); - *n_res = 0; *pdc_ids = NULL; for (i = 0; i < pdc_server_num_g; i++) { - // TODO: when there are multiple clients issuing different queries concurrently, try to balance the - // server workload by having different clients sending queries with a different order - // server_id = (pdc_client_mpi_rank_g + i) % pdc_server_num_g; - // ret_value = PDC_Client_query_kvtag_server(server_id, kvtag, &nmeta, &temp_ids); + // TODO: when there are multiple clients issuing different queries concurrently, try to balance + // the server workload by having different clients sending queries with a different order ret_value = PDC_Client_query_kvtag_server((uint32_t)i, kvtag, &nmeta, &temp_ids); if (ret_value != SUCCEED) { - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDC_Client_query_kvtag_server to server %d", - pdc_client_mpi_rank_g, i); + PGOTO_ERROR(FAIL, "Error with PDC_Client_query_kvtag_server to server %d", i); } if (i == 0) { *pdc_ids = temp_ids; } else if (nmeta > 0) { - *pdc_ids = (uint64_t *)realloc(*pdc_ids, sizeof(uint64_t) * (*n_res + nmeta)); + *pdc_ids = (uint64_t *)PDC_realloc(*pdc_ids, sizeof(uint64_t) * (*n_res + nmeta)); memcpy(*pdc_ids + (*n_res), temp_ids, nmeta * sizeof(uint64_t)); - free(temp_ids); + temp_ids = (uint64_t *)PDC_free(temp_ids); } *n_res = *n_res + nmeta; } done: - // memory_debug_g = 1; - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7631,6 +6699,8 @@ PDC_Client_query_kvtag(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ids) static perr_t PDCtag_delete(pdcid_t obj_id, char *tag_name, int is_cont) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint64_t meta_id; @@ -7641,8 +6711,6 @@ PDCtag_delete(pdcid_t obj_id, char *tag_name, int is_cont) struct _pdc_cont_info * cont_prop; struct _pdc_client_lookup_args lookup_args; - FUNC_ENTER(NULL); - if (is_cont) { cont_prop = PDC_cont_get_info(obj_id); meta_id = cont_prop->cont_info_pub->meta_id; @@ -7657,7 +6725,7 @@ PDCtag_delete(pdcid_t obj_id, char *tag_name, int is_cont) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, metadata_del_kvtag_register_id_g, &metadata_del_kvtag_handle); @@ -7681,10 +6749,9 @@ PDCtag_delete(pdcid_t obj_id, char *tag_name, int is_cont) PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - LOG_INFO("PDC_CLIENT: del kvtag NOT successful ... ret_value = %d\n", lookup_args.ret); + LOG_INFO("del kvtag NOT successful ... ret_value = %d\n", lookup_args.ret); done: - fflush(stdout); HG_Destroy(metadata_del_kvtag_handle); FUNC_LEAVE(ret_value); @@ -7697,11 +6764,11 @@ PDCtag_delete(pdcid_t obj_id, char *tag_name, int is_cont) pdcid_t PDCcont_put(const char *cont_name, pdcid_t pdc) { + FUNC_ENTER(NULL); + perr_t ret_value; pdcid_t cont_id = 0, cont_prop; - FUNC_ENTER(NULL); - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); #ifdef ENABLE_MPI @@ -7711,21 +6778,20 @@ PDCcont_put(const char *cont_name, pdcid_t pdc) ret_value = PDC_Client_create_cont_id(cont_name, cont_prop, &cont_id); #endif if (ret_value != SUCCEED) - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: error with PDC_Client_create_cont_id", pdc_client_mpi_rank_g); + PGOTO_ERROR(0, "Error with PDC_Client_create_cont_id"); done: - fflush(stdout); FUNC_LEAVE(cont_id); } pdcid_t PDCcont_get_id(const char *cont_name, pdcid_t pdc_id) { + FUNC_ENTER(NULL); + pdcid_t cont_id; uint64_t cont_meta_id; - FUNC_ENTER(NULL); - PDC_Client_query_container_name(cont_name, &cont_meta_id); cont_id = PDC_cont_create_local(pdc_id, cont_name, cont_meta_id); @@ -7736,10 +6802,9 @@ PDCcont_get_id(const char *cont_name, pdcid_t pdc_id) perr_t PDCcont_get(pdcid_t cont_id ATTRIBUTE(unused), char **cont_name ATTRIBUTE(unused)) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; LOG_ERROR("PDCcont_get not implemented\n"); FUNC_LEAVE(ret_value); @@ -7748,17 +6813,14 @@ PDCcont_get(pdcid_t cont_id ATTRIBUTE(unused), char **cont_name ATTRIBUTE(unused perr_t PDCcont_del(pdcid_t cont_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDC_Client_del_metadata(cont_id, 1); + perr_t ret_value = SUCCEED; + ret_value = PDC_Client_del_metadata(cont_id, 1); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDC_Client_del_objects_to_container", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_del_objects_to_container"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7766,34 +6828,28 @@ PDCcont_del(pdcid_t cont_id) perr_t PDCcont_put_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDC_Client_add_objects_to_container(nobj, obj_ids, cont_id); + perr_t ret_value = SUCCEED; + ret_value = PDC_Client_add_objects_to_container(nobj, obj_ids, cont_id); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDC_Client_add_objects_to_container", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_add_objects_to_container"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCcont_del_objids(pdcid_t cont_id, int nobj, pdcid_t *obj_ids) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDC_Client_del_objects_to_container(nobj, obj_ids, cont_id); + perr_t ret_value = SUCCEED; + ret_value = PDC_Client_del_objects_to_container(nobj, obj_ids, cont_id); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDC_Client_del_objects_to_container", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_del_objects_to_container"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7801,11 +6857,9 @@ perr_t PDCcont_get_objids(pdcid_t cont_id ATTRIBUTE(unused), int *nobj ATTRIBUTE(unused), pdcid_t **obj_ids ATTRIBUTE(unused)) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - // TODO + perr_t ret_value = SUCCEED; FUNC_LEAVE(ret_value); } @@ -7814,11 +6868,11 @@ perr_t PDCcont_put_tag(pdcid_t cont_id, char *tag_name, void *tag_value, pdc_var_type_t value_type, psize_t value_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_t kvtag; - FUNC_ENTER(NULL); - kvtag.name = tag_name; kvtag.value = (void *)tag_value; kvtag.type = value_type; @@ -7827,10 +6881,10 @@ PDCcont_put_tag(pdcid_t cont_id, char *tag_name, void *tag_value, pdc_var_type_t ret_value = PDC_add_kvtag(cont_id, &kvtag, 1); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDCcont_put_tag", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDCcont_put_tag"); done: - fflush(stdout); + FUNC_LEAVE(ret_value); } @@ -7838,43 +6892,43 @@ perr_t PDCcont_get_tag(pdcid_t cont_id, char *tag_name, void **tag_value, pdc_var_type_t *value_type, psize_t *value_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_t *kvtag = NULL; - FUNC_ENTER(NULL); - ret_value = PDC_get_kvtag(cont_id, tag_name, &kvtag, 1); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDC_get_kvtag", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_get_kvtag"); *tag_value = kvtag->value; *value_type = kvtag->type; *value_size = kvtag->size; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCcont_del_tag(pdcid_t cont_id, char *tag_name) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + ret_value = PDCtag_delete(cont_id, tag_name, 1); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: error with PDCtag_delete", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDCtag_delete"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; pdcid_t obj_id, obj_prop, obj_region; perr_t ret; @@ -7883,8 +6937,6 @@ PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id struct _pdc_id_info * id_info = NULL; pdcid_t transfer_request; - FUNC_ENTER(NULL); - id_info = PDC_find_id(cont_id); info = (struct _pdc_cont_info *)(id_info->obj_ptr); @@ -7897,7 +6949,7 @@ PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id obj_id = PDCobj_create(cont_id, obj_name, obj_prop); if (obj_id <= 0) - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error creating object [%s]", pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(0, "Error creating object [%s]", obj_name); uint64_t offset = 0; // size = ceil(size/sizeof(int)); @@ -7905,48 +6957,43 @@ PDCobj_put_data(const char *obj_name, void *data, uint64_t size, pdcid_t cont_id transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj_id, obj_region, obj_region); if (transfer_request == 0) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with region transfer create for obj [%s]", - pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(0, "Error with region transfer create for obj [%s]", obj_name); } ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with region transfer start for obj [%s]", - pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(0, "Error with region transfer start for obj [%s]", obj_name); } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with region transfer wait for obj [%s]", - pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(0, "Error with region transfer wait for obj [%s]", obj_name); } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with region transfer close for obj [%s]", - pdc_client_mpi_rank_g, obj_name); + PGOTO_ERROR(0, "Error with region transfer close for obj [%s]", obj_name); } ret = PDCregion_close(obj_region); if (ret != SUCCEED) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with PDCregion_close for obj [%s]", pdc_client_mpi_rank_g, - obj_name); + PGOTO_ERROR(0, "Error with PDCregion_close for obj [%s]", obj_name); } ret = PDCprop_close(obj_prop); if (ret != SUCCEED) { - PGOTO_ERROR(0, "==PDC_CLIENT[%d]: Error with PDCprop_close for obj [%s]", pdc_client_mpi_rank_g, - obj_name); + PGOTO_ERROR(0, "Error with PDCprop_close for obj [%s]", obj_name); } ret_value = obj_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_get_data(pdcid_t obj_id, void *data, uint64_t size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t offset = 0; pdcid_t reg; @@ -7955,42 +7002,39 @@ PDCobj_get_data(pdcid_t obj_id, void *data, uint64_t size) reg = PDCregion_create(1, &offset, &size); transfer_request = PDCregion_transfer_create(data, PDC_READ, obj_id, reg, reg); if (transfer_request == 0) { - goto done; + PGOTO_DONE(ret_value); } ret_value = PDCregion_transfer_start(transfer_request); if (ret_value != SUCCEED) { - goto done; + PGOTO_ERROR(FAIL, "Error when calling PDCregion_transfer_start"); } ret_value = PDCregion_transfer_wait(transfer_request); if (ret_value != SUCCEED) { - goto done; + PGOTO_ERROR(FAIL, "Error when calling PDCregion_transfer_wait"); } - ret_value = PDCregion_transfer_close(transfer_request); if (ret_value != SUCCEED) { - - goto done; + PGOTO_ERROR(FAIL, "Error when calling PDCregion_transfer_close"); } - ret_value = PDCregion_close(reg); if (ret_value != SUCCEED) { - goto done; + PGOTO_ERROR(FAIL, "Error when calling PDCregion_close"); } + done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Client_del_metadata(pdcid_t obj_id, int is_cont) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t meta_id; struct _pdc_obj_info * obj_prop; struct _pdc_cont_info *cont_prop; - FUNC_ENTER(NULL); - if (is_cont) { cont_prop = PDC_cont_get_info(obj_id); meta_id = cont_prop->cont_info_pub->meta_id; @@ -8002,22 +7046,20 @@ PDC_Client_del_metadata(pdcid_t obj_id, int is_cont) ret_value = PDC_Client_delete_metadata_by_id(meta_id); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDC_Client_delete_metadata_by_id", - pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_delete_metadata_by_id"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_put_tag(pdcid_t obj_id, char *tag_name, void *tag_value, pdc_var_type_t value_type, psize_t value_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_t kvtag; - FUNC_ENTER(NULL); - kvtag.name = tag_name; kvtag.value = (void *)tag_value; kvtag.type = value_type; @@ -8025,10 +7067,9 @@ PDCobj_put_tag(pdcid_t obj_id, char *tag_name, void *tag_value, pdc_var_type_t v ret_value = PDC_add_kvtag(obj_id, &kvtag, 0); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDC_add_kvtag", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_add_kvtag"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -8036,48 +7077,46 @@ perr_t PDCobj_get_tag(pdcid_t obj_id, char *tag_name, void **tag_value, pdc_var_type_t *value_type, psize_t *value_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_t *kvtag = NULL; - FUNC_ENTER(NULL); - ret_value = PDC_get_kvtag(obj_id, tag_name, &kvtag, 0); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDC_get_kvtag", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_get_kvtag"); *tag_value = kvtag->value; *value_type = kvtag->type; *value_size = kvtag->size; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_del_tag(pdcid_t obj_id, char *tag_name) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + ret_value = PDCtag_delete(obj_id, tag_name, 0); if (ret_value != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: Error with PDC_del_kvtag", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_del_kvtag"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } void PDC_get_server_from_query(pdc_query_t *query, uint32_t *servers, int32_t *n) { + FUNC_ENTER(NULL); + uint32_t id; int32_t i, exist; - FUNC_ENTER(NULL); - if (NULL == query) PGOTO_DONE_VOID; @@ -8100,17 +7139,16 @@ PDC_get_server_from_query(pdc_query_t *query, uint32_t *servers, int32_t *n) PDC_get_server_from_query(query->right, servers, n); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } int gen_query_id() { - int ret_value = 0; - FUNC_ENTER(NULL); - ret_value = rand(); + int ret_value = 0; + ret_value = rand(); FUNC_LEAVE(ret_value); } @@ -8118,13 +7156,13 @@ gen_query_id() hg_return_t PDC_recv_nhits(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; send_nhits_t * in = (send_nhits_t *)callback_info->arg; struct _pdc_query_result_list *result_elt; - FUNC_ENTER(NULL); - - LOG_INFO("==PDC_CLIENT[%d]: received %" PRIu64 " hits from server\n", pdc_client_mpi_rank_g, in->nhits); + LOG_INFO("Received %" PRIu64 " hits from server\n", in->nhits); DL_FOREACH(pdcquery_result_list_head_g, result_elt) { @@ -8135,9 +7173,8 @@ PDC_recv_nhits(const struct hg_cb_info *callback_info) } hg_atomic_decr32(&atomic_work_todo_g); - free(in); + in = (send_nhits_t *)PDC_free(in); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -8145,6 +7182,8 @@ perr_t PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhits, pdc_selection_t *sel, void *data ATTRIBUTE(unused)) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = 0; uint32_t * target_servers = NULL; @@ -8154,14 +7193,12 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi struct _pdc_client_lookup_args lookup_args; struct _pdc_query_result_list *result; - FUNC_ENTER(NULL); - query_xfer = PDC_serialize_query(query); if (query_xfer == NULL) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_serialize_query", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_serialize_query"); // Find unique server IDs that has metadata of the queried objects - target_servers = (uint32_t *)calloc(pdc_server_num_g, sizeof(uint32_t)); + target_servers = (uint32_t *)PDC_calloc(pdc_server_num_g, sizeof(uint32_t)); PDC_get_server_from_query(query, target_servers, &ntarget); query_xfer->n_unique_obj = ntarget; query_xfer->query_id = gen_query_id(); @@ -8169,7 +7206,7 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi query_xfer->manager = target_servers[0]; query_xfer->get_op = (int)get_op; - result = (struct _pdc_query_result_list *)calloc(1, sizeof(struct _pdc_query_result_list)); + result = (struct _pdc_query_result_list *)PDC_calloc(1, sizeof(struct _pdc_query_result_list)); result->query_id = query_xfer->query_id; DL_APPEND(pdcquery_result_list_head_g, result); @@ -8192,7 +7229,7 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi query_xfer->prev_server_id = prev_server; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, send_data_query_register_id_g, &handle); @@ -8205,8 +7242,8 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: send data query to server %u failed ... ret_value = %d", - pdc_client_mpi_rank_g, server_id, lookup_args.ret); + PGOTO_ERROR(FAIL, "Send data query to server %u failed ... ret_value = %d", server_id, + lookup_args.ret); HG_Destroy(handle); } @@ -8226,9 +7263,8 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi } done: - fflush(stdout); if (target_servers) - free(target_servers); + target_servers = (uint32_t *)PDC_free(target_servers); FUNC_LEAVE(ret_value); } @@ -8236,6 +7272,8 @@ PDC_send_data_query(pdc_query_t *query, pdc_query_get_op_t get_op, uint64_t *nhi hg_return_t PDC_recv_coords(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_bulk_t local_bulk_handle = callback_info->info.bulk.local_handle; struct bulk_args_t * bulk_args = (struct bulk_args_t *)callback_info->arg; @@ -8246,8 +7284,6 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) void * buf; pdc_int_ret_t out; - FUNC_ENTER(NULL); - out.ret = 1; if (callback_info->ret != HG_SUCCESS) { @@ -8260,8 +7296,7 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) query_id = bulk_args->query_id; origin = bulk_args->origin; - LOG_INFO("==PDC_CLIENT[%d]: received %" PRIu64 " coords from server %d\n", pdc_client_mpi_rank_g, - nhits, origin); + LOG_INFO("Received %" PRIu64 " coords from server %d\n", nhits, origin); if (nhits > 0) { ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, @@ -8273,14 +7308,14 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) if (result_elt->query_id == query_id) { result_elt->ndim = ndim; result_elt->nhits = nhits; - result_elt->coords = (uint64_t *)malloc(nhits * ndim * sizeof(uint64_t)); + result_elt->coords = (uint64_t *)PDC_malloc(nhits * ndim * sizeof(uint64_t)); memcpy(result_elt->coords, buf, nhits * ndim * sizeof(uint64_t)); break; } } if (result_elt == NULL) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: Invalid task ID!", pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Invalid task ID"); } // End else done: @@ -8295,9 +7330,8 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) if (ret_value != HG_SUCCESS) PGOTO_ERROR(ret_value, "Could not respond"); - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -8308,14 +7342,16 @@ PDCselection_free(pdc_selection_t *sel) FUNC_ENTER(NULL); if (sel->coords_alloc > 0 && sel->coords) - free(sel->coords); + sel->coords = (uint64_t *)PDC_free(sel->coords); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } perr_t PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle; @@ -8327,10 +7363,8 @@ PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) struct _pdc_obj_info * obj_prop; struct _pdc_query_result_list *result_elt; - FUNC_ENTER(NULL); - if (sel == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: NULL input!", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "NULL input"); if (PDC_find_id(obj_id) != NULL) { obj_prop = PDC_obj_get_info(obj_id); @@ -8346,21 +7380,21 @@ PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) debug_server_id_count[server_id]++; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); HG_Create(send_context_g, pdc_server_info_g[server_id].addr, get_sel_data_register_id_g, &handle); hg_ret = HG_Forward(handle, pdc_client_check_int_ret_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: ERROR with HG_Forward", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with HG_Forward"); // Wait for response from server hg_atomic_set32(&atomic_work_todo_g, 1); PDC_Client_check_response(&send_context_g); if (lookup_args.ret != 1) { - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: send data selection to server %u failed ... ret_value = %d", - pdc_client_mpi_rank_g, server_id, lookup_args.ret); + PGOTO_ERROR(FAIL, "Send data selection to server %u failed ... ret_value = %d", server_id, + lookup_args.ret); } // Wait for server to send data @@ -8376,8 +7410,7 @@ PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) if (result_elt->data_arr[i] != NULL) { memcpy(data + off, result_elt->data_arr[i], result_elt->data_arr_size[i]); off += result_elt->data_arr_size[i]; - free(result_elt->data_arr[i]); - result_elt->data_arr[i] = NULL; + result_elt->data_arr[i] = (void **)PDC_free(result_elt->data_arr[i]); } } result_elt->recv_data_nhits = 0; @@ -8386,7 +7419,6 @@ PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) } done: - fflush(stdout); HG_Destroy(handle); FUNC_LEAVE(ret_value); @@ -8395,6 +7427,8 @@ PDC_Client_get_sel_data(pdcid_t obj_id, pdc_selection_t *sel, void *data) hg_return_t PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_bulk_t local_bulk_handle = callback_info->info.bulk.local_handle; struct bulk_args_t * bulk_args = (struct bulk_args_t *)callback_info->arg; @@ -8404,8 +7438,6 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) void * buf; pdc_int_ret_t out; - FUNC_ENTER(NULL); - out.ret = 1; if (callback_info->ret != HG_SUCCESS) { @@ -8426,11 +7458,11 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) { if (result_elt->query_id == query_id) { if (result_elt->data_arr == NULL) { - result_elt->data_arr = calloc(sizeof(void *), pdc_server_num_g); - result_elt->data_arr_size = calloc(sizeof(uint64_t *), pdc_server_num_g); + result_elt->data_arr = PDC_calloc(sizeof(void *), pdc_server_num_g); + result_elt->data_arr_size = PDC_calloc(sizeof(uint64_t *), pdc_server_num_g); } - result_elt->data_arr[seq_id] = malloc(bulk_args->nbytes); + result_elt->data_arr[seq_id] = PDC_malloc(bulk_args->nbytes); memcpy(result_elt->data_arr[seq_id], buf, bulk_args->nbytes); result_elt->data_arr_size[seq_id] = bulk_args->nbytes; result_elt->recv_data_nhits += nhits; @@ -8438,14 +7470,13 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) } } if (result_elt == NULL) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: Invalid task ID!", pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Invalid task ID"); if (result_elt->recv_data_nhits == result_elt->nhits) { hg_atomic_decr32(&atomic_work_todo_g); } else if (result_elt->recv_data_nhits > result_elt->nhits) { - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_CLIENT[%d]: received more results data than expected!", - pdc_client_mpi_rank_g); + PGOTO_ERROR(HG_OTHER_ERROR, "Received more results data than expected"); hg_atomic_decr32(&atomic_work_todo_g); } } // End else @@ -8461,9 +7492,8 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) if (ret_value != HG_SUCCESS) PGOTO_ERROR(ret_value, "Could not respond"); - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -8471,94 +7501,41 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info) void report_avg_server_profiling_rst() { + FUNC_ENTER(NULL); + for (int i = 0; i < pdc_server_num_g; i++) { double avg_srv_time = server_call_count_g[i] > 0 ? (double)(server_time_total_g[i]) / (double)(server_call_count_g[i]) : 0.0; double srv_mem_usage = server_mem_usage_g[i] / 1024.0 / 1024.0; - LOG_INFO("==PDC_CLIENT[%d]: server %d, avg profiling time: %.4f ms, memory usage: %.4f MB\n", - pdc_client_mpi_rank_g, i, avg_srv_time / 1000.0, srv_mem_usage); + LOG_INFO("Server %d, avg profiling time: %.4f ms, memory usage: %.4f MB\n", i, avg_srv_time / 1000.0, + srv_mem_usage); } + + FUNC_LEAVE_VOID(); } /******************** METADATA INDEX BEGINS *******************************/ -// metadata_index_create callback -// static hg_return_t -// client_metadata_index_create_cb(const struct hg_cb_info *callback_info) -// { -// hg_return_t ret_value = HG_SUCCESS; -// hg_handle_t handle; -// struct client_lookup_args *client_lookup_args; - -// metadata_index_create_out_t output; - -// FUNC_ENTER(NULL); - -// /* LOG_INFO("Entered client_rpc_cb()"); */ -// client_lookup_args = (struct client_lookup_args*) callback_info->arg; -// handle = callback_info->info.forward.handle; - -// /* Get output from server*/ -// ret_value = HG_Get_output(handle, &output); -// /* LOG_INFO("Return value=%llu\n", output.ret); */ -// client_lookup_args->obj_id = output.ret; - -// hg_atomic_decr32(&atomic_work_todo_g); - -// done: -// HG_Destroy(handle); -// FUNC_LEAVE(ret_value); -// } - -// metadata_index_delete callback -// static hg_return_t -// client_metadata_index_delete_cb(const struct hg_cb_info *callback_info) -// { -// hg_return_t ret_value = HG_SUCCESS; -// hg_handle_t handle; -// struct client_lookup_args *client_lookup_args; - -// metadata_index_delete_out_t output; - -// FUNC_ENTER(NULL); - -// /* LOG_INFO("Entered client_rpc_cb()"); */ -// client_lookup_args = (struct client_lookup_args*) callback_info->arg; -// handle = callback_info->info.forward.handle; - -// /* Get output from server*/ -// ret_value = HG_Get_output(handle, &output); -// /* LOG_INFO("Return value=%llu\n", output.ret); */ -// client_lookup_args->obj_id = output.ret; - -// hg_atomic_decr32(&atomic_work_todo_g); - -// done: -// HG_Destroy(handle); -// FUNC_LEAVE(ret_value); -// } - // get_server_info_callback static hg_return_t client_dart_get_server_info_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; struct client_genetic_lookup_args *client_lookup_args; dart_get_server_info_out_t output; - FUNC_ENTER(NULL); - /* LOG_INFO("Entered client_rpc_cb()"); */ client_lookup_args = (struct client_genetic_lookup_args *)callback_info->arg; handle = callback_info->info.forward.handle; /* Get output from server*/ - ret_value = HG_Get_output(handle, &output); - /* LOG_INFO("Return value=%llu\n", output.ret); */ + ret_value = HG_Get_output(handle, &output); client_lookup_args->int64_value1 = output.indexed_word_count; client_lookup_args->int64_value2 = output.request_count; @@ -8571,12 +7548,11 @@ client_dart_get_server_info_cb(const struct hg_cb_info *callback_info) void dart_retrieve_server_info_cb(dart_server *server_ptr) { + FUNC_ENTER(NULL); perr_t srv_lookup_rst = PDC_Client_try_lookup_server(server_ptr->id, 0); - if (srv_lookup_rst == FAIL) { - println("the server %d cannot be connected. ", server_ptr->id); - goto done; - } + if (srv_lookup_rst == FAIL) + PGOTO_ERROR_VOID("the server %d cannot be connected", server_ptr->id); // Mercury comm here. hg_handle_t dart_get_server_info_handle; @@ -8591,7 +7567,7 @@ dart_retrieve_server_info_cb(dart_server *server_ptr) LOG_INFO("dart_get_server_info_g(): Could not start HG_Forward() on serverId = %ld with host = %s\n", server_ptr->id, pdc_server_info_g[server_ptr->id].addr_string); HG_Destroy(dart_get_server_info_handle); - return; + FUNC_LEAVE_VOID(); } // Wait for response from server @@ -8600,20 +7576,26 @@ dart_retrieve_server_info_cb(dart_server *server_ptr) server_ptr->indexed_word_count = lookup_args.int64_value1; server_ptr->request_count = lookup_args.int64_value2; + done: HG_Destroy(dart_get_server_info_handle); + + FUNC_LEAVE_VOID(); } DART * get_dart_g() { - return dart_g; + FUNC_ENTER(NULL); + FUNC_LEAVE(dart_g); } // Bulk static hg_return_t dart_perform_one_server_on_receive_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; struct bulk_args_t * client_lookup_args; hg_handle_t handle; @@ -8627,47 +7609,30 @@ dart_perform_one_server_on_receive_cb(const struct hg_cb_info *callback_info) struct bulk_args_t * bulk_args; void * recv_meta; - FUNC_ENTER(NULL); - - // println("[Client_Side_Bulk] Entering dart_perform_one_server_on_receive_cb. rank = %d", - // pdc_client_mpi_rank_g); client_lookup_args = (struct bulk_args_t *)callback_info->arg; - // (client_lookup_args->n_meta) = (uint32_t *)malloc(sizeof(uint32_t)); - handle = callback_info->info.forward.handle; - // println("[Client_Side_Bulk] before get output. rank = %d", pdc_client_mpi_rank_g); - // Get output from server - ret_value = HG_Get_output(handle, &output); + handle = callback_info->info.forward.handle; + ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_INFO("==PDC_CLIENT[%d]: dart_perform_one_server_on_receive_cb - error HG_Get_output\n", - pdc_client_mpi_rank_g); + LOG_INFO("dart_perform_one_server_on_receive_cb - error HG_Get_output\n"); client_lookup_args->n_meta = 0; - goto done; + PGOTO_DONE(ret_value); } client_lookup_args->server_time_elapsed = output.server_time_elapsed; client_lookup_args->server_memory_consumption = output.server_memory_consumption; - // LOG_INFO("lookup_args.op_type = %d and output.op_type = %d\n", client_lookup_args->op_type, - // output.op_type); if (ret_value == HG_SUCCESS && output.has_bulk == 0) { - // LOG_INFO("=== NO Bulk data should be taken care of. \n"); client_lookup_args->n_meta = 0; - goto done; + PGOTO_DONE(ret_value); } - // println("[Client_Side_Bulk] before copy n_meta. rank = %d", pdc_client_mpi_rank_g); - // LOG_INFO("==PDC_CLIENT: Received response from server with bulk handle, n_buf=%d\n", output.ret); - n_meta = output.n_items; - + n_meta = output.n_items; client_lookup_args->n_meta = n_meta; - // LOG_INFO("*(client_lookup_args->n_meta) = %ld\n", *(client_lookup_args->n_meta)); - - // println("[Client_Side_Bulk] before determining size. rank = %d", pdc_client_mpi_rank_g); if (n_meta == 0) { client_lookup_args->obj_ids = NULL; client_lookup_args->n_meta = 0; - goto done; + PGOTO_DONE(ret_value); } // Prepare to receive BULK data. @@ -8680,42 +7645,34 @@ dart_perform_one_server_on_receive_cb(const struct hg_cb_info *callback_info) /* LOG_INFO("nbytes=%u\n", bulk_args->nbytes); */ if (client_lookup_args->is_id == 1) { - recv_meta = (void *)calloc(n_meta, sizeof(uint64_t)); + recv_meta = (void *)PDC_calloc(n_meta, sizeof(uint64_t)); } else { // throw an error - LOG_INFO("==PDC_CLIENT[%d]: ERROR - DART queries can only retrieve object IDs. Please check " - "client_lookup_args->is_id\n", - pdc_client_mpi_rank_g); - goto done; + LOG_ERROR("DART queries can only retrieve object IDs. Please check " + "client_lookup_args->is_id\n"); + PGOTO_DONE(ret_value); } /* Create a new bulk handle to read the data */ HG_Bulk_create(hg_info->hg_class, 1, (void **)&recv_meta, (hg_size_t *)&client_lookup_args->nbytes, HG_BULK_READWRITE, &local_bulk_handle); - // println("[Client_Side_Bulk] after bulk create. rank = %d", pdc_client_mpi_rank_g); - /* Pull bulk data */ ret_value = HG_Bulk_transfer(hg_info->context, hg_test_bulk_transfer_cb, client_lookup_args, HG_BULK_PULL, hg_info->addr, origin_bulk_handle, 0, local_bulk_handle, 0, client_lookup_args->nbytes, &hg_bulk_op_id); - // println("[Client_Side_Bulk] after bulk transfer. rank = %d", pdc_client_mpi_rank_g); - if (ret_value != HG_SUCCESS) { - LOG_INFO("Could not read bulk data\n"); client_lookup_args->n_meta = 0; - goto done; + PGOTO_ERROR(FAIL, "Could not read bulk data"); } hg_atomic_init32(&(client_lookup_args->bulk_done_flag), 0); hg_atomic_incr32(&bulk_todo_g); - // hg_atomic_set32(&bulk_transfer_done_g, 0); // loop PDC_Client_check_bulk(send_context_g); - // println("[Client_Side_Bulk] after check bulk. rank = %d", pdc_client_mpi_rank_g); while (1) { if (hg_atomic_get32(&(client_lookup_args->bulk_done_flag)) == 1) { @@ -8724,12 +7681,12 @@ dart_perform_one_server_on_receive_cb(const struct hg_cb_info *callback_info) } done: - // println("[Client_Side_Bulk] finish bulk. rank = %d", pdc_client_mpi_rank_g); hg_atomic_decr32(&atomic_work_todo_g); HG_Free_output(handle, &output); // we destroy the handle here. There will be no need to clean it up in the loop from the request // initiator function HG_Destroy(handle); + FUNC_LEAVE(ret_value); } @@ -8737,35 +7694,37 @@ perr_t _dart_send_request_to_one_server(int server_id, dart_perform_one_server_in_t *dart_in, struct bulk_args_t *lookup_args_ptr, hg_handle_t *handle) { + FUNC_ENTER(NULL); + hg_return_t hg_ret; HG_Create(send_context_g, pdc_server_info_g[server_id].addr, dart_perform_one_server_g, handle); if (handle == NULL) { - LOG_INFO("==CLIENT[%d]: Error with _dart_send_request_to_one_server\n", pdc_client_mpi_rank_g); - return FAIL; + LOG_INFO("Error with _dart_send_request_to_one_server\n"); + FUNC_LEAVE(FAIL); } lookup_args_ptr->server_id = server_id; - // println("dart_in->attr_key: %s", dart_in->attr_key); hg_ret = HG_Forward(*handle, dart_perform_one_server_on_receive_cb, lookup_args_ptr, dart_in); hg_atomic_incr32(&atomic_work_todo_g); if (hg_ret != HG_SUCCESS) { - LOG_INFO("==CLIENT[%d]: _dart_send_request_to_one_server(): Could not start HG_Forward()\n", - pdc_client_mpi_rank_g); + LOG_INFO("_dart_send_request_to_one_server(): Could not start HG_Forward()\n"); hg_atomic_decr32(&atomic_work_todo_g); - return FAIL; + FUNC_LEAVE(FAIL); } + // waiting for response and get the results if any. // Wait for response from server - // hg_atomic_cas32(&atomic_work_todo_g, 0, num_requests); PDC_Client_check_response(&send_context_g); // This will block until all requests are done. - return SUCCEED; + FUNC_LEAVE(SUCCEED); } int _aggregate_dart_results_from_all_servers(struct bulk_args_t *lookup_args, Set *output_set, int num_requests) { + FUNC_ENTER(NULL); + int total_num_results = 0; for (int i = 0; i < num_requests; i++) { // aggregate result only for query operations @@ -8775,44 +7734,48 @@ _aggregate_dart_results_from_all_servers(struct bulk_args_t *lookup_args, Set *o if (lookup_args[i].is_id == 1) { int n_meta = lookup_args[i].n_meta; for (int k = 0; k < n_meta; k++) { - uint64_t *id = (uint64_t *)malloc(sizeof(uint64_t)); + uint64_t *id = (uint64_t *)PDC_malloc(sizeof(uint64_t)); *id = lookup_args[i].obj_ids[k]; set_insert(output_set, id); } total_num_results += n_meta; } } - return total_num_results; + + FUNC_LEAVE(total_num_results); } int get_dart_insert_count() { - return dart_insert_count; + FUNC_ENTER(NULL); + FUNC_LEAVE(dart_insert_count); } uint64_t dart_perform_on_servers(index_hash_result_t **hash_result, int num_servers, dart_perform_one_server_in_t *dart_in, Set *output_set) { - struct bulk_args_t *lookup_args = (struct bulk_args_t *)calloc(num_servers, sizeof(struct bulk_args_t)); - uint64_t ret_value = 0; - hg_handle_t * dart_request_handles = (hg_handle_t *)calloc(num_servers, sizeof(hg_handle_t)); - int num_requests = 0; - uint32_t total_n_meta = 0; - dart_op_type_t op_type = dart_in->op_type; - - dart_in->src_client_id = pdc_client_mpi_rank_g; FUNC_ENTER(NULL); + struct bulk_args_t *lookup_args = + (struct bulk_args_t *)PDC_calloc(num_servers, sizeof(struct bulk_args_t)); + uint64_t ret_value = 0; + hg_handle_t * dart_request_handles = (hg_handle_t *)PDC_calloc(num_servers, sizeof(hg_handle_t)); + int num_requests = 0; + uint32_t total_n_meta = 0; + dart_op_type_t op_type = dart_in->op_type; + + dart_in->src_client_id = pdc_client_mpi_rank_g; + stopwatch_t timer; timer_start(&timer); // send the requests to the required servers. for (int i = 0; i < num_servers; i++) { int server_id = (*hash_result)[i].server_id; if (PDC_Client_try_lookup_server(server_id, 0) != SUCCEED) - PGOTO_ERROR(FAIL, "==CLIENT[%d]: ERROR with PDC_Client_try_lookup_server", pdc_client_mpi_rank_g); + PGOTO_ERROR(FAIL, "Error with PDC_Client_try_lookup_server"); lookup_args[i].is_id = 1; lookup_args[i].op_type = op_type; @@ -8843,23 +7806,7 @@ dart_perform_on_servers(index_hash_result_t **hash_result, int num_servers, server_call_count_g[srv_id] += 1; server_mem_usage_g[srv_id] = lookup_args[i].server_memory_consumption; } - // println("[CLIENT %d] (dart_perform_on_servers) %s on %d servers and get %d results, time : " - // "%.4f ms. server_time_elapsed: %.4f ms", - // pdc_client_mpi_rank_g, is_index_write_op(op_type) ? "write dart index" : "read dart index", - // num_servers, total_n_meta, timer_delta_ms(&timer), total_server_elapsed / 1000.0); - // if (memory_debug_g == 0) { - // for (int i = 0; i < num_servers; i++) { - // println("[SERVER %d] memory_usage: %" PRId64 "", i, - // lookup_args[i].server_memory_consumption); - // } - // } } - - // println("[CLIENT %d] (dart_perform_on_servers) %s on %d servers and get %d results, time : " - // "%.4f ms. ", - // pdc_client_mpi_rank_g, is_index_write_op(op_type) ? "write dart index" : "read dart index", - // num_servers, total_n_meta, timer_delta_ms(&timer)); - // free(dart_request_handles); done: FUNC_LEAVE(ret_value); } @@ -8868,10 +7815,12 @@ perr_t PDC_Client_search_obj_ref_through_dart(dart_hash_algo_t hash_algo, char *query_string, dart_object_ref_type_t ref_type, int *n_res, uint64_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (n_res == NULL || out == NULL) { - return ret_value; + FUNC_LEAVE(ret_value); } stopwatch_t timer; @@ -8885,9 +7834,9 @@ PDC_Client_search_obj_ref_through_dart(dart_hash_algo_t hash_algo, char *query_s dart_determine_query_token_by_key_query(k_query, &tok, &dart_op); if (tok == NULL) { - LOG_INFO("==PDC_CLIENT[%d]: Error with tok\n", pdc_client_mpi_rank_g); + LOG_ERROR("tok was NULL\n"); ret_value = FAIL; - return ret_value; + FUNC_LEAVE(ret_value); } out[0] = NULL; @@ -8930,31 +7879,26 @@ PDC_Client_search_obj_ref_through_dart(dart_hash_algo_t hash_algo, char *query_s // Pick deduplicated result. *n_res = set_num_entries(result_set); - // println("num_ids = %d", num_ids); if (*n_res > 0) { - *out = (uint64_t *)calloc(*n_res, sizeof(uint64_t)); + *out = (uint64_t *)PDC_calloc(*n_res, sizeof(uint64_t)); uint64_t **set_arr = (uint64_t **)set_to_array(result_set); for (i = 0; i < *n_res; i++) { (*out)[i] = set_arr[i][0]; } - free(set_arr); + set_arr = (uint64_t **)PDC_free(set_arr); } set_free(result_set); // done: - free(k_query); - free(v_query); + k_query = (char *)PDC_free(k_query); + v_query = (char *)PDC_free(v_query); if (tok != NULL) - free(tok); + tok = (char *)PDC_free(tok); timer_pause(&timer); - // LOG_INFO("perform search [ %s ] on %d servers from rank %d, total_count %" PRIu64 - // ", n_res %d, duration: %.4f ms\n", - // query_string, num_servers, pdc_client_mpi_rank_g, total_count, *n_res, - // timer_delta_ms(&timer) / 1000.0); - // memory_debug_g = 1; - return ret_value; + + FUNC_LEAVE(ret_value); } perr_t @@ -8962,6 +7906,7 @@ PDC_Client_delete_obj_ref_from_dart(dart_hash_algo_t hash_algo, char *attr_key, size_t attr_vsize, pdc_c_var_type_t attr_vtype, dart_object_ref_type_t ref_type, uint64_t data) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; dart_perform_one_server_in_t input_param; @@ -8996,7 +7941,7 @@ PDC_Client_delete_obj_ref_from_dart(dart_hash_algo_t hash_algo, char *attr_key, dart_perform_on_servers(&hash_result, num_servers, &input_param, NULL); // done: - return ret_value; + FUNC_LEAVE(ret_value); } perr_t @@ -9004,7 +7949,8 @@ PDC_Client_insert_obj_ref_into_dart(dart_hash_algo_t hash_algo, char *attr_key, size_t attr_vsize, pdc_c_var_type_t attr_vtype, dart_object_ref_type_t ref_type, uint64_t data) { - // println("input: attr_key = %s, attr_val = %s", attr_key, attr_val); + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; dart_perform_one_server_in_t input_param; input_param.op_type = OP_INSERT; @@ -9039,7 +7985,7 @@ PDC_Client_insert_obj_ref_into_dart(dart_hash_algo_t hash_algo, char *attr_key, dart_perform_on_servers(&hash_result, num_servers, &input_param, NULL); // done: - return ret_value; + FUNC_LEAVE(ret_value); } /******************** METADATA INDEX ENDS ***********************************/ @@ -9053,6 +7999,8 @@ void get_first_sender(int *first_sender_global_rank, int *num_groups, int *sender_group_id, int *rank_in_group, int *sender_group_size, int *prefer_custom_exchange) { + FUNC_ENTER(NULL); + if (pdc_client_mpi_size_g >= pdc_server_num_g) { *sender_group_size = pdc_server_num_g; *num_groups = pdc_client_mpi_size_g / (*sender_group_size); @@ -9069,6 +8017,8 @@ get_first_sender(int *first_sender_global_rank, int *num_groups, int *sender_gro *sender_group_size = pdc_client_mpi_size_g; *prefer_custom_exchange = 0; } + + FUNC_LEAVE_VOID(); } void @@ -9092,21 +8042,21 @@ PDC_assign_server(int32_t *my_server_start, int32_t *my_server_end, int32_t *my_ } } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } // All clients collectively query all servers, each client gets partial results perr_t PDC_Client_query_kvtag_col(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ids, int *query_sent) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int32_t my_server_start, my_server_end, my_server_count; int32_t i; int nmeta = 0; uint64_t *temp_ids = NULL; - FUNC_ENTER(NULL); - PDC_assign_server(&my_server_start, &my_server_end, &my_server_count); *n_res = 0; @@ -9117,73 +8067,71 @@ PDC_Client_query_kvtag_col(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ *query_sent = 0; break; } - /* LOG_INFO("==PDC_CLIENT[%d]: querying server %u\n", pdc_client_mpi_rank_g, i); */ temp_ids = NULL; ret_value = PDC_Client_query_kvtag_server((uint32_t)i, kvtag, &nmeta, &temp_ids); if (ret_value != SUCCEED) { - PGOTO_ERROR(FAIL, "==PDC_CLIENT[%d]: querying server %u", pdc_client_mpi_rank_g, i); + PGOTO_ERROR(FAIL, "Querying server %u", i); } if (i == my_server_start) { *pdc_ids = temp_ids; } else if (nmeta > 0) { - *pdc_ids = (uint64_t *)realloc(*pdc_ids, sizeof(uint64_t) * (*n_res + nmeta)); + *pdc_ids = (uint64_t *)PDC_realloc(*pdc_ids, sizeof(uint64_t) * (*n_res + nmeta)); memcpy(*pdc_ids + (*n_res), temp_ids, nmeta * sizeof(uint64_t)); - free(temp_ids); + temp_ids = (uint64_t *)PDC_free(temp_ids); } - *n_res = *n_res + nmeta; - /* LOG_INFO("==PDC_CLIENT[%d]: server %u returned %d res \n", pdc_client_mpi_rank_g, i, *n_res); */ + *n_res = *n_res + nmeta; *query_sent = 1; } done: - // memory_debug_g = 1; - fflush(stdout); FUNC_LEAVE(ret_value); } void _standard_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MPI_Comm world_comm) { + FUNC_ENTER(NULL); + int i = 0, ntotal = 0, *disp = NULL; double stime = 0.0, duration = 0.0; stime = MPI_Wtime(); - int *all_nmeta_array = (int *)calloc(pdc_client_mpi_size_g, sizeof(int)); + int *all_nmeta_array = (int *)PDC_calloc(pdc_client_mpi_size_g, sizeof(int)); MPI_Allgather(n_res, 1, MPI_INT, all_nmeta_array, 1, MPI_INT, world_comm); duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for MPI_Allgather for Syncing ID count: %.4f ms", - pdc_client_mpi_rank_g, duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for MPI_Allgather for Syncing ID count: %.4f ms\n", duration * 1000.0); - disp = (int *)calloc(pdc_client_mpi_size_g, sizeof(int)); + disp = (int *)PDC_calloc(pdc_client_mpi_size_g, sizeof(int)); ntotal = 0; for (i = 0; i < pdc_client_mpi_size_g; i++) { disp[i] = ntotal; ntotal += all_nmeta_array[i]; } - uint64_t *all_ids = (uint64_t *)malloc(ntotal * sizeof(uint64_t)); + uint64_t *all_ids = (uint64_t *)PDC_malloc(ntotal * sizeof(uint64_t)); MPI_Allgatherv(*pdc_ids, *n_res, MPI_UINT64_T, all_ids, all_nmeta_array, disp, MPI_UINT64_T, world_comm); if (*pdc_ids) - free(*pdc_ids); + *pdc_ids = (uint64_t *)PDC_free(*pdc_ids); *n_res = ntotal; *pdc_ids = all_ids; - free(all_nmeta_array); - free(disp); + all_nmeta_array = (int *)PDC_free(all_nmeta_array); + disp = (int *)PDC_free(disp); - return; + FUNC_LEAVE_VOID(); } void _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MPI_Comm world_comm) { + FUNC_ENTER(NULL); + int i = 0, *all_nmeta = NULL, ntotal = 0, *disp = NULL; double stime = 0.0, duration = 0.0; @@ -9201,12 +8149,10 @@ _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MP int sub_comm_rank, sub_comm_size; MPI_Comm_rank(sub_comm, &sub_comm_rank); MPI_Comm_size(sub_comm, &sub_comm_size); - // println("World rank %d is rank %d in the new communicator of size %d", pdc_client_mpi_rank_g, - // sub_comm_rank, sub_comm_size); int n_sent_ranks = sub_comm_color == 1 ? sub_comm_size : pdc_client_mpi_size_g - sub_comm_size; int sub_n_obj_len = n_sent_ranks + 1; // the last element is the first rank who sent the query. - int *sub_n_obj_arr = (int *)calloc(sub_n_obj_len, sizeof(int)); + int *sub_n_obj_arr = (int *)PDC_calloc(sub_n_obj_len, sizeof(int)); // FIXME: how to get the global rank number of the first rank who sent the query? // currently, we use 0, since each time when PDC_Client_query_kvtag_col runs, it is always using the // first N ranks to send the query, where N is the number of servers. @@ -9214,7 +8160,8 @@ _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MP if (sub_comm_color == 1) { // the result is first gathered among the ranks who sent the requests. - MPI_Allgather(n_res, 1, MPI_INT, sub_n_obj_arr, 1, MPI_INT, sub_comm); // get the number of results + MPI_Allgather(n_res, 1, MPI_INT, sub_n_obj_arr, 1, MPI_INT, + sub_comm); // get the number of results } MPI_Barrier(world_comm); @@ -9224,18 +8171,16 @@ _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MP // now all ranks in the world_comm should know about the number of results from each rank who sent the // query. duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for MPI_Allgather for Syncing ID count: %.4f ms", - pdc_client_mpi_rank_g, duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for MPI_Allgather for Syncing ID count: %.4f ms\n", duration * 1000.0); // Okay, now each rank of the WORLD_COMM knows about the number of results from the clients who sent // queries. // Let's calculate the total number of results, and the displacement for each client. MPI_Barrier(world_comm); - all_nmeta = (int *)calloc(pdc_client_mpi_size_g, sizeof(int)); - disp = (int *)calloc(pdc_client_mpi_size_g, sizeof(int)); + all_nmeta = (int *)PDC_calloc(pdc_client_mpi_size_g, sizeof(int)); + disp = (int *)PDC_calloc(pdc_client_mpi_size_g, sizeof(int)); ntotal = 0; for (i = 0; i < sub_n_obj_len - 1; i++) { all_nmeta[i] = sub_n_obj_arr[i]; @@ -9243,10 +8188,10 @@ _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MP ntotal += all_nmeta[i]; } - // Finally, let's gather all the results. Since each client is getting a partial result which can be of - // different size, we need to use MPI_Allgatherv for gathering variable-size arrays from different + // Finally, let's gather all the results. Since each client is getting a partial result which can be + // of different size, we need to use MPI_Allgatherv for gathering variable-size arrays from different // clients. - uint64_t *all_ids = (uint64_t *)malloc(ntotal * sizeof(uint64_t)); + uint64_t *all_ids = (uint64_t *)PDC_malloc(ntotal * sizeof(uint64_t)); MPI_Allgatherv(*pdc_ids, *n_res, MPI_UINT64_T, all_ids, all_nmeta, disp, MPI_UINT64_T, world_comm); @@ -9255,20 +8200,22 @@ _customized_all_gather_result(int query_sent, int *n_res, uint64_t **pdc_ids, MP // Now, let's return the result to the caller *pdc_ids = all_ids; *n_res = ntotal; + + FUNC_LEAVE_VOID(); } // All clients collectively query all servers, all clients get all results perr_t PDC_Client_query_kvtag_mpi(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ids, MPI_Comm world_comm) { + FUNC_ENTER(NULL); + int local_increment = 1; MPI_Scan(&local_increment, &object_selection_query_counter_g, 1, MPI_INT, MPI_SUM, world_comm); perr_t ret_value = SUCCEED; int i, query_sent = 0; double stime = 0.0, duration = 0.0; - FUNC_ENTER(NULL); - MPI_Barrier(world_comm); stime = MPI_Wtime(); @@ -9277,26 +8224,16 @@ PDC_Client_query_kvtag_mpi(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ MPI_Barrier(world_comm); duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for C/S communication: %.4f ms", pdc_client_mpi_rank_g, - duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for C/S communication: %.4f ms\n", duration * 1000.0); if (*n_res <= 0) { *n_res = 0; *pdc_ids = NULL; } - else { - // print the pdc ids returned by this client, along with the client id - // LOG_INFO("==PDC_CLIENT == COLLECTIVE [%d]: ", pdc_client_mpi_rank_g); - // for (i = 0; i < *n_res; i++) - // LOG_INFO("%llu ", (*pdc_ids)[i]); - // LOG_INFO("\n"); - } - if (pdc_client_mpi_size_g == 1) { - goto done; - } + if (pdc_client_mpi_size_g == 1) + PGOTO_DONE_VOID; MPI_Barrier(world_comm); stime = MPI_Wtime(); @@ -9304,49 +8241,38 @@ PDC_Client_query_kvtag_mpi(const pdc_kvtag_t *kvtag, int *n_res, uint64_t **pdc_ _standard_all_gather_result(query_sent, n_res, pdc_ids, world_comm); duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for MPI_Allgatherv for Syncing ID array: %.4f ms", - pdc_client_mpi_rank_g, duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for MPI_Allgatherv for Syncing ID array: %.4f ms\n", duration * 1000.0); // deducplicating result with a Set. Set *result_set = set_new(ui64_hash, ui64_equal); set_register_free_function(result_set, free); for (i = 0; i < *n_res; i++) { - uint64_t *id = (uint64_t *)malloc(sizeof(uint64_t)); + uint64_t *id = (uint64_t *)PDC_malloc(sizeof(uint64_t)); *id = (*pdc_ids)[i]; set_insert(result_set, id); } - free(*pdc_ids); + *pdc_ids = (uint64_t *)PDC_free(*pdc_ids); // Pick deduplicated result. *n_res = set_num_entries(result_set); - // println("num_ids = %d", num_ids); if (*n_res > 0) { - *pdc_ids = (uint64_t *)calloc(*n_res, sizeof(uint64_t)); + *pdc_ids = (uint64_t *)PDC_calloc(*n_res, sizeof(uint64_t)); uint64_t **set_arr = (uint64_t **)set_to_array(result_set); for (i = 0; i < *n_res; i++) { (*pdc_ids)[i] = set_arr[i][0]; } - free(set_arr); + set_arr = (uint64_t **)PDC_free(set_arr); } set_free(result_set); - // print the pdc ids returned after gathering all the results - if (pdc_client_mpi_rank_g == 0) { - // LOG_INFO("==PDC_CLIENT == GATHERED [%d]: ", pdc_client_mpi_rank_g); - // for (i = 0; i < *n_res; i++) - // LOG_INFO("%llu ", (*pdc_ids)[i]); - // LOG_INFO("\n"); - } - done: - fflush(stdout); FUNC_LEAVE(ret_value); } void _standard_bcast_result(int root, int *n_res, uint64_t **out, MPI_Comm world_comm) { + FUNC_ENTER(NULL); double stime = 0.0, duration = 0.0; @@ -9356,23 +8282,24 @@ _standard_bcast_result(int root, int *n_res, uint64_t **out, MPI_Comm world_comm duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for MPI_Bcast for Syncing ID count: %.4f ms", pdc_client_mpi_rank_g, - duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for MPI_Bcast for Syncing ID count: %.4f ms\n", duration * 1000.0); - if (pdc_client_mpi_rank_g != root) { - *out = (uint64_t *)calloc(*n_res, sizeof(uint64_t)); - } + if (pdc_client_mpi_rank_g != root) + *out = (uint64_t *)PDC_calloc(*n_res, sizeof(uint64_t)); // broadcast the result to all other ranks MPI_Bcast(*out, *n_res, MPI_UINT64_T, root, world_comm); + + FUNC_LEAVE_VOID(); } void _customized_bcast_result(int first_sender_global_rank, int num_groups, int sender_group_id, int rank_in_group, int sender_group_size, int *n_res, uint64_t **out, MPI_Comm world_comm) { + FUNC_ENTER(NULL); + double stime = 0.0, duration = 0.0; int group_head_comm_color; @@ -9395,9 +8322,6 @@ _customized_bcast_result(int first_sender_global_rank, int num_groups, int sende int group_head_comm_rank, group_head_comm_size; MPI_Comm_rank(group_head_comm, &group_head_comm_rank); MPI_Comm_size(group_head_comm, &group_head_comm_size); - // println("World rank %d is rank %d in the 'group_head_comm' of size %d", pdc_client_mpi_rank_g, - // group_head_comm_rank, - // group_head_comm_size); // broadcast result size among group_head_comm if (group_head_comm_color == 1) { @@ -9416,31 +8340,28 @@ _customized_bcast_result(int first_sender_global_rank, int num_groups, int sende int group_rank, group_size; MPI_Comm_rank(group_comm, &group_rank); MPI_Comm_size(group_comm, &group_size); - // println("World rank %d is rank %d in the 'group_comm' of size %d", pdc_client_mpi_rank_g, - // group_rank, - // group_size); MPI_Bcast(n_res, 1, MPI_INT, rank_in_group, group_comm); MPI_Barrier(world_comm); duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == 0) { - println("==PDC Client[%d]: Time for MPI_Bcast for Syncing ID count: %.4f ms", pdc_client_mpi_rank_g, - duration * 1000.0); - } + if (pdc_client_mpi_rank_g == 0) + LOG_INFO("Time for MPI_Bcast for Syncing ID count: %.4f ms\n", duration * 1000.0); - // Okay, now each rank of the WORLD_COMM knows about the number of results from the sender ranks, and the - // root for WORLD_COMM. Let's perform BCAST for the array data. for those ranks that are not the root, - // allocate memory for the object IDs. + // Okay, now each rank of the WORLD_COMM knows about the number of results from the sender ranks, and + // the root for WORLD_COMM. Let's perform BCAST for the array data. for those ranks that are not the + // root, allocate memory for the object IDs. if (*out == NULL) { - *out = (uint64_t *)calloc(*n_res, sizeof(uint64_t)); + *out = (uint64_t *)PDC_calloc(*n_res, sizeof(uint64_t)); } MPI_Bcast(*out, *n_res, MPI_UINT64_T, first_sender_global_rank, world_comm); MPI_Comm_free(&group_head_comm); MPI_Comm_free(&group_comm); + + FUNC_LEAVE_VOID(); } perr_t @@ -9448,13 +8369,15 @@ PDC_Client_search_obj_ref_through_dart_mpi(dart_hash_algo_t hash_algo, char *que dart_object_ref_type_t ref_type, int *n_res, uint64_t **out, MPI_Comm world_comm) { + FUNC_ENTER(NULL); + int local_increment = 1; MPI_Scan(&local_increment, &object_selection_query_counter_g, 1, MPI_INT, MPI_SUM, world_comm); perr_t ret_value = SUCCEED; if (n_res == NULL || out == NULL) { ret_value = FAIL; - return ret_value; + FUNC_LEAVE(ret_value); } int n_obj = 0; @@ -9462,8 +8385,8 @@ PDC_Client_search_obj_ref_through_dart_mpi(dart_hash_algo_t hash_algo, char *que double stime = 0.0, duration = 0.0; // Let's calcualte an approprate root. - // FIXME: needs to be examined and fixed. Currently, first_sender_global_rank is different in different - // ranks. this is not correct. + // FIXME: needs to be examined and fixed. Currently, first_sender_global_rank is different in + // different ranks. this is not correct. int first_sender_global_rank, num_groups, sender_group_id, rank_in_group, sender_group_size, prefer_custom_exchange; @@ -9477,15 +8400,12 @@ PDC_Client_search_obj_ref_through_dart_mpi(dart_hash_algo_t hash_algo, char *que stime = MPI_Wtime(); // let the root send the query - if (pdc_client_mpi_rank_g == first_sender_global_rank) { + if (pdc_client_mpi_rank_g == first_sender_global_rank) PDC_Client_search_obj_ref_through_dart(hash_algo, query_string, ref_type, &n_obj, &dart_out); - } duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == first_sender_global_rank) { - println("==PDC Client[%d]: Time for C/S communication: %.4f ms", pdc_client_mpi_rank_g, - duration * 1000.0); - } + if (pdc_client_mpi_rank_g == first_sender_global_rank) + LOG_INFO("Time for C/S communication: %.4f ms\n", duration * 1000.0); MPI_Barrier(world_comm); stime = MPI_Wtime(); @@ -9495,14 +8415,12 @@ PDC_Client_search_obj_ref_through_dart_mpi(dart_hash_algo_t hash_algo, char *que duration = MPI_Wtime() - stime; - if (pdc_client_mpi_rank_g == first_sender_global_rank) { - println("==PDC Client[%d]: Time for MPI_Bcast for Syncing ID array: %.4f ms", pdc_client_mpi_rank_g, - duration * 1000.0); - } + if (pdc_client_mpi_rank_g == first_sender_global_rank) + LOG_INFO("Time for MPI_Bcast for Syncing ID array: %.4f ms\n", duration * 1000.0); *n_res = n_obj; *out = dart_out; - return ret_value; + FUNC_LEAVE(ret_value); } #endif diff --git a/src/api/pdc_meta/pdc_metadata_client.c b/src/api/pdc_meta/pdc_metadata_client.c index 97b5c53c7..4a65de931 100644 --- a/src/api/pdc_meta/pdc_metadata_client.c +++ b/src/api/pdc_meta/pdc_metadata_client.c @@ -14,6 +14,8 @@ char * trimWhitespace(char *str) { + FUNC_ENTER(NULL); + char *end; // Trim leading space @@ -21,7 +23,7 @@ trimWhitespace(char *str) str++; if (*str == 0) // All spaces? - return str; + FUNC_LEAVE(str); // Trim trailing space end = str + strlen(str) - 1; @@ -31,12 +33,14 @@ trimWhitespace(char *str) // Write new null terminator character end[1] = '\0'; - return str; + FUNC_LEAVE(str); } void splitExpression(const char *expression, char conditions[][CONDITION_LENGTH], int *count) { + FUNC_ENTER(NULL); + char tempExpr[1024]; char * token; const char delimiters[] = "AND OR"; @@ -59,6 +63,8 @@ splitExpression(const char *expression, char conditions[][CONDITION_LENGTH], int } *count = index; // Update the count of extracted conditions + + FUNC_LEAVE_VOID(); } /** @@ -70,11 +76,13 @@ void send_query_condition_get_separate_result(char conditions[][CONDITION_LENGTH], int conditionCount, MPI_Comm world_comm, separate_query_result_t **result) { + FUNC_ENTER(NULL); + if (conditionCount <= 0) { LOG_INFO("No conditions to send\n"); - return; + FUNC_LEAVE_VOID(); } - *result = (separate_query_result_t *)malloc(conditionCount * sizeof(separate_query_result_t)); + *result = (separate_query_result_t *)PDC_malloc(conditionCount * sizeof(separate_query_result_t)); for (int i = 0; i < conditionCount; i++) { // Send each condition to a separate server for execution // The server will execute the condition and return the result to the client @@ -94,34 +102,42 @@ send_query_condition_get_separate_result(char conditions[][CONDITION_LENGTH], in PDC_Client_search_obj_ref_through_dart(DART_HASH, condition, REF_PRIMARY_ID, &n_res, &out); if (rst != SUCCEED) { LOG_ERROR("Error with PDC_Client_search_obj_ref_through_dart\n"); - return; + FUNC_LEAVE_VOID(); } (*result)[i] = (separate_query_result_t){n_res, out, condition}; } + + FUNC_LEAVE_VOID(); } void query_execution_and_local_merge(char conditions[][CONDITION_LENGTH], int conditionCount, int isCollective, uint64_t **object_id_list, uint64_t *count) { + FUNC_ENTER(NULL); + // step 1: send each condition to a separate server for execution, from a different rank separate_query_result_t *separate_result; send_query_condition_get_separate_result(conditions, conditionCount, isCollective, &separate_result); // step 2: merge the results from all servers for (int i = 0; i < conditionCount; i++) { if (separate_result[i].n_res > 0) { - *object_id_list = (uint64_t *)malloc(separate_result[i].n_res * sizeof(uint64_t)); + *object_id_list = (uint64_t *)PDC_malloc(separate_result[i].n_res * sizeof(uint64_t)); memcpy(*object_id_list, separate_result[i].out, separate_result[i].n_res * sizeof(uint64_t)); *count = separate_result[i].n_res; break; } } + + FUNC_LEAVE_VOID(); } size_t PDC_metadata_multi_condition_query(char *queryString, int isCollective, uint64_t **object_id_list, uint64_t *count) { + FUNC_ENTER(NULL); + char conditions[MAX_CONDITIONS][CONDITION_LENGTH]; int conditionCount = 0; @@ -137,11 +153,11 @@ PDC_metadata_multi_condition_query(char *queryString, int isCollective, uint64_t // TODO: implement the above strategy // For now, we just return a dummy object ID list - *object_id_list = (uint64_t *)malloc(10 * sizeof(uint64_t)); + *object_id_list = (uint64_t *)PDC_malloc(10 * sizeof(uint64_t)); for (int i = 0; i < 10; i++) { (*object_id_list)[i] = i; } *count = 10; - return 10; + FUNC_LEAVE(10); } \ No newline at end of file diff --git a/src/api/pdc_obj/include/pdc_cont.h b/src/api/pdc_obj/include/pdc_cont.h index 33e924c14..9bdb22149 100644 --- a/src/api/pdc_obj/include/pdc_cont.h +++ b/src/api/pdc_obj/include/pdc_cont.h @@ -158,7 +158,7 @@ pbool_t PDCcont_iter_null(cont_handle *chandle); * \param chandle [IN] Pointer to cont_handle struct, returned by * PDCcont_iter_start(pdcid_t pdc_id) * - * \return Pointer to cont_handle struct/NULL on failure + * \return Pointer to cont_handle struct/NULL on failure or no more containers */ cont_handle *PDCcont_iter_next(cont_handle *chandle); diff --git a/src/api/pdc_obj/include/pdc_mpi.h b/src/api/pdc_obj/include/pdc_mpi.h index cc0bafffd..5a4341c90 100644 --- a/src/api/pdc_obj/include/pdc_mpi.h +++ b/src/api/pdc_obj/include/pdc_mpi.h @@ -39,7 +39,7 @@ * returned by PDCprop_create(PDC_OBJ_CREATE) * \param rank_id [IN] MPI process rank * - * \return Object ID on success/Negative on failure + * \return Object ID on success/Zero on failure */ pdcid_t PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_create_prop, int rank_id, MPI_Comm comm); diff --git a/src/api/pdc_obj/include/pdc_obj.h b/src/api/pdc_obj/include/pdc_obj.h index 4ce3d6bb5..af334a46d 100644 --- a/src/api/pdc_obj/include/pdc_obj.h +++ b/src/api/pdc_obj/include/pdc_obj.h @@ -227,7 +227,7 @@ perr_t PDCprop_set_obj_tags(pdcid_t obj_prop, char *tags); * Set object dimension * * \param obj_prop [IN] ID of object property, returned by PDCprop_create(PDC_OBJ_CREATE) - * \param ndim [IN] Number of dimensions + * \param ndim [IN] Number of dimensions, must be greater than 0 * \param dims [IN] Size of each dimension, positive value, can be PDC_SIZE_UNLIMITED * * \return Non-negative on success/Negative on failure diff --git a/src/api/pdc_obj/include/pdc_prop.h b/src/api/pdc_obj/include/pdc_prop.h index 0459e0283..fb13ff407 100644 --- a/src/api/pdc_obj/include/pdc_prop.h +++ b/src/api/pdc_obj/include/pdc_prop.h @@ -85,7 +85,7 @@ pdcid_t PDCprop_obj_dup(pdcid_t prop_id); * * \param prop_id [IN] ID of the property * - * \return Pointer to _pdc_cont_prop struct/Null on failure + * \return Pointer to _pdc_cont_prop struct/NULL on failure */ struct _pdc_cont_prop *PDCcont_prop_get_info(pdcid_t prop_id); diff --git a/src/api/pdc_obj/pdc_cont.c b/src/api/pdc_obj/pdc_cont.c index 5b2bd1e9d..f325da333 100644 --- a/src/api/pdc_obj/pdc_cont.c +++ b/src/api/pdc_obj/pdc_cont.c @@ -37,30 +37,29 @@ static perr_t PDC_cont_close(struct _pdc_cont_info *cp); perr_t PDC_cont_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* Initialize the atom group for the container IDs */ if (PDC_register_type(PDC_CONT, (PDC_free_t)PDC_cont_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize container interface"); + PGOTO_ERROR(FAIL, "Unable to initialize container interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCcont_create(const char *cont_name, pdcid_t cont_prop_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; perr_t ret = SUCCEED; struct _pdc_cont_info *p = NULL; struct _pdc_cont_prop *cont_prop = NULL; struct _pdc_id_info * id_info = NULL; - FUNC_ENTER(NULL); - p = (struct _pdc_cont_info *)PDC_malloc(sizeof(struct _pdc_cont_info)); if (!p) PGOTO_ERROR(0, "PDC container memory allocation failed"); @@ -88,20 +87,21 @@ PDCcont_create(const char *cont_name, pdcid_t cont_prop_id) ret = PDC_Client_create_cont_id(cont_name, cont_prop_id, &(p->cont_info_pub->meta_id)); if (ret == FAIL) - PGOTO_ERROR(0, "Unable to create container on the server!"); + PGOTO_ERROR(0, "Unable to create container on the server"); p->cont_info_pub->local_id = PDC_id_register(PDC_CONT, p); ret_value = p->cont_info_pub->local_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCcont_create_col(const char *cont_name, pdcid_t cont_prop_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; perr_t ret = SUCCEED; struct _pdc_cont_info *p = NULL; @@ -136,27 +136,26 @@ PDCcont_create_col(const char *cont_name, pdcid_t cont_prop_id) ret = PDC_Client_create_cont_id_mpi(cont_name, cont_prop_id, &(p->cont_info_pub->meta_id)); if (ret == FAIL) - PGOTO_ERROR(0, "Unable to create container object on server!"); + PGOTO_ERROR(0, "Unable to create container object on server"); p->cont_info_pub->local_id = PDC_id_register(PDC_CONT, p); ret_value = p->cont_info_pub->local_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDC_cont_create_local(pdcid_t pdc, const char *cont_name, uint64_t cont_meta_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_cont_info *p = NULL; struct _pdc_cont_prop *cont_prop = NULL; struct _pdc_id_info * id_info = NULL; pdcid_t cont_prop_id; - FUNC_ENTER(NULL); - p = (struct _pdc_cont_info *)PDC_malloc(sizeof(struct _pdc_cont_info)); if (!p) PGOTO_ERROR(0, "PDC container memory allocation failed"); @@ -190,18 +189,17 @@ PDC_cont_create_local(pdcid_t pdc, const char *cont_name, uint64_t cont_meta_id) PDCprop_close(cont_prop_id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_cont_list_null() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int nelemts; - FUNC_ENTER(NULL); - // list is not empty nelemts = PDC_id_list_null(PDC_CONT); if (nelemts > 0) { @@ -210,23 +208,22 @@ PDC_cont_list_null() } done: - fflush(stdout); FUNC_LEAVE(ret_value); } static perr_t PDC_cont_close(struct _pdc_cont_info *cp) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - free((void *)(cp->cont_info_pub->name)); - cp->cont_info_pub = (struct pdc_cont_info *)(intptr_t)PDC_free(cp->cont_info_pub); - free(cp->cont_pt->pdc->name); - cp->cont_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->cont_pt->pdc); - cp->cont_pt = (struct _pdc_cont_prop *)(intptr_t)PDC_free(cp->cont_pt); - cp = (struct _pdc_cont_info *)(intptr_t)PDC_free(cp); + perr_t ret_value = SUCCEED; + + cp->cont_info_pub->name = (char *)PDC_free((void *)(cp->cont_info_pub->name)); + cp->cont_info_pub = (struct pdc_cont_info *)(intptr_t)PDC_free(cp->cont_info_pub); + cp->cont_pt->pdc->name = (char *)PDC_free(cp->cont_pt->pdc->name); + cp->cont_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->cont_pt->pdc); + cp->cont_pt = (struct _pdc_cont_prop *)(intptr_t)PDC_free(cp->cont_pt); + cp = (struct _pdc_cont_info *)(intptr_t)PDC_free(cp); FUNC_LEAVE(ret_value); } @@ -234,98 +231,94 @@ PDC_cont_close(struct _pdc_cont_info *cp) perr_t PDCcont_close(pdcid_t id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(id) < 0) - PGOTO_ERROR(FAIL, "container: problem of freeing id"); + PGOTO_ERROR(FAIL, "Container: problem of freeing id"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_cont_end() { - perr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (PDC_destroy_type(PDC_CONT) < 0) - PGOTO_ERROR(FAIL, "unable to destroy container interface"); + PGOTO_ERROR(FAIL, "Unable to destroy container interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCcont_open(const char *cont_name, pdcid_t pdc) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; perr_t ret; pdcid_t cont_id; pdcid_t cont_meta_id; - FUNC_ENTER(NULL); - ret = PDC_Client_query_container_name(cont_name, &cont_meta_id); if (ret == FAIL) - PGOTO_ERROR(0, "query container name failed"); + PGOTO_ERROR(0, "Query container name failed"); if (cont_meta_id == 0) - PGOTO_ERROR(0, "query container not found"); + PGOTO_ERROR(0, "Query container not found"); cont_id = PDC_cont_create_local(pdc, cont_name, cont_meta_id); ret_value = cont_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCcont_open_col(const char *cont_name, pdcid_t pdc) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; perr_t ret; pdcid_t cont_id; pdcid_t cont_meta_id; - FUNC_ENTER(NULL); - ret = PDC_Client_query_container_name_col(cont_name, &cont_meta_id); if (ret == FAIL) - PGOTO_ERROR(0, "query container name failed"); + PGOTO_ERROR(0, "Query container name failed"); cont_id = PDC_cont_create_local(pdc, cont_name, cont_meta_id); ret_value = cont_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct _pdc_cont_info * PDC_cont_get_info(pdcid_t cont_id) { + FUNC_ENTER(NULL); + struct _pdc_cont_info *ret_value = NULL; struct _pdc_cont_info *info = NULL; struct _pdc_id_info * id_info = NULL; - FUNC_ENTER(NULL); - id_info = PDC_find_id(cont_id); if (id_info == NULL) - PGOTO_ERROR(NULL, "cannot locate object"); + PGOTO_ERROR(NULL, "Cannot locate object"); info = (struct _pdc_cont_info *)(id_info->obj_ptr); ret_value = (struct _pdc_cont_info *)PDC_calloc(1, sizeof(struct _pdc_cont_info)); if (ret_value) memcpy(ret_value, info, sizeof(struct _pdc_cont_info)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value"); ret_value->cont_info_pub = (struct pdc_cont_info *)PDC_calloc(1, sizeof(struct pdc_cont_info)); if (ret_value->cont_info_pub) @@ -338,7 +331,7 @@ PDC_cont_get_info(pdcid_t cont_id) if (ret_value->cont_pt) memcpy(ret_value->cont_pt, info->cont_pt, sizeof(struct _pdc_cont_prop)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont_pt"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont_pt"); ret_value->cont_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (ret_value->cont_pt->pdc) { ret_value->cont_pt->pdc->local_id = info->cont_pt->pdc->local_id; @@ -346,64 +339,60 @@ PDC_cont_get_info(pdcid_t cont_id) ret_value->cont_pt->pdc->name = strdup(info->cont_pt->pdc->name); } else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont_pt->pdc"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont_pt->pdc"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_cont_info * PDCcont_get_info(const char *cont_name) { + FUNC_ENTER(NULL); + struct pdc_cont_info * ret_value = NULL; struct _pdc_cont_info *tmp = NULL; pdcid_t cont_id; - FUNC_ENTER(NULL); - cont_id = PDC_find_byname(PDC_CONT, cont_name); tmp = PDC_cont_get_info(cont_id); ret_value = (struct pdc_cont_info *)PDC_calloc(1, sizeof(struct pdc_cont_info)); if (!ret_value) - PGOTO_ERROR(NULL, "cannot allocate memory"); + PGOTO_ERROR(NULL, "Cannot allocate memory"); ret_value = tmp->cont_info_pub; done: - fflush(stdout); FUNC_LEAVE(ret_value); } cont_handle * PDCcont_iter_start() { + FUNC_ENTER(NULL); + cont_handle * ret_value = NULL; cont_handle * conthl = NULL; struct PDC_id_type *type_ptr; - FUNC_ENTER(NULL); - type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[PDC_CONT]; if (type_ptr == NULL) - PGOTO_ERROR(NULL, "container list is empty"); + PGOTO_ERROR(NULL, "Container list is empty"); conthl = (&type_ptr->ids)->head; ret_value = conthl; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pbool_t PDCcont_iter_null(cont_handle *chandle) { - pbool_t ret_value = FALSE; - FUNC_ENTER(NULL); + pbool_t ret_value = FALSE; if (chandle == NULL) ret_value = TRUE; @@ -413,77 +402,73 @@ PDCcont_iter_null(cont_handle *chandle) cont_handle * PDCcont_iter_next(cont_handle *chandle) { + FUNC_ENTER(NULL); + cont_handle *ret_value = NULL; cont_handle *next = NULL; - FUNC_ENTER(NULL); - if (chandle == NULL) - PGOTO_ERROR(NULL, "no next container"); + PGOTO_ERROR(NULL, "No next container"); next = PDC_LIST_NEXT(chandle, entry); ret_value = next; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_cont_info * PDCcont_iter_get_info(cont_handle *chandle) { + FUNC_ENTER(NULL); + struct pdc_cont_info * ret_value = NULL; struct _pdc_cont_info *info = NULL; - FUNC_ENTER(NULL); - info = (struct _pdc_cont_info *)(chandle->obj_ptr); if (info == NULL) PGOTO_ERROR(NULL, "PDC container info memory allocation failed"); ret_value = (struct pdc_cont_info *)PDC_calloc(1, sizeof(struct pdc_cont_info)); if (!ret_value) - PGOTO_ERROR(NULL, "failed to allocate memory"); + PGOTO_ERROR(NULL, "Failed to allocate memory"); ret_value = info->cont_info_pub; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCcont_persist(pdcid_t cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(cont_id); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate container ID"); + PGOTO_ERROR(FAIL, "Cannot locate container ID"); ((struct _pdc_cont_info *)info->obj_ptr)->cont_pt->cont_life = PDC_PERSIST; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_cont_lifetime(pdcid_t cont_prop, pdc_lifetime_t cont_lifetime) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(cont_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate container property ID"); + PGOTO_ERROR(FAIL, "Cannot locate container property ID"); ((struct _pdc_cont_prop *)(info->obj_ptr))->cont_life = cont_lifetime; done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_obj/pdc_dt_conv.c b/src/api/pdc_obj/pdc_dt_conv.c index f18e4aa43..ed156f578 100644 --- a/src/api/pdc_obj/pdc_dt_conv.c +++ b/src/api/pdc_obj/pdc_dt_conv.c @@ -50,16 +50,16 @@ PDC_SHORT = 6, pdc_conv_t pdc_find_conv_func(PDC_var_type_t src_id, PDC_var_type_t des_id, size_t nelemt, size_t stride) { - pdc_conv_t ret_value; /* Return value */ - FUNC_ENTER(NULL); + pdc_conv_t ret_value; /* Return value */ + if (src_id == PDC_FLOAT && des_id == PDC_INT) ret_value = pdc__conv_f_i; if (src_id == PDC_DOUBLE && des_id == PDC_INT) ret_value = pdc__conv_db_i; else - PGOTO_ERROR(NULL, "no matching type convert function"); + PGOTO_ERROR(NULL, "No matching type convert function"); done: FUNC_LEAVE(ret_value); @@ -69,10 +69,10 @@ perr_t pdc_type_conv(PDC_var_type_t src_id, PDC_var_type_t des_id, void *src_data, void *des_data, size_t nelemt, size_t stride) { - perr_t ret_value = SUCCEED; /* Return value */ - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Return value */ + pdc_conv_t func = pdc_find_conv_func(src_id, des_id, nelemt, stride); (*func)(src_data, des_data, nelemt, stride); @@ -82,11 +82,11 @@ pdc_type_conv(PDC_var_type_t src_id, PDC_var_type_t des_id, void *src_data, void perr_t pdc__conv_f_i(float *src_data, int *des_data, size_t nelemt, size_t stride) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Return value */ size_t i; - FUNC_ENTER(NULL); - for (i = 0; i < nelemt; i++) { PDC_CONV_NOEX_CORE(src_data, des_data, float, int, INT_MIN, INT_MAX); src_data += stride; @@ -99,11 +99,11 @@ pdc__conv_f_i(float *src_data, int *des_data, size_t nelemt, size_t stride) perr_t pdc__conv_db_i(double *src_data, int *des_data, size_t nelemt, size_t stride) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Return value */ int i; - FUNC_ENTER(NULL); - for (i = 0; i < nelemt; i++) { PDC_CONV_NOEX_CORE(src_data, des_data, double, int, INT_MIN, INT_MAX); src_data += stride; diff --git a/src/api/pdc_obj/pdc_mpi.c b/src/api/pdc_obj/pdc_mpi.c index df2fbfe21..dde76f6f8 100644 --- a/src/api/pdc_obj/pdc_mpi.c +++ b/src/api/pdc_obj/pdc_mpi.c @@ -32,13 +32,13 @@ pdcid_t PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, int rank_id, MPI_Comm comm) { - pdcid_t ret_value = SUCCEED; - struct _pdc_obj_info *p = NULL; - struct _pdc_id_info * id_info = NULL; - int rank; - FUNC_ENTER(NULL); + struct _pdc_obj_info *p = NULL; + struct _pdc_id_info * id_info = NULL; + int rank; + pdcid_t ret_value; + MPI_Comm_rank(comm, &rank); if (rank == rank_id) { ret_value = PDC_obj_create(cont_id, obj_name, obj_prop_id, PDC_OBJ_GLOBAL); @@ -46,40 +46,47 @@ PDCobj_create_mpi(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, in else ret_value = PDC_obj_create(cont_id, obj_name, obj_prop_id, PDC_OBJ_LOCAL); + if (ret_value == 0) + PGOTO_ERROR(ret_value, "PDC_obj_create failed"); + id_info = PDC_find_id(ret_value); - p = (struct _pdc_obj_info *)(id_info->obj_ptr); + if (id_info == NULL) + PGOTO_ERROR(0, "PDC_find_id failed for object id: %d", ret_value); + + p = (struct _pdc_obj_info *)(id_info->obj_ptr); MPI_Bcast(&(p->obj_info_pub->meta_id), 1, MPI_LONG_LONG, rank_id, comm); MPI_Bcast(&(p->obj_info_pub->metadata_server_id), 1, MPI_UINT32_T, rank_id, comm); MPI_Bcast(&(((pdc_metadata_t *)p->metadata)->data_server_id), 1, MPI_UINT32_T, rank_id, comm); MPI_Bcast(&(((pdc_metadata_t *)p->metadata)->region_partition), 1, MPI_UINT8_T, rank_id, comm); +done: FUNC_LEAVE(ret_value); } perr_t PDCobj_encode(pdcid_t obj_id, pdcid_t *meta_id) { + FUNC_ENTER(NULL); + perr_t ret_value = FAIL; struct _pdc_id_info * objinfo; struct _pdc_obj_info *obj; int client_rank, client_size; - FUNC_ENTER(NULL); - MPI_Comm_size(MPI_COMM_WORLD, &client_size); if (client_size < 2) - PGOTO_ERROR(ret_value, "Requires at least two processes."); + PGOTO_ERROR(ret_value, "Requires at least two processes"); MPI_Comm_rank(MPI_COMM_WORLD, &client_rank); if (client_rank == 0) { objinfo = PDC_find_id(obj_id); if (objinfo == NULL) - PGOTO_ERROR(ret_value, "cannot locate object ID"); + PGOTO_ERROR(ret_value, "Cannot locate object ID"); obj = (struct _pdc_obj_info *)(objinfo->obj_ptr); if (obj->location == PDC_OBJ_LOCAL) - PGOTO_ERROR(FAIL, "trying to encode local object"); + PGOTO_ERROR(FAIL, "Trying to encode local object"); *meta_id = obj->obj_info_pub->meta_id; } @@ -90,27 +97,26 @@ PDCobj_encode(pdcid_t obj_id, pdcid_t *meta_id) pdcid_t PDCobj_decode(pdcid_t obj_id, pdcid_t meta_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_id_info * objinfo; struct _pdc_obj_info *obj; int client_rank, client_size; - FUNC_ENTER(NULL); - MPI_Comm_size(MPI_COMM_WORLD, &client_size); if (client_size < 2) - PGOTO_ERROR(ret_value, "Requires at least two processes."); + PGOTO_ERROR(ret_value, "Requires at least two processes"); MPI_Comm_rank(MPI_COMM_WORLD, &client_rank); if (client_rank != 0) { objinfo = PDC_find_id(obj_id); if (objinfo == NULL) - PGOTO_ERROR(ret_value, "cannot locate object ID"); + PGOTO_ERROR(ret_value, "Cannot locate object ID"); obj = (struct _pdc_obj_info *)(objinfo->obj_ptr); obj->obj_info_pub->meta_id = meta_id; } done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_obj/pdc_obj.c b/src/api/pdc_obj/pdc_obj.c index 18e62382e..e2712ed0e 100644 --- a/src/api/pdc_obj/pdc_obj.c +++ b/src/api/pdc_obj/pdc_obj.c @@ -45,137 +45,23 @@ static perr_t PDC_obj_close(struct _pdc_obj_info *op); perr_t PDC_obj_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* Initialize the atom group for the object IDs */ if (PDC_register_type(PDC_OBJ, (PDC_free_t)PDC_obj_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize object interface"); + PGOTO_ERROR(FAIL, "Unable to initialize object interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCobj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id) { -#if 0 - uint64_t meta_id; - struct _pdc_cont_info *cont_info; - struct _pdc_obj_prop * obj_prop; - struct _pdc_obj_info * p = NULL; - struct _pdc_id_info * id_info = NULL; - perr_t ret; - size_t i; -#endif - pdcid_t ret_value = 0; FUNC_ENTER(NULL); -#if 0 - p = (struct _pdc_obj_info *)PDC_malloc(sizeof(struct _pdc_obj_info)); - if (!p) - PGOTO_ERROR(0, "PDC object memory allocation failed"); - p->metadata = NULL; - p->region_list_head = NULL; - - if (cont_id == 0) { - meta_id = 0; - } - else { - id_info = PDC_find_id(cont_id); - cont_info = (struct _pdc_cont_info *)(id_info->obj_ptr); - - /* struct _pdc_cont_info field */ - p->cont = (struct _pdc_cont_info *)PDC_calloc(1, sizeof(struct _pdc_cont_info)); - if (!p->cont) - PGOTO_ERROR(0, "PDC object container memory allocation failed"); - memcpy(p->cont, cont_info, sizeof(struct _pdc_cont_info)); - - p->cont->cont_info_pub = (struct pdc_cont_info *)PDC_calloc(1, sizeof(struct pdc_cont_info)); - if (!p->cont->cont_info_pub) - PGOTO_ERROR(0, "PDC object pub container memory allocation failed"); - memcpy(p->cont->cont_info_pub, cont_info->cont_info_pub, sizeof(struct pdc_cont_info)); - if (cont_info->cont_info_pub->name) - p->cont->cont_info_pub->name = strdup(cont_info->cont_info_pub->name); - - p->cont->cont_pt = (struct _pdc_cont_prop *)PDC_calloc(1, sizeof(struct _pdc_cont_prop)); - if (!p->cont->cont_pt) - PGOTO_ERROR(0, "PDC object container property memory allocation failed"); - memcpy(p->cont->cont_pt, cont_info->cont_pt, sizeof(struct _pdc_cont_prop)); - - p->cont->cont_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); - if (!p->cont->cont_pt->pdc) - PGOTO_ERROR(0, "PDC object container property pdc memory allocation failed"); - p->cont->cont_pt->pdc->name = strdup(cont_info->cont_pt->pdc->name); - p->cont->cont_pt->pdc->local_id = cont_info->cont_pt->pdc->local_id; - meta_id = p->cont->cont_info_pub->meta_id; - } - - id_info = PDC_find_id(obj_prop_id); - obj_prop = (struct _pdc_obj_prop *)(id_info->obj_ptr); - - /* struct _pdc_obj_prop field */ - p->obj_pt = (struct _pdc_obj_prop *)PDC_calloc(1, sizeof(struct _pdc_obj_prop)); - if (!p->obj_pt) - PGOTO_ERROR(0, "PDC object property memory allocation failed"); - memcpy(p->obj_pt, obj_prop, sizeof(struct _pdc_obj_prop)); - if (obj_prop->app_name) - p->obj_pt->app_name = strdup(obj_prop->app_name); - p->obj_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); - if (!p->obj_pt->pdc) - PGOTO_ERROR(0, "cannot allocate ret_value->pdc"); - p->obj_pt->pdc->name = strdup(obj_prop->pdc->name); - p->obj_pt->pdc->local_id = obj_prop->pdc->local_id; - - /* struct pdc_obj_prop field */ - p->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); - if (!p->obj_pt->obj_prop_pub) - PGOTO_ERROR(0, "cannot allocate ret_value->obj_pt->obj_prop_pub"); - p->obj_pt->obj_prop_pub->ndim = obj_prop->obj_prop_pub->ndim; - p->obj_pt->obj_prop_pub->dims = malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); - if (!p->obj_pt->obj_prop_pub->dims) - PGOTO_ERROR(0, "cannot allocate ret_value->dims"); - for (i = 0; i < obj_prop->obj_prop_pub->ndim; i++) - p->obj_pt->obj_prop_pub->dims[i] = obj_prop->obj_prop_pub->dims[i]; - - p->obj_pt->obj_prop_pub->type = obj_prop->obj_prop_pub->type; - if (obj_prop->app_name) - p->obj_pt->app_name = strdup(obj_prop->app_name); - if (obj_prop->data_loc) - p->obj_pt->data_loc = strdup(obj_prop->data_loc); - if (obj_prop->tags) - p->obj_pt->tags = strdup(obj_prop->tags); - - p->obj_info_pub = (struct pdc_obj_info *)PDC_malloc(sizeof(struct pdc_obj_info)); - if (!p->obj_info_pub) - PGOTO_ERROR(0, "PDC pub object memory allocation failed"); - p->obj_info_pub->name = strdup(obj_name); - p->obj_info_pub->server_id = 0; - p->obj_info_pub->local_id = PDC_id_register(PDC_OBJ, p); - ret = PDC_Client_send_name_recv_id(obj_name, meta_id, obj_prop_id, &(p->obj_info_pub->meta_id)); - if (ret == FAIL) - PGOTO_ERROR(0, "Unable to create object on server!"); - - p->obj_info_pub->obj_pt = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); - if (!p->obj_info_pub->obj_pt) - PGOTO_ERROR(0, "PDC object prop memory allocation failed"); - memcpy(p->obj_info_pub->obj_pt, p->obj_pt->obj_prop_pub, sizeof(struct pdc_obj_prop)); - p->obj_info_pub->obj_pt->ndim = obj_prop->obj_prop_pub->ndim; - p->obj_info_pub->obj_pt->dims = malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); - if (!p->obj_info_pub->obj_pt->dims) - PGOTO_ERROR(0, "failed to allocate obj pub property memory"); - for (i = 0; i < obj_prop->obj_prop_pub->ndim; i++) - p->obj_info_pub->obj_pt->dims[i] = obj_prop->obj_prop_pub->dims[i]; - - // PDC_Client_attach_metadata_to_local_obj((char *)obj_name, p->meta_id, p->cont->meta_id, p); - - ret_value = p->obj_info_pub->local_id; -#endif - ret_value = PDC_obj_create(cont_id, obj_name, obj_prop_id, PDC_OBJ_GLOBAL); - // done: - fflush(stdout); - FUNC_LEAVE(ret_value); + FUNC_LEAVE(PDC_obj_create(cont_id, obj_name, obj_prop_id, PDC_OBJ_GLOBAL)); } /** @@ -196,11 +82,10 @@ PDC_Client_attach_metadata_to_local_obj(const char *obj_name, uint64_t obj_id, u uint32_t data_server_id, pdc_region_partition_t region_partition, pdc_consistency_t consistency, struct _pdc_obj_info *obj_info) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - obj_info->metadata = (pdc_metadata_t *)calloc(1, sizeof(pdc_metadata_t)); + perr_t ret_value = SUCCEED; + obj_info->metadata = (pdc_metadata_t *)PDC_calloc(1, sizeof(pdc_metadata_t)); ((pdc_metadata_t *)obj_info->metadata)->user_id = obj_info->obj_pt->user_id; if (NULL != obj_info->obj_pt->app_name) strcpy(((pdc_metadata_t *)obj_info->metadata)->app_name, obj_info->obj_pt->app_name); @@ -228,6 +113,8 @@ PDC_Client_attach_metadata_to_local_obj(const char *obj_name, uint64_t obj_id, u pdcid_t PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_obj_location_t location) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_obj_info * p = NULL; struct _pdc_id_info * id_info = NULL; @@ -238,8 +125,6 @@ PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_ size_t i; perr_t ret = SUCCEED; - FUNC_ENTER(NULL); - p = (struct _pdc_obj_info *)PDC_malloc(sizeof(struct _pdc_obj_info)); if (!p) PGOTO_ERROR(0, "PDC object memory allocation failed"); @@ -302,7 +187,7 @@ PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_ p->obj_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (!p->obj_pt->pdc) - PGOTO_ERROR(0, "cannot allocate ret_value->pdc"); + PGOTO_ERROR(0, "Cannot allocate ret_value->pdc"); if (obj_prop->pdc->name) p->obj_pt->pdc->name = strdup(obj_prop->pdc->name); p->obj_pt->pdc->local_id = obj_prop->pdc->local_id; @@ -310,11 +195,11 @@ PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_ /* struct pdc_obj_prop field */ p->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); if (!p->obj_pt->obj_prop_pub) - PGOTO_ERROR(0, "cannot allocate ret_value->obj_pt->obj_prop_pub"); + PGOTO_ERROR(0, "Cannot allocate ret_value->obj_pt->obj_prop_pub"); p->obj_pt->obj_prop_pub->ndim = obj_prop->obj_prop_pub->ndim; - p->obj_pt->obj_prop_pub->dims = malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); + p->obj_pt->obj_prop_pub->dims = PDC_malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); if (!p->obj_pt->obj_prop_pub->dims) - PGOTO_ERROR(0, "cannot allocate ret_value->dims"); + PGOTO_ERROR(0, "Cannot allocate ret_value->dims"); for (i = 0; i < obj_prop->obj_prop_pub->ndim; i++) p->obj_pt->obj_prop_pub->dims[i] = obj_prop->obj_prop_pub->dims[i]; p->obj_pt->obj_prop_pub->type = obj_prop->obj_prop_pub->type; @@ -341,7 +226,7 @@ PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_ ret = PDC_Client_send_name_recv_id(obj_name, p->cont->cont_info_pub->meta_id, obj_prop_id, &(p->obj_info_pub->meta_id), &data_server_id, &metadata_server_id); if (ret == FAIL) - PGOTO_ERROR(0, "Unable to create object on server!"); + PGOTO_ERROR(0, "Unable to create object on server"); } p->obj_info_pub->metadata_server_id = (pdcid_t)metadata_server_id; @@ -355,27 +240,26 @@ PDC_obj_create(pdcid_t cont_id, const char *obj_name, pdcid_t obj_prop_id, _pdc_ PGOTO_ERROR(0, "PDC object prop memory allocation failed"); memcpy(p->obj_info_pub->obj_pt, p->obj_pt->obj_prop_pub, sizeof(struct pdc_obj_prop)); p->obj_info_pub->obj_pt->ndim = obj_prop->obj_prop_pub->ndim; - p->obj_info_pub->obj_pt->dims = malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); + p->obj_info_pub->obj_pt->dims = PDC_malloc(obj_prop->obj_prop_pub->ndim * sizeof(uint64_t)); if (!p->obj_info_pub->obj_pt->dims) - PGOTO_ERROR(0, "failed to allocate obj pub property memory"); + PGOTO_ERROR(0, "Failed to allocate obj pub property memory"); for (i = 0; i < obj_prop->obj_prop_pub->ndim; i++) p->obj_info_pub->obj_pt->dims[i] = obj_prop->obj_prop_pub->dims[i]; ret_value = p->obj_info_pub->local_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_obj_list_null() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int nelemts; - FUNC_ENTER(NULL); - // list is not empty nelemts = PDC_id_list_null(PDC_OBJ); if (nelemts > 0) { @@ -384,62 +268,58 @@ PDC_obj_list_null() } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_obj_close(struct _pdc_obj_info *op) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdcid_t * transfer_request_id; pdc_local_transfer_request *temp, *previous; int i, n; - FUNC_ENTER(NULL); - if (op->local_transfer_request_size) { - transfer_request_id = (pdcid_t *)malloc(sizeof(pdcid_t) * op->local_transfer_request_size); + transfer_request_id = (pdcid_t *)PDC_malloc(sizeof(pdcid_t) * op->local_transfer_request_size); temp = op->local_transfer_request_head; n = 0; while (temp != NULL) { transfer_request_id[n] = temp->local_id; previous = temp; temp = temp->next; - free(previous); + previous = (pdc_local_transfer_request *)PDC_free(previous); ++n; } PDCregion_transfer_wait_all(transfer_request_id, n); for (i = 0; i < n; ++i) { PDCregion_transfer_close(transfer_request_id[i]); } - free(transfer_request_id); + transfer_request_id = (pdcid_t *)PDC_free(transfer_request_id); } - free((void *)(op->obj_info_pub->name)); - free(op->cont->cont_info_pub->name); - op->cont->cont_info_pub = (struct pdc_cont_info *)(intptr_t)PDC_free(op->cont->cont_info_pub); - free(op->cont->cont_pt->pdc->name); - op->cont->cont_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(op->cont->cont_pt->pdc); - op->cont->cont_pt = (struct _pdc_cont_prop *)(intptr_t)PDC_free(op->cont->cont_pt); - op->cont = (struct _pdc_cont_info *)(intptr_t)PDC_free(op->cont); - - free(op->obj_pt->pdc->name); - op->obj_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(op->obj_pt->pdc); - free(op->obj_pt->obj_prop_pub->dims); - op->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)(intptr_t)PDC_free(op->obj_pt->obj_prop_pub); - free(op->obj_pt->app_name); - free(op->obj_pt->data_loc); - free(op->obj_pt->tags); - op->obj_pt = (struct _pdc_obj_prop *)(intptr_t)PDC_free(op->obj_pt); + op->obj_info_pub->name = (char *)PDC_free((void *)(op->obj_info_pub->name)); + op->cont->cont_info_pub->name = (char *)PDC_free(op->cont->cont_info_pub->name); + op->cont->cont_info_pub = (struct pdc_cont_info *)(intptr_t)PDC_free(op->cont->cont_info_pub); + op->cont->cont_pt->pdc->name = (char *)PDC_free(op->cont->cont_pt->pdc->name); + op->cont->cont_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(op->cont->cont_pt->pdc); + op->cont->cont_pt = (struct _pdc_cont_prop *)(intptr_t)PDC_free(op->cont->cont_pt); + op->cont = (struct _pdc_cont_info *)(intptr_t)PDC_free(op->cont); + op->obj_pt->pdc->name = (char *)PDC_free(op->obj_pt->pdc->name); + op->obj_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(op->obj_pt->pdc); + op->obj_pt->obj_prop_pub->dims = (uint64_t *)PDC_free(op->obj_pt->obj_prop_pub->dims); + op->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)(intptr_t)PDC_free(op->obj_pt->obj_prop_pub); + op->obj_pt->app_name = (char *)PDC_free(op->obj_pt->app_name); + op->obj_pt->data_loc = (char *)PDC_free(op->obj_pt->data_loc); + op->obj_pt->tags = (char *)PDC_free(op->obj_pt->tags); + op->obj_pt = (struct _pdc_obj_prop *)(intptr_t)PDC_free(op->obj_pt); if (op->metadata != NULL) - free(op->metadata); - - free(op->obj_info_pub->obj_pt->dims); - op->obj_info_pub->obj_pt = (struct pdc_obj_prop *)(intptr_t)PDC_free(op->obj_info_pub->obj_pt); - op->obj_info_pub = (struct pdc_obj_info *)(intptr_t)PDC_free(op->obj_info_pub); - - op = (struct _pdc_obj_info *)(intptr_t)PDC_free(op); + op->metadata = (void *)PDC_free(op->metadata); + op->obj_info_pub->obj_pt->dims = (uint64_t *)PDC_free(op->obj_info_pub->obj_pt->dims); + op->obj_info_pub->obj_pt = (struct pdc_obj_prop *)(intptr_t)PDC_free(op->obj_info_pub->obj_pt); + op->obj_info_pub = (struct pdc_obj_info *)(intptr_t)PDC_free(op->obj_info_pub); + op = (struct _pdc_obj_info *)(intptr_t)PDC_free(op); FUNC_LEAVE(ret_value); } @@ -448,86 +328,72 @@ PDC_obj_close(struct _pdc_obj_info *op) perr_t PDCobj_flush_start(pdcid_t obj_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; PDC_Client_flush_obj(obj_id); - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_flush_all_start() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; PDC_Client_flush_obj_all(); - fflush(stdout); FUNC_LEAVE(ret_value); } #else perr_t PDCobj_flush_start(pdcid_t obj_id __attribute__((unused))) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - - fflush(stdout); - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } perr_t PDCobj_flush_all_start() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - - fflush(stdout); - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } #endif perr_t PDCobj_close(pdcid_t obj_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(obj_id) < 0) - PGOTO_ERROR(FAIL, "object: problem of freeing id"); + PGOTO_ERROR(FAIL, "Object: problem of freeing ID"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_obj_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (PDC_destroy_type(PDC_OBJ) < 0) - PGOTO_ERROR(FAIL, "unable to destroy object interface"); + PGOTO_ERROR(FAIL, "Unable to destroy object interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static pdcid_t PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; perr_t ret = SUCCEED; struct _pdc_obj_info *p = NULL; @@ -535,8 +401,25 @@ 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; + + // 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); + } - FUNC_ENTER(NULL); + if (is_opened) { + PDC_inc_ref(info->local_id); + PGOTO_DONE(info->local_id); + } p = (struct _pdc_obj_info *)PDC_malloc(sizeof(struct _pdc_obj_info)); if (!p) @@ -567,7 +450,7 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) PGOTO_ERROR(0, "PDC object prop memory allocation failed"); p->obj_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (!p->obj_pt->pdc) - PGOTO_ERROR(0, "cannot allocate ret_value->pdc"); + PGOTO_ERROR(0, "Cannot allocate ret_value->pdc"); // contact metadata server if (is_col == 0) @@ -576,7 +459,7 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) ret = PDC_Client_query_metadata_name_timestep_agg(obj_name, 0, &out, &metadata_server_id); if (ret == FAIL) - PGOTO_ERROR(0, "query object failed"); + PGOTO_ERROR(0, "Query object failed"); obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); PDCprop_set_obj_dims(obj_prop, out->ndim, out->dims); @@ -584,15 +467,12 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) p->cont->cont_info_pub->meta_id = out->cont_id; p->obj_pt->obj_prop_pub->ndim = out->ndim; - p->obj_pt->obj_prop_pub->dims = malloc(out->ndim * sizeof(uint64_t)); + p->obj_pt->obj_prop_pub->dims = PDC_malloc(out->ndim * sizeof(uint64_t)); if (!p->obj_pt->obj_prop_pub->dims) - PGOTO_ERROR(0, "cannot allocate ret_value->obj_prop_pub->dims"); + PGOTO_ERROR(0, "Cannot allocate ret_value->obj_prop_pub->dims"); for (i = 0; i < out->ndim; i++) p->obj_pt->obj_prop_pub->dims[i] = out->dims[i]; - /* - memcpy(p->obj_pt->obj_prop_pub->dims, out->dims, sizeof(uint64_t) * out->ndim); - */ /* 'app_name' is a char array */ if (strlen(out->app_name) > 0) p->obj_pt->app_name = strdup(out->app_name); @@ -625,25 +505,24 @@ PDCobj_open_common(const char *obj_name, pdcid_t pdc, int is_col) p->obj_info_pub->metadata_server_id = metadata_server_id; memcpy(p->obj_info_pub->obj_pt, p->obj_pt->obj_prop_pub, sizeof(struct pdc_obj_prop)); - p->obj_info_pub->obj_pt->dims = malloc(p->obj_pt->obj_prop_pub->ndim * sizeof(uint64_t)); + p->obj_info_pub->obj_pt->dims = PDC_malloc(p->obj_pt->obj_prop_pub->ndim * sizeof(uint64_t)); if (!p->obj_info_pub->obj_pt->dims) - PGOTO_ERROR(0, "failed to allocate obj pub property memory"); + PGOTO_ERROR(0, "Failed to allocate obj pub property memory"); for (i = 0; i < p->obj_pt->obj_prop_pub->ndim; i++) p->obj_info_pub->obj_pt->dims[i] = p->obj_pt->obj_prop_pub->dims[i]; ret_value = p->obj_info_pub->local_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCobj_open(const char *obj_name, pdcid_t pdc) { - pdcid_t ret_value; FUNC_ENTER(NULL); + pdcid_t ret_value; ret_value = PDCobj_open_common(obj_name, pdc, 0); FUNC_LEAVE(ret_value); @@ -652,9 +531,9 @@ PDCobj_open(const char *obj_name, pdcid_t pdc) pdcid_t PDCobj_open_col(const char *obj_name, pdcid_t pdc) { - pdcid_t ret_value; FUNC_ENTER(NULL); + pdcid_t ret_value; ret_value = PDCobj_open_common(obj_name, pdc, 1); FUNC_LEAVE(ret_value); @@ -663,15 +542,15 @@ PDCobj_open_col(const char *obj_name, pdcid_t pdc) obj_handle * PDCobj_iter_start(pdcid_t cont_id) { + FUNC_ENTER(NULL); + obj_handle * ret_value = NULL; obj_handle * objhl = NULL; struct PDC_id_type *type_ptr; - FUNC_ENTER(NULL); - type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[PDC_OBJ]; if (type_ptr == NULL) - PGOTO_ERROR(NULL, "object list is empty"); + PGOTO_ERROR(NULL, "Object list is empty"); objhl = (&type_ptr->ids)->head; while (objhl != NULL && @@ -682,17 +561,15 @@ PDCobj_iter_start(pdcid_t cont_id) ret_value = objhl; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pbool_t PDCobj_iter_null(obj_handle *ohandle) { - pbool_t ret_value = FALSE; - FUNC_ENTER(NULL); + pbool_t ret_value = FALSE; if (ohandle == NULL) ret_value = TRUE; @@ -702,13 +579,13 @@ PDCobj_iter_null(obj_handle *ohandle) obj_handle * PDCobj_iter_next(obj_handle *ohandle, pdcid_t cont_id) { + FUNC_ENTER(NULL); + obj_handle *ret_value = NULL; obj_handle *next = NULL; - FUNC_ENTER(NULL); - if (ohandle == NULL) - PGOTO_ERROR(NULL, "no next object"); + PGOTO_ERROR(NULL, "No next object"); next = PDC_LIST_NEXT(ohandle, entry); while (next != NULL && @@ -719,258 +596,252 @@ PDCobj_iter_next(obj_handle *ohandle, pdcid_t cont_id) ret_value = next; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_obj_info * PDCobj_iter_get_info(obj_handle *ohandle) { + FUNC_ENTER(NULL); + struct pdc_obj_info * ret_value = NULL; struct _pdc_obj_info *info = NULL; unsigned i; - FUNC_ENTER(NULL); - info = (struct _pdc_obj_info *)(ohandle->obj_ptr); if (info == NULL) PGOTO_ERROR(NULL, "PDC container info memory allocation failed"); ret_value = (struct pdc_obj_info *)PDC_calloc(1, sizeof(struct pdc_obj_info)); if (!ret_value) - PGOTO_ERROR(NULL, "failed to allocate memory"); + PGOTO_ERROR(NULL, "Failed to allocate memory"); memcpy(ret_value, info->obj_info_pub, sizeof(struct pdc_obj_info)); ret_value->obj_pt = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); if (!ret_value->obj_pt) - PGOTO_ERROR(NULL, "failed to allocate memory"); + PGOTO_ERROR(NULL, "Failed to allocate memory"); memcpy(ret_value->obj_pt, info->obj_info_pub->obj_pt, sizeof(struct pdc_obj_prop)); - ret_value->obj_pt->dims = malloc(ret_value->obj_pt->ndim * sizeof(uint64_t)); + ret_value->obj_pt->dims = PDC_malloc(ret_value->obj_pt->ndim * sizeof(uint64_t)); if (!ret_value->obj_pt->dims) - PGOTO_ERROR(0, "failed to allocate obj pub property memory"); + PGOTO_ERROR(0, "Failed to allocate obj pub property memory"); for (i = 0; i < ret_value->obj_pt->ndim; i++) ret_value->obj_pt->dims[i] = info->obj_info_pub->obj_pt->dims[i]; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_user_id(pdcid_t obj_prop, uint32_t user_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); ((struct _pdc_obj_prop *)(info->obj_ptr))->user_id = user_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_app_name(pdcid_t obj_prop, char *app_name) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); if (((struct _pdc_obj_prop *)(info->obj_ptr))->app_name != NULL) { - free(((struct _pdc_obj_prop *)(info->obj_ptr))->app_name); + ((struct _pdc_obj_prop *)(info->obj_ptr))->app_name = + (char *)PDC_free(((struct _pdc_obj_prop *)(info->obj_ptr))->app_name); } ((struct _pdc_obj_prop *)(info->obj_ptr))->app_name = strdup(app_name); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_time_step(pdcid_t obj_prop, uint32_t time_step) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); ((struct _pdc_obj_prop *)(info->obj_ptr))->time_step = time_step; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_data_loc(pdcid_t obj_prop, char *loc) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); if (((struct _pdc_obj_prop *)(info->obj_ptr))->data_loc != NULL) { - free(((struct _pdc_obj_prop *)(info->obj_ptr))->data_loc); + ((struct _pdc_obj_prop *)(info->obj_ptr))->data_loc = + (char *)PDC_free(((struct _pdc_obj_prop *)(info->obj_ptr))->data_loc); } ((struct _pdc_obj_prop *)(info->obj_ptr))->data_loc = strdup(loc); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_tags(pdcid_t obj_prop, char *tags) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info *info; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); if (((struct _pdc_obj_prop *)(info->obj_ptr))->tags != NULL) { - free(((struct _pdc_obj_prop *)(info->obj_ptr))->tags); + ((struct _pdc_obj_prop *)(info->obj_ptr))->tags = + (char *)PDC_free(((struct _pdc_obj_prop *)(info->obj_ptr))->tags); } ((struct _pdc_obj_prop *)(info->obj_ptr))->tags = strdup(tags); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_dims(pdcid_t obj_prop, PDC_int_t ndim, uint64_t *dims) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_prop *prop; - FUNC_ENTER(NULL); + if (ndim <= 0) + PGOTO_ERROR(FAIL, "Invalid ndim size: %d", ndim); info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); prop = (struct _pdc_obj_prop *)(info->obj_ptr); if (ndim > (PDC_int_t)prop->obj_prop_pub->ndim) { - if (prop->obj_prop_pub->ndim > 0) { - free(prop->obj_prop_pub->dims); - } - prop->obj_prop_pub->dims = (uint64_t *)malloc(ndim * sizeof(uint64_t)); + if (prop->obj_prop_pub->ndim > 0) + prop->obj_prop_pub->dims = (uint64_t *)PDC_free(prop->obj_prop_pub->dims); + prop->obj_prop_pub->dims = (uint64_t *)PDC_malloc(ndim * sizeof(uint64_t)); prop->obj_prop_pub->ndim = ndim; } memcpy(prop->obj_prop_pub->dims, dims, ndim * sizeof(uint64_t)); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_type(pdcid_t obj_prop, pdc_var_type_t type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_prop *prop; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); prop = (struct _pdc_obj_prop *)(info->obj_ptr); prop->obj_prop_pub->type = type; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_transfer_region_type(pdcid_t obj_prop, pdc_region_partition_t region_partition) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_prop *prop; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); prop = (struct _pdc_obj_prop *)(info->obj_ptr); prop->obj_prop_pub->region_partition = region_partition; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_consistency_semantics(pdcid_t obj_prop, pdc_consistency_t consistency) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_prop *prop; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); prop = (struct _pdc_obj_prop *)(info->obj_ptr); prop->obj_prop_pub->consistency = consistency; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCprop_set_obj_buf(pdcid_t obj_prop, void *buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_prop *prop; - FUNC_ENTER(NULL); - info = PDC_find_id(obj_prop); if (info == NULL) - PGOTO_ERROR(FAIL, "cannot locate object property ID"); + PGOTO_ERROR(FAIL, "Cannot locate object property ID"); prop = (struct _pdc_obj_prop *)(info->obj_ptr); prop->buf = buf; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_info *object; int reset; - FUNC_ENTER(NULL); info = PDC_find_id(obj_id); if (info == NULL) { LOG_ERROR("PDCobj_set_dims: cannnot find obj id"); @@ -978,8 +849,7 @@ PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims) object = (struct _pdc_obj_info *)(info->obj_ptr); if (object->local_transfer_request_size) { // We do not allow setting obj dims while the region transfer requests are taking places. - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Attempt to set obj dims while a region transfer request was taking place"); } if (ndim != (int)((pdc_metadata_t *)(object->metadata))->ndim) { @@ -993,7 +863,7 @@ PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims) if (!reset) { // Server rejects reset object dims for some reasons, so we close this operation. - ret_value = FAIL; + PGOTO_DONE(FAIL); } done: @@ -1003,10 +873,11 @@ PDCobj_set_dims(pdcid_t obj_id, int ndim, uint64_t *dims) perr_t PDCobj_get_dims(pdcid_t obj_id, int *ndim, uint64_t **dims) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info; struct _pdc_obj_info *object; - FUNC_ENTER(NULL); info = PDC_find_id(obj_id); if (info == NULL) { @@ -1014,7 +885,7 @@ PDCobj_get_dims(pdcid_t obj_id, int *ndim, uint64_t **dims) } object = (struct _pdc_obj_info *)(info->obj_ptr); *ndim = object->obj_pt->obj_prop_pub->ndim; - *dims = (uint64_t *)malloc(sizeof(uint64_t) * ndim[0]); + *dims = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim[0]); memcpy(*dims, object->obj_pt->obj_prop_pub->dims, sizeof(uint64_t) * ndim[0]); FUNC_LEAVE(ret_value); @@ -1023,51 +894,51 @@ PDCobj_get_dims(pdcid_t obj_id, int *ndim, uint64_t **dims) void ** PDCobj_buf_retrieve(pdcid_t obj_id) { + FUNC_ENTER(NULL); + void ** ret_value = NULL; struct _pdc_id_info * info; struct _pdc_obj_info *object; void ** buffer; - FUNC_ENTER(NULL); info = PDC_find_id(obj_id); if (info == NULL) - PGOTO_ERROR(NULL, "cannot locate object ID"); + PGOTO_ERROR(NULL, "Cannot locate object ID"); object = (struct _pdc_obj_info *)(info->obj_ptr); buffer = &(object->obj_pt->buf); ret_value = buffer; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct _pdc_obj_info * PDC_obj_get_info(pdcid_t obj_id) { + FUNC_ENTER(NULL); + struct _pdc_obj_info *ret_value = NULL; struct _pdc_obj_info *info = NULL; struct _pdc_id_info * obj; size_t i; - FUNC_ENTER(NULL); - obj = PDC_find_id(obj_id); if (obj == NULL) - PGOTO_ERROR(NULL, "cannot locate object"); + PGOTO_ERROR(NULL, "Cannot locate object"); info = (struct _pdc_obj_info *)(obj->obj_ptr); ret_value = (struct _pdc_obj_info *)PDC_calloc(1, sizeof(struct _pdc_obj_info)); if (ret_value) memcpy(ret_value, info, sizeof(struct _pdc_obj_info)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value"); /* struct pdc_obj_info field */ ret_value->obj_info_pub = (struct pdc_obj_info *)PDC_calloc(1, sizeof(struct pdc_obj_info)); if (ret_value->obj_info_pub) memcpy(ret_value->obj_info_pub, info->obj_info_pub, sizeof(struct pdc_obj_info)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value"); if (info->obj_info_pub->name) ret_value->obj_info_pub->name = strdup(info->obj_info_pub->name); else @@ -1075,11 +946,12 @@ PDC_obj_get_info(pdcid_t obj_id) ret_value->obj_info_pub->obj_pt = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); if (!ret_value->obj_info_pub->obj_pt) - PGOTO_ERROR(NULL, "failed to allocate memory"); + PGOTO_ERROR(NULL, "Failed to allocate memory"); memcpy(ret_value->obj_info_pub->obj_pt, info->obj_info_pub->obj_pt, sizeof(struct pdc_obj_prop)); - ret_value->obj_info_pub->obj_pt->dims = malloc(ret_value->obj_info_pub->obj_pt->ndim * sizeof(uint64_t)); + ret_value->obj_info_pub->obj_pt->dims = + PDC_malloc(ret_value->obj_info_pub->obj_pt->ndim * sizeof(uint64_t)); if (!ret_value->obj_info_pub->obj_pt->dims) - PGOTO_ERROR(0, "failed to allocate obj pub property memory"); + PGOTO_ERROR(0, "Failed to allocate obj pub property memory"); for (i = 0; i < ret_value->obj_info_pub->obj_pt->ndim; i++) ret_value->obj_info_pub->obj_pt->dims[i] = info->obj_info_pub->obj_pt->dims[i]; @@ -1091,13 +963,13 @@ PDC_obj_get_info(pdcid_t obj_id) if (ret_value->cont) memcpy(ret_value->cont, info->cont, sizeof(struct _pdc_cont_info)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont"); ret_value->cont->cont_info_pub = (struct pdc_cont_info *)PDC_calloc(1, sizeof(struct pdc_cont_info)); if (ret_value->cont->cont_info_pub) memcpy(ret_value->cont->cont_info_pub, info->cont->cont_info_pub, sizeof(struct pdc_cont_info)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont->cont_info_pub"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont->cont_info_pub"); if (info->cont->cont_info_pub->name) ret_value->cont->cont_info_pub->name = strdup(info->cont->cont_info_pub->name); else @@ -1107,7 +979,7 @@ PDC_obj_get_info(pdcid_t obj_id) if (ret_value->cont->cont_pt) memcpy(ret_value->cont->cont_pt, info->cont->cont_pt, sizeof(struct _pdc_cont_prop)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont->cont_pt"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont->cont_pt"); ret_value->cont->cont_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (ret_value->cont->cont_pt->pdc) { ret_value->cont->cont_pt->pdc->local_id = info->cont->cont_pt->pdc->local_id; @@ -1117,14 +989,14 @@ PDC_obj_get_info(pdcid_t obj_id) ret_value->cont->cont_pt->pdc->name = NULL; } else - PGOTO_ERROR(NULL, "cannot allocate ret_value->cont->cont_pt->pdc"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->cont->cont_pt->pdc"); // fill in struct _pdc_obj_prop field in ret_value->obj_pt ret_value->obj_pt = (struct _pdc_obj_prop *)PDC_calloc(1, sizeof(struct _pdc_obj_prop)); if (ret_value->obj_pt) memcpy(ret_value->obj_pt, info->obj_pt, sizeof(struct _pdc_obj_prop)); else - PGOTO_ERROR(NULL, "cannot allocate ret_value->obj_pt"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->obj_pt"); ret_value->obj_pt->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (ret_value->obj_pt->pdc) { ret_value->obj_pt->pdc->local_id = info->obj_pt->pdc->local_id; @@ -1134,21 +1006,23 @@ PDC_obj_get_info(pdcid_t obj_id) ret_value->obj_pt->pdc->name = NULL; } else - PGOTO_ERROR(NULL, "cannot allocate ret_value->obj_pt->pdc"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->obj_pt->pdc"); ret_value->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); if (ret_value->obj_pt->obj_prop_pub) memcpy(ret_value->obj_pt->obj_prop_pub, info->obj_pt->obj_prop_pub, sizeof(struct pdc_obj_prop)); else PGOTO_ERROR(NULL, "cannot allocate ret_value->obj_pt"); - ret_value->obj_pt->obj_prop_pub->dims = malloc(ret_value->obj_pt->obj_prop_pub->ndim * sizeof(uint64_t)); - if (ret_value->obj_pt->obj_prop_pub->dims) { + ret_value->obj_pt->obj_prop_pub->dims = + PDC_malloc(ret_value->obj_pt->obj_prop_pub->ndim * sizeof(uint64_t)); + LOG_INFO("ndim is %d\n", ret_value->obj_pt->obj_prop_pub->ndim); + if (ret_value->obj_pt->obj_prop_pub->ndim == 0 || ret_value->obj_pt->obj_prop_pub->dims) { for (i = 0; i < ret_value->obj_pt->obj_prop_pub->ndim; i++) { ret_value->obj_pt->obj_prop_pub->dims[i] = info->obj_pt->obj_prop_pub->dims[i]; } } else - PGOTO_ERROR(NULL, "cannot allocate ret_value->obj_pt->dims"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->obj_pt->dims"); if (info->obj_pt->app_name) ret_value->obj_pt->app_name = strdup(info->obj_pt->app_name); else @@ -1165,32 +1039,31 @@ PDC_obj_get_info(pdcid_t obj_id) ret_value->region_list_head = NULL; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_free_obj_info(struct _pdc_obj_info *obj) { - perr_t ret_value = TRUE; - FUNC_ENTER(NULL); + perr_t ret_value = TRUE; + assert(obj); if (obj->obj_info_pub->name != NULL) - free(obj->obj_info_pub->name); + obj->obj_info_pub->name = (char *)PDC_free(obj->obj_info_pub->name); obj->obj_info_pub = (struct pdc_obj_info *)(intptr_t)PDC_free(obj->obj_info_pub); if (obj->metadata != NULL) - free(obj->metadata); + obj->metadata = (void *)PDC_free(obj->metadata); if (obj->cont != NULL) { if (obj->cont->cont_info_pub->name != NULL) - free(obj->cont->cont_info_pub->name); + obj->cont->cont_info_pub->name = (char *)PDC_free(obj->cont->cont_info_pub->name); obj->cont->cont_info_pub = (struct pdc_cont_info *)(intptr_t)PDC_free(obj->cont->cont_info_pub); if (obj->cont->cont_pt->pdc->name != NULL) - free(obj->cont->cont_pt->pdc->name); + obj->cont->cont_pt->pdc->name = (char *)PDC_free(obj->cont->cont_pt->pdc->name); obj->cont->cont_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(obj->cont->cont_pt->pdc); obj->cont->cont_pt = (struct _pdc_cont_prop *)(intptr_t)PDC_free(obj->cont->cont_pt); obj->cont = (struct _pdc_cont_info *)(intptr_t)PDC_free(obj->cont); @@ -1199,23 +1072,23 @@ PDC_free_obj_info(struct _pdc_obj_info *obj) if (obj->obj_pt != NULL) { if (obj->obj_pt->pdc != NULL) { if (obj->obj_pt->pdc->name != NULL) - free(obj->obj_pt->pdc->name); + obj->obj_pt->pdc->name = (char *)PDC_free(obj->obj_pt->pdc->name); obj->obj_pt->pdc = (struct _pdc_class *)(intptr_t)PDC_free(obj->obj_pt->pdc); } if (obj->obj_pt->obj_prop_pub->dims != NULL) - free(obj->obj_pt->obj_prop_pub->dims); + obj->obj_pt->obj_prop_pub->dims = (uint64_t *)PDC_free(obj->obj_pt->obj_prop_pub->dims); obj->obj_pt->obj_prop_pub = (struct pdc_obj_prop *)(intptr_t)PDC_free(obj->obj_pt->obj_prop_pub); if (obj->obj_pt->app_name != NULL) - free(obj->obj_pt->app_name); + obj->obj_pt->app_name = (char *)PDC_free(obj->obj_pt->app_name); if (obj->obj_pt->data_loc != NULL) - free(obj->obj_pt->data_loc); + obj->obj_pt->data_loc = (char *)PDC_free(obj->obj_pt->data_loc); if (obj->obj_pt->tags != NULL) - free(obj->obj_pt->tags); + obj->obj_pt->tags = (char *)PDC_free(obj->obj_pt->tags); obj->obj_pt = (struct _pdc_obj_prop *)(intptr_t)PDC_free(obj->obj_pt); } if (obj->region_list_head != NULL) - free(obj->region_list_head); + obj->region_list_head = (struct region_map_list *)PDC_free(obj->region_list_head); obj = (struct _pdc_obj_info *)(intptr_t)PDC_free(obj); @@ -1225,22 +1098,21 @@ PDC_free_obj_info(struct _pdc_obj_info *obj) struct pdc_obj_info * PDCobj_get_info(pdcid_t obj_id) { + FUNC_ENTER(NULL); + struct pdc_obj_info * ret_value = NULL; struct _pdc_obj_info *tmp = NULL; /* pdcid_t obj_id; */ - FUNC_ENTER(NULL); - /* obj_id = PDC_find_byname(PDC_OBJ, obj_name); */ tmp = PDC_obj_get_info(obj_id); if (NULL == tmp) - PGOTO_ERROR(NULL, "failed to allocate memory"); + PGOTO_ERROR(NULL, "Failed to allocate memory"); ret_value = tmp->obj_info_pub; done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_obj/pdc_prop.c b/src/api/pdc_obj/pdc_prop.c index 575193c96..76db3c8b9 100644 --- a/src/api/pdc_obj/pdc_prop.c +++ b/src/api/pdc_obj/pdc_prop.c @@ -27,6 +27,7 @@ #include "pdc_prop.h" #include "pdc_prop_pkg.h" #include "pdc_interface.h" +#include "pdc_timing.h" #include static perr_t pdc_prop_cont_close(struct _pdc_cont_prop *cp); @@ -36,26 +37,27 @@ static perr_t pdc_prop_obj_close(struct _pdc_obj_prop *cp); perr_t PDC_prop_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* Initialize the atom group for the container property IDs */ if (PDC_register_type(PDC_CONT_PROP, (PDC_free_t)pdc_prop_cont_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize container property interface"); + PGOTO_ERROR(FAIL, "Unable to initialize container property interface"); /* Initialize the atom group for the object property IDs */ if (PDC_register_type(PDC_OBJ_PROP, (PDC_free_t)pdc_prop_obj_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize object property interface"); + PGOTO_ERROR(FAIL, "Unable to initialize object property interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCprop_create(pdc_prop_type_t type, pdcid_t pdcid) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_cont_prop *p = NULL; struct _pdc_obj_prop * q = NULL; @@ -64,8 +66,6 @@ PDCprop_create(pdc_prop_type_t type, pdcid_t pdcid) pdcid_t new_id_c; pdcid_t new_id_o; - FUNC_ENTER(NULL); - if (type == PDC_CONT_CREATE) { p = (struct _pdc_cont_prop *)PDC_malloc(sizeof(struct _pdc_cont_prop)); if (!p) @@ -91,9 +91,10 @@ PDCprop_create(pdc_prop_type_t type, pdcid_t pdcid) q->obj_prop_pub = (struct pdc_obj_prop *)PDC_malloc(sizeof(struct pdc_obj_prop)); if (!q->obj_prop_pub) PGOTO_ERROR(0, "PDC object pub property memory allocation failed"); - q->obj_prop_pub->ndim = 0; - q->obj_prop_pub->dims = NULL; - q->obj_prop_pub->type = PDC_UNKNOWN; + // default ndim size to 1 + q->obj_prop_pub->ndim = 1; + q->obj_prop_pub->dims = (uint64_t *)PDC_calloc(1, q->obj_prop_pub->ndim * sizeof(uint64_t)); + q->obj_prop_pub->type = PDC_UNKNOWN; q->obj_prop_pub->region_partition = PDC_REGION_STATIC; q->obj_prop_pub->consistency = PDC_CONSISTENCY_EVENTUAL; q->data_loc = NULL; @@ -120,13 +121,14 @@ PDCprop_create(pdc_prop_type_t type, pdcid_t pdcid) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDCprop_obj_dup(pdcid_t prop_id) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_obj_prop *q = NULL; struct _pdc_obj_prop *info = NULL; @@ -134,11 +136,9 @@ PDCprop_obj_dup(pdcid_t prop_id) pdcid_t new_id; size_t i; - FUNC_ENTER(NULL); - prop = PDC_find_id(prop_id); if (prop == NULL) - PGOTO_ERROR(0, "cannot locate object property"); + PGOTO_ERROR(0, "Cannot locate object property"); info = (struct _pdc_obj_prop *)(prop->obj_ptr); q = (struct _pdc_obj_prop *)PDC_calloc(1, sizeof(struct _pdc_obj_prop)); @@ -159,7 +159,7 @@ PDCprop_obj_dup(pdcid_t prop_id) new_id = PDC_id_register(PDC_OBJ_PROP, q); q->obj_prop_pub->obj_prop_id = new_id; q->obj_prop_pub->ndim = info->obj_prop_pub->ndim; - q->obj_prop_pub->dims = (uint64_t *)malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); + q->obj_prop_pub->dims = (uint64_t *)PDC_malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); q->obj_prop_pub->type = PDC_UNKNOWN; q->obj_prop_pub->region_partition = info->obj_prop_pub->region_partition; for (i = 0; i < info->obj_prop_pub->ndim; i++) @@ -176,18 +176,17 @@ PDCprop_obj_dup(pdcid_t prop_id) ret_value = new_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_prop_cont_list_null() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int nelemts; - FUNC_ENTER(NULL); - // list is not empty nelemts = PDC_id_list_null(PDC_CONT_PROP); if (nelemts > 0) { @@ -196,18 +195,16 @@ PDC_prop_cont_list_null() } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_prop_obj_list_null() { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; int nelemts; - FUNC_ENTER(NULL); - // list is not empty nelemts = PDC_id_list_null(PDC_OBJ_PROP); if (nelemts > 0) { @@ -216,20 +213,19 @@ PDC_prop_obj_list_null() } done: - fflush(stdout); FUNC_LEAVE(ret_value); } static perr_t pdc_prop_cont_close(struct _pdc_cont_prop *cp) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - free(cp->pdc->name); - cp->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->pdc); - cp = (struct _pdc_cont_prop *)(intptr_t)PDC_free(cp); + perr_t ret_value = SUCCEED; + + cp->pdc->name = (char *)PDC_free(cp->pdc->name); + cp->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->pdc); + cp = (struct _pdc_cont_prop *)(intptr_t)PDC_free(cp); FUNC_LEAVE(ret_value); } @@ -237,20 +233,21 @@ pdc_prop_cont_close(struct _pdc_cont_prop *cp) static perr_t pdc_prop_obj_close(struct _pdc_obj_prop *cp) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + cp->pdc->name = (char *)PDC_free(cp->pdc->name); + cp->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->pdc); - free(cp->pdc->name); - cp->pdc = (struct _pdc_class *)(intptr_t)PDC_free(cp->pdc); if (cp->obj_prop_pub->dims != NULL) { - free(cp->obj_prop_pub->dims); + cp->obj_prop_pub->dims = (uint64_t *)PDC_free(cp->obj_prop_pub->dims); cp->obj_prop_pub->dims = NULL; } - free(cp->app_name); - free(cp->tags); - free(cp->data_loc); - cp = (struct _pdc_obj_prop *)(intptr_t)PDC_free(cp); + cp->app_name = (char *)PDC_free(cp->app_name); + cp->tags = (char *)PDC_free(cp->tags); + cp->data_loc = (char *)PDC_free(cp->data_loc); + cp = (struct _pdc_obj_prop *)(intptr_t)PDC_free(cp); FUNC_LEAVE(ret_value); } @@ -258,49 +255,47 @@ pdc_prop_obj_close(struct _pdc_obj_prop *cp) perr_t PDCprop_close(pdcid_t id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(id) < 0) - PGOTO_ERROR(FAIL, "property: problem of freeing id"); + PGOTO_ERROR(FAIL, "Property: problem of freeing id"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_prop_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (PDC_destroy_type(PDC_CONT_PROP) < 0) - PGOTO_ERROR(FAIL, "unable to destroy container property interface"); + PGOTO_ERROR(FAIL, "Unable to destroy container property interface"); if (PDC_destroy_type(PDC_OBJ_PROP) < 0) - PGOTO_ERROR(FAIL, "unable to destroy object property interface"); + PGOTO_ERROR(FAIL, "Unable to destroy object property interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct _pdc_cont_prop * PDCcont_prop_get_info(pdcid_t cont_prop) { + FUNC_ENTER(NULL); + struct _pdc_cont_prop *ret_value = NULL; struct _pdc_cont_prop *info = NULL; struct _pdc_id_info * prop; - FUNC_ENTER(NULL); - prop = PDC_find_id(cont_prop); if (prop == NULL) - PGOTO_ERROR(NULL, "cannot allocate container property"); + PGOTO_ERROR(NULL, "Cannot allocate container property"); info = (struct _pdc_cont_prop *)(prop->obj_ptr); ret_value = (struct _pdc_cont_prop *)PDC_calloc(1, sizeof(struct _pdc_cont_prop)); @@ -311,29 +306,28 @@ PDCcont_prop_get_info(pdcid_t cont_prop) ret_value->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (!ret_value->pdc) - PGOTO_ERROR(NULL, "cannot allocate ret_value->pdc"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->pdc"); if (info->pdc->name) ret_value->pdc->name = strdup(info->pdc->name); ret_value->pdc->local_id = info->pdc->local_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_obj_prop * PDCobj_prop_get_info(pdcid_t obj_prop) { + FUNC_ENTER(NULL); + struct pdc_obj_prop * ret_value = NULL; struct _pdc_obj_prop *info = NULL; struct _pdc_id_info * prop; size_t i; - FUNC_ENTER(NULL); - prop = PDC_find_id(obj_prop); if (prop == NULL) - PGOTO_ERROR(NULL, "cannot locate object property"); + PGOTO_ERROR(NULL, "Cannot locate object property"); info = (struct _pdc_obj_prop *)(prop->obj_ptr); ret_value = (struct pdc_obj_prop *)PDC_calloc(1, sizeof(struct pdc_obj_prop)); @@ -341,30 +335,29 @@ PDCobj_prop_get_info(pdcid_t obj_prop) PGOTO_ERROR(NULL, "PDC object property memory allocation failed"); memcpy(ret_value, info->obj_prop_pub, sizeof(struct pdc_obj_prop)); - ret_value->dims = malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); + ret_value->dims = PDC_malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); if (ret_value->dims == NULL) - PGOTO_ERROR(NULL, "cannot allocate ret_value->dims"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->dims"); for (i = 0; i < info->obj_prop_pub->ndim; i++) ret_value->dims[i] = info->obj_prop_pub->dims[i]; done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct _pdc_obj_prop * PDC_obj_prop_get_info(pdcid_t obj_prop) { + FUNC_ENTER(NULL); + struct _pdc_obj_prop *ret_value = NULL; struct _pdc_obj_prop *info = NULL; struct _pdc_id_info * prop; size_t i; - FUNC_ENTER(NULL); - prop = PDC_find_id(obj_prop); if (prop == NULL) - PGOTO_ERROR(NULL, "cannot locate object property"); + PGOTO_ERROR(NULL, "Cannot locate object property"); info = (struct _pdc_obj_prop *)(prop->obj_ptr); ret_value = (struct _pdc_obj_prop *)PDC_calloc(1, sizeof(struct _pdc_obj_prop)); @@ -383,7 +376,7 @@ PDC_obj_prop_get_info(pdcid_t obj_prop) /* struct _pdc_class field */ ret_value->pdc = (struct _pdc_class *)PDC_calloc(1, sizeof(struct _pdc_class)); if (ret_value->pdc == NULL) - PGOTO_ERROR(NULL, "cannot allocate ret_value->pdc"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->pdc"); if (info->pdc->name) ret_value->pdc->name = strdup(info->pdc->name); ret_value->pdc->local_id = info->pdc->local_id; @@ -393,14 +386,13 @@ PDC_obj_prop_get_info(pdcid_t obj_prop) if (ret_value->obj_prop_pub == NULL) PGOTO_ERROR(NULL, "PDC object pub property memory allocation failed"); memcpy(ret_value->obj_prop_pub, info->obj_prop_pub, sizeof(struct pdc_obj_prop)); - ret_value->obj_prop_pub->dims = malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); + ret_value->obj_prop_pub->dims = PDC_malloc(info->obj_prop_pub->ndim * sizeof(uint64_t)); if (ret_value->obj_prop_pub->dims == NULL) - PGOTO_ERROR(NULL, "cannot allocate ret_value->obj_prop_pub->dims"); + PGOTO_ERROR(NULL, "Cannot allocate ret_value->obj_prop_pub->dims"); for (i = 0; i < info->obj_prop_pub->ndim; i++) ret_value->obj_prop_pub->dims[i] = info->obj_prop_pub->dims[i]; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -408,11 +400,10 @@ PDC_obj_prop_get_info(pdcid_t obj_prop) perr_t PDC_obj_prop_free(struct _pdc_obj_prop *cp) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = pdc_prop_obj_close(cp); + perr_t ret_value = SUCCEED; + ret_value = pdc_prop_obj_close(cp); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_query/pdc_query.c b/src/api/pdc_query/pdc_query.c index 25df43ea7..c71f1b2ad 100644 --- a/src/api/pdc_query/pdc_query.c +++ b/src/api/pdc_query/pdc_query.c @@ -22,14 +22,14 @@ pdc_query_t * PDCquery_create(pdcid_t obj_id, pdc_query_op_t op, pdc_var_type_t type, void *value) { + FUNC_ENTER(NULL); + pdc_query_t * ret_value = NULL; pdc_query_t * query; int type_size; struct _pdc_obj_info *obj_prop; uint64_t meta_id; - FUNC_ENTER(NULL); - if (obj_id == 0 || op == PDC_OP_NONE || NULL == value) PGOTO_DONE(NULL); @@ -40,44 +40,43 @@ PDCquery_create(pdcid_t obj_id, pdc_query_op_t op, pdc_var_type_t type, void *va else meta_id = obj_id; - query = (pdc_query_t *)calloc(1, sizeof(pdc_query_t)); - query->constraint = (pdc_query_constraint_t *)calloc(1, sizeof(pdc_query_constraint_t)); + query = (pdc_query_t *)PDC_calloc(1, sizeof(pdc_query_t)); + query->constraint = (pdc_query_constraint_t *)PDC_calloc(1, sizeof(pdc_query_constraint_t)); query->constraint->obj_id = meta_id; // Use global ID query->constraint->op = op; query->constraint->type = type; type_size = PDC_get_var_type_size(type); if (type_size > 8) - PGOTO_ERROR(NULL, "Cannot handle value larger than 8 bytes!"); + PGOTO_ERROR(NULL, "Cannot handle value larger than 8 bytes"); memcpy(&query->constraint->value, value, type_size); ret_value = query; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCquery_sel_region(pdc_query_t *query, struct pdc_region_info *obj_region) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (NULL == query || NULL == obj_region) PGOTO_DONE(FAIL); query->region = obj_region; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdc_query_t * PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) { + FUNC_ENTER(NULL); + pdc_query_t *ret_value = NULL; pdc_query_t *query, *tmp; int can_combine = 0; @@ -88,8 +87,6 @@ PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) int64_t i64lo, i64hi; uint64_t ui64lo, ui64hi; - FUNC_ENTER(NULL); - if (NULL == q1 || NULL == q2) return NULL; @@ -111,49 +108,6 @@ PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) (q2->constraint->op == PDC_LT || q2->constraint->op == PDC_LTE))) { break; } - /* - switch (q1->constraint->type) { - case PDC_FLOAT: - flo = *((float *)&q1->constraint->value); - fhi = *((float *)&q2->constraint->value); - if (flo <= fhi) - can_combine = 1; - break; - case PDC_DOUBLE: - dlo = *((double *)&q1->constraint->value); - dhi = *((double *)&q2->constraint->value); - if (dlo <= dhi) - can_combine = 1; - break; - case PDC_INT: - ilo = *((int *)&q1->constraint->value); - ihi = *((int *)&q2->constraint->value); - if (ilo <= ihi) - can_combine = 1; - break; - case PDC_UINT: - ulo = *((uint32_t *)&q1->constraint->value); - uhi = *((uint32_t *)&q2->constraint->value); - if (ulo <= uhi) - can_combine = 1; - break; - case PDC_INT64: - i64lo = *((int64_t *)&q1->constraint->value); - i64hi = *((int64_t *)&q2->constraint->value); - if (i64lo <= i64hi) - can_combine = 1; - break; - case PDC_UINT64: - ui64lo = *((uint64_t *)&q1->constraint->value); - ui64hi = *((uint64_t *)&q2->constraint->value); - if (ui64lo <= ui64hi) - can_combine = 1; - break; - default: - PGOTO_ERROR(NULL, "== error with operator type!"); - break; - } // End switch - */ switch (q1->constraint->type) { case PDC_FLOAT: flo = (float)q1->constraint->value; @@ -192,26 +146,24 @@ PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) can_combine = 1; break; default: - PGOTO_ERROR(NULL, "== error with operator type!"); + PGOTO_ERROR(NULL, "Error with operator type"); break; } // End switch break; } } - query = (pdc_query_t *)calloc(1, sizeof(pdc_query_t)); + query = (pdc_query_t *)PDC_calloc(1, sizeof(pdc_query_t)); query->region = q1->region != NULL ? q1->region : q2->region; if (can_combine == 1) { - query->constraint = (pdc_query_constraint_t *)calloc(1, sizeof(pdc_query_constraint_t)); + query->constraint = (pdc_query_constraint_t *)PDC_calloc(1, sizeof(pdc_query_constraint_t)); memcpy(query->constraint, q1->constraint, sizeof(pdc_query_constraint_t)); query->constraint->is_range = 1; query->constraint->op2 = q2->constraint->op; query->constraint->value2 = q2->constraint->value; - free(q1->constraint); - free(q2->constraint); - q1->constraint = NULL; - q2->constraint = NULL; + q1->constraint = (pdc_query_constraint_t *)PDC_free(q1->constraint); + q2->constraint = (pdc_query_constraint_t *)PDC_free(q2->constraint); } else { query->left = q1; @@ -223,22 +175,21 @@ PDCquery_and(pdc_query_t *q1, pdc_query_t *q2) ret_value = query; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdc_query_t * PDCquery_or(pdc_query_t *q1, pdc_query_t *q2) { + FUNC_ENTER(NULL); + pdc_query_t *ret_value = NULL; pdc_query_t *query; - FUNC_ENTER(NULL); - if (NULL == q1 || NULL == q2) PGOTO_DONE(NULL); - query = (pdc_query_t *)calloc(1, sizeof(pdc_query_t)); + query = (pdc_query_t *)PDC_calloc(1, sizeof(pdc_query_t)); query->left = q1; query->right = q2; query->constraint = NULL; @@ -249,56 +200,51 @@ PDCquery_or(pdc_query_t *q1, pdc_query_t *q2) ret_value = query; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCquery_get_nhits(pdc_query_t *query, uint64_t *n) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (query == NULL || n == NULL) - PGOTO_ERROR(FAIL, "==PDC input NULL!"); + PGOTO_ERROR(FAIL, "Input NULL"); ret_value = PDC_send_data_query(query, PDC_QUERY_GET_NHITS, n, NULL, NULL); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCquery_get_selection(pdc_query_t *query, pdc_selection_t *sel) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (query == NULL || sel == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[] input NULL!"); + PGOTO_ERROR(FAIL, "Input NULL"); memset(sel, 0, sizeof(pdc_selection_t)); ret_value = PDC_send_data_query(query, PDC_QUERY_GET_SEL, NULL, sel, NULL); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCquery_get_data(pdcid_t obj_id, pdc_selection_t *sel, void *obj_data) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_obj_info *obj_prop; uint64_t meta_id; - FUNC_ENTER(NULL); - if (obj_data == NULL || sel == NULL) - PGOTO_ERROR(FAIL, "==PDC_CLIENT[] input NULL!"); + PGOTO_ERROR(FAIL, "Input NULL"); if (PDC_find_id(obj_id) != NULL) { obj_prop = PDC_obj_get_info(obj_id); @@ -310,19 +256,19 @@ PDCquery_get_data(pdcid_t obj_id, pdc_selection_t *sel, void *obj_data) ret_value = PDC_Client_get_sel_data(meta_id, sel, obj_data); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCquery_get_histogram(pdcid_t obj_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* struct _pdc_obj_info *obj_prop; uint64_t meta_id = 0; */ - FUNC_ENTER(NULL); if (PDC_find_id(obj_id) == NULL) { ret_value = 1; } diff --git a/src/api/pdc_region/include/pdc_region.h b/src/api/pdc_region/include/pdc_region.h index 9a534e9b9..1a273a9f4 100644 --- a/src/api/pdc_region/include/pdc_region.h +++ b/src/api/pdc_region/include/pdc_region.h @@ -27,10 +27,13 @@ #include "pdc_public.h" #include "pdc_obj.h" + #ifdef ENABLE_MPI #include "mpi.h" #endif +#define DIM_MAX 4 + /**************************/ /* Library Public Struct */ /**************************/ @@ -46,6 +49,13 @@ struct pdc_region_info { size_t unit; }; +// Similar structure PDC_region_info_t defined in pdc_obj_pkg.h +typedef struct region_info_transfer_t { + size_t ndim; + uint64_t start[DIM_MAX]; + uint64_t count[DIM_MAX]; +} region_info_transfer_t; + typedef enum { PDC_TRANSFER_STATUS_COMPLETE = 0, PDC_TRANSFER_STATUS_PENDING = 1, @@ -177,7 +187,7 @@ perr_t PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_statu perr_t PDCregion_transfer_wait(pdcid_t transfer_request_id); /** - * Block and wait for several region transfer request to finish + * Block and wait for several region transfer requests to finish * * \param transfer_request_id [IN] ID of the region transfer request * \param size [IN] Number of requests in transfer_request_id @@ -253,4 +263,129 @@ perr_t PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_ty */ perr_t PDCreg_release_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type); +/** + * @brief Check if two region info transfers are identical. + * + * Compares two region info transfer structures (`reg1` and `reg2`) to determine if they + * are equal. The comparison checks if all bytes within the structures match. + * + * @param reg1 [IN] Pointer to the first region info transfer to compare. + * @param reg2 [IN] Pointer to the second region info transfer to compare. + * + * @return 1 if the region info transfers are identical, -1 otherwise. + */ +pbool_t PDC_region_info_transfer_t_is_equal(const region_info_transfer_t *reg1, + const region_info_transfer_t *reg2); + +/** + * @brief Copy a region info transfer to another region. + * + * Copies the data from one region info transfer structure (`src_reg`) to another (`dest_reg`). + * + * @param src_reg [IN] Pointer to the source region info transfer to copy from. + * @param dest_reg [OUT] Pointer to the destination region info transfer to copy to. + * + * @return Non-negative on success, negative on failure. + */ +perr_t PDC_copy_region_info_transfer_t(const region_info_transfer_t *src_reg, + region_info_transfer_t * dest_reg); + +/** + * @brief Calculate the size of a region descriptor in bytes. + * + * This function computes the size of the region described by `src_reg` in bytes by + * multiplying the size of each dimension by the element size (`unit`). + * The size in bytes is computed as the product of all dimensions, scaled by `unit`. + * + * @param src_reg [IN] Pointer to the source region descriptor (in elements) + * @param unit [IN] Size of each element in bytes + * @param ndim [IN] Number of dimensions in the region descriptor + * + * @return The size of the region in bytes. + */ +uint64_t PDC_get_region_desc_size_bytes(uint64_t *src_reg, int unit, int ndim); + +/** + * @brief Calculate the size of a region descriptor in elements from region desccriptor in bytes. + * + * This function computes the size of the region described by `src_reg` in terms of the + * number of elements by dividing the given byte size by the element size (`unit`). + * + * @param src_reg [IN] Pointer to the source region descriptor (in bytes) + * @param unit [IN] Size of each element in bytes + * @param ndim [IN] Number of dimensions in the region descriptor + * + * @return The size of the region in terms of the number of elements. + */ +uint64_t PDC_get_region_desc_size_from_bytes_to_elements(const uint64_t *src_reg, int unit, int ndim); + +/** + * @brief Calculate the total size of a region descriptor in elements. + * + * This function computes the total size of the region described by `src_reg`, + * by multiplying the dimensions of the region. The size is returned in terms + * of the number of elements, not bytes. + * + * @param src_reg [IN] Pointer to the source region descriptor (in elements) + * @param ndim [IN] Number of dimensions in the region descriptor + * + * @return The total size of the region in terms of the number of elements. + */ +uint64_t PDC_get_region_desc_size(const uint64_t *src_reg, int ndim); + +/** + * @brief Convert a region descriptor from byte units to element units. + * + * Copies the region dimensions from the source descriptor to the destination descriptor, + * converting each dimension from bytes to elements by dividing by the element size. + * For each dimension i: + * dest_reg[i] = src_reg[i] / unit + * + * Both source and destination pointers must be non-null. + * + * @param src_reg [IN] Pointer to the source region descriptor (in bytes) + * @param dest_reg [OUT] Pointer to the destination region descriptor (in elements) + * @param unit [IN] Size of each element in bytes + * @param ndim [IN] Number of dimensions in the region + * + * @return Non-negative on success, negative on failure. + */ +perr_t PDC_copy_region_desc_bytes_to_elements(const uint64_t *src_reg, uint64_t *dest_reg, int unit, + int ndim); + +/** + * @brief Copy a region descriptor from source to destination without unit scaling. + * + * Copies each dimension from the source region descriptor to the destination region + * descriptor without applying any scaling. The number of dimensions may differ between + * source and destination, in which case only the common number of dimensions is copied. + * + * Validates that both source and destination pointers are not NULL. + * + * @param src_reg [IN] Pointer to the source region descriptor + * @param dest_reg [OUT] Pointer to the destination region descriptor + * @param src_ndim [IN] Number of dimensions in the source region + * @param dest_ndim [IN] Number of dimensions in the destination region + * + * @return Non-negative on success, negative on failure. + */ +perr_t PDC_copy_region_desc(const uint64_t *src_reg, uint64_t *dest_reg, int src_ndim, int dest_ndim); + +/** + * @brief Copy a region descriptor from element units to byte units. + * + * Sets each dimension of the destination region descriptor equal to the + * corresponding dimension of the source descriptor multiplied by the element size in bytes. + * For the i-th dimension: dest_reg[i] = src_reg[i] * unit + * + * @param src_reg [IN] Pointer to the source region descriptor (in elements) + * @param dest_reg [OUT] Pointer to the destination region descriptor (in bytes) + * @param unit [IN] Size of each element in bytes + * @param dest_ndim [IN] Number of dimensions in the destination region + * + * @return Non-negative on success, negative on failure. + */ +perr_t PDC_copy_region_desc_elements_to_bytes(const uint64_t *src_reg, uint64_t *dest_reg, int unit, + int dest_ndim); + #endif /* PDC_REGION_H */ diff --git a/src/api/pdc_region/pdc_region.c b/src/api/pdc_region/pdc_region.c index b4a6d8a66..366df124c 100644 --- a/src/api/pdc_region/pdc_region.c +++ b/src/api/pdc_region/pdc_region.c @@ -47,43 +47,39 @@ static perr_t pdc_transfer_request_close(); perr_t PDC_region_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Initialize the atom group for the region IDs */ if (PDC_register_type(PDC_REGION, (PDC_free_t)pdc_region_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize region interface"); + PGOTO_ERROR(FAIL, "Unable to initialize region interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_transfer_request_init() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Initialize the atom group for the region IDs */ if (PDC_register_type(PDC_TRANSFER_REQUEST, (PDC_free_t)pdc_transfer_request_close) < 0) - PGOTO_ERROR(FAIL, "unable to initialize region interface"); + PGOTO_ERROR(FAIL, "Unable to initialize region interface"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_region_list_null() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int nelemts; - FUNC_ENTER(NULL); - // list is not empty nelemts = PDC_id_list_null(PDC_REGION); if (nelemts > 0) { @@ -92,19 +88,19 @@ PDC_region_list_null() } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t pdc_region_close(struct pdc_region_info *op) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + op->size = (uint64_t *)PDC_free(op->size); + op->offset = (uint64_t *)PDC_free(op->offset); - free(op->size); - free(op->offset); if (op->obj != NULL) op->obj = (struct _pdc_obj_info *)(intptr_t)PDC_free(op->obj); op = (struct pdc_region_info *)(intptr_t)PDC_free(op); @@ -115,82 +111,58 @@ pdc_region_close(struct pdc_region_info *op) perr_t pdc_transfer_request_close() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + FUNC_LEAVE(ret_value); } perr_t PDCregion_close(pdcid_t region_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(region_id) < 0) - PGOTO_ERROR(FAIL, "object: problem of freeing id"); + PGOTO_ERROR(FAIL, "Object: problem of freeing id"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_region_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (PDC_destroy_type(PDC_REGION) < 0) - PGOTO_ERROR(FAIL, "unable to destroy region interface"); -done: - fflush(stdout); - FUNC_LEAVE(ret_value); -} - -/* -static pdc_transfer_status_t check_local_transfer_request(struct _pdc_obj_info *p, pdcid_t -transfer_request_id) { pdc_transfer_status_t ret_value; struct pdc_local_transfer_request *temp; + PGOTO_ERROR(FAIL, "Failed to destroy region interface"); - FUNC_ENTER(NULL); - - ret_value = PDC_TRANSFER_STATUS_NOT_FOUND; - - temp = p->local_transfer_request_head; - - while ( temp != NULL ) { - if (temp->local_id == transfer_request_id) { - ret_value = PDC_TRANSFER_STATUS_PENDING; - } - temp = temp->next; - } done: - fflush(stdout); FUNC_LEAVE(ret_value); } -*/ pdcid_t PDCregion_create(psize_t ndims, uint64_t *offset, uint64_t *size) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct pdc_region_info *p = NULL; pdcid_t new_id; size_t i = 0; - FUNC_ENTER(NULL); - p = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (!p) PGOTO_ERROR(ret_value, "PDC region memory allocation failed"); p->ndim = ndims; p->obj = NULL; - p->offset = (uint64_t *)malloc(ndims * sizeof(uint64_t)); - p->size = (uint64_t *)malloc(ndims * sizeof(uint64_t)); + p->offset = (uint64_t *)PDC_malloc(ndims * sizeof(uint64_t)); + p->size = (uint64_t *)PDC_malloc(ndims * sizeof(uint64_t)); p->mapping = 0; p->local_id = 0; for (i = 0; i < ndims; i++) { @@ -202,7 +174,6 @@ PDCregion_create(psize_t ndims, uint64_t *offset, uint64_t *size) ret_value = new_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -210,6 +181,8 @@ perr_t PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t remote_obj, pdcid_t remote_reg) { + FUNC_ENTER(NULL); + pdcid_t ret_value = SUCCEED; size_t i; struct _pdc_id_info * objinfo2; @@ -220,15 +193,13 @@ PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t struct _pdc_id_info * reginfo1, *reginfo2; struct pdc_region_info *reg1, *reg2; - FUNC_ENTER(NULL); - reginfo1 = PDC_find_id(local_reg); reg1 = (struct pdc_region_info *)(reginfo1->obj_ptr); objinfo2 = PDC_find_id(remote_obj); if (objinfo2 == NULL) - PGOTO_ERROR(FAIL, "cannot locate remote object ID"); + PGOTO_ERROR(FAIL, "Cannot locate remote object ID"); obj2 = (struct _pdc_obj_info *)(objinfo2->obj_ptr); remote_meta_id = obj2->obj_info_pub->meta_id; remote_type = obj2->obj_pt->obj_prop_pub->type; @@ -236,10 +207,10 @@ PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t reginfo2 = PDC_find_id(remote_reg); reg2 = (struct pdc_region_info *)(reginfo2->obj_ptr); if (obj2->obj_pt->obj_prop_pub->ndim != reg2->ndim) - PGOTO_ERROR(FAIL, "remote object dimension and region dimension does not match"); + PGOTO_ERROR(FAIL, "Remote object dimension and region dimension does not match"); for (i = 0; i < reg2->ndim; i++) if ((obj2->obj_pt->obj_prop_pub->dims)[i] < (reg2->size)[i]) - PGOTO_ERROR(FAIL, "remote object region size error"); + PGOTO_ERROR(FAIL, "Remote object region size error"); ret_value = PDC_Client_buf_map(local_reg, remote_meta_id, reg1->ndim, reg1->size, reg1->offset, local_type, buf, remote_type, reg1, reg2, obj2); @@ -256,51 +227,49 @@ PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t } done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_region_info * PDCregion_get_info(pdcid_t reg_id) { + FUNC_ENTER(NULL); + struct pdc_region_info *ret_value = NULL; struct pdc_region_info *info = NULL; struct _pdc_id_info * region; - FUNC_ENTER(NULL); - region = PDC_find_id(reg_id); if (region == NULL) - PGOTO_ERROR(NULL, "cannot locate region"); + PGOTO_ERROR(NULL, "Cannot locate region"); info = (struct pdc_region_info *)(region->obj_ptr); ret_value = info; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCbuf_obj_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * info1; struct _pdc_obj_info * object1; struct pdc_region_info *reginfo; pdc_var_type_t data_type; - FUNC_ENTER(NULL); - info1 = PDC_find_id(remote_obj_id); if (info1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate object ID"); + PGOTO_ERROR(FAIL, "Cannot locate object ID"); object1 = (struct _pdc_obj_info *)(info1->obj_ptr); data_type = object1->obj_pt->obj_prop_pub->type; info1 = PDC_find_id(remote_reg_id); if (info1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate region ID"); + PGOTO_ERROR(FAIL, "Cannot locate region ID"); reginfo = (struct pdc_region_info *)(info1->obj_ptr); ret_value = @@ -312,13 +281,14 @@ PDCbuf_obj_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type, pdc_lock_mode_t lock_mode) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_obj_info * object_info; struct pdc_region_info *region_info; @@ -326,11 +296,9 @@ PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type, pdc pbool_t obtained; struct _pdc_id_info * info1; - FUNC_ENTER(NULL); - info1 = PDC_find_id(obj_id); if (info1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate object ID"); + PGOTO_ERROR(FAIL, "Cannot locate object ID"); object_info = (struct _pdc_obj_info *)(info1->obj_ptr); // object_info = PDC_obj_get_info(obj_id); data_type = object_info->obj_pt->obj_prop_pub->type; @@ -346,6 +314,8 @@ PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type, pdc perr_t PDCreg_release_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pbool_t released; struct _pdc_obj_info * object_info; @@ -353,11 +323,9 @@ PDCreg_release_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type) pdc_var_type_t data_type; struct _pdc_id_info * info1; - FUNC_ENTER(NULL); - info1 = PDC_find_id(obj_id); if (info1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate object ID"); + PGOTO_ERROR(FAIL, "Cannot locate object ID"); object_info = (struct _pdc_obj_info *)(info1->obj_ptr); // object_info = PDC_obj_get_info(obj_id); data_type = object_info->obj_pt->obj_prop_pub->type; diff --git a/src/api/pdc_region/pdc_region_transfer.c b/src/api/pdc_region/pdc_region_transfer.c index 2dfdcd72d..2a773a299 100644 --- a/src/api/pdc_region/pdc_region_transfer.c +++ b/src/api/pdc_region/pdc_region_transfer.c @@ -46,7 +46,6 @@ #include #define PDC_MERGE_TRANSFER_MIN_COUNT 50 -/* #define TANG_DEBUG 1 */ // pdc region transfer class. Contains essential information for performing non-blocking PDC client I/O // perations. @@ -195,6 +194,8 @@ pdcid_t PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, pdcid_t local_reg, pdcid_t remote_reg) { + FUNC_ENTER(NULL); + pdcid_t ret_value = SUCCEED; struct _pdc_id_info * objinfo2; struct _pdc_obj_info * obj2; @@ -205,24 +206,22 @@ PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, p uint64_t unit; int j; - FUNC_ENTER(NULL); - if (buf == NULL) - PGOTO_ERROR(FAIL, "client buffer was NULL"); + PGOTO_ERROR(FAIL, "Client buffer was NULL"); reginfo1 = PDC_find_id(local_reg); if (reginfo1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate local region ID"); + PGOTO_ERROR(FAIL, "Cannot locate local region ID"); reg1 = (struct pdc_region_info *)(reginfo1->obj_ptr); reginfo2 = PDC_find_id(remote_reg); if (reginfo2 == NULL) - PGOTO_ERROR(FAIL, "cannot locate remote region ID"); + PGOTO_ERROR(FAIL, "Cannot locate remote region ID"); reg2 = (struct pdc_region_info *)(reginfo2->obj_ptr); objinfo2 = PDC_find_id(obj_id); if (objinfo2 == NULL) - PGOTO_ERROR(FAIL, "cannot locate remote object ID"); + PGOTO_ERROR(FAIL, "Cannot locate remote object ID"); obj2 = (struct _pdc_obj_info *)(objinfo2->obj_ptr); // remote_meta_id = obj2->obj_info_pub->meta_id; @@ -251,7 +250,7 @@ PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, p unit = p->unit; p->local_region_ndim = reg1->ndim; - p->local_region_offset = (uint64_t *)malloc( + p->local_region_offset = (uint64_t *)PDC_malloc( sizeof(uint64_t) * (reg1->ndim * 2 + reg2->ndim * 2 + obj2->obj_pt->obj_prop_pub->ndim)); ptr = p->local_region_offset; memcpy(p->local_region_offset, reg1->offset, sizeof(uint64_t) * reg1->ndim); @@ -280,41 +279,29 @@ PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, p ret_value = PDC_id_register(PDC_TRANSFER_REQUEST, p); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCregion_transfer_close(pdcid_t transfer_request_id) { + FUNC_ENTER(NULL); + struct _pdc_id_info * transferinfo; pdc_transfer_request *transfer_request; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); transferinfo = PDC_find_id(transfer_request_id); - if (transferinfo == NULL) { - goto done; - } - transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); - /* if (transfer_request->metadata_id == NULL) { */ - /* goto done; */ - /* } */ + if (transferinfo == NULL) + PGOTO_DONE(ret_value); - // Check for consistency - /* - pdc_consistency_t consistency = transfer_request->consistency; - if (consistency == PDC_CONSISTENCY_POSIX || consistency == PDC_CONSISTENCY_COMMIT || - consistency == PDC_CONSISTENCY_SESSION) { - PDCregion_transfer_wait(transfer_request_id); - } - */ + transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); if (transfer_request->local_region_offset) - free(transfer_request->local_region_offset); + transfer_request->local_region_offset = (uint64_t *)PDC_free(transfer_request->local_region_offset); if (transfer_request->metadata_id) - free(transfer_request->metadata_id); + transfer_request->metadata_id = (uint64_t *)PDC_free(transfer_request->metadata_id); if (transfer_request) - free(transfer_request); + transfer_request = (pdc_transfer_request *)PDC_free(transfer_request); /* When the reference count reaches zero the resources are freed */ if (PDC_dec_ref(transfer_request_id) < 0) @@ -324,7 +311,6 @@ PDCregion_transfer_close(pdcid_t transfer_request_id) PDC_Client_transfer_pthread_cnt_add(-1); PDC_Client_transfer_pthread_terminate(); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -337,24 +323,25 @@ PDCregion_transfer_close(pdcid_t transfer_request_id) static perr_t attach_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); if (p->local_transfer_request_head != NULL) { p->local_transfer_request_end->next = - (pdc_local_transfer_request *)malloc(sizeof(pdc_local_transfer_request)); + (pdc_local_transfer_request *)PDC_malloc(sizeof(pdc_local_transfer_request)); p->local_transfer_request_end = p->local_transfer_request_end->next; p->local_transfer_request_end->next = NULL; } else { p->local_transfer_request_head = - (pdc_local_transfer_request *)malloc(sizeof(pdc_local_transfer_request)); + (pdc_local_transfer_request *)PDC_malloc(sizeof(pdc_local_transfer_request)); p->local_transfer_request_end = p->local_transfer_request_head; p->local_transfer_request_end->next = NULL; } p->local_transfer_request_end->local_id = transfer_request_id; p->local_transfer_request_size++; - fflush(stdout); + FUNC_LEAVE(ret_value); } @@ -365,11 +352,11 @@ attach_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_ static perr_t remove_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct pdc_local_transfer_request *previous, *temp; - FUNC_ENTER(NULL); - temp = p->local_transfer_request_head; previous = NULL; while (temp != NULL) { @@ -378,12 +365,12 @@ remove_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_ // removing first element. Carefully set the head. previous = p->local_transfer_request_head; p->local_transfer_request_head = p->local_transfer_request_head->next; - free(previous); + previous = (struct pdc_local_transfer_request *)PDC_free(previous); } else { // Not the first element, just take the current element away. previous->next = temp->next; - free(temp); + temp = (struct pdc_local_transfer_request *)PDC_free(temp); } p->local_transfer_request_size--; break; @@ -392,7 +379,6 @@ remove_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_ temp = temp->next; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -408,6 +394,8 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ uint32_t **data_server_ids, uint64_t ***sub_offsets, uint64_t ***output_offsets, uint64_t ***output_sizes, char ***output_buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i, j; uint64_t static_offset, static_size; @@ -415,8 +403,6 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ int split_dim; uint64_t region_size; - FUNC_ENTER(NULL); - *n_data_servers = 0; // Search for a valid dimension we are going to split the region. @@ -437,13 +423,13 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ s = 1; x = pdc_server_num_g - obj_dims[split_dim] % pdc_server_num_g; - *data_server_ids = (uint32_t *)malloc(sizeof(uint32_t) * pdc_server_num_g); + *data_server_ids = (uint32_t *)PDC_malloc(sizeof(uint32_t) * pdc_server_num_g); - *output_offsets = (uint64_t **)malloc(sizeof(uint64_t *) * pdc_server_num_g); - *output_sizes = (uint64_t **)malloc(sizeof(uint64_t *) * pdc_server_num_g); - *sub_offsets = (uint64_t **)malloc(sizeof(uint64_t *) * pdc_server_num_g); + *output_offsets = (uint64_t **)PDC_malloc(sizeof(uint64_t *) * pdc_server_num_g); + *output_sizes = (uint64_t **)PDC_malloc(sizeof(uint64_t *) * pdc_server_num_g); + *sub_offsets = (uint64_t **)PDC_malloc(sizeof(uint64_t *) * pdc_server_num_g); if (set_output_buf) { - *output_buf = (char **)malloc(sizeof(char *) * pdc_server_num_g); + *output_buf = (char **)PDC_malloc(sizeof(char *) * pdc_server_num_g); } else { *output_buf = NULL; @@ -466,7 +452,7 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ // record data server ID data_server_ids[0][*n_data_servers] = i; // The overlapping region is allocated here. - output_offsets[0][*n_data_servers] = (uint64_t *)malloc(sizeof(uint64_t) * ndim * 3); + output_offsets[0][*n_data_servers] = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim * 3); output_sizes[0][*n_data_servers] = output_offsets[0][*n_data_servers] + ndim; sub_offsets[0][*n_data_servers] = output_offsets[0][*n_data_servers] + ndim * 2; region_size = unit; @@ -503,7 +489,7 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ // subregion is computed using the output region by aligning the offsets to its begining. if (set_output_buf) { // Copy subregion from input region to the new overlapping region. - output_buf[0][n_data_servers[0]] = (char *)calloc(region_size * unit, sizeof(char)); + output_buf[0][n_data_servers[0]] = (char *)PDC_calloc(region_size * unit, sizeof(char)); if (access_type == PDC_WRITE) { memcpy_subregion(ndim, unit, PDC_WRITE, buf, size, output_buf[0][n_data_servers[0]], sub_offsets[0][n_data_servers[0]], output_sizes[0][*n_data_servers]); @@ -514,17 +500,16 @@ static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_ } // Shrink memory size if necessary. if (*n_data_servers != pdc_server_num_g) { - *data_server_ids = (uint32_t *)realloc(*data_server_ids, sizeof(uint32_t) * n_data_servers[0]); - *output_offsets = (uint64_t **)realloc(*output_offsets, sizeof(uint64_t *) * n_data_servers[0]); - *output_sizes = (uint64_t **)realloc(*output_sizes, sizeof(uint64_t *) * n_data_servers[0]); + *data_server_ids = (uint32_t *)PDC_realloc(*data_server_ids, sizeof(uint32_t) * n_data_servers[0]); + *output_offsets = (uint64_t **)PDC_realloc(*output_offsets, sizeof(uint64_t *) * n_data_servers[0]); + *output_sizes = (uint64_t **)PDC_realloc(*output_sizes, sizeof(uint64_t *) * n_data_servers[0]); - *sub_offsets = (uint64_t **)realloc(*sub_offsets, sizeof(uint64_t *) * n_data_servers[0]); + *sub_offsets = (uint64_t **)PDC_realloc(*sub_offsets, sizeof(uint64_t *) * n_data_servers[0]); if (set_output_buf) { - *output_buf = (char **)realloc(*output_buf, sizeof(char *) * n_data_servers[0]); + *output_buf = (char **)PDC_realloc(*output_buf, sizeof(char *) * n_data_servers[0]); } } - fflush(stdout); FUNC_LEAVE(ret_value); } /* @@ -535,17 +520,17 @@ pack_region_buffer(char *buf, uint64_t *obj_dims, size_t total_data_size, int lo uint64_t *local_offset, uint64_t *local_size, size_t unit, pdc_access_t access_type, char **new_buf) { + FUNC_ENTER(NULL); + uint64_t i, j; perr_t ret_value = SUCCEED; char * ptr; - FUNC_ENTER(NULL); - if (local_ndim == 1) { *new_buf = buf + local_offset[0] * unit; } else if (local_ndim == 2) { - *new_buf = (char *)malloc(sizeof(char) * total_data_size); + *new_buf = (char *)PDC_malloc(sizeof(char) * total_data_size); if (access_type == PDC_WRITE) { ptr = *new_buf; for (i = 0; i < local_size[0]; ++i) { @@ -556,7 +541,7 @@ pack_region_buffer(char *buf, uint64_t *obj_dims, size_t total_data_size, int lo } } else if (local_ndim == 3) { - *new_buf = (char *)malloc(sizeof(char) * total_data_size); + *new_buf = (char *)PDC_malloc(sizeof(char) * total_data_size); if (access_type == PDC_WRITE) { ptr = *new_buf; for (i = 0; i < local_size[0]; ++i) { @@ -575,24 +560,27 @@ pack_region_buffer(char *buf, uint64_t *obj_dims, size_t total_data_size, int lo ret_value = FAIL; } - fflush(stdout); FUNC_LEAVE(ret_value); } static perr_t set_obj_server_bufs(pdc_transfer_request *transfer_request) { - perr_t ret_value = SUCCEED; FUNC_ENTER(NULL); - transfer_request->bulk_buf = (char **)malloc(sizeof(char *) * transfer_request->n_obj_servers); - transfer_request->bulk_buf_ref = (int **)malloc(sizeof(int *) * transfer_request->n_obj_servers); - transfer_request->metadata_id = (uint64_t *)malloc(sizeof(uint64_t) * transfer_request->n_obj_servers); + perr_t ret_value = SUCCEED; + + transfer_request->bulk_buf = (char **)PDC_malloc(sizeof(char *) * transfer_request->n_obj_servers); + transfer_request->bulk_buf_ref = (int **)PDC_malloc(sizeof(int *) * transfer_request->n_obj_servers); + transfer_request->metadata_id = + (uint64_t *)PDC_malloc(sizeof(uint64_t) * transfer_request->n_obj_servers); + // read_bulk_buf is filled later when the bulk transfer is packed. if (transfer_request->access_type == PDC_READ) { - transfer_request->read_bulk_buf = (char **)malloc(sizeof(char *) * transfer_request->n_obj_servers); + transfer_request->read_bulk_buf = + (char **)PDC_malloc(sizeof(char *) * transfer_request->n_obj_servers); } - fflush(stdout); + FUNC_LEAVE(ret_value); } @@ -600,14 +588,14 @@ static perr_t pack_region_metadata_query(pdc_transfer_request_start_all_pkg **transfer_request, int size, char **buf_ptr, uint64_t *total_buf_size_ptr) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; char * ptr; uint64_t total_buf_size; uint8_t region_partition; - FUNC_ENTER(NULL); - total_buf_size = 0; for (i = 0; i < size; ++i) { // ndim + Regions + obj_id + data_server id + data partition + unit @@ -616,7 +604,7 @@ pack_region_metadata_query(pdc_transfer_request_start_all_pkg **transfer_request sizeof(uint64_t) + sizeof(uint32_t) + sizeof(uint8_t) + sizeof(size_t); } - *buf_ptr = (char *)malloc(total_buf_size); + *buf_ptr = (char *)PDC_malloc(total_buf_size); ptr = *buf_ptr; for (i = 0; i < size; ++i) { memcpy(ptr, &(transfer_request[i]->transfer_request->obj_id), sizeof(uint64_t)); @@ -639,7 +627,7 @@ pack_region_metadata_query(pdc_transfer_request_start_all_pkg **transfer_request } *total_buf_size_ptr = total_buf_size; - fflush(stdout); + FUNC_LEAVE(ret_value); } @@ -648,6 +636,8 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra pdc_transfer_request_start_all_pkg **transfer_request_head_ptr, pdc_transfer_request_start_all_pkg **transfer_request_end_ptr, int *size_ptr) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_transfer_request_start_all_pkg *transfer_request_head, *transfer_request_end; pdc_transfer_request * local_request; @@ -657,7 +647,6 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra char * ptr; uint64_t region_size; uint64_t * sub_offset; - FUNC_ENTER(NULL); local_request = NULL; transfer_request_head = NULL; @@ -670,12 +659,12 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra for (i = 0; i < size; ++i) { if (transfer_request_head) { transfer_request_end->next = - (pdc_transfer_request_start_all_pkg *)malloc(sizeof(pdc_transfer_request_start_all_pkg)); + (pdc_transfer_request_start_all_pkg *)PDC_malloc(sizeof(pdc_transfer_request_start_all_pkg)); transfer_request_end = transfer_request_end->next; } else { transfer_request_head = - (pdc_transfer_request_start_all_pkg *)malloc(sizeof(pdc_transfer_request_start_all_pkg)); + (pdc_transfer_request_start_all_pkg *)PDC_malloc(sizeof(pdc_transfer_request_start_all_pkg)); transfer_request_end = transfer_request_head; } // Obj ID + Obj dim + region offset + region size @@ -685,12 +674,13 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra local_request = transfer_request_input[index]->transfer_request; local_request->n_obj_servers = counter; local_request->output_offsets = - (uint64_t **)malloc(sizeof(uint64_t *) * local_request->n_obj_servers); + (uint64_t **)PDC_malloc(sizeof(uint64_t *) * local_request->n_obj_servers); local_request->output_sizes = - (uint64_t **)malloc(sizeof(uint64_t *) * local_request->n_obj_servers); + (uint64_t **)PDC_malloc(sizeof(uint64_t *) * local_request->n_obj_servers); local_request->sub_offsets = - (uint64_t **)malloc(sizeof(uint64_t *) * local_request->n_obj_servers); - local_request->obj_servers = (uint32_t *)malloc(sizeof(uint32_t) * local_request->n_obj_servers); + (uint64_t **)PDC_malloc(sizeof(uint64_t *) * local_request->n_obj_servers); + local_request->obj_servers = + (uint32_t *)PDC_malloc(sizeof(uint32_t) * local_request->n_obj_servers); set_obj_server_bufs(local_request); } transfer_request_end->next = NULL; @@ -699,7 +689,7 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra ptr += sizeof(uint32_t); transfer_request_end->remote_offset = - (uint64_t *)malloc(sizeof(uint64_t) * local_request->remote_region_ndim * 3); + (uint64_t *)PDC_malloc(sizeof(uint64_t) * local_request->remote_region_ndim * 3); transfer_request_end->remote_size = transfer_request_end->remote_offset + local_request->remote_region_ndim; sub_offset = transfer_request_end->remote_offset + local_request->remote_region_ndim * 2; @@ -721,7 +711,7 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra sub_offset[j] = transfer_request_end->remote_offset[j] - local_request->remote_region_offset[j]; } if (local_request->access_type == PDC_WRITE) { - transfer_request_end->buf = (char *)malloc(region_size); + transfer_request_end->buf = (char *)PDC_malloc(region_size); memcpy_subregion(local_request->remote_region_ndim, local_request->unit, local_request->access_type, transfer_request_input[index]->buf, local_request->remote_region_size, transfer_request_end->buf, sub_offset, @@ -737,7 +727,6 @@ unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **tra *transfer_request_end_ptr = transfer_request_end; *size_ptr += size; - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -746,6 +735,8 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i uint8_t is_write, pdc_transfer_request_start_all_pkg ***transfer_request_output_ptr, int *output_size_ptr) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i, j, index, size, output_size, remain_size, n_objs; pdc_transfer_request_start_all_pkg **transfer_requests; @@ -754,10 +745,9 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i uint64_t total_buf_size, output_buf_size, query_id; char * buf, *output_buf; - FUNC_ENTER(NULL); transfer_request_output = NULL; transfer_request_front_head = NULL; - transfer_requests = (pdc_transfer_request_start_all_pkg **)malloc( + transfer_requests = (pdc_transfer_request_start_all_pkg **)PDC_malloc( sizeof(pdc_transfer_request_start_all_pkg *) * input_size); size = 0; for (i = 0; i < input_size; ++i) { @@ -781,15 +771,15 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i PDC_Client_transfer_request_metadata_query( buf, total_buf_size, n_objs, transfer_requests[index]->transfer_request->metadata_server_id, is_write, &output_buf_size, &query_id); - free(buf); + buf = (char *)PDC_free(buf); if (query_id) { - output_buf = (char *)malloc(output_buf_size); + output_buf = (char *)PDC_malloc(output_buf_size); PDC_Client_transfer_request_metadata_query2( output_buf, output_buf_size, query_id, transfer_requests[index]->transfer_request->metadata_server_id); unpack_region_metadata_query(output_buf, transfer_requests + index, &transfer_request_head, &transfer_request_end, &output_size); - free(output_buf); + output_buf = (char *)PDC_free(output_buf); if (transfer_request_front_head) { previous->next = transfer_request_head; } @@ -808,16 +798,16 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i PDC_Client_transfer_request_metadata_query( buf, total_buf_size, n_objs, transfer_requests[index]->transfer_request->metadata_server_id, is_write, &output_buf_size, &query_id); - free(buf); + buf = (char *)PDC_free(buf); // If it is a valid query ID, then it means regions are overlapping. if (query_id) { - output_buf = (char *)malloc(output_buf_size); + output_buf = (char *)PDC_malloc(output_buf_size); PDC_Client_transfer_request_metadata_query2( output_buf, output_buf_size, query_id, transfer_requests[index]->transfer_request->metadata_server_id); unpack_region_metadata_query(output_buf, transfer_requests + index, &transfer_request_head, &transfer_request_end, &output_size); - free(output_buf); + output_buf = (char *)PDC_free(output_buf); if (transfer_request_front_head) { previous->next = transfer_request_head; } @@ -829,7 +819,7 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i } if (output_size) { - transfer_request_output = (pdc_transfer_request_start_all_pkg **)malloc( + transfer_request_output = (pdc_transfer_request_start_all_pkg **)PDC_malloc( sizeof(pdc_transfer_request_start_all_pkg *) * (output_size + remain_size)); transfer_request_head = transfer_request_front_head; i = 0; @@ -843,14 +833,15 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i if (transfer_request_input[i]->transfer_request->region_partition == PDC_REGION_DYNAMIC || transfer_request_input[i]->transfer_request->region_partition == PDC_REGION_LOCAL) { // These are replaced by newly created request pkgs. - free(transfer_request_input[i]); + transfer_request_input[i] = + (pdc_transfer_request_start_all_pkg *)PDC_free(transfer_request_input[i]); } else { transfer_request_output[j] = transfer_request_input[i]; j++; } } - free(transfer_request_input); + transfer_request_input = (pdc_transfer_request_start_all_pkg **)PDC_free(transfer_request_input); *transfer_request_output_ptr = transfer_request_output; *output_size_ptr = j; } @@ -859,9 +850,8 @@ register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, i *output_size_ptr = input_size; } - free(transfer_requests); + transfer_requests = (pdc_transfer_request_start_all_pkg **)PDC_free(transfer_requests); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -877,6 +867,8 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, int *write_size_ptr, int *read_size_ptr, pdcid_t **posix_transfer_request_id_ptr, int *posix_size_ptr) { + FUNC_ENTER(NULL); + int i, j; int unit; pdc_transfer_request_start_all_pkg **write_transfer_request, **read_transfer_request, *write_request_pkgs, @@ -892,7 +884,7 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, write_size = 0; read_size = 0; posix_size_ptr[0] = 0; - *posix_transfer_request_id_ptr = (pdcid_t *)malloc(sizeof(pdcid_t) * size); + *posix_transfer_request_id_ptr = (pdcid_t *)PDC_malloc(sizeof(pdcid_t) * size); for (i = 0; i < size; ++i) { transferinfo = PDC_find_id(transfer_request_id[i]); @@ -900,8 +892,8 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, continue; transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); if (transfer_request->metadata_id != NULL) { - LOG_ERROR("==PDC_CLIENT[%d]: cannot start transfer request\n", pdc_client_mpi_rank_g); - return FAIL; + LOG_ERROR("Cannot start transfer request\n"); + FUNC_LEAVE(FAIL); } if (transfer_request->consistency == PDC_CONSISTENCY_POSIX) { posix_transfer_request_id_ptr[0][posix_size_ptr[0]] = transfer_request_id[i]; @@ -927,13 +919,12 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, &(transfer_request->sub_offsets), &(transfer_request->output_offsets), &(transfer_request->output_sizes), &(transfer_request->output_buf)); if (transfer_request->n_obj_servers == 0) { - LOG_ERROR("PDC_Client %d error with static region partition, no server is selected!\n", - pdc_client_mpi_rank_g); - return FAIL; + LOG_ERROR("Error with static region partition, no server is selected"); + FUNC_LEAVE(FAIL); } for (j = 0; j < transfer_request->n_obj_servers; ++j) { - request_pkgs = - (pdc_transfer_request_start_all_pkg *)malloc(sizeof(pdc_transfer_request_start_all_pkg)); + request_pkgs = (pdc_transfer_request_start_all_pkg *)PDC_malloc( + sizeof(pdc_transfer_request_start_all_pkg)); request_pkgs->transfer_request = transfer_request; request_pkgs->data_server_id = transfer_request->obj_servers[j]; request_pkgs->remote_offset = transfer_request->output_offsets[j]; @@ -975,7 +966,7 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, transfer_request->region_partition == PDC_REGION_LOCAL) { transfer_request->n_obj_servers = 1; request_pkgs = - (pdc_transfer_request_start_all_pkg *)malloc(sizeof(pdc_transfer_request_start_all_pkg)); + (pdc_transfer_request_start_all_pkg *)PDC_malloc(sizeof(pdc_transfer_request_start_all_pkg)); request_pkgs->transfer_request = transfer_request; request_pkgs->index = 0; if (transfer_request->region_partition == PDC_OBJ_STATIC) { @@ -1021,7 +1012,7 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, } if (write_size) { - write_transfer_request = (pdc_transfer_request_start_all_pkg **)malloc( + write_transfer_request = (pdc_transfer_request_start_all_pkg **)PDC_malloc( sizeof(pdc_transfer_request_start_all_pkg *) * write_size); request_pkgs = write_request_pkgs; for (i = 0; i < write_size; ++i) { @@ -1039,7 +1030,7 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, } if (read_size) { - read_transfer_request = (pdc_transfer_request_start_all_pkg **)malloc( + read_transfer_request = (pdc_transfer_request_start_all_pkg **)PDC_malloc( sizeof(pdc_transfer_request_start_all_pkg *) * read_size); request_pkgs = read_request_pkgs; for (i = 0; i < read_size; ++i) { @@ -1055,7 +1046,7 @@ prepare_start_all_requests(pdcid_t *transfer_request_id, int size, else { *read_size_ptr = 0; } - return SUCCEED; + FUNC_LEAVE(SUCCEED); } static int @@ -1063,21 +1054,23 @@ finish_start_all_requests(pdc_transfer_request_start_all_pkg **write_transfer_re pdc_transfer_request_start_all_pkg **read_transfer_request, int write_size, int read_size) { + FUNC_ENTER(NULL); + int i; for (i = 0; i < write_size; ++i) { - free(write_transfer_request[i]); + write_transfer_request[i] = (pdc_transfer_request_start_all_pkg *)PDC_free(write_transfer_request[i]); } for (i = 0; i < read_size; ++i) { - free(read_transfer_request[i]); + read_transfer_request[i] = (pdc_transfer_request_start_all_pkg *)PDC_free(read_transfer_request[i]); } - // MPI_Barrier(MPI_COMM_WORLD); if (write_size) { - free(write_transfer_request); + write_transfer_request = (pdc_transfer_request_start_all_pkg **)PDC_free(write_transfer_request); } if (read_size) { - free(read_transfer_request); + read_transfer_request = (pdc_transfer_request_start_all_pkg **)PDC_free(read_transfer_request); } - return 0; + + FUNC_LEAVE(0); } static perr_t @@ -1085,12 +1078,13 @@ PDC_Client_pack_all_requests(int n_objs, pdc_transfer_request_start_all_pkg **tr pdc_access_t access_type, char **bulk_buf_ptr, size_t *total_buf_size_ptr, char **read_bulk_buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; char * bulk_buf, *ptr, *ptr2; size_t total_buf_size, obj_data_size, total_obj_data_size, unit, data_size, metadata_size; int i, j; - FUNC_ENTER(NULL); // Calculate how large the final buffer will be // Metadata size @@ -1138,7 +1132,7 @@ PDC_Client_pack_all_requests(int n_objs, pdc_transfer_request_start_all_pkg **tr total_buf_size = metadata_size + data_size; } } - bulk_buf = (char *)malloc(total_buf_size); + bulk_buf = (char *)PDC_malloc(total_buf_size); *bulk_buf_ptr = bulk_buf; ptr = bulk_buf; ptr2 = bulk_buf; @@ -1181,13 +1175,15 @@ PDC_Client_pack_all_requests(int n_objs, pdc_transfer_request_start_all_pkg **tr } } *total_buf_size_ptr = total_buf_size; - fflush(stdout); + FUNC_LEAVE(ret_value); } static perr_t PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requests, int size, MPI_Comm comm) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int index, i, j; int n_objs; @@ -1197,19 +1193,11 @@ PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requ size_t bulk_buf_size; int * bulk_buf_ref; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] enter\n", cur_time, pdc_client_mpi_rank_g); -#endif - if (size == 0) - goto done; + PGOTO_DONE(ret_value); - metadata_id = (uint64_t *)malloc(sizeof(uint64_t) * size); - read_bulk_buf = (char **)malloc(sizeof(char *) * size); + metadata_id = (uint64_t *)PDC_malloc(sizeof(uint64_t) * size); + read_bulk_buf = (char **)PDC_malloc(sizeof(char *) * size); index = 0; for (i = 1; i < size; ++i) { if (transfer_requests[i]->data_server_id != transfer_requests[i - 1]->data_server_id) { @@ -1218,7 +1206,7 @@ PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requ PDC_Client_pack_all_requests(n_objs, transfer_requests + index, transfer_requests[index]->transfer_request->access_type, &bulk_buf, &bulk_buf_size, read_bulk_buf + index); - bulk_buf_ref = (int *)malloc(sizeof(int)); + bulk_buf_ref = (int *)PDC_malloc(sizeof(int)); bulk_buf_ref[0] = n_objs; PDC_Client_transfer_request_all(n_objs, transfer_requests[index]->transfer_request->access_type, transfer_requests[index]->data_server_id, bulk_buf, bulk_buf_size, @@ -1245,7 +1233,7 @@ PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requ PDC_Client_pack_all_requests(n_objs, transfer_requests + index, transfer_requests[index]->transfer_request->access_type, &bulk_buf, &bulk_buf_size, read_bulk_buf + index); - bulk_buf_ref = (int *)malloc(sizeof(int)); + bulk_buf_ref = (int *)PDC_malloc(sizeof(int)); bulk_buf_ref[0] = n_objs; PDC_Client_transfer_request_all(n_objs, transfer_requests[index]->transfer_request->access_type, transfer_requests[index]->data_server_id, bulk_buf, bulk_buf_size, @@ -1264,11 +1252,10 @@ PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requ } } - free(read_bulk_buf); - free(metadata_id); + read_bulk_buf = (char **)PDC_free(read_bulk_buf); + metadata_id = (uint64_t *)PDC_free(metadata_id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -1278,6 +1265,8 @@ static perr_t merge_transfer_request_ids(pdcid_t *transfer_request_id, int size, pdcid_t *merged_request_id, int *merged_size) { + FUNC_ENTER(NULL); + struct _pdc_id_info * transferinfo; pdcid_t obj_id, new_local_reg, new_remote_reg; int flag = 0, i; @@ -1292,13 +1281,13 @@ merge_transfer_request_ids(pdcid_t *transfer_request_id, int size, pdcid_t *merg for (i = 0; i < size; ++i) { transferinfo = PDC_find_id(transfer_request_id[i]); if (NULL == transferinfo) { - LOG_ERROR("==PDC_CLIENT[%d]: cannot find transfer request info\n", pdc_client_mpi_rank_g); - return FAIL; + LOG_ERROR("Cannot find transfer request info\n"); + FUNC_LEAVE(FAIL); } all_transfer_request[i] = (pdc_transfer_request *)(transferinfo->obj_ptr); if (NULL == all_transfer_request[i]) { - LOG_ERROR("==PDC_CLIENT[%d]: transfer request is NULL\n", pdc_client_mpi_rank_g); - return FAIL; + LOG_ERROR("Transfer request is NULL\n"); + FUNC_LEAVE(FAIL); } // Check if every requests are REGION_LOCAL @@ -1363,8 +1352,6 @@ merge_transfer_request_ids(pdcid_t *transfer_request_id, int size, pdcid_t *merg } } - /* *merged_request_id = */ - /* PDCregion_transfer_create(new_buf, PDC_WRITE, obj_id, new_local_reg, new_remote_reg); */ *merged_request_id = PDCregion_transfer_create(new_buf, all_transfer_request[0]->access_type, obj_id, new_local_reg, new_remote_reg); *merged_size = 1; @@ -1372,9 +1359,9 @@ merge_transfer_request_ids(pdcid_t *transfer_request_id, int size, pdcid_t *merg all_transfer_request[0]->merged_request_id = *merged_request_id; } - free(all_transfer_request); + all_transfer_request = (pdc_transfer_request **)PDC_free(all_transfer_request); - return SUCCEED; + FUNC_LEAVE(SUCCEED); } perr_t @@ -1384,19 +1371,13 @@ PDCregion_transfer_start_all_common(pdcid_t *transfer_request_id, int size, MPI_ PDCregion_transfer_start_all_common(pdcid_t *transfer_request_id, int size, int comm) #endif { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int write_size = 0, read_size = 0, posix_size = 0, merged_size = 0; pdc_transfer_request_start_all_pkg **write_transfer_requests = NULL, **read_transfer_requests = NULL; pdcid_t * posix_transfer_request_id, *merged_request_id; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s PDC_CLIENT[%d] enter\n", cur_time, pdc_client_mpi_rank_g); -#endif - // Merge the transfer_request_ids when they are operating on the same obj and have contiguous off, len if (size > PDC_MERGE_TRANSFER_MIN_COUNT) { merged_request_id = PDC_malloc(sizeof(pdcid_t)); @@ -1428,9 +1409,9 @@ PDCregion_transfer_start_all_common(pdcid_t *transfer_request_id, int size, int // For POSIX consistency, we block here until the data is received by the server if (posix_size > 0) { - LOG_ERROR("==PDC_CLIENT[%d]: wait for posix requests\n", pdc_client_mpi_rank_g); + LOG_ERROR("Wait for posix requests\n"); PDCregion_transfer_wait_all(posix_transfer_request_id, posix_size); - free(posix_transfer_request_id); + posix_transfer_request_id = (pdcid_t *)PDC_free(posix_transfer_request_id); } // Clean up memory @@ -1446,11 +1427,10 @@ PDCregion_transfer_start_all_common(pdcid_t *transfer_request_id, int size, int perr_t PDCregion_transfer_start_all(pdcid_t *transfer_request_id, int size) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDCregion_transfer_start_all_common(transfer_request_id, size, 0); + perr_t ret_value = SUCCEED; + ret_value = PDCregion_transfer_start_all_common(transfer_request_id, size, 0); FUNC_LEAVE(ret_value); } @@ -1459,74 +1439,15 @@ PDCregion_transfer_start_all(pdcid_t *transfer_request_id, int size) perr_t PDCregion_transfer_start_all_mpi(pdcid_t *transfer_request_id, int size, MPI_Comm comm) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDCregion_transfer_start_all_common(transfer_request_id, size, comm); + perr_t ret_value = SUCCEED; + ret_value = PDCregion_transfer_start_all_common(transfer_request_id, size, comm); FUNC_LEAVE(ret_value); } #endif -/** - * Input: Sorted arrays - * Output: A single array that is sorted, and the union of sorted arrays. - */ -#if 0 -static int sorted_array_unions(const int **array, const int *input_size, int n_arrays, int **out_array, int *out_size) { - int i; - int total_size = 0; - int *size; - int temp_n_arrays; - int min; - - size = calloc(n_arrays, sizeof(int)); - - for ( i = 0; i < n_arrays; ++i ) { - total_size += size[i]; - } - *out_array = (int*) malloc(sizeof(int) * total_size); - *out_size = 0; - - while (1) { - // check how many remaining arrays do we left. - temp_n_arrays = 0; - for ( i = 0; i < n_arrays; ++i ) { - if ( size[i] < input_size[i] ) { - temp_n_arrays++; - break; - } - } - // If no more remaining arrays, we are done. - if (!temp_n_arrays) { - break; - } - // Now we figure out the minimum element of the remaining lists and append it to the end of output array - min = -1; - for ( i = 0; i < n_arrays; ++i ) { - if ( size[i] == input_size[i] ) { - continue; - } - if ( min == -1 || min > array[i][size[i]] ) { - min = array[i][size[i]]; - } - } - out_array[0][*out_size] = min; - out_size[0]++; - // Increment the arrays. - for ( i = 0; i < n_arrays; ++i ) { - if ( min == array[i][size[i]] ) { - size[i]++; - } - } - } - free(size); - *out_array = realloc(*out_array, out_size[0]); - return 0; -} -#endif - perr_t PDCregion_transfer_start_common(pdcid_t transfer_request_id, #ifdef ENABLE_MPI @@ -1535,25 +1456,23 @@ PDCregion_transfer_start_common(pdcid_t transfer_request_id, int comm) #endif { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * transferinfo; pdc_transfer_request *transfer_request; size_t unit; int i; - FUNC_ENTER(NULL); - transferinfo = PDC_find_id(transfer_request_id); if (NULL == transferinfo) - goto done; + PGOTO_DONE(ret_value); transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); - if (transfer_request->metadata_id != NULL) { - LOG_ERROR("PDC_Client %s attempt to start existing transfer request\n"); - ret_value = FAIL; - goto done; - } + if (transfer_request->metadata_id != NULL) + PGOTO_ERROR(FAIL, "PDC_Client attempted to start existing transfer request"); + // Dynamic case is implemented within the the aggregated version. The main reason is that the target data // server may not be unique, so we may end up sending multiple requests to the same data server. // Aggregated method will take care of this type of operation. @@ -1564,7 +1483,7 @@ PDCregion_transfer_start_common(pdcid_t transfer_request_id, #else PDCregion_transfer_start_all(&transfer_request_id, 1); #endif - goto done; + PGOTO_DONE(ret_value); } PDC_Client_transfer_pthread_cnt_add(1); @@ -1590,16 +1509,15 @@ PDCregion_transfer_start_common(pdcid_t transfer_request_id, &(transfer_request->output_offsets), &(transfer_request->output_sizes), &(transfer_request->output_buf)); if (transfer_request->n_obj_servers == 0) { - LOG_ERROR("PDC_Client %d: error with static region partition, no server is selected!\n", - pdc_client_mpi_rank_g); + LOG_ERROR("Error with static region partition, no server is selected\n"); return FAIL; } // The following memories will be freed in the wait function. transfer_request->metadata_id = - (uint64_t *)malloc(sizeof(uint64_t) * transfer_request->n_obj_servers); + (uint64_t *)PDC_malloc(sizeof(uint64_t) * transfer_request->n_obj_servers); if (transfer_request->access_type == PDC_READ) { transfer_request->read_bulk_buf = - (char **)malloc(sizeof(char *) * transfer_request->n_obj_servers); + (char **)PDC_malloc(sizeof(char *) * transfer_request->n_obj_servers); } for (i = 0; i < transfer_request->n_obj_servers; ++i) { if (transfer_request->access_type == PDC_READ) { @@ -1615,11 +1533,11 @@ PDCregion_transfer_start_common(pdcid_t transfer_request_id, else if (transfer_request->region_partition == PDC_OBJ_STATIC) { // Static object partitioning means that all requests for the same object are sent to the same data // server. - transfer_request->metadata_id = (uint64_t *)malloc(sizeof(uint64_t)); + transfer_request->metadata_id = (uint64_t *)PDC_malloc(sizeof(uint64_t)); transfer_request->n_obj_servers = 1; if (transfer_request->access_type == PDC_READ) { transfer_request->read_bulk_buf = - (char **)malloc(sizeof(char *) * transfer_request->n_obj_servers); + (char **)PDC_malloc(sizeof(char *) * transfer_request->n_obj_servers); transfer_request->read_bulk_buf[0] = transfer_request->new_buf; } // Submit transfer request to server by designating data server ID, remote region info, and contiguous @@ -1637,18 +1555,16 @@ PDCregion_transfer_start_common(pdcid_t transfer_request_id, } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCregion_transfer_start(pdcid_t transfer_request_id) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDCregion_transfer_start_common(transfer_request_id, 0); + perr_t ret_value = SUCCEED; + ret_value = PDCregion_transfer_start_common(transfer_request_id, 0); FUNC_LEAVE(ret_value); } @@ -1657,11 +1573,10 @@ PDCregion_transfer_start(pdcid_t transfer_request_id) perr_t PDCregion_transfer_start_mpi(pdcid_t transfer_request_id, MPI_Comm comm) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - ret_value = PDCregion_transfer_start_common(transfer_request_id, comm); + perr_t ret_value = SUCCEED; + ret_value = PDCregion_transfer_start_common(transfer_request_id, comm); FUNC_LEAVE(ret_value); } @@ -1672,12 +1587,13 @@ release_region_buffer(char *buf, uint64_t *obj_dims, int local_ndim, uint64_t *l uint64_t *local_size, size_t unit, pdc_access_t access_type, int bulk_buf_size, char *new_buf, char **bulk_buf, int **bulk_buf_ref, char **read_bulk_buf) { + FUNC_ENTER(NULL); + uint64_t i, j; int k; perr_t ret_value = SUCCEED; char * ptr; - FUNC_ENTER(NULL); if (local_ndim == 2) { if (access_type == PDC_READ) { ptr = new_buf; @@ -1694,41 +1610,37 @@ release_region_buffer(char *buf, uint64_t *obj_dims, int local_ndim, uint64_t *l for (k = 0; k < bulk_buf_size; ++k) { bulk_buf_ref[k][0]--; if (!bulk_buf_ref[k][0]) { - if (bulk_buf[k]) { - free(bulk_buf[k]); - } - free(bulk_buf_ref[k]); + if (bulk_buf[k]) + bulk_buf[k] = (char *)PDC_free(bulk_buf[k]); + bulk_buf_ref[k] = (int *)PDC_free(bulk_buf_ref[k]); } } - free(bulk_buf_ref); - free(bulk_buf); - } - if (local_ndim > 1 && new_buf) { - free(new_buf); - } - if (read_bulk_buf) { - free(read_bulk_buf); + bulk_buf_ref = (int **)PDC_free(bulk_buf_ref); + bulk_buf = (char **)PDC_free(bulk_buf); } + if (local_ndim > 1 && new_buf) + new_buf = (char *)PDC_free(new_buf); + if (read_bulk_buf) + read_bulk_buf = (char **)PDC_free(read_bulk_buf); - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *completed) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * transferinfo; pdc_transfer_request *transfer_request; size_t unit; int i; - FUNC_ENTER(NULL); - transferinfo = PDC_find_id(transfer_request_id); if (NULL == transferinfo) { *completed = PDC_TRANSFER_STATUS_COMPLETE; - goto done; + PGOTO_DONE(ret_value); } transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); @@ -1741,9 +1653,8 @@ PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *co for (i = 0; i < transfer_request->n_obj_servers; ++i) { ret_value = PDC_Client_transfer_request_status(transfer_request->metadata_id[i], transfer_request->obj_servers[i], completed); - if (*completed != PDC_TRANSFER_STATUS_COMPLETE) { - goto done; - } + if (*completed != PDC_TRANSFER_STATUS_COMPLETE) + PGOTO_DONE(ret_value); } // If we reach here, then all transfers are finished. for (i = 0; i < transfer_request->n_obj_servers; ++i) { @@ -1756,9 +1667,10 @@ PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *co transfer_request->sub_offsets[i], transfer_request->output_sizes[i]); } if (transfer_request->output_buf) { - free(transfer_request->output_buf[i]); + transfer_request->output_buf[i] = (char *)PDC_free(transfer_request->output_buf[i]); } - free(transfer_request->output_offsets[i]); + transfer_request->output_offsets[i] = + (uint64_t *)PDC_free(transfer_request->output_offsets[i]); } // Copy read data from a contiguous buffer back to the user buffer using local data information. release_region_buffer( @@ -1766,20 +1678,17 @@ PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *co transfer_request->local_region_offset, transfer_request->local_region_size, unit, transfer_request->access_type, transfer_request->n_obj_servers, transfer_request->new_buf, transfer_request->bulk_buf, transfer_request->bulk_buf_ref, transfer_request->read_bulk_buf); - free(transfer_request->output_offsets); - // free(transfer_request->output_sizes); - // free(transfer_request->sub_offsets); + transfer_request->output_offsets = (uint64_t **)PDC_free(transfer_request->output_offsets); if (transfer_request->output_buf) { - free(transfer_request->output_buf); + transfer_request->output_buf = (char **)PDC_free(transfer_request->output_buf); } - free(transfer_request->obj_servers); + transfer_request->obj_servers = (uint32_t *)PDC_free(transfer_request->obj_servers); } else if (transfer_request->region_partition == PDC_OBJ_STATIC) { ret_value = PDC_Client_transfer_request_status(transfer_request->metadata_id[0], transfer_request->data_server_id, completed); - if (*completed != PDC_TRANSFER_STATUS_COMPLETE) { - goto done; - } + if (*completed != PDC_TRANSFER_STATUS_COMPLETE) + PGOTO_DONE(ret_value); if (transfer_request->access_type == PDC_READ) { memcpy(transfer_request->new_buf, transfer_request->read_bulk_buf[0], transfer_request->total_data_size); @@ -1790,7 +1699,7 @@ PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *co transfer_request->access_type, transfer_request->n_obj_servers, transfer_request->new_buf, transfer_request->bulk_buf, transfer_request->bulk_buf_ref, transfer_request->read_bulk_buf); } - free(transfer_request->metadata_id); + transfer_request->metadata_id = (uint64_t *)PDC_free(transfer_request->metadata_id); transfer_request->metadata_id = NULL; transfer_request->is_done = 1; remove_local_transfer_request(transfer_request->obj_pointer, transfer_request_id); @@ -1799,13 +1708,14 @@ PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *co *completed = PDC_TRANSFER_STATUS_NOT_FOUND; } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int index, i, j, merged_xfer = 0, ori_size = size, is_first = 1; size_t unit; @@ -1820,10 +1730,8 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) double t0, t1; - FUNC_ENTER(NULL); - if (!size) { - goto done; - } + if (!size) + PGOTO_DONE(ret_value); transferinfo = (struct _pdc_id_info **)PDC_malloc(size * sizeof(struct _pdc_id_info *)); @@ -1852,22 +1760,22 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) if (1 == transfer_request->is_done) continue; if (!transfer_request->metadata_id) { - LOG_ERROR("PDCregion_transfer_wait_all [rank %d]: Attempt to wait for a transfer request " + LOG_ERROR("Attempt to wait for a transfer request " "that has not been started. %d/%d\n", - pdc_client_mpi_rank_g, i, size); + i, size); continue; } total_requests += transfer_request->n_obj_servers; for (j = 0; j < transfer_request->n_obj_servers; ++j) { if (transfer_request_head) { - transfer_request_end->next = - (pdc_transfer_request_wait_all_pkg *)malloc(sizeof(pdc_transfer_request_wait_all_pkg)); + transfer_request_end->next = (pdc_transfer_request_wait_all_pkg *)PDC_malloc( + sizeof(pdc_transfer_request_wait_all_pkg)); transfer_request_end = transfer_request_end->next; transfer_request_end->next = NULL; } else { - transfer_request_head = - (pdc_transfer_request_wait_all_pkg *)malloc(sizeof(pdc_transfer_request_wait_all_pkg)); + transfer_request_head = (pdc_transfer_request_wait_all_pkg *)PDC_malloc( + sizeof(pdc_transfer_request_wait_all_pkg)); transfer_request_head->next = NULL; transfer_request_end = transfer_request_head; } @@ -1883,7 +1791,7 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) } } - transfer_requests = (pdc_transfer_request_wait_all_pkg **)malloc( + transfer_requests = (pdc_transfer_request_wait_all_pkg **)PDC_malloc( sizeof(pdc_transfer_request_wait_all_pkg *) * total_requests); temp = transfer_request_head; for (i = 0; i < total_requests; ++i) { @@ -1894,7 +1802,7 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) qsort(transfer_requests, total_requests, sizeof(pdc_transfer_request_wait_all_pkg *), sort_by_data_server_wait_all); - metadata_ids = (uint64_t *)malloc(sizeof(uint64_t) * total_requests); + metadata_ids = (uint64_t *)PDC_malloc(sizeof(uint64_t) * total_requests); index = 0; for (i = 1; i < total_requests; ++i) { if (transfer_requests[i]->data_server_id != transfer_requests[i - 1]->data_server_id) { @@ -1926,9 +1834,14 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) ->transfer_request->output_sizes[transfer_requests[j]->index]); } if (transfer_requests[j]->transfer_request->output_buf) { - free(transfer_requests[j]->transfer_request->output_buf[transfer_requests[j]->index]); + transfer_requests[j]->transfer_request->output_buf[transfer_requests[j]->index] = + (char *)PDC_free(transfer_requests[j] + ->transfer_request->output_buf[transfer_requests[j]->index]); } - free(transfer_requests[j]->transfer_request->output_offsets[transfer_requests[j]->index]); + transfer_requests[j]->transfer_request->output_offsets[transfer_requests[j]->index] = + (uint64_t *)PDC_free( + transfer_requests[j] + ->transfer_request->output_offsets[transfer_requests[j]->index]); } } index = i; @@ -1961,9 +1874,13 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) transfer_requests[j]->transfer_request->output_sizes[transfer_requests[j]->index]); } if (transfer_requests[j]->transfer_request->output_buf) { - free(transfer_requests[j]->transfer_request->output_buf[transfer_requests[j]->index]); + transfer_requests[j]->transfer_request->output_buf[transfer_requests[j]->index] = + (char *)PDC_free( + transfer_requests[j]->transfer_request->output_buf[transfer_requests[j]->index]); } - free(transfer_requests[j]->transfer_request->output_offsets[transfer_requests[j]->index]); + transfer_requests[j]->transfer_request->output_offsets[transfer_requests[j]->index] = + (uint64_t *)PDC_free( + transfer_requests[j]->transfer_request->output_offsets[transfer_requests[j]->index]); } } } @@ -2012,50 +1929,43 @@ PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size) if (transfer_request->region_partition == PDC_REGION_STATIC || transfer_request->region_partition == PDC_REGION_DYNAMIC || transfer_request->region_partition == PDC_REGION_LOCAL) { - free(transfer_request->output_offsets); - free(transfer_request->output_sizes); - free(transfer_request->sub_offsets); + transfer_request->output_offsets = (uint64_t **)PDC_free(transfer_request->output_offsets); + transfer_request->output_sizes = (uint64_t **)PDC_free(transfer_request->output_sizes); + transfer_request->sub_offsets = (uint64_t **)PDC_free(transfer_request->sub_offsets); if (transfer_request->output_buf) { - free(transfer_request->output_buf); + transfer_request->output_buf = (char **)PDC_free(transfer_request->output_buf); } - free(transfer_request->obj_servers); + transfer_request->obj_servers = (uint32_t *)PDC_free(transfer_request->obj_servers); } - free(transfer_request->metadata_id); - transfer_request->metadata_id = NULL; + transfer_request->metadata_id = (uint64_t *)PDC_free(transfer_request->metadata_id); transfer_request->is_done = 1; remove_local_transfer_request(transfer_request->obj_pointer, transfer_request_id[i]); } for (i = 0; i < total_requests; ++i) { - free(transfer_requests[i]); + transfer_requests[i] = (pdc_transfer_request_wait_all_pkg *)PDC_free(transfer_requests[i]); } - free(transfer_requests); - free(metadata_ids); - free(transferinfo); - /* - for (i = 0; i < size; ++i) { - PDCregion_transfer_wait(transfer_request_id[i]); - } - */ + transfer_requests = (pdc_transfer_request_wait_all_pkg **)PDC_free(transfer_requests); + metadata_ids = (uint64_t *)PDC_free(metadata_ids); + transferinfo = (struct _pdc_id_info **)PDC_free(transferinfo); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDCregion_transfer_wait(pdcid_t transfer_request_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct _pdc_id_info * transferinfo; pdc_transfer_request *transfer_request; size_t unit; int i; - FUNC_ENTER(NULL); - transferinfo = PDC_find_id(transfer_request_id); if (NULL == transferinfo) - goto done; + PGOTO_DONE(ret_value); transfer_request = (pdc_transfer_request *)(transferinfo->obj_ptr); if (transfer_request->metadata_id != NULL) { @@ -2063,7 +1973,7 @@ PDCregion_transfer_wait(pdcid_t transfer_request_id) if (transfer_request->region_partition == PDC_REGION_DYNAMIC || transfer_request->region_partition == PDC_REGION_LOCAL) { PDCregion_transfer_wait_all(&transfer_request_id, 1); - goto done; + PGOTO_DONE(ret_value); } unit = transfer_request->unit; @@ -2083,9 +1993,10 @@ PDCregion_transfer_wait(pdcid_t transfer_request_id) transfer_request->sub_offsets[i], transfer_request->output_sizes[i]); } if (transfer_request->output_buf) { - free(transfer_request->output_buf[i]); + transfer_request->output_buf[i] = (char *)PDC_free(transfer_request->output_buf[i]); } - free(transfer_request->output_offsets[i]); + transfer_request->output_offsets[i] = + (uint64_t *)PDC_free(transfer_request->output_offsets[i]); } // Copy read data from a contiguous buffer back to the user buffer using local data information. release_region_buffer( @@ -2093,13 +2004,13 @@ PDCregion_transfer_wait(pdcid_t transfer_request_id) transfer_request->local_region_offset, transfer_request->local_region_size, unit, transfer_request->access_type, transfer_request->n_obj_servers, transfer_request->new_buf, transfer_request->bulk_buf, transfer_request->bulk_buf_ref, transfer_request->read_bulk_buf); - free(transfer_request->output_offsets); - free(transfer_request->output_sizes); - free(transfer_request->sub_offsets); + transfer_request->output_offsets = (uint64_t **)PDC_free(transfer_request->output_offsets); + transfer_request->output_sizes = (uint64_t **)PDC_free(transfer_request->output_sizes); + transfer_request->sub_offsets = (uint64_t **)PDC_free(transfer_request->sub_offsets); if (transfer_request->output_buf) { - free(transfer_request->output_buf); + transfer_request->output_buf = (char **)PDC_free(transfer_request->output_buf); } - free(transfer_request->obj_servers); + transfer_request->obj_servers = (uint32_t *)PDC_free(transfer_request->obj_servers); } else if (transfer_request->region_partition == PDC_OBJ_STATIC) { ret_value = PDC_Client_transfer_request_wait(transfer_request->metadata_id[0], @@ -2115,8 +2026,7 @@ PDCregion_transfer_wait(pdcid_t transfer_request_id) transfer_request->access_type, transfer_request->n_obj_servers, transfer_request->new_buf, transfer_request->bulk_buf, transfer_request->bulk_buf_ref, transfer_request->read_bulk_buf); } - free(transfer_request->metadata_id); - transfer_request->metadata_id = NULL; + transfer_request->metadata_id = (uint64_t *)PDC_free(transfer_request->metadata_id); transfer_request->is_done = 1; remove_local_transfer_request(transfer_request->obj_pointer, transfer_request_id); } @@ -2126,6 +2036,5 @@ PDCregion_transfer_wait(pdcid_t transfer_request_id) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/api/pdc_transform/include/pdc_transforms_common.h b/src/api/pdc_transform/include/pdc_transforms_common.h index da0c7dc22..5cc1c4ca6 100644 --- a/src/api/pdc_transform/include/pdc_transforms_common.h +++ b/src/api/pdc_transform/include/pdc_transforms_common.h @@ -26,6 +26,7 @@ #define PDC_TRANSFORMS_COMMON_H #include "pdc_public.h" +#include "pdc_timing.h" #include "mercury.h" #include "mercury_macros.h" #include "mercury_proc_string.h" @@ -65,89 +66,80 @@ typedef struct transform_ftn_out_t { static HG_INLINE hg_return_t hg_proc_transform_ftn_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transform_ftn_in_t *struct_data = (transform_ftn_in_t *)data; ret = hg_proc_hg_const_string_t(proc, &struct_data->ftn_name); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_const_string_t(proc, &struct_data->loadpath); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->object_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->region_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->client_index); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->operation_type); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->start_state); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->next_state); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->op_type); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->when); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_transform_ftn_out_t */ static HG_INLINE hg_return_t hg_proc_transform_ftn_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transform_ftn_out_t *struct_data = (transform_ftn_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->object_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->region_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->client_index); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } #endif /* PDC_TRANSFORMS_COMMON_H */ diff --git a/src/api/pdc_transform/pdc_transform.c b/src/api/pdc_transform/pdc_transform.c index 01a2a5c00..111893380 100644 --- a/src/api/pdc_transform/pdc_transform.c +++ b/src/api/pdc_transform/pdc_transform.c @@ -50,6 +50,8 @@ perr_t PDCobj_transform_register(char *func, pdcid_t obj_id, int current_state, int next_state, pdc_obj_transform_t op_type, pdc_data_movement_t when) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; void * ftnHandle = NULL; size_t (*ftnPtr)() = NULL; @@ -69,8 +71,6 @@ PDCobj_transform_register(char *func, pdcid_t obj_id, int current_state, int nex int local_regIndex; struct _pdc_id_info * id_info; - FUNC_ENTER(NULL); - thisApp = PDC_get_argv0_(); if (thisApp) applicationDir = dirname(strdup(thisApp)); @@ -89,7 +89,7 @@ PDCobj_transform_register(char *func, pdcid_t obj_id, int current_state, int nex loadpath = PDC_get_realpath(transformslibrary, applicationDir); if (PDC_get_ftnPtr_(userdefinedftn, loadpath, &ftnHandle) < 0) - PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error!\n"); + PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error"); if ((ftnPtr = ftnHandle) == NULL) PGOTO_ERROR(FAIL, "Transforms function lookup failed"); @@ -109,13 +109,13 @@ PDCobj_transform_register(char *func, pdcid_t obj_id, int current_state, int nex // Add to our own list of transform functions if ((local_regIndex = PDC_add_transform_ptr_to_registry_(thisFtn)) < 0) - PGOTO_ERROR(FAIL, "PDC unable to register transform function!"); + PGOTO_ERROR(FAIL, "PDC unable to register transform function"); // Flag the transform as being active on mapping operations if (op_type == PDC_DATA_MAP) { objinfo1 = PDC_find_id(obj_id); if (objinfo1 == NULL) - PGOTO_ERROR(FAIL, "cannot locate local object ID"); + PGOTO_ERROR(FAIL, "Cannot locate local object ID"); obj1 = (struct _pdc_obj_info *)(objinfo1->obj_ptr); /* See if any mapping operations are defined */ if (obj1 && (obj1->region_list_head != NULL)) { @@ -154,11 +154,10 @@ PDCobj_transform_register(char *func, pdcid_t obj_id, int current_state, int nex } done: - fflush(stdout); if (applicationDir) - free(applicationDir); + applicationDir = (char *)PDC_free(applicationDir); if (userdefinedftn) - free(userdefinedftn); + userdefinedftn = (char *)PDC_free(userdefinedftn); FUNC_LEAVE(ret_value); } @@ -168,6 +167,8 @@ PDCbuf_map_transform_register(char *func, void *buf, pdcid_t src_region_id, pdci pdcid_t dest_region_id, int current_state, int next_state, pdc_data_movement_t when) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; /* Return value */ void * ftnHandle = NULL; size_t (*ftnPtr)() = NULL; @@ -183,8 +184,6 @@ PDCbuf_map_transform_register(char *func, void *buf, pdcid_t src_region_id, pdci char * loadpath = NULL; int local_regIndex; - FUNC_ENTER(NULL); - thisApp = PDC_get_argv0_(); if (thisApp) applicationDir = dirname(strdup(thisApp)); @@ -203,10 +202,10 @@ PDCbuf_map_transform_register(char *func, void *buf, pdcid_t src_region_id, pdci loadpath = PDC_get_realpath(transformslibrary, applicationDir); if (PDC_get_ftnPtr_(userdefinedftn, loadpath, &ftnHandle) < 0) - PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error!"); + PGOTO_ERROR(FAIL, "PDC_get_ftnPtr_ returned an error"); if ((ftnPtr = ftnHandle) == NULL) - PGOTO_ERROR(FAIL, "Transforms function lookup failed\n"); + PGOTO_ERROR(FAIL, "Transforms function lookup failed"); if ((thisFtn = (struct _pdc_region_transform_ftn_info *)PDC_malloc( sizeof(struct _pdc_region_transform_ftn_info))) == NULL) @@ -256,20 +255,19 @@ PDCbuf_map_transform_register(char *func, void *buf, pdcid_t src_region_id, pdci // Add to our own list of transforms functions if ((local_regIndex = PDC_add_transform_ptr_to_registry_(thisFtn)) < 0) - PGOTO_ERROR(FAIL, "PDC unable to register transform function!"); + PGOTO_ERROR(FAIL, "PDC unable to register transform function"); PDC_Client_register_region_transform(userdefinedftn, loadpath, src_region_id, dest_region_id, dest_object_id, current_state, thisFtn->nextState, (int)PDC_DATA_MAP, (int)when, local_regIndex); done: - fflush(stdout); if (applicationDir) - free(applicationDir); + applicationDir = (char *)PDC_free(applicationDir); if (userdefinedftn) - free(userdefinedftn); + userdefinedftn = (char *)PDC_free(userdefinedftn); if (loadpath) - free(loadpath); + loadpath = (char *)PDC_free(loadpath); FUNC_LEAVE(ret_value); } @@ -279,19 +277,19 @@ PDCbuf_io_transform_register(char *func ATTRIBUTE(unused), void *buf ATTRIBUTE(u pdcid_t src_region_id ATTRIBUTE(unused), int current_state ATTRIBUTE(unused), int next_state ATTRIBUTE(unused), pdc_data_movement_t when ATTRIBUTE(unused)) { - perr_t ret_value = FAIL; /* Return value (not implemented) */ FUNC_ENTER(NULL); + LOG_ERROR("IO transforms are not currently supported!\n"); - FUNC_LEAVE(ret_value); + + FUNC_LEAVE(FAIL); } perr_t PDC_transform_end() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; PDC_free_transform_registry(); FUNC_LEAVE(ret_value); diff --git a/src/api/pdc_transform/pdc_transforms_common.c b/src/api/pdc_transform/pdc_transforms_common.c index 465be9640..c4bbbcc7c 100644 --- a/src/api/pdc_transform/pdc_transforms_common.c +++ b/src/api/pdc_transform/pdc_transforms_common.c @@ -38,18 +38,18 @@ extern hg_thread_pool_t *hg_test_thread_pool_g; // transform_ftn_cb(hg_handle_t handle) HG_TEST_RPC_CB(transform_ftn, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; transform_ftn_in_t in; transform_ftn_out_t out = {0, 0, 0, -1}; struct _pdc_region_transform_ftn_info *thisFtn = NULL; void * ftnHandle = NULL; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); if (PDC_get_ftnPtr_(in.ftn_name, in.loadpath, &ftnHandle) >= 0) { - thisFtn = malloc(sizeof(struct _pdc_region_transform_ftn_info)); + thisFtn = PDC_malloc(sizeof(struct _pdc_region_transform_ftn_info)); if (thisFtn == NULL) PGOTO_ERROR(HG_OTHER_ERROR, "transform_ftn_cb: Memory allocation failed"); /* This sets up the index return for the client! @@ -86,7 +86,6 @@ HG_TEST_RPC_CB(transform_ftn, handle) } done: - fflush(stdout); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -99,10 +98,10 @@ HG_TEST_THREAD_CB(transform_ftn) hg_id_t PDC_transform_ftn_register(hg_class_t *hg_class) { - hg_id_t ret_value; - FUNC_ENTER(NULL); + hg_id_t ret_value; + ret_value = MERCURY_REGISTER(hg_class, "transform_ftn", transform_ftn_in_t, transform_ftn_out_t, transform_ftn_cb); diff --git a/src/commons/CMakeLists.txt b/src/commons/CMakeLists.txt index e26f99643..bc6a46512 100644 --- a/src/commons/CMakeLists.txt +++ b/src/commons/CMakeLists.txt @@ -74,6 +74,7 @@ install( ${PDC_SOURCE_DIR}/src/commons/utils/include/pdc_id_pkg.h ${PDC_SOURCE_DIR}/src/commons/utils/include/pdc_malloc.h ${PDC_SOURCE_DIR}/src/commons/utils/include/pdc_linkedlist.h + ${PDC_SOURCE_DIR}/src/commons/logging/include/pdc_logger.h DESTINATION ${PDC_INSTALL_INCLUDE_DIR} COMPONENT diff --git a/src/commons/collections/art.c b/src/commons/collections/art.c index d4d774021..e77492e20 100644 --- a/src/commons/collections/art.c +++ b/src/commons/collections/art.c @@ -32,6 +32,7 @@ #include #include "art.h" #include "pdc_malloc.h" +#include "pdc_timing.h" #ifdef __i386__ #include @@ -55,6 +56,8 @@ static art_node * alloc_node(uint8_t type) { + FUNC_ENTER(NULL); + art_node *n; switch (type) { case NODE4: @@ -73,7 +76,8 @@ alloc_node(uint8_t type) abort(); } n->type = type; - return n; + + FUNC_LEAVE(n); } /** @@ -83,23 +87,28 @@ alloc_node(uint8_t type) int art_tree_init(art_tree *t) { + FUNC_ENTER(NULL); + t->root = NULL; t->size = 0; - return 0; + + FUNC_LEAVE(0); } // Recursively destroys the tree static void destroy_node(art_node *n) { + FUNC_ENTER(NULL); + // Break if null if (!n) - return; + FUNC_LEAVE_VOID(); // Special case leafs if (IS_LEAF(n)) { - free(LEAF_RAW(n)); - return; + n = (art_node *)PDC_free(LEAF_RAW(n)); + FUNC_LEAVE_VOID(); } // Handle each node type @@ -148,7 +157,8 @@ destroy_node(art_node *n) } // Free ourself on the way up - free(n); + n = (art_node *)PDC_free(n); + FUNC_LEAVE_VOID(); } /** @@ -158,11 +168,14 @@ destroy_node(art_node *n) int art_tree_destroy(art_tree *t) { + FUNC_ENTER(NULL); + if (t == NULL) { - return 0; + FUNC_LEAVE(0); } destroy_node(t->root); - return 0; + + FUNC_LEAVE(0); } /** @@ -176,6 +189,8 @@ extern inline uint64_t art_size(art_tree *t); static art_node ** find_child(art_node *n, unsigned char c) { + FUNC_ENTER(NULL); + int i, mask, bitfield; union { art_node4 * p1; @@ -191,7 +206,7 @@ find_child(art_node *n, unsigned char c) * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59124 */ if (((unsigned char *)p.p1->keys)[i] == c) - return &p.p1->children[i]; + FUNC_LEAVE(&p.p1->children[i]); } break; @@ -237,7 +252,7 @@ find_child(art_node *n, unsigned char c) * the index. */ if (bitfield) - return &p.p2->children[__builtin_ctz(bitfield)]; + FUNC_LEAVE(&p.p2->children[__builtin_ctz(bitfield)]); break; } @@ -245,26 +260,28 @@ find_child(art_node *n, unsigned char c) p.p3 = (art_node48 *)n; i = p.p3->keys[c]; if (i) - return &p.p3->children[i - 1]; + FUNC_LEAVE(&p.p3->children[i - 1]); break; case NODE256: p.p4 = (art_node256 *)n; if (p.p4->children[c]) - return &p.p4->children[c]; + FUNC_LEAVE(&p.p4->children[c]); break; default: abort(); } - return NULL; + + FUNC_LEAVE(NULL); } // Simple inlined if static inline int min(int a, int b) { - return (a < b) ? a : b; + FUNC_ENTER(NULL); + FUNC_LEAVE((a < b) ? a : b); } /** @@ -274,13 +291,16 @@ min(int a, int b) static int check_prefix(const art_node *n, const unsigned char *key, int key_len, int depth) { + FUNC_ENTER(NULL); + int max_cmp = min(min(n->partial_len, MAX_PREFIX_LEN), key_len - depth); int idx; for (idx = 0; idx < max_cmp; idx++) { if (n->partial[idx] != key[depth + idx]) - return idx; + FUNC_LEAVE(idx); } - return idx; + + FUNC_LEAVE(idx); } /** @@ -290,13 +310,15 @@ check_prefix(const art_node *n, const unsigned char *key, int key_len, int depth static int leaf_matches(const art_leaf *n, const unsigned char *key, int key_len, int depth) { + FUNC_ENTER(NULL); + (void)depth; // Fail if the key lengths are different if (n->key_len != (uint32_t)key_len) - return 1; + FUNC_LEAVE(1); // Compare the keys starting at the depth - return memcmp(n->key, key, key_len); + FUNC_LEAVE(memcmp(n->key, key, key_len)); } /** @@ -310,6 +332,8 @@ leaf_matches(const art_leaf *n, const unsigned char *key, int key_len, int depth void * art_search(const art_tree *t, const unsigned char *key, int key_len) { + FUNC_ENTER(NULL); + art_node **child; art_node * n = t->root; int prefix_len, depth = 0; @@ -319,16 +343,16 @@ art_search(const art_tree *t, const unsigned char *key, int key_len) n = (art_node *)LEAF_RAW(n); // Check if the expanded path matches if (!leaf_matches((art_leaf *)n, key, key_len, depth)) { - return ((art_leaf *)n)->value; + FUNC_LEAVE(((art_leaf *)n)->value); } - return NULL; + FUNC_LEAVE(NULL); } // Bail if the prefix does not match if (n->partial_len) { prefix_len = check_prefix(n, key, key_len, depth); if (prefix_len != min(MAX_PREFIX_LEN, n->partial_len)) - return NULL; + FUNC_LEAVE(NULL); depth = depth + n->partial_len; } @@ -337,71 +361,80 @@ art_search(const art_tree *t, const unsigned char *key, int key_len) n = (child) ? *child : NULL; depth++; } - return NULL; + + FUNC_LEAVE(NULL); } // Find the minimum leaf under a node static art_leaf * minimum(const art_node *n) { + FUNC_ENTER(NULL); + // Handle base cases if (!n) - return NULL; + FUNC_LEAVE(NULL); if (IS_LEAF(n)) - return LEAF_RAW(n); + FUNC_LEAVE(LEAF_RAW(n)); int idx; switch (n->type) { case NODE4: - return minimum(((const art_node4 *)n)->children[0]); + FUNC_LEAVE(minimum(((const art_node4 *)n)->children[0])); case NODE16: - return minimum(((const art_node16 *)n)->children[0]); + FUNC_LEAVE(minimum(((const art_node16 *)n)->children[0])); case NODE48: idx = 0; while (!((const art_node48 *)n)->keys[idx]) idx++; idx = ((const art_node48 *)n)->keys[idx] - 1; - return minimum(((const art_node48 *)n)->children[idx]); + FUNC_LEAVE(minimum(((const art_node48 *)n)->children[idx])); case NODE256: idx = 0; while (!((const art_node256 *)n)->children[idx]) idx++; - return minimum(((const art_node256 *)n)->children[idx]); + FUNC_LEAVE(minimum(((const art_node256 *)n)->children[idx])); default: abort(); } + + FUNC_LEAVE(NULL); } // Find the maximum leaf under a node static art_leaf * maximum(const art_node *n) { + FUNC_ENTER(NULL); + // Handle base cases if (!n) - return NULL; + FUNC_LEAVE(NULL); if (IS_LEAF(n)) - return LEAF_RAW(n); + FUNC_LEAVE(LEAF_RAW(n)); int idx; switch (n->type) { case NODE4: - return maximum(((const art_node4 *)n)->children[n->num_children - 1]); + FUNC_LEAVE(maximum(((const art_node4 *)n)->children[n->num_children - 1])); case NODE16: - return maximum(((const art_node16 *)n)->children[n->num_children - 1]); + FUNC_LEAVE(maximum(((const art_node16 *)n)->children[n->num_children - 1])); case NODE48: idx = 255; while (!((const art_node48 *)n)->keys[idx]) idx--; idx = ((const art_node48 *)n)->keys[idx] - 1; - return maximum(((const art_node48 *)n)->children[idx]); + FUNC_LEAVE(maximum(((const art_node48 *)n)->children[idx])); case NODE256: idx = 255; while (!((const art_node256 *)n)->children[idx]) idx--; - return maximum(((const art_node256 *)n)->children[idx]); + FUNC_LEAVE(maximum(((const art_node256 *)n)->children[idx])); default: abort(); } + + FUNC_LEAVE(NULL); } /** @@ -410,7 +443,8 @@ maximum(const art_node *n) art_leaf * art_minimum(art_tree *t) { - return minimum((art_node *)t->root); + FUNC_ENTER(NULL); + FUNC_LEAVE(minimum((art_node *)t->root)); } /** @@ -419,50 +453,67 @@ art_minimum(art_tree *t) art_leaf * art_maximum(art_tree *t) { - return maximum((art_node *)t->root); + FUNC_ENTER(NULL); + FUNC_LEAVE(maximum((art_node *)t->root)); } static art_leaf * make_leaf(const unsigned char *key, int key_len, void *value) { + FUNC_ENTER(NULL); + art_leaf *l = (art_leaf *)PDC_calloc(1, sizeof(art_leaf) + key_len); l->value = value; l->key_len = key_len; memcpy(l->key, key, key_len); - return l; + + FUNC_LEAVE(l); } static int longest_common_prefix(art_leaf *l1, art_leaf *l2, int depth) { + FUNC_ENTER(NULL); + int max_cmp = min(l1->key_len, l2->key_len) - depth; int idx; for (idx = 0; idx < max_cmp; idx++) { if (l1->key[depth + idx] != l2->key[depth + idx]) - return idx; + FUNC_LEAVE(idx); } - return idx; + + FUNC_LEAVE(idx); } static void copy_header(art_node *dest, art_node *src) { + FUNC_ENTER(NULL); + dest->num_children = src->num_children; dest->partial_len = src->partial_len; memcpy(dest->partial, src->partial, min(MAX_PREFIX_LEN, src->partial_len)); + + FUNC_LEAVE_VOID(); } static void add_child256(art_node256 *n, art_node **ref, unsigned char c, void *child) { + FUNC_ENTER(NULL); + (void)ref; n->n.num_children++; n->children[c] = (art_node *)child; + + FUNC_LEAVE_VOID(); } static void add_child48(art_node48 *n, art_node **ref, unsigned char c, void *child) { + FUNC_ENTER(NULL); + if (n->n.num_children < 48) { int pos = 0; while (n->children[pos]) @@ -480,14 +531,18 @@ add_child48(art_node48 *n, art_node **ref, unsigned char c, void *child) } copy_header((art_node *)new_node, (art_node *)n); *ref = (art_node *)new_node; - free(n); + n = (art_node48 *)PDC_free(n); add_child256(new_node, ref, c, child); } + + FUNC_LEAVE_VOID(); } static void add_child16(art_node16 *n, art_node **ref, unsigned char c, void *child) { + FUNC_ENTER(NULL); + if (n->n.num_children < 16) { unsigned mask = (1 << n->n.num_children) - 1; @@ -547,14 +602,18 @@ add_child16(art_node16 *n, art_node **ref, unsigned char c, void *child) } copy_header((art_node *)new_node, (art_node *)n); *ref = (art_node *)new_node; - free(n); + n = (art_node16 *)PDC_free(n); add_child48(new_node, ref, c, child); } + + FUNC_LEAVE_VOID(); } static void add_child4(art_node4 *n, art_node **ref, unsigned char c, void *child) { + FUNC_ENTER(NULL); + if (n->n.num_children < 4) { int idx; for (idx = 0; idx < n->n.num_children; idx++) { @@ -579,14 +638,18 @@ add_child4(art_node4 *n, art_node **ref, unsigned char c, void *child) memcpy(new_node->keys, n->keys, sizeof(unsigned char) * n->n.num_children); copy_header((art_node *)new_node, (art_node *)n); *ref = (art_node *)new_node; - free(n); + n = (art_node4 *)PDC_free(n); add_child16(new_node, ref, c, child); } + + FUNC_LEAVE_VOID(); } static void add_child(art_node *n, art_node **ref, unsigned char c, void *child) { + FUNC_ENTER(NULL); + switch (n->type) { case NODE4: return add_child4((art_node4 *)n, ref, c, child); @@ -599,6 +662,8 @@ add_child(art_node *n, art_node **ref, unsigned char c, void *child) default: abort(); } + + FUNC_LEAVE_VOID(); } /** @@ -607,11 +672,13 @@ add_child(art_node *n, art_node **ref, unsigned char c, void *child) static int prefix_mismatch(const art_node *n, const unsigned char *key, int key_len, int depth) { + FUNC_ENTER(NULL); + int max_cmp = min(min(MAX_PREFIX_LEN, n->partial_len), key_len - depth); int idx; for (idx = 0; idx < max_cmp; idx++) { if (n->partial[idx] != key[depth + idx]) - return idx; + FUNC_LEAVE(idx); } // If the prefix is short we can avoid finding a leaf @@ -621,20 +688,23 @@ prefix_mismatch(const art_node *n, const unsigned char *key, int key_len, int de max_cmp = min(l->key_len, key_len) - depth; for (; idx < max_cmp; idx++) { if (l->key[idx + depth] != key[depth + idx]) - return idx; + FUNC_LEAVE(idx); } } - return idx; + + FUNC_LEAVE(idx); } static void * recursive_insert(art_node *n, art_node **ref, const unsigned char *key, int key_len, void *value, int depth, int *old, int replace) { + FUNC_ENTER(NULL); + // If we are at a NULL node, inject a leaf if (!n) { *ref = (art_node *)SET_LEAF(make_leaf(key, key_len, value)); - return NULL; + FUNC_LEAVE(NULL); } // If we are at a leaf, we need to replace it with a node @@ -647,7 +717,7 @@ recursive_insert(art_node *n, art_node **ref, const unsigned char *key, int key_ void *old_val = l->value; if (replace) l->value = value; - return old_val; + FUNC_LEAVE(old_val); } // New value, we must split the leaf into a node4 @@ -664,7 +734,8 @@ recursive_insert(art_node *n, art_node **ref, const unsigned char *key, int key_ *ref = (art_node *)new_node; add_child4(new_node, ref, l->key[depth + longest_prefix], SET_LEAF(l)); add_child4(new_node, ref, l2->key[depth + longest_prefix], SET_LEAF(l2)); - return NULL; + + FUNC_LEAVE(NULL); } // Check if given node has a prefix @@ -698,7 +769,7 @@ recursive_insert(art_node *n, art_node **ref, const unsigned char *key, int key_ // Insert the new leaf art_leaf *l = make_leaf(key, key_len, value); add_child4(new_node, ref, key[depth + prefix_diff], SET_LEAF(l)); - return NULL; + FUNC_LEAVE(NULL); } RECURSE_SEARCH:; @@ -706,13 +777,13 @@ RECURSE_SEARCH:; // Find a child to recurse to art_node **child = find_child(n, key[depth]); if (child) { - return recursive_insert(*child, child, key, key_len, value, depth + 1, old, replace); + FUNC_LEAVE(recursive_insert(*child, child, key, key_len, value, depth + 1, old, replace)); } // No child, node goes within us art_leaf *l = make_leaf(key, key_len, value); add_child(n, ref, key[depth], SET_LEAF(l)); - return NULL; + FUNC_LEAVE(NULL); } /** @@ -727,11 +798,14 @@ RECURSE_SEARCH:; void * art_insert(art_tree *t, const unsigned char *key, int key_len, void *value) { + FUNC_ENTER(NULL); + int old_val = 0; void *old = recursive_insert(t->root, &t->root, key, key_len, value, 0, &old_val, 1); if (!old_val) t->size++; - return old; + + FUNC_LEAVE(old); } /** @@ -746,16 +820,21 @@ art_insert(art_tree *t, const unsigned char *key, int key_len, void *value) void * art_insert_no_replace(art_tree *t, const unsigned char *key, int key_len, void *value) { + FUNC_ENTER(NULL); + int old_val = 0; void *old = recursive_insert(t->root, &t->root, key, key_len, value, 0, &old_val, 0); if (!old_val) t->size++; - return old; + + FUNC_LEAVE(old); } static void remove_child256(art_node256 *n, art_node **ref, unsigned char c) { + FUNC_ENTER(NULL); + n->children[c] = NULL; n->n.num_children--; @@ -774,13 +853,17 @@ remove_child256(art_node256 *n, art_node **ref, unsigned char c) pos++; } } - free(n); + n = (art_node256 *)PDC_free(n); } + + FUNC_LEAVE_VOID(); } static void remove_child48(art_node48 *n, art_node **ref, unsigned char c) { + FUNC_ENTER(NULL); + int pos = n->keys[c]; n->keys[c] = 0; n->children[pos - 1] = NULL; @@ -800,13 +883,17 @@ remove_child48(art_node48 *n, art_node **ref, unsigned char c) child++; } } - free(n); + n = (art_node48 *)PDC_free(n); } + + FUNC_LEAVE_VOID(); } static void remove_child16(art_node16 *n, art_node **ref, art_node **l) { + FUNC_ENTER(NULL); + int pos = l - n->children; memmove(n->keys + pos, n->keys + pos + 1, n->n.num_children - 1 - pos); memmove(n->children + pos, n->children + pos + 1, (n->n.num_children - 1 - pos) * sizeof(void *)); @@ -818,13 +905,17 @@ remove_child16(art_node16 *n, art_node **ref, art_node **l) copy_header((art_node *)new_node, (art_node *)n); memcpy(new_node->keys, n->keys, 4); memcpy(new_node->children, n->children, 4 * sizeof(void *)); - free(n); + n = (art_node16 *)PDC_free(n); } + + FUNC_LEAVE_VOID(); } static void remove_child4(art_node4 *n, art_node **ref, art_node **l) { + FUNC_ENTER(NULL); + int pos = l - n->children; memmove(n->keys + pos, n->keys + pos + 1, n->n.num_children - 1 - pos); memmove(n->children + pos, n->children + pos + 1, (n->n.num_children - 1 - pos) * sizeof(void *)); @@ -851,49 +942,61 @@ remove_child4(art_node4 *n, art_node **ref, art_node **l) child->partial_len += n->n.partial_len + 1; } *ref = child; - free(n); + n = (art_node4 *)PDC_free(n); } + + FUNC_LEAVE_VOID(); } static void remove_child(art_node *n, art_node **ref, unsigned char c, art_node **l) { + FUNC_ENTER(NULL); + switch (n->type) { case NODE4: - return remove_child4((art_node4 *)n, ref, l); + remove_child4((art_node4 *)n, ref, l); + break; case NODE16: - return remove_child16((art_node16 *)n, ref, l); + remove_child16((art_node16 *)n, ref, l); + break; case NODE48: - return remove_child48((art_node48 *)n, ref, c); + remove_child48((art_node48 *)n, ref, c); + break; case NODE256: - return remove_child256((art_node256 *)n, ref, c); + remove_child256((art_node256 *)n, ref, c); + break; default: abort(); } + + FUNC_LEAVE_VOID(); } static art_leaf * recursive_delete(art_node *n, art_node **ref, const unsigned char *key, int key_len, int depth) { + FUNC_ENTER(NULL); + // Search terminated if (!n) - return NULL; + FUNC_LEAVE(NULL); // Handle hitting a leaf node if (IS_LEAF(n)) { art_leaf *l = LEAF_RAW(n); if (!leaf_matches(l, key, key_len, depth)) { *ref = NULL; - return l; + FUNC_LEAVE(l); } - return NULL; + FUNC_LEAVE(NULL); } // Bail if the prefix does not match if (n->partial_len) { int prefix_len = check_prefix(n, key, key_len, depth); if (prefix_len != min(MAX_PREFIX_LEN, n->partial_len)) { - return NULL; + FUNC_LEAVE(NULL); } depth = depth + n->partial_len; } @@ -901,21 +1004,21 @@ recursive_delete(art_node *n, art_node **ref, const unsigned char *key, int key_ // Find child node art_node **child = find_child(n, key[depth]); if (!child) - return NULL; + FUNC_LEAVE(NULL); // If the child is leaf, delete from this node if (IS_LEAF(*child)) { art_leaf *l = LEAF_RAW(*child); if (!leaf_matches(l, key, key_len, depth)) { remove_child(n, ref, key[depth], child); - return l; + FUNC_LEAVE(l); } - return NULL; + FUNC_LEAVE(NULL); // Recurse } else { - return recursive_delete(*child, child, key, key_len, depth + 1); + FUNC_LEAVE(recursive_delete(*child, child, key, key_len, depth + 1)); } } @@ -930,26 +1033,32 @@ recursive_delete(art_node *n, art_node **ref, const unsigned char *key, int key_ void * art_delete(art_tree *t, const unsigned char *key, int key_len) { + FUNC_ENTER(NULL); + art_leaf *l = recursive_delete(t->root, &t->root, key, key_len, 0); if (l) { t->size--; void *old = l->value; - free(l); - return old; + + l = (art_leaf *)PDC_free(l); + FUNC_LEAVE(old); } - return NULL; + + FUNC_LEAVE(NULL); } // Recursively iterates over the tree static int recursive_iter(art_node *n, art_callback cb, void *data) { + FUNC_ENTER(NULL); + // Handle base cases if (!n) - return 0; + FUNC_LEAVE(0); if (IS_LEAF(n)) { art_leaf *l = LEAF_RAW(n); - return cb(data, (const unsigned char *)l->key, l->key_len, l->value); + FUNC_LEAVE(cb(data, (const unsigned char *)l->key, l->key_len, l->value)); } int idx, res; @@ -958,7 +1067,7 @@ recursive_iter(art_node *n, art_callback cb, void *data) for (int i = 0; i < n->num_children; i++) { res = recursive_iter(((art_node4 *)n)->children[i], cb, data); if (res) - return res; + FUNC_LEAVE(res); } break; @@ -966,7 +1075,7 @@ recursive_iter(art_node *n, art_callback cb, void *data) for (int i = 0; i < n->num_children; i++) { res = recursive_iter(((art_node16 *)n)->children[i], cb, data); if (res) - return res; + FUNC_LEAVE(res); } break; @@ -978,7 +1087,7 @@ recursive_iter(art_node *n, art_callback cb, void *data) res = recursive_iter(((art_node48 *)n)->children[idx - 1], cb, data); if (res) - return res; + FUNC_LEAVE(res); } break; @@ -988,14 +1097,15 @@ recursive_iter(art_node *n, art_callback cb, void *data) continue; res = recursive_iter(((art_node256 *)n)->children[i], cb, data); if (res) - return res; + FUNC_LEAVE(res); } break; default: abort(); } - return 0; + + FUNC_LEAVE(0); } /** @@ -1011,7 +1121,8 @@ recursive_iter(art_node *n, art_callback cb, void *data) int art_iter(art_tree *t, art_callback cb, void *data) { - return recursive_iter(t->root, cb, data); + FUNC_ENTER(NULL); + FUNC_LEAVE(recursive_iter(t->root, cb, data)); } /** @@ -1021,12 +1132,14 @@ art_iter(art_tree *t, art_callback cb, void *data) static int leaf_prefix_matches(const art_leaf *n, const unsigned char *prefix, int prefix_len) { + FUNC_ENTER(NULL); + // Fail if the key length is too short if (n->key_len < (uint32_t)prefix_len) - return 1; + FUNC_LEAVE(1); // Compare the keys - return memcmp(n->key, prefix, prefix_len); + FUNC_LEAVE(memcmp(n->key, prefix, prefix_len)); } /** @@ -1044,6 +1157,8 @@ leaf_prefix_matches(const art_leaf *n, const unsigned char *prefix, int prefix_l int art_iter_prefix(art_tree *t, const unsigned char *key, int key_len, art_callback cb, void *data) { + FUNC_ENTER(NULL); + art_node **child; art_node * n = t->root; int prefix_len, depth = 0; @@ -1054,17 +1169,17 @@ art_iter_prefix(art_tree *t, const unsigned char *key, int key_len, art_callback // Check if the expanded path matches if (!leaf_prefix_matches((art_leaf *)n, key, key_len)) { art_leaf *l = (art_leaf *)n; - return cb(data, (const unsigned char *)l->key, l->key_len, l->value); + FUNC_LEAVE(cb(data, (const unsigned char *)l->key, l->key_len, l->value)); } - return 0; + FUNC_LEAVE(0); } // If the depth matches the prefix, we need to handle this node if (depth == key_len) { art_leaf *l = minimum(n); if (!leaf_prefix_matches(l, key, key_len)) - return recursive_iter(n, cb, data); - return 0; + FUNC_LEAVE(recursive_iter(n, cb, data)); + FUNC_LEAVE(0); } // Bail if the prefix does not match @@ -1078,12 +1193,12 @@ art_iter_prefix(art_tree *t, const unsigned char *key, int key_len, art_callback // If there is no match, search is terminated if (!prefix_len) { - return 0; + FUNC_LEAVE(0); // If we've matched the prefix, iterate on this node } else if (depth + prefix_len == key_len) { - return recursive_iter(n, cb, data); + FUNC_LEAVE(recursive_iter(n, cb, data)); } // if there is a full match, go deeper @@ -1095,5 +1210,6 @@ art_iter_prefix(art_tree *t, const unsigned char *key, int key_len, art_callback n = (child) ? *child : NULL; depth++; } - return 0; + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/collections/libhl/include/comparators.h b/src/commons/collections/libhl/include/comparators.h index 565e2b362..2744bcb30 100644 --- a/src/commons/collections/libhl/include/comparators.h +++ b/src/commons/collections/libhl/include/comparators.h @@ -10,6 +10,7 @@ extern "C" { #include #include #include "pdc_generic.h" +#include "pdc_timing.h" /** * @brief Callback that, if provided, will be used to compare node keys. @@ -39,7 +40,7 @@ typedef int (*libhl_cmp_callback_t)(void *k1, size_t k1size, void *k2, size_t k2 { \ _type _k1i = *((_type *)_k1); \ int rst = (int)_k1i; \ - return rst >= 0 ? rst : -rst; \ + FUNC_LEAVE(rst >= 0 ? rst : -rst); \ } #define LIBHL_CMP_KEYS_TYPE(_type, _k1, _k1s, _k2, _k2s) \ @@ -48,75 +49,84 @@ typedef int (*libhl_cmp_callback_t)(void *k1, size_t k1size, void *k2, size_t k2 return _k1s - _k2s; \ _type _k1i = *((_type *)_k1); \ _type _k2i = *((_type *)_k2); \ - return _k1i - _k2i; \ + FUNC_LEAVE(_k1i - _k2i); \ } #define LIBHL_CMP_KEYS_NO_TYPE(_type, _k1, _k1s, _k2, _k2s) \ { \ if (_k1 == NULL && _k2 == NULL) \ - return 0; \ + FUNC_LEAVE(0); \ if (_k1 == NULL) \ - return -1; \ + FUNC_LEAVE(-1); \ if (_k2 == NULL) \ - return 1; \ + FUNC_LEAVE(1); \ _type _k1i = *((_type *)_k1); \ _type _k2i = *((_type *)_k2); \ - return _k1i - _k2i; \ + FUNC_LEAVE(_k1i - _k2i); \ } static int libhl_cast_any_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); int rst = *(int *)k1; - return rst >= 0 ? rst : -rst; + FUNC_LEAVE(rst >= 0 ? rst : -rst); } static int libhl_cast_int_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(int, k1); } static int libhl_cast_long_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(long, k1); } static int libhl_cast_int16_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(int16_t, k1); } static int libhl_cast_int32_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(int32_t, k1); } static int libhl_cast_int64_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(int64_t, k1); } static int libhl_cast_float_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(float, k1); } static int libhl_cast_double_to_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CAST_KEYS(double, k1); } static int libhl_cmp_keys_string(void *k1, size_t k1size, void *k2, size_t k2size) { - return strcmp((const char *)k1, (const char *)k2); + FUNC_ENTER(NULL); + FUNC_LEAVE(strcmp((const char *)k1, (const char *)k2)); } /** @@ -125,6 +135,7 @@ libhl_cmp_keys_string(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_int(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(int, k1, k1size, k2, k2size); } @@ -134,6 +145,7 @@ libhl_cmp_keys_int(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_long(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(long, k1, k1size, k2, k2size); } @@ -143,6 +155,7 @@ libhl_cmp_keys_long(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_int16(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(int16_t, k1, k1size, k2, k2size); } @@ -152,6 +165,7 @@ libhl_cmp_keys_int16(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_int32(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(int32_t, k1, k1size, k2, k2size); } @@ -161,6 +175,7 @@ libhl_cmp_keys_int32(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_int64(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(int64_t, k1, k1size, k2, k2size); } @@ -170,6 +185,7 @@ libhl_cmp_keys_int64(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_uint16(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(uint16_t, k1, k1size, k2, k2size); } @@ -179,6 +195,7 @@ libhl_cmp_keys_uint16(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_uint32(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(uint32_t, k1, k1size, k2, k2size); } @@ -188,6 +205,7 @@ libhl_cmp_keys_uint32(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_uint64(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(uint64_t, k1, k1size, k2, k2size); } @@ -197,6 +215,7 @@ libhl_cmp_keys_uint64(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_float(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(float, k1, k1size, k2, k2size); } @@ -206,6 +225,7 @@ libhl_cmp_keys_float(void *k1, size_t k1size, void *k2, size_t k2size) static int libhl_cmp_keys_double(void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); LIBHL_CMP_KEYS_NO_TYPE(double, k1, k1size, k2, k2size); } diff --git a/src/commons/collections/libhl/linklist.c b/src/commons/collections/libhl/linklist.c index 66dbc3edd..97dfe74ad 100644 --- a/src/commons/collections/libhl/linklist.c +++ b/src/commons/collections/libhl/linklist.c @@ -1,7 +1,7 @@ /* linked list management library - by xant */ -//#include +// #include #include #include #include @@ -9,6 +9,7 @@ #include "linklist.h" #include "atomic_defs.h" #include "pdc_malloc.h" +#include "pdc_timing.h" // size_t mem_usage_by_all_linkedlist; @@ -71,14 +72,16 @@ static inline int swap_entries(linked_list_t *list, size_t pos1, size_ linked_list_t * list_create() { + FUNC_ENTER(NULL); + linked_list_t *list = (linked_list_t *)PDC_calloc(1, sizeof(linked_list_t)); if (list) { if (list_init(list) != 0) { - free(list); - return NULL; + list = (linked_list_t *)PDC_free(list); + FUNC_LEAVE(NULL); } } - return list; + FUNC_LEAVE(list); } /* @@ -88,6 +91,8 @@ list_create() int list_init(linked_list_t *list __attribute__((unused))) { + FUNC_ENTER(NULL); + #ifdef THREAD_SAFE pthread_mutexattr_t attr; if (pthread_mutexattr_init(&attr) != 0) { @@ -99,7 +104,8 @@ list_init(linked_list_t *list __attribute__((unused))) } pthread_mutexattr_destroy(&attr); #endif - return 0; + + FUNC_LEAVE(0); } /* @@ -108,6 +114,8 @@ list_init(linked_list_t *list __attribute__((unused))) void list_destroy(linked_list_t *list) { + FUNC_ENTER(NULL); + if (list) { while (list->slices) slice_destroy(list->slices->value); @@ -115,25 +123,31 @@ list_destroy(linked_list_t *list) #ifdef THREAD_SAFE MUTEX_DESTROY(list->lock); #endif - free(list); + list = (linked_list_t *)PDC_free(list); } + + FUNC_LEAVE_VOID(); } static void list_destroy_tagged_value_internal(tagged_value_t *tval, void (*free_cb)(void *v)) { + FUNC_ENTER(NULL); + if (tval) { - free(tval->tag); + tval->tag = (char *)PDC_free(tval->tag); if (tval->value) { if (tval->type == TV_TYPE_LIST) list_destroy((linked_list_t *)tval->value); else if (free_cb) free_cb(tval->value); else if (tval->vlen) - free(tval->value); + tval->value = (void *)PDC_free(tval->value); } - free(tval); + tval = (tagged_value_t *)PDC_free(tval); } + + FUNC_LEAVE_VOID(); } /* @@ -145,6 +159,8 @@ list_destroy_tagged_value_internal(tagged_value_t *tval, void (*free_cb)(void *v void list_clear(linked_list_t *list) { + FUNC_ENTER(NULL); + list_entry_t *e; /* Destroy all entries still in list */ while ((e = shift_entry(list)) != NULL) { @@ -157,37 +173,54 @@ list_clear(linked_list_t *list) destroy_entry(e); } + + FUNC_LEAVE_VOID(); } /* Returns actual lenght of linked_list_t pointed by l */ size_t list_count(linked_list_t *l) { + FUNC_ENTER(NULL); + size_t len; MUTEX_LOCK(l->lock); len = l->length; MUTEX_UNLOCK(l->lock); - return len; + + FUNC_LEAVE(len); } void list_set_free_value_callback(linked_list_t *list, free_value_callback_t free_value_cb) { + FUNC_ENTER(NULL); + MUTEX_LOCK(list->lock); list->free_value_cb = free_value_cb; MUTEX_UNLOCK(list->lock); + + FUNC_LEAVE_VOID(); } void list_lock(linked_list_t *list __attribute__((unused))) { + FUNC_ENTER(NULL); + MUTEX_LOCK(list->lock); + + FUNC_LEAVE_VOID(); } void list_unlock(linked_list_t *list __attribute__((unused))) { + FUNC_ENTER(NULL); + MUTEX_UNLOCK(list->lock); + + FUNC_LEAVE_VOID(); } /* @@ -197,8 +230,11 @@ list_unlock(linked_list_t *list __attribute__((unused))) static inline list_entry_t * create_entry() { + FUNC_ENTER(NULL); + list_entry_t *new_entry = (list_entry_t *)PDC_calloc(1, sizeof(list_entry_t)); - return new_entry; + + FUNC_LEAVE(new_entry); } /* @@ -209,6 +245,8 @@ create_entry() static inline void destroy_entry(list_entry_t *entry) { + FUNC_ENTER(NULL); + long pos; if (entry) { if (entry->list) { @@ -217,8 +255,10 @@ destroy_entry(list_entry_t *entry) if (pos >= 0) remove_entry(entry->list, pos); } - free(entry); + entry = (list_entry_t *)PDC_free(entry); } + + FUNC_LEAVE_VOID(); } /* @@ -228,6 +268,8 @@ destroy_entry(list_entry_t *entry) static inline list_entry_t * pop_entry(linked_list_t *list) { + FUNC_ENTER(NULL); + list_entry_t *entry; MUTEX_LOCK(list->lock); @@ -249,7 +291,8 @@ pop_entry(linked_list_t *list) list->head = list->tail = NULL; MUTEX_UNLOCK(list->lock); - return entry; + + FUNC_LEAVE(entry); } /* @@ -258,9 +301,11 @@ pop_entry(linked_list_t *list) static inline int push_entry(linked_list_t *list, list_entry_t *entry) { + FUNC_ENTER(NULL); + list_entry_t *p; if (!entry) - return -1; + FUNC_LEAVE(-1); MUTEX_LOCK(list->lock); if (list->length == 0) { list->head = list->tail = entry; @@ -275,7 +320,8 @@ push_entry(linked_list_t *list, list_entry_t *entry) list->length++; entry->list = list; MUTEX_UNLOCK(list->lock); - return 0; + + FUNC_LEAVE(0); } /* @@ -285,6 +331,8 @@ push_entry(linked_list_t *list, list_entry_t *entry) static inline list_entry_t * shift_entry(linked_list_t *list) { + FUNC_ENTER(NULL); + list_entry_t *entry; MUTEX_LOCK(list->lock); entry = list->head; @@ -306,7 +354,8 @@ shift_entry(linked_list_t *list) if (list->length == 0) list->head = list->tail = NULL; MUTEX_UNLOCK(list->lock); - return entry; + + FUNC_LEAVE(entry); } /* @@ -315,9 +364,11 @@ shift_entry(linked_list_t *list) static inline int unshift_entry(linked_list_t *list, list_entry_t *entry) { + FUNC_ENTER(NULL); + list_entry_t *p; if (!entry) - return -1; + FUNC_LEAVE(-1); MUTEX_LOCK(list->lock); if (list->length == 0) { list->head = list->tail = entry; @@ -334,7 +385,8 @@ unshift_entry(linked_list_t *list, list_entry_t *entry) if (list->cur) list->pos++; MUTEX_UNLOCK(list->lock); - return 0; + + FUNC_LEAVE(0); } /* @@ -343,6 +395,8 @@ unshift_entry(linked_list_t *list, list_entry_t *entry) static inline int insert_entry(linked_list_t *list, list_entry_t *entry, size_t pos) { + FUNC_ENTER(NULL); + list_entry_t *prev, *next; int ret = -1; MUTEX_LOCK(list->lock); @@ -360,7 +414,7 @@ insert_entry(linked_list_t *list, list_entry_t *entry, size_t pos) if (emptyEntry) destroy_entry(emptyEntry); MUTEX_UNLOCK(list->lock); - return -1; + FUNC_LEAVE(-1); } } ret = push_entry(list, entry); @@ -368,7 +422,7 @@ insert_entry(linked_list_t *list, list_entry_t *entry, size_t pos) if (ret == 0) { MUTEX_UNLOCK(list->lock); - return ret; + FUNC_LEAVE(ret); } prev = pick_entry(list, pos - 1); @@ -383,7 +437,8 @@ insert_entry(linked_list_t *list, list_entry_t *entry, size_t pos) ret = 0; } MUTEX_UNLOCK(list->lock); - return ret; + + FUNC_LEAVE(ret); } /* @@ -392,6 +447,8 @@ insert_entry(linked_list_t *list, list_entry_t *entry, size_t pos) static inline list_entry_t * pick_entry(linked_list_t *list, size_t pos) { + FUNC_ENTER(NULL); + unsigned int i; list_entry_t *entry; @@ -399,7 +456,7 @@ pick_entry(linked_list_t *list, size_t pos) if (list->length <= pos) { MUTEX_UNLOCK(list->lock); - return NULL; + FUNC_LEAVE(NULL); } size_t half_length = list->length >> 1; @@ -439,7 +496,8 @@ pick_entry(linked_list_t *list, size_t pos) } MUTEX_UNLOCK(list->lock); - return entry; + + FUNC_LEAVE(entry); } /* Retreive the list_entry_t at pos in a linked_list_t removing it from the list @@ -449,34 +507,42 @@ pick_entry(linked_list_t *list, size_t pos) static inline list_entry_t * fetch_entry(linked_list_t *list, size_t pos) { + FUNC_ENTER(NULL); + list_entry_t *entry = NULL; if (pos == 0) - return shift_entry(list); + FUNC_LEAVE(shift_entry(list)); else if (pos == list_count(list) - 1) - return pop_entry(list); + FUNC_LEAVE(pop_entry(list)); entry = remove_entry(list, pos); - return entry; + + FUNC_LEAVE(entry); } static inline int move_entry(linked_list_t *list, size_t srcPos, size_t dstPos) { + FUNC_ENTER(NULL); + list_entry_t *e; e = fetch_entry(list, srcPos); if (e) { if (insert_entry(list, e, dstPos) == 0) - return 0; + FUNC_LEAVE(0); } + /* TODO - Unimplemented */ - return -1; + FUNC_LEAVE(-1); } /* XXX - still dangerous ... */ static inline int swap_entries(linked_list_t *list, size_t pos1, size_t pos2) { + FUNC_ENTER(NULL); + list_entry_t *e1; list_entry_t *e2; if (pos2 > pos1) { @@ -492,16 +558,18 @@ swap_entries(linked_list_t *list, size_t pos1, size_t pos2) insert_entry(list, e2, pos1); } else - return -1; + FUNC_LEAVE(-1); /* TODO - Unimplemented */ - return 0; + FUNC_LEAVE(0); } /* return old entry at pos */ static inline list_entry_t * subst_entry(linked_list_t *list, size_t pos, list_entry_t *entry) { + FUNC_ENTER(NULL); + list_entry_t *old; MUTEX_LOCK(list->lock); @@ -509,19 +577,22 @@ subst_entry(linked_list_t *list, size_t pos, list_entry_t *entry) old = fetch_entry(list, pos); if (!old) { MUTEX_UNLOCK(list->lock); - return NULL; + FUNC_LEAVE(NULL); } insert_entry(list, entry, pos); MUTEX_UNLOCK(list->lock); + /* XXX - NO CHECK ON INSERTION */ - return old; + FUNC_LEAVE(old); } /* XXX - POSSIBLE RACE CONDITION BETWEEN pick_entry and the actual removal */ static inline list_entry_t * remove_entry(linked_list_t *list, size_t pos) { + FUNC_ENTER(NULL); + list_entry_t *next, *prev; list_entry_t *entry = pick_entry(list, pos); MUTEX_LOCK(list->lock); @@ -551,10 +622,11 @@ remove_entry(linked_list_t *list, size_t pos) list->pos--; } MUTEX_UNLOCK(list->lock); - return entry; + FUNC_LEAVE(entry); } MUTEX_UNLOCK(list->lock); - return NULL; + + FUNC_LEAVE(NULL); } /* return position of entry if linked in a list. @@ -562,13 +634,15 @@ remove_entry(linked_list_t *list, size_t pos) long get_entry_position(list_entry_t *entry) { + FUNC_ENTER(NULL); + int i = 0; linked_list_t *list; list_entry_t * p; list = entry->list; if (!list) - return -1; + FUNC_LEAVE(-1); MUTEX_LOCK(list->lock); if (list) { @@ -576,113 +650,138 @@ get_entry_position(list_entry_t *entry) while (p) { if (p == entry) { MUTEX_UNLOCK(list->lock); - return i; + FUNC_LEAVE(i); } p = p->next; i++; } } MUTEX_UNLOCK(list->lock); - return -1; + + FUNC_LEAVE(-1); } void * list_pop_value(linked_list_t *list) { + FUNC_ENTER(NULL); + void * val = NULL; list_entry_t *entry = pop_entry(list); if (entry) { val = entry->value; destroy_entry(entry); } - return val; + + FUNC_LEAVE(val); } int list_push_value(linked_list_t *list, void *val) { + FUNC_ENTER(NULL); + int res; list_entry_t *new_entry = create_entry(); if (!new_entry) - return -1; + FUNC_LEAVE(-1); new_entry->value = val; res = push_entry(list, new_entry); if (res != 0) destroy_entry(new_entry); - return res; + + FUNC_LEAVE(res); } int list_unshift_value(linked_list_t *list, void *val) { + FUNC_ENTER(NULL); + int res; list_entry_t *new_entry = create_entry(); if (!new_entry) - return -1; + FUNC_LEAVE(-1); new_entry->value = val; res = unshift_entry(list, new_entry); if (res != 0) destroy_entry(new_entry); - return res; + + FUNC_LEAVE(res); } void * list_shift_value(linked_list_t *list) { + FUNC_ENTER(NULL); + void * val = NULL; list_entry_t *entry = shift_entry(list); if (entry) { val = entry->value; destroy_entry(entry); } - return val; + + FUNC_LEAVE(val); } int list_insert_value(linked_list_t *list, void *val, size_t pos) { + FUNC_ENTER(NULL); + int res; list_entry_t *new_entry = create_entry(); if (!new_entry) - return -1; + FUNC_LEAVE(-1); new_entry->value = val; res = insert_entry(list, new_entry, pos); if (res != 0) destroy_entry(new_entry); - return res; + + FUNC_LEAVE(res); } void * list_pick_value(linked_list_t *list, size_t pos) { + FUNC_ENTER(NULL); + list_entry_t *entry = pick_entry(list, pos); if (entry) return entry->value; - return NULL; + + FUNC_LEAVE(NULL); } void * list_fetch_value(linked_list_t *list, size_t pos) { + FUNC_ENTER(NULL); + void * val = NULL; list_entry_t *entry = fetch_entry(list, pos); if (entry) { val = entry->value; destroy_entry(entry); } - return val; + + FUNC_LEAVE(val); } /* just an accessor to move_entry */ int list_move_value(linked_list_t *list, size_t srcPos, size_t dstPos) { - return move_entry(list, srcPos, dstPos); + FUNC_ENTER(NULL); + FUNC_LEAVE(move_entry(list, srcPos, dstPos)); } void * list_set_value(linked_list_t *list, size_t pos, void *newval) { + FUNC_ENTER(NULL); + void *old_value = NULL; MUTEX_LOCK(list->lock); list_entry_t *entry = pick_entry(list, pos); @@ -694,13 +793,16 @@ list_set_value(linked_list_t *list, size_t pos, void *newval) list_insert_value(list, newval, pos); } MUTEX_UNLOCK(list->lock); - return old_value; + + FUNC_LEAVE(old_value); } /* return old value at pos */ void * list_subst_value(linked_list_t *list, size_t pos, void *newval) { + FUNC_ENTER(NULL); + void *old_value = NULL; MUTEX_LOCK(list->lock); list_entry_t *entry = pick_entry(list, pos); @@ -709,30 +811,37 @@ list_subst_value(linked_list_t *list, size_t pos, void *newval) entry->value = newval; } MUTEX_UNLOCK(list->lock); - return old_value; + + FUNC_LEAVE(old_value); } int list_swap_values(linked_list_t *list, size_t pos1, size_t pos2) { - return swap_entries(list, pos1, pos2); + FUNC_ENTER(NULL); + FUNC_LEAVE(swap_entries(list, pos1, pos2)); } int list_foreach_value(linked_list_t *list, int (*item_handler)(void *item, size_t idx, void *user), void *user) { + FUNC_ENTER(NULL); + MUTEX_LOCK(list->lock); slice_t slice = {.list = list, .offset = 0, .length = list->length}; MUTEX_UNLOCK(list->lock); - return slice_foreach_value(&slice, item_handler, user); + + FUNC_LEAVE(slice_foreach_value(&slice, item_handler, user)); } tagged_value_t * list_create_tagged_value_nocopy(char *tag, void *val) { + FUNC_ENTER(NULL); + tagged_value_t *newval = (tagged_value_t *)PDC_calloc(1, sizeof(tagged_value_t)); if (!newval) { - return NULL; + FUNC_LEAVE(NULL); } if (tag) @@ -740,7 +849,7 @@ list_create_tagged_value_nocopy(char *tag, void *val) if (val) newval->value = val; - return newval; + FUNC_LEAVE(newval); } /* @@ -753,9 +862,11 @@ list_create_tagged_value_nocopy(char *tag, void *val) tagged_value_t * list_create_tagged_value(char *tag, void *val, size_t vlen) { + FUNC_ENTER(NULL); + tagged_value_t *newval = (tagged_value_t *)PDC_calloc(1, sizeof(tagged_value_t)); if (!newval) { - return NULL; + FUNC_LEAVE(NULL); } if (tag) @@ -769,9 +880,9 @@ list_create_tagged_value(char *tag, void *val, size_t vlen) newval->vlen = vlen; } else { - free(newval->tag); - free(newval); - return NULL; + newval->tag = (char *)PDC_free(newval->tag); + newval = (tagged_value_t *)PDC_free(newval); + FUNC_LEAVE(NULL); } newval->type = TV_TYPE_BINARY; } @@ -781,7 +892,8 @@ list_create_tagged_value(char *tag, void *val, size_t vlen) newval->type = TV_TYPE_STRING; } } - return newval; + + FUNC_LEAVE(newval); } /* @@ -793,28 +905,37 @@ list_create_tagged_value(char *tag, void *val, size_t vlen) tagged_value_t * list_create_tagged_sublist(char *tag, linked_list_t *sublist) { + FUNC_ENTER(NULL); + tagged_value_t *newval = (tagged_value_t *)PDC_calloc(1, sizeof(tagged_value_t)); if (!newval) { - return NULL; + FUNC_LEAVE(NULL); } if (tag) newval->tag = strdup(tag); newval->type = TV_TYPE_LIST; newval->value = sublist; - return newval; + + FUNC_LEAVE(newval); } /* Release resources for tagged_value_t pointed by tval */ void list_destroy_tagged_value(tagged_value_t *tval) { + FUNC_ENTER(NULL); + list_destroy_tagged_value_internal(tval, NULL); + + FUNC_LEAVE_VOID(); } tagged_value_t * list_set_tagged_value(linked_list_t *list, char *tag, void *value, size_t len, int copy) { + FUNC_ENTER(NULL); + int i; tagged_value_t *tval; @@ -830,9 +951,9 @@ list_set_tagged_value(linked_list_t *list, char *tag, void *value, size_t len, i MUTEX_UNLOCK(list->lock); if (!list_set_value(list, i, tval)) { list_destroy_tagged_value(tval); - return NULL; + FUNC_LEAVE(NULL); } - return tv; + FUNC_LEAVE(tv); } } if (list_push_tagged_value(list, tval) == 0) { @@ -840,14 +961,16 @@ list_set_tagged_value(linked_list_t *list, char *tag, void *value, size_t len, i tval = NULL; } MUTEX_UNLOCK(list->lock); - return NULL; + + FUNC_LEAVE(NULL); } /* Pops a tagged_value_t from the list pointed by list */ tagged_value_t * list_pop_tagged_value(linked_list_t *list) { - return (tagged_value_t *)list_pop_value(list); + FUNC_ENTER(NULL); + FUNC_LEAVE((tagged_value_t *)list_pop_value(list)); } /* @@ -857,6 +980,8 @@ list_pop_tagged_value(linked_list_t *list) int list_push_tagged_value(linked_list_t *list, tagged_value_t *tval) { + FUNC_ENTER(NULL); + list_entry_t *new_entry; int res = 0; if (tval) { @@ -869,12 +994,15 @@ list_push_tagged_value(linked_list_t *list, tagged_value_t *tval) destroy_entry(new_entry); } } - return res; + + FUNC_LEAVE(res); } int list_unshift_tagged_value(linked_list_t *list, tagged_value_t *tval) { + FUNC_ENTER(NULL); + int res = 0; list_entry_t *new_entry; if (tval) { @@ -887,18 +1015,22 @@ list_unshift_tagged_value(linked_list_t *list, tagged_value_t *tval) destroy_entry(new_entry); } } - return res; + + FUNC_LEAVE(res); } tagged_value_t * shift_tagged_value(linked_list_t *list) { - return (tagged_value_t *)list_shift_value(list); + FUNC_ENTER(NULL); + FUNC_LEAVE((tagged_value_t *)list_shift_value(list)); } int list_insert_tagged_value(linked_list_t *list, tagged_value_t *tval, size_t pos) { + FUNC_ENTER(NULL); + int res = 0; list_entry_t *new_entry; if (tval) { @@ -911,19 +1043,22 @@ list_insert_tagged_value(linked_list_t *list, tagged_value_t *tval, size_t pos) destroy_entry(new_entry); } } - return res; + + FUNC_LEAVE(res); } tagged_value_t * list_pick_tagged_value(linked_list_t *list, size_t pos) { - return (tagged_value_t *)list_pick_value(list, pos); + FUNC_ENTER(NULL); + FUNC_LEAVE((tagged_value_t *)list_pick_value(list, pos)); } tagged_value_t * list_fetch_tagged_value(linked_list_t *list, size_t pos) { - return (tagged_value_t *)list_fetch_value(list, pos); + FUNC_ENTER(NULL); + FUNC_LEAVE((tagged_value_t *)list_fetch_value(list, pos)); } /* @@ -932,6 +1067,8 @@ list_fetch_tagged_value(linked_list_t *list, size_t pos) tagged_value_t * list_get_tagged_value(linked_list_t *list, char *tag) { + FUNC_ENTER(NULL); + int i; tagged_value_t *tval; for (i = 0; i < (int)list_count(list); i++) { @@ -940,9 +1077,10 @@ list_get_tagged_value(linked_list_t *list, char *tag) continue; } if (strcmp(tval->tag, tag) == 0) - return tval; + FUNC_LEAVE(tval); } - return NULL; + + FUNC_LEAVE(NULL); } /* @@ -956,6 +1094,8 @@ list_get_tagged_value(linked_list_t *list, char *tag) size_t list_get_tagged_values(linked_list_t *list, char *tag, linked_list_t *values) { + FUNC_ENTER(NULL); + int i; int ret; tagged_value_t *tval; @@ -970,38 +1110,44 @@ list_get_tagged_values(linked_list_t *list, char *tag, linked_list_t *values) ret++; } } - return ret; + + FUNC_LEAVE(ret); } static inline void swap_entry_node_val(list_entry_t *p1, list_entry_t *p2) { + FUNC_ENTER(NULL); + if (!p1 || !p2) - return; + FUNC_LEAVE_VOID(); void *tmp = p1->value; p1->value = p2->value; p2->value = tmp; + + FUNC_LEAVE_VOID(); } static inline void list_quick_sort(list_entry_t *head, list_entry_t *tail, list_entry_t *pivot, int length, list_comparator_callback_t comparator) { + FUNC_ENTER(NULL); + if (!head || !tail || !pivot || length < 2 || !comparator) - return; + FUNC_LEAVE_VOID(); if (length == 2) { if (comparator(head->value, tail->value) < 0) swap_entry_node_val(head, tail); - return; + FUNC_LEAVE_VOID(); } void * pvalue = pivot->value; list_entry_t *p1 = head, *p2 = tail; for (;;) { - while (p1 && p1 != pivot && comparator(p1->value, pvalue) > 0) p1 = p1->next; @@ -1107,17 +1253,23 @@ list_quick_sort(list_entry_t *head, list_entry_t *tail, list_entry_t *pivot, int list_quick_sort(head, pivot->prev, pv1, l1, comparator); if (l2 > 1 && pivot->next && tail != pivot->next) list_quick_sort(pivot->next, tail, pv2, l2, comparator); + + FUNC_LEAVE_VOID(); } void list_sort(linked_list_t *list, list_comparator_callback_t comparator) { + FUNC_ENTER(NULL); + MUTEX_LOCK(list->lock); list_entry_t *pivot = pick_entry(list, (list->length / 2) - 1); list_quick_sort(list->head, list->tail, pivot, list->length, comparator); list->cur = NULL; list->pos = 0; MUTEX_UNLOCK(list->lock); + + FUNC_LEAVE_VOID(); } // size_t @@ -1129,6 +1281,8 @@ list_sort(linked_list_t *list, list_comparator_callback_t comparator) slice_t * slice_create(linked_list_t *list, size_t offset, size_t length) { + FUNC_ENTER(NULL); + slice_t *slice = PDC_calloc(1, sizeof(slice_t)); slice->list = list; slice->offset = offset; @@ -1146,12 +1300,14 @@ slice_create(linked_list_t *list, size_t offset, size_t length) e->prev = cur; } - return slice; + FUNC_LEAVE(slice); } void slice_destroy(slice_t *slice) { + FUNC_ENTER(NULL); + linked_list_t *list = slice->list; list_entry_t * cur = list->slices; list_entry_t * prev = NULL; @@ -1170,12 +1326,16 @@ slice_destroy(slice_t *slice) prev = cur; cur = cur->next; } - free(slice); + slice = (slice_t *)PDC_free(slice); + + FUNC_LEAVE_VOID(); } int slice_foreach_value(slice_t *slice, int (*item_handler)(void *item, size_t idx, void *user), void *user) { + FUNC_ENTER(NULL); + linked_list_t *list = slice->list; MUTEX_LOCK(list->lock); size_t idx = 0; @@ -1220,7 +1380,8 @@ slice_foreach_value(slice_t *slice, int (*item_handler)(void *item, size_t idx, } } MUTEX_UNLOCK(list->lock); - return idx; + + FUNC_LEAVE(idx); } // vim: tabstop=4 shiftwidth=4 expandtab: diff --git a/src/commons/collections/libhl/rbtree.c b/src/commons/collections/libhl/rbtree.c index 14ad28302..ecb135af4 100644 --- a/src/commons/collections/libhl/rbtree.c +++ b/src/commons/collections/libhl/rbtree.c @@ -6,6 +6,7 @@ #include #include "rbtree.h" #include "pdc_malloc.h" +#include "pdc_private.h" #include "comparators.h" #include "pdc_logger.h" @@ -52,52 +53,62 @@ struct _rbt_s { rbt_t * rbt_create_by_dtype(pdc_c_var_type_t dtype, rbt_free_value_callback_t free_value_cb) { - rbt_t *rbt = calloc(1, sizeof(rbt_t)); + FUNC_ENTER(NULL); + + rbt_t *rbt = PDC_calloc(1, sizeof(rbt_t)); // INIT_PERF_INFO_FIELDS(rbt, rbt_t); // rbt->time_for_rotate = 0; // mem_usage_by_all_rbtrees += sizeof(rbt_t); if (!rbt) - return NULL; + FUNC_LEAVE(NULL); rbt->dtype = dtype; rbt->free_value_cb = free_value_cb; rbt->cmp_keys_cb = LIBHL_CMP_CB(dtype); - return rbt; + + FUNC_LEAVE(rbt); } rbt_t * rbt_create(libhl_cmp_callback_t cmp_keys_cb, rbt_free_value_callback_t free_value_cb) { - rbt_t *rbt = calloc(1, sizeof(rbt_t)); - // INIT_PERF_INFO_FIELDS(rbt, rbt_t); - // rbt->time_for_rotate = 0; - // mem_usage_by_all_rbtrees += sizeof(rbt_t); + FUNC_ENTER(NULL); + + rbt_t *rbt = PDC_calloc(1, sizeof(rbt_t)); if (!rbt) - return NULL; + FUNC_LEAVE(NULL); rbt->free_value_cb = free_value_cb; rbt->cmp_keys_cb = cmp_keys_cb; rbt->dtype = PDC_UNKNOWN; // if created via this function, we must set the dtype later. - return rbt; + + FUNC_LEAVE(rbt); } void rbt_set_dtype(rbt_t *rbt, pdc_c_var_type_t dtype) { + FUNC_ENTER(NULL); + rbt->dtype = dtype; + + FUNC_LEAVE_VOID(); } pdc_c_var_type_t rbt_get_dtype(rbt_t *rbt) { - return rbt->dtype; + FUNC_ENTER(NULL); + FUNC_LEAVE(rbt->dtype); } static inline void rbt_destroy_internal(rbt_node_t *node, rbt_free_value_callback_t free_value_cb) { + FUNC_ENTER(NULL); + if (!node) - return; + FUNC_LEAVE_VOID(); rbt_destroy_internal(node->left, free_value_cb); node->left = NULL; @@ -113,24 +124,25 @@ rbt_destroy_internal(rbt_node_t *node, rbt_free_value_callback_t free_value_cb) } } - if (node->key == NULL) { - free(node); - } + if (node->key == NULL) + node = (rbt_node_t *)PDC_free(node); + + FUNC_LEAVE_VOID(); } void rbt_destroy(rbt_t *rbt) { - if (rbt == NULL) { - return; - } - // if (rbt->size == 0) { - // goto done; - // } + FUNC_ENTER(NULL); + + if (rbt == NULL) + FUNC_LEAVE_VOID(); + rbt_destroy_internal(rbt->root, rbt->free_value_cb); - // done: rbt->root = NULL; - free(rbt); + rbt = (rbt_t *)PDC_free(rbt); + + FUNC_LEAVE_VOID(); } static int @@ -138,12 +150,14 @@ rbt_range_walk_internal(rbt_t *rbt, rbt_node_t *node, void *begin_key, size_t bg size_t edk_size, int sorted, rbt_walk_callback cb, void *priv, int beginInclusive, int endInclusive) { + FUNC_ENTER(NULL); + if (!node) - return 0; + FUNC_LEAVE(0); if (begin_key != NULL && end_key != NULL && rbt->cmp_keys_cb(begin_key, bgk_size, end_key, edk_size) >= 0) { - return 0; + FUNC_LEAVE(0); } int rc = 1; @@ -153,7 +167,7 @@ rbt_range_walk_internal(rbt_t *rbt, rbt_node_t *node, void *begin_key, size_t bg int rrc = rbt_range_walk_internal(rbt, node->left, begin_key, bgk_size, end_key, edk_size, sorted, cb, priv, beginInclusive, endInclusive); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } @@ -206,23 +220,23 @@ rbt_range_walk_internal(rbt_t *rbt, rbt_node_t *node, void *begin_key, size_t bg switch (cbrc) { case RBT_WALK_DELETE_AND_STOP: rbt_remove(rbt, node->key, node->klen, NULL); - return 0; + FUNC_LEAVE(0); case RBT_WALK_DELETE_AND_CONTINUE: { if (node->left && node->right) { rbt_remove(rbt, node->key, node->klen, NULL); - return rbt_range_walk_internal(rbt, node, begin_key, bgk_size, end_key, edk_size, sorted, cb, - priv, beginInclusive, endInclusive); + FUNC_LEAVE(rbt_range_walk_internal(rbt, node, begin_key, bgk_size, end_key, edk_size, sorted, + cb, priv, beginInclusive, endInclusive)); } else if (node->left || node->right) { - return rbt_range_walk_internal(rbt, node->left ? node->left : node->right, begin_key, - bgk_size, end_key, edk_size, sorted, cb, priv, beginInclusive, - endInclusive); + FUNC_LEAVE(rbt_range_walk_internal(rbt, node->left ? node->left : node->right, begin_key, + bgk_size, end_key, edk_size, sorted, cb, priv, + beginInclusive, endInclusive)); } // this node was a leaf - return 1; + FUNC_LEAVE(1); } case RBT_WALK_STOP: - return 0; + FUNC_LEAVE(0); case RBT_WALK_CONTINUE: break; default: @@ -234,7 +248,7 @@ rbt_range_walk_internal(rbt_t *rbt, rbt_node_t *node, void *begin_key, size_t bg int rrc = rbt_range_walk_internal(rbt, node->left, begin_key, bgk_size, end_key, edk_size, sorted, cb, priv, beginInclusive, endInclusive); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } @@ -242,17 +256,20 @@ rbt_range_walk_internal(rbt_t *rbt, rbt_node_t *node, void *begin_key, size_t bg int rrc = rbt_range_walk_internal(rbt, node->right, begin_key, bgk_size, end_key, edk_size, sorted, cb, priv, beginInclusive, endInclusive); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } - return rc; + + FUNC_LEAVE(rc); } static int rbt_walk_internal(rbt_t *rbt, rbt_node_t *node, int sorted, rbt_walk_callback cb, void *priv) { + FUNC_ENTER(NULL); + if (!node) - return 0; + FUNC_LEAVE(0); int rc = 1; int cbrc = 0; @@ -260,7 +277,7 @@ rbt_walk_internal(rbt_t *rbt, rbt_node_t *node, int sorted, rbt_walk_callback cb if (sorted && node->left) { int rrc = rbt_walk_internal(rbt, node->left, sorted, cb, priv); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } @@ -268,20 +285,20 @@ rbt_walk_internal(rbt_t *rbt, rbt_node_t *node, int sorted, rbt_walk_callback cb switch (cbrc) { case RBT_WALK_DELETE_AND_STOP: rbt_remove(rbt, node->key, node->klen, NULL); - return 0; + FUNC_LEAVE(0); case RBT_WALK_DELETE_AND_CONTINUE: { if (node->left && node->right) { rbt_remove(rbt, node->key, node->klen, NULL); - return rbt_walk_internal(rbt, node, sorted, cb, priv); + FUNC_LEAVE(rbt_walk_internal(rbt, node, sorted, cb, priv)); } else if (node->left || node->right) { - return rbt_walk_internal(rbt, node->left ? node->left : node->right, sorted, cb, priv); + FUNC_LEAVE(rbt_walk_internal(rbt, node->left ? node->left : node->right, sorted, cb, priv)); } // this node was a leaf - return 1; + FUNC_LEAVE(1); } case RBT_WALK_STOP: - return 0; + FUNC_LEAVE(0); case RBT_WALK_CONTINUE: break; default: @@ -292,139 +309,164 @@ rbt_walk_internal(rbt_t *rbt, rbt_node_t *node, int sorted, rbt_walk_callback cb if (!sorted && node->left) { int rrc = rbt_walk_internal(rbt, node->left, sorted, cb, priv); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } if (node->right) { int rrc = rbt_walk_internal(rbt, node->right, sorted, cb, priv); if (rrc == 0) - return rc + 1; + FUNC_LEAVE(rc + 1); rc += rrc; } - return rc; + FUNC_LEAVE(rc); } int rbt_walk(rbt_t *rbt, rbt_walk_callback cb, void *priv) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_walk_internal(rbt, rbt->root, 0, cb, priv); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_walk_sorted(rbt_t *rbt, rbt_walk_callback cb, void *priv) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_walk_internal(rbt, rbt->root, 1, cb, priv); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_walk(rbt_t *rbt, void *begin_key, size_t bgk_size, void *end_key, size_t edk_size, rbt_walk_callback cb, void *priv, int beginInclusive, int endInclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, begin_key, bgk_size, end_key, edk_size, 0, cb, priv, beginInclusive, endInclusive); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_walk_sorted(rbt_t *rbt, void *begin_key, size_t bgk_size, void *end_key, size_t edk_size, rbt_walk_callback cb, void *priv, int beginInclusive, int endInclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, begin_key, bgk_size, end_key, edk_size, 1, cb, priv, beginInclusive, endInclusive); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_lt(rbt_t *rbt, void *end_key, size_t edk_size, rbt_walk_callback cb, void *priv, int end_inclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, NULL, 0, end_key, edk_size, 0, cb, priv, 1, end_inclusive); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_gt(rbt_t *rbt, void *begin_key, size_t bgk_size, rbt_walk_callback cb, void *priv, int begin_inclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, begin_key, bgk_size, NULL, 0, 0, cb, priv, begin_inclusive, 1); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_lt_sorted(rbt_t *rbt, void *end_key, size_t edk_size, rbt_walk_callback cb, void *priv, int end_inclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, NULL, 0, end_key, edk_size, 1, cb, priv, 1, end_inclusive); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } int rbt_range_gt_sorted(rbt_t *rbt, void *begin_key, size_t bgk_size, rbt_walk_callback cb, void *priv, int begin_inclusive) { + FUNC_ENTER(NULL); + int rst = 0; if (rbt->root) rst = rbt_range_walk_internal(rbt, rbt->root, begin_key, bgk_size, NULL, 0, 1, cb, priv, begin_inclusive, 1); // rbt->num_of_comparisons += rst; - return rst; + FUNC_LEAVE(rst); } static inline rbt_node_t * rbt_grandparent(rbt_node_t *node) { + FUNC_ENTER(NULL); + if (node && node->parent) - return node->parent->parent; - return NULL; + FUNC_LEAVE(node->parent->parent); + + FUNC_LEAVE(NULL); } static inline rbt_node_t * rbt_uncle(rbt_node_t *node) { + FUNC_ENTER(NULL); + rbt_node_t *gp = rbt_grandparent(node); if (!gp) - return NULL; + FUNC_LEAVE(NULL); if (node->parent == gp->left) - return gp->right; + FUNC_LEAVE(gp->right); else - return gp->left; + FUNC_LEAVE(gp->left); + + FUNC_LEAVE(NULL); } static inline int rbt_compare_keys(rbt_t *rbt, void *k1, size_t k1size, void *k2, size_t k2size) { + FUNC_ENTER(NULL); + // stopwatch_t t_locate; // timer_start(&t_locate); int rc; @@ -447,12 +489,14 @@ rbt_compare_keys(rbt_t *rbt, void *k1, size_t k1size, void *k2, size_t k2size) // timer_pause(&t_locate); // rbt->time_to_locate += timer_delta_ns(&t_locate); // rbt->num_of_comparisons++; - return rc; + FUNC_LEAVE(rc); } static int rbt_add_internal(rbt_t *rbt, rbt_node_t *cur_node, rbt_node_t *new_node) { + FUNC_ENTER(NULL); + int rc = rbt_compare_keys(rbt, cur_node->key, cur_node->klen, new_node->key, new_node->klen); if (rc == 0) { @@ -477,13 +521,13 @@ rbt_add_internal(rbt_t *rbt, rbt_node_t *cur_node, rbt_node_t *new_node) if (new_node->value != cur_node->value && rbt->free_value_cb) rbt->free_value_cb(cur_node->value); - free(cur_node->key); - free(cur_node); - return 1; + cur_node->key = (void *)PDC_free(cur_node->key); + cur_node = (rbt_node_t *)PDC_free(cur_node); + FUNC_LEAVE(1); } else if (rc > 0) { if (cur_node->left) { - return rbt_add_internal(rbt, cur_node->left, new_node); + FUNC_LEAVE(rbt_add_internal(rbt, cur_node->left, new_node)); } else { cur_node->left = new_node; @@ -492,19 +536,22 @@ rbt_add_internal(rbt_t *rbt, rbt_node_t *cur_node, rbt_node_t *new_node) } else { if (cur_node->right) { - return rbt_add_internal(rbt, cur_node->right, new_node); + FUNC_LEAVE(rbt_add_internal(rbt, cur_node->right, new_node)); } else { cur_node->right = new_node; new_node->parent = cur_node; } } - return 0; + + FUNC_LEAVE(0); } static inline void rbt_rotate_right(rbt_t *rbt, rbt_node_t *node) { + FUNC_ENTER(NULL); + rbt_node_t *p = node->left; node->left = p ? p->right : NULL; if (p) @@ -530,11 +577,15 @@ rbt_rotate_right(rbt_t *rbt, rbt_node_t *node) else { rbt->root = node; } + + FUNC_LEAVE_VOID(); } static inline void rbt_rotate_left(rbt_t *rbt, rbt_node_t *node) { + FUNC_ENTER(NULL); + rbt_node_t *p = node->right; node->right = p ? p->left : NULL; if (p) @@ -560,11 +611,15 @@ rbt_rotate_left(rbt_t *rbt, rbt_node_t *node) else { rbt->root = node; } + + FUNC_LEAVE_VOID(); } int rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) { + FUNC_ENTER(NULL); + int rc = 0; // stopwatch_t t_expand; // timer_start(&t_expand); @@ -572,14 +627,14 @@ rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) rbt_node_t *node = PDC_calloc(1, sizeof(rbt_node_t)); mem_usage_by_all_rbtrees += sizeof(rbt_node_t); if (!node) - return -1; + FUNC_LEAVE(-1); // rbt->num_of_reallocs++; node->key = PDC_malloc(klen); mem_usage_by_all_rbtrees += klen; if (!node->key) { - free(node); - return -1; + node = (rbt_node_t *)PDC_free(node); + FUNC_LEAVE(-1); } memcpy(node->key, k, klen); node->klen = klen; @@ -603,7 +658,7 @@ rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) // should be updated as well rbt->root = node; } - return 1; + FUNC_LEAVE(1); } // rbt->num_of_comparisons++; if (!node->parent) { @@ -613,7 +668,7 @@ rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) } else if (IS_BLACK(node->parent)) { // case 2 - return rc; + FUNC_LEAVE(rc); } else { // case 3 @@ -652,7 +707,7 @@ rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) } else { LOG_ERROR("Corrupted tree\n"); - return -1; + FUNC_LEAVE(-1); } } } @@ -660,84 +715,97 @@ rbt_add(rbt_t *rbt, void *k, size_t klen, void *v) if (rc == 0) { rbt->size = rbt->size + 1; } - return rc; + + FUNC_LEAVE(rc); } static rbt_node_t ** rbt_find_internal(rbt_t *rbt, rbt_node_t **node, void *key, size_t klen) { + FUNC_ENTER(NULL); + if (node == NULL || !(*node)) - return NULL; + FUNC_LEAVE(NULL); if ((*node)->key == NULL) { - return NULL; + FUNC_LEAVE(NULL); } int rc = rbt_compare_keys(rbt, (*node)->key, (*node)->klen, key, klen); if (rc == 0) { - return node; + FUNC_LEAVE(node); } else if (rc > 0) { - return rbt_find_internal(rbt, &((*node)->left), key, klen); + FUNC_LEAVE(rbt_find_internal(rbt, &((*node)->left), key, klen)); } else { - return rbt_find_internal(rbt, &((*node)->right), key, klen); + FUNC_LEAVE(rbt_find_internal(rbt, &((*node)->right), key, klen)); } - return NULL; + FUNC_LEAVE(NULL); } int rbt_find(rbt_t *rbt, void *k, size_t klen, void **v) { + FUNC_ENTER(NULL); + rbt_node_t **node = rbt_find_internal(rbt, &(rbt->root), k, klen); if (node == NULL || !(*node)) - return -1; + FUNC_LEAVE(-1); *v = (*node)->value; - return 0; + + FUNC_LEAVE(0); } static inline rbt_node_t * rbt_sibling(rbt_node_t *node) { - return (node == node->parent->left) ? node->parent->right : node->parent->left; + FUNC_ENTER(NULL); + FUNC_LEAVE((node == node->parent->left) ? node->parent->right : node->parent->left); } static inline rbt_node_t ** rbt_find_next(rbt_node_t *node) { + FUNC_ENTER(NULL); + if (!node->right) - return NULL; + FUNC_LEAVE(NULL); rbt_node_t **next = &(node->right); while ((*next)->left) next = &((*next)->left); - return next; + FUNC_LEAVE(next); } static inline rbt_node_t ** rbt_find_prev(rbt_node_t *node) { + FUNC_ENTER(NULL); + if (!node->left) - return NULL; + FUNC_LEAVE(NULL); rbt_node_t **prev = &(node->left); while ((*prev)->right) prev = &((*prev)->right); - return prev; + FUNC_LEAVE(prev); } static void rbt_paint_onremove(rbt_t *rbt, rbt_node_t *node) { + FUNC_ENTER(NULL); + if (!node) - return; + FUNC_LEAVE_VOID(); // delete case 1 if (node->parent != NULL) { @@ -800,12 +868,16 @@ rbt_paint_onremove(rbt_t *rbt, rbt_node_t *node) } } } + + FUNC_LEAVE_VOID(); } void rbt_free_node(rbt_t *rbt, rbt_node_t **node_ptr, void **node_v, void **rtn_v) { - free((*node_ptr)->key); + FUNC_ENTER(NULL); + + (*node_ptr)->key = (void *)PDC_free((*node_ptr)->key); (*node_ptr)->key = NULL; if (rtn_v) *rtn_v = *node_v; @@ -813,16 +885,20 @@ rbt_free_node(rbt_t *rbt, rbt_node_t **node_ptr, void **node_v, void **rtn_v) rbt->free_value_cb(*node_v); *node_v = NULL; } - free(*node_ptr); + *node_ptr = (rbt_node_t *)PDC_free(*node_ptr); *node_ptr = NULL; + + FUNC_LEAVE_VOID(); } int rbt_remove(rbt_t *rbt, void *k, size_t klen, void **v) { + FUNC_ENTER(NULL); + rbt_node_t **node = rbt_find_internal(rbt, &(rbt->root), k, klen); if (node == NULL || !(*node)) - return -1; + FUNC_LEAVE(-1); if ((*node)->left || (*node)->right) { // the node is not a leaf @@ -839,7 +915,7 @@ rbt_remove(rbt_t *rbt, void *k, size_t klen, void **v) void *new_key = PDC_realloc((*node)->key, (*n)->klen); mem_usage_by_all_rbtrees += (*n)->klen; if (!new_key) - return -1; + FUNC_LEAVE(-1); (*node)->key = new_key; memcpy((*node)->key, (*n)->key, (*n)->klen); void *prev_value = (*node)->value; @@ -870,20 +946,9 @@ rbt_remove(rbt_t *rbt, void *k, size_t klen, void **v) if (n && *n) { rbt_free_node(rbt, n, &prev_value, v); } - - // free((*n)->key); - // (*n)->key = NULL; - // if (v) - // *v = prev_value; - // else if (rbt->free_value_cb) { - // rbt->free_value_cb(prev_value); - // (&prev_value)[0] = NULL; - // } - - // free((*n)); - // *n = NULL; rbt->size = rbt->size - 1; - return 0; + + FUNC_LEAVE(0); } else { // one child case @@ -908,20 +973,9 @@ rbt_remove(rbt_t *rbt, void *k, size_t klen, void **v) if (node && *node) { rbt_free_node(rbt, node, &((*node)->value), v); } - - // if (v) - // *v = (*node)->value; - // else if (rbt->free_value_cb) { - // rbt->free_value_cb((*node)->value); - // (*node)->value = NULL; - // } - - // free((*node)->key); - // (*node)->key = NULL; - // free((*node)); - // *node = NULL; rbt->size = rbt->size - 1; - return 0; + + FUNC_LEAVE(0); } } @@ -936,39 +990,33 @@ rbt_remove(rbt_t *rbt, void *k, size_t klen, void **v) if (node && *node) { rbt_free_node(rbt, node, &((*node)->value), v); } - // if (v) - // *v = (*node)->value; - // else if (rbt->free_value_cb && (*node)->value) { - // rbt->free_value_cb((*node)->value); - // (*node)->value = NULL; - // } - - // free(node->key); - // node->key = NULL; - // // free(node); - // // (&node)[0] = NULL; rbt->size = rbt->size - 1; - return 0; + + FUNC_LEAVE(0); } uint64_t rbt_size(rbt_t *rbt) { + FUNC_ENTER(NULL); + if (rbt == NULL) { - return 0; + FUNC_LEAVE(0); } - return rbt->size; + FUNC_LEAVE(rbt->size); } #ifdef DEBUG_RBTREE static int rbt_print_internal(rbt_node_t *node, int is_left, int offset, int depth, char s[20][255]) { + FUNC_ENTER(NULL); + char b[20]; memset(b, 0, sizeof(b)); if (!node) - return 0; + FUNC_LEAVE(0); sprintf(b, "(%d %C)", *((int *)node->value), node->color ? 'B' : 'R'); int width = strlen(b); @@ -1018,12 +1066,14 @@ rbt_print_internal(rbt_node_t *node, int is_left, int offset, int depth, char s[ } #endif - return left + width + right; + FUNC_LEAVE(left + width + right); } void rbt_print(rbt_t *rbt) { + FUNC_ENTER(NULL); + int i; char s[20][255]; memset(s, 0, sizeof(s)); diff --git a/src/commons/collections/pdc_compare.c b/src/commons/collections/pdc_compare.c index f2176741e..af00b2c93 100644 --- a/src/commons/collections/pdc_compare.c +++ b/src/commons/collections/pdc_compare.c @@ -1,4 +1,5 @@ #include "pdc_compare.h" +#include "pdc_timing.h" #include #include @@ -10,18 +11,22 @@ int int_equal(void *vlocation1, void *vlocation2) { + FUNC_ENTER(NULL); + int *location1; int *location2; location1 = (int *)vlocation1; location2 = (int *)vlocation2; - return *location1 == *location2; + FUNC_LEAVE(*location1 == *location2); } int int_compare(void *vlocation1, void *vlocation2) { + FUNC_ENTER(NULL); + int *location1; int *location2; @@ -29,31 +34,34 @@ int_compare(void *vlocation1, void *vlocation2) location2 = (int *)vlocation2; if (*location1 < *location2) { - return -1; + FUNC_LEAVE(-1); } else if (*location1 > *location2) { - return 1; - } - else { - return 0; + FUNC_LEAVE(1); } + + FUNC_LEAVE(0); } int ui64_equal(void *vlocation1, void *vlocation2) { + FUNC_ENTER(NULL); + uint64_t *location1; uint64_t *location2; location1 = (uint64_t *)vlocation1; location2 = (uint64_t *)vlocation2; - return *location1 == *location2; + FUNC_LEAVE(*location1 == *location2); } int ui64_compare(void *vlocation1, void *vlocation2) { + FUNC_ENTER(NULL); + uint64_t *location1; uint64_t *location2; @@ -61,14 +69,13 @@ ui64_compare(void *vlocation1, void *vlocation2) location2 = (uint64_t *)vlocation2; if (*location1 < *location2) { - return -1; + FUNC_LEAVE(-1); } else if (*location1 > *location2) { - return 1; - } - else { - return 0; + FUNC_LEAVE(1); } + + FUNC_LEAVE(0); } /* Comparison functions for a generic void pointer */ @@ -76,21 +83,23 @@ ui64_compare(void *vlocation1, void *vlocation2) int pointer_equal(void *location1, void *location2) { - return location1 == location2; + FUNC_ENTER(NULL); + FUNC_LEAVE(location1 == location2); } int pointer_compare(void *location1, void *location2) { + FUNC_ENTER(NULL); + if (location1 < location2) { - return -1; + FUNC_LEAVE(-1); } else if (location1 > location2) { - return 1; - } - else { - return 0; + FUNC_LEAVE(1); } + + FUNC_LEAVE(0); } /* Comparison functions for strings */ @@ -98,25 +107,27 @@ pointer_compare(void *location1, void *location2) int string_equal(void *string1, void *string2) { - return strcmp((char *)string1, (char *)string2) == 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(strcmp((char *)string1, (char *)string2) == 0); } int string_compare(void *string1, void *string2) { + FUNC_ENTER(NULL); + int result; result = strcmp((char *)string1, (char *)string2); if (result < 0) { - return -1; + FUNC_LEAVE(-1); } else if (result > 0) { - return 1; - } - else { - return 0; + FUNC_LEAVE(1); } + + FUNC_LEAVE(0); } /* Comparison functions for strings, which ignore the case of letters. */ @@ -124,7 +135,8 @@ string_compare(void *string1, void *string2) int string_nocase_equal(void *string1, void *string2) { - return string_nocase_compare((char *)string1, (char *)string2) == 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(string_nocase_compare((char *)string1, (char *)string2) == 0); } /* On many systems, strcasecmp or stricmp will give the same functionality @@ -134,6 +146,8 @@ string_nocase_equal(void *string1, void *string2) int string_nocase_compare(void *string1, void *string2) { + FUNC_ENTER(NULL); + char *p1; char *p2; int c1, c2; @@ -153,10 +167,10 @@ string_nocase_compare(void *string1, void *string2) /* Strings are different */ if (c1 < c2) { - return -1; + FUNC_LEAVE(-1); } else { - return 1; + FUNC_LEAVE(1); } } @@ -173,5 +187,5 @@ string_nocase_compare(void *string1, void *string2) /* Reached the end of string and no difference found */ - return 0; + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/collections/pdc_deque.c b/src/commons/collections/pdc_deque.c index 174cfe5e2..7fe0afc79 100644 --- a/src/commons/collections/pdc_deque.c +++ b/src/commons/collections/pdc_deque.c @@ -1,5 +1,7 @@ #include "pdc_deque.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #include #define DEFAULT_CAPACITY 16 @@ -7,19 +9,25 @@ void PDC_deque_init(PDC_deque_t *deque) { - deque->data = malloc(sizeof(void *) * DEFAULT_CAPACITY); + FUNC_ENTER(NULL); + + deque->data = PDC_malloc(sizeof(void *) * DEFAULT_CAPACITY); deque->size = 0; deque->capacity = DEFAULT_CAPACITY; deque->head = 0; deque->tail = 0; + + FUNC_LEAVE_VOID(); } static void resize_deque(PDC_deque_t *deque, size_t new_capacity) { - void **new_data = malloc(sizeof(void *) * new_capacity); + FUNC_ENTER(NULL); + + void **new_data = PDC_malloc(sizeof(void *) * new_capacity); if (new_data == NULL) { - LOG_ERROR("Failed to allocate memory for deque!\n"); + LOG_ERROR("Failed to allocate memory for deque\n"); exit(1); } @@ -29,40 +37,52 @@ resize_deque(PDC_deque_t *deque, size_t new_capacity) deque->head = (deque->head + 1) % deque->capacity; } - free(deque->data); + deque->data = (void **)PDC_free(deque->data); deque->data = new_data; deque->capacity = new_capacity; deque->head = 0; deque->tail = i; + + FUNC_LEAVE_VOID(); } void PDC_deque_push_front(PDC_deque_t *deque, void *value) { + FUNC_ENTER(NULL); + if (deque->size == deque->capacity) { resize_deque(deque, deque->capacity * 2); } deque->head = (deque->head - 1 + deque->capacity) % deque->capacity; deque->data[deque->head] = value; deque->size++; + + FUNC_LEAVE_VOID(); } void PDC_deque_push_back(PDC_deque_t *deque, void *value) { + FUNC_ENTER(NULL); + if (deque->size == deque->capacity) { resize_deque(deque, deque->capacity * 2); } deque->data[deque->tail] = value; deque->tail = (deque->tail + 1) % deque->capacity; deque->size++; + + FUNC_LEAVE_VOID(); } void * PDC_deque_pop_front(PDC_deque_t *deque) { + FUNC_ENTER(NULL); + if (deque->size == 0) { - return NULL; + FUNC_LEAVE(NULL); } void *value = deque->data[deque->head]; deque->head = (deque->head + 1) % deque->capacity; @@ -70,14 +90,17 @@ PDC_deque_pop_front(PDC_deque_t *deque) if (deque->size <= deque->capacity / 4) { resize_deque(deque, deque->capacity / 2); } - return value; + + FUNC_LEAVE(value); } void * PDC_deque_pop_back(PDC_deque_t *deque) { + FUNC_ENTER(NULL); + if (deque->size == 0) { - return NULL; + FUNC_LEAVE(NULL); } deque->tail = (deque->tail - 1 + deque->capacity) % deque->capacity; void *value = deque->data[deque->tail]; @@ -85,11 +108,16 @@ PDC_deque_pop_back(PDC_deque_t *deque) if (deque->size <= deque->capacity / 4) { resize_deque(deque, deque->capacity / 2); } - return value; + + FUNC_LEAVE(value); } void PDC_deque_free(PDC_deque_t *deque) { - free(deque->data); + FUNC_ENTER(NULL); + + deque->data = (void **)PDC_free(deque->data); + + FUNC_LEAVE_VOID(); } \ No newline at end of file diff --git a/src/commons/collections/pdc_hash.c b/src/commons/collections/pdc_hash.c index 92d394daa..b7ee30120 100644 --- a/src/commons/collections/pdc_hash.c +++ b/src/commons/collections/pdc_hash.c @@ -1,18 +1,21 @@ -#include "pdc_hash.h" #include #include #include +#include "pdc_hash.h" +#include "pdc_timing.h" /* Hash function for a pointer to an integer */ unsigned int int_hash(void *vlocation) { + FUNC_ENTER(NULL); + int *location; location = (int *)vlocation; - return (unsigned int)*location; + FUNC_LEAVE((unsigned int)*location); } /* Hash function for a pointer to a uint64_t integer */ @@ -20,11 +23,13 @@ int_hash(void *vlocation) unsigned int ui64_hash(void *vlocation) { + FUNC_ENTER(NULL); + uint64_t *location; location = (uint64_t *)vlocation; - return (unsigned int)*location; + FUNC_LEAVE((unsigned int)*location); } /* Hash function for a generic pointer */ @@ -32,7 +37,8 @@ ui64_hash(void *vlocation) unsigned int pointer_hash(void *location) { - return (unsigned int)(unsigned long)location; + FUNC_ENTER(NULL); + FUNC_LEAVE((unsigned int)(unsigned long)location); } /* String hash function */ @@ -40,6 +46,8 @@ pointer_hash(void *location) unsigned int string_hash(void *string) { + FUNC_ENTER(NULL); + /* This is the djb2 string hash function */ unsigned int result = 5381; @@ -52,7 +60,7 @@ string_hash(void *string) ++p; } - return result; + FUNC_LEAVE(result); } /* The same function, with a tolower on every character so that @@ -61,6 +69,8 @@ string_hash(void *string) unsigned int string_nocase_hash(void *string) { + FUNC_ENTER(NULL); + unsigned int result = 5381; unsigned char *p; @@ -71,5 +81,5 @@ string_nocase_hash(void *string) ++p; } - return result; + FUNC_LEAVE(result); } \ No newline at end of file diff --git a/src/commons/collections/pdc_hash_table.c b/src/commons/collections/pdc_hash_table.c index c75bac5d9..efdcc5e62 100644 --- a/src/commons/collections/pdc_hash_table.c +++ b/src/commons/collections/pdc_hash_table.c @@ -26,6 +26,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "pdc_hash_table.h" #include "pdc_malloc.h" +#include "pdc_timing.h" #ifdef ALLOC_TESTING #include "alloc-testing.h" @@ -65,6 +66,8 @@ static const unsigned int hash_table_num_primes = sizeof(hash_table_primes) / si unsigned int pdc_default_string_hash_func(HashTableKey value) { + FUNC_ENTER(NULL); + char * str = (char *)value; unsigned int hash = 5381; int c; @@ -73,75 +76,86 @@ pdc_default_string_hash_func(HashTableKey value) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ } - return hash; + FUNC_LEAVE(hash); } int pdc_default_string_equal_func(HashTableKey value1, HashTableKey value2) { - return strcmp((char *)value1, (char *)value2) == 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(strcmp((char *)value1, (char *)value2) == 0); } unsigned int pdc_default_integer_hash_func(HashTableKey value) { - return (unsigned int)*(int *)value; + FUNC_ENTER(NULL); + FUNC_LEAVE((unsigned int)*(int *)value); } int pdc_default_integer_equal_func(HashTableKey value1, HashTableKey value2) { - return *(int *)value1 == *(int *)value2; + FUNC_ENTER(NULL); + FUNC_LEAVE(*(int *)value1 == *(int *)value2); } unsigned int pdc_default_long_hash_func(HashTableKey value) { - return (unsigned int)*(long *)value; + FUNC_ENTER(NULL); + FUNC_LEAVE((unsigned int)*(long *)value); } int pdc_default_long_equal_func(HashTableKey value1, HashTableKey value2) { - return *(long *)value1 == *(long *)value2; + FUNC_ENTER(NULL); + FUNC_LEAVE(*(long *)value1 == *(long *)value2); } unsigned int pdc_default_uint64_hash_func(HashTableKey value) { - return (unsigned int)*(uint64_t *)value; + FUNC_ENTER(NULL); + FUNC_LEAVE((unsigned int)*(uint64_t *)value); } int pdc_default_uint64_equal_func(HashTableKey value1, HashTableKey value2) { - return *(uint64_t *)value1 == *(uint64_t *)value2; + FUNC_ENTER(NULL); + FUNC_LEAVE(*(uint64_t *)value1 == *(uint64_t *)value2); } // For floating-point numbers (double) unsigned int pdc_default_double_hash_func(HashTableKey value) { + FUNC_ENTER(NULL); + double d = *(const double *)value; double abs_d = fabs(d); if (d == 0) { - return 0; - } - else { - int exp; - double frexp_d = frexp(abs_d, &exp); - return (unsigned int)((frexp_d * (1 << 31)) + exp); + FUNC_LEAVE(9); } + + int exp; + double frexp_d = frexp(abs_d, &exp); + + FUNC_LEAVE((unsigned int)((frexp_d * (1 << 31)) + exp)); } int pdc_default_double_equal_func(HashTableKey value1, HashTableKey value2) { + FUNC_ENTER(NULL); + double d1 = *(const double *)value1; double d2 = *(const double *)value2; - return fabs(d1 - d2) < 1e-9; // use a small epsilon for comparing floats + FUNC_LEAVE(fabs(d1 - d2) < 1e-9); // use a small epsilon for comparing floats } /************ Default function pointer **************/ @@ -167,6 +181,8 @@ HashTableEqualFunc pdc_default_double_equal_func_ptr = pdc_default_double_equal_ static int hash_table_allocate_table(HashTable *hash_table) { + FUNC_ENTER(NULL); + unsigned int new_table_size; /* Determine the table size based on the current prime index. @@ -184,15 +200,17 @@ hash_table_allocate_table(HashTable *hash_table) hash_table->table_size = new_table_size; /* Allocate the table and initialise to NULL for all entries */ - hash_table->table = calloc(hash_table->table_size, sizeof(HashTableEntry *)); + hash_table->table = PDC_calloc(hash_table->table_size, sizeof(HashTableEntry *)); - return hash_table->table != NULL; + FUNC_LEAVE(hash_table->table != NULL); } /* Free an entry, calling the free functions if there are any registered */ static void hash_table_free_entry(HashTable *hash_table, HashTableEntry *entry) { + FUNC_ENTER(NULL); + HashTablePair *pair; pair = &(entry->pair); @@ -209,19 +227,23 @@ hash_table_free_entry(HashTable *hash_table, HashTableEntry *entry) } /* Free the data structure */ - free(entry); + entry = (HashTableEntry *)PDC_free(entry); + + FUNC_LEAVE_VOID(); } HashTable * hash_table_new(HashTableHashFunc hash_func, HashTableEqualFunc equal_func) { + FUNC_ENTER(NULL); + HashTable *hash_table; /* Allocate a new hash table structure */ - hash_table = (HashTable *)malloc(sizeof(HashTable)); + hash_table = (HashTable *)PDC_malloc(sizeof(HashTable)); if (hash_table == NULL) { - return NULL; + FUNC_LEAVE(NULL); } hash_table->hash_func = hash_func; @@ -233,17 +255,18 @@ hash_table_new(HashTableHashFunc hash_func, HashTableEqualFunc equal_func) /* Allocate the table */ if (!hash_table_allocate_table(hash_table)) { - free(hash_table); - - return NULL; + hash_table = (HashTable *)PDC_free(hash_table); + FUNC_LEAVE(NULL); } - return hash_table; + FUNC_LEAVE(hash_table); } void hash_table_free(HashTable *hash_table) { + FUNC_ENTER(NULL); + HashTableEntry *rover; HashTableEntry *next; unsigned int i; @@ -259,23 +282,31 @@ hash_table_free(HashTable *hash_table) } /* Free the table */ - free(hash_table->table); + hash_table->table = (HashTableEntry **)PDC_free(hash_table->table); /* Free the hash table structure */ - free(hash_table); + hash_table = (HashTable *)PDC_free(hash_table); + + FUNC_LEAVE_VOID(); } void hash_table_register_free_functions(HashTable *hash_table, HashTableKeyFreeFunc key_free_func, HashTableValueFreeFunc value_free_func) { + FUNC_ENTER(NULL); + hash_table->key_free_func = key_free_func; hash_table->value_free_func = value_free_func; + + FUNC_LEAVE_VOID(); } static int hash_table_enlarge(HashTable *hash_table) { + FUNC_ENTER(NULL); + HashTableEntry **old_table; unsigned int old_table_size; unsigned int old_prime_index; @@ -301,7 +332,7 @@ hash_table_enlarge(HashTable *hash_table) hash_table->table_size = old_table_size; hash_table->prime_index = old_prime_index; - return 0; + FUNC_LEAVE(0); } /* Link all entries from all chains into the new table */ @@ -327,14 +358,16 @@ hash_table_enlarge(HashTable *hash_table) } /* Free the old table */ - free(old_table); + old_table = (HashTableEntry **)PDC_free(old_table); - return 1; + FUNC_LEAVE(1); } int hash_table_insert(HashTable *hash_table, HashTableKey key, HashTableValue value) { + FUNC_ENTER(NULL); + HashTableEntry *rover; HashTablePair * pair; HashTableEntry *newentry; @@ -348,7 +381,7 @@ hash_table_insert(HashTable *hash_table, HashTableKey key, HashTableValue value) /* Table is more than 1/3 full */ if (!hash_table_enlarge(hash_table)) { /* Failed to enlarge the table */ - return 0; + FUNC_LEAVE(0); } } @@ -383,7 +416,7 @@ hash_table_insert(HashTable *hash_table, HashTableKey key, HashTableValue value) pair->value = value; /* Finished */ - return 1; + FUNC_LEAVE(1); } rover = rover->next; @@ -393,7 +426,7 @@ hash_table_insert(HashTable *hash_table, HashTableKey key, HashTableValue value) newentry = (HashTableEntry *)PDC_malloc(sizeof(HashTableEntry)); if (newentry == NULL) { - return 0; + FUNC_LEAVE(0); } newentry->pair.key = key; newentry->pair.value = value; @@ -413,12 +446,14 @@ hash_table_insert(HashTable *hash_table, HashTableKey key, HashTableValue value) hg_thread_mutex_unlock(&hash_table_new_mutex_g); #endif - return 1; + FUNC_LEAVE(1); } HashTableValue hash_table_lookup(HashTable *hash_table, HashTableKey key) { + FUNC_ENTER(NULL); + HashTableEntry *rover; HashTablePair * pair; unsigned int index; @@ -436,19 +471,21 @@ hash_table_lookup(HashTable *hash_table, HashTableKey key) if (hash_table->equal_func(key, pair->key) != 0) { /* Found the entry. Return the data. */ - return pair->value; + FUNC_LEAVE(pair->value); } rover = rover->next; } /* Not found */ - return HASH_TABLE_NULL; + FUNC_LEAVE(HASH_TABLE_NULL); } int hash_table_remove(HashTable *hash_table, HashTableKey key) { + FUNC_ENTER(NULL); + HashTableEntry **rover; HashTableEntry * entry; HashTablePair * pair; @@ -494,18 +531,21 @@ hash_table_remove(HashTable *hash_table, HashTableKey key) rover = &((*rover)->next); } - return result; + FUNC_LEAVE(result); } unsigned int hash_table_num_entries(HashTable *hash_table) { - return hash_table->entries; + FUNC_ENTER(NULL); + FUNC_LEAVE(hash_table->entries); } void hash_table_iterate(HashTable *hash_table, HashTableIterator *iterator) { + FUNC_ENTER(NULL); + unsigned int chain; iterator->hash_table = hash_table; @@ -522,17 +562,22 @@ hash_table_iterate(HashTable *hash_table, HashTableIterator *iterator) break; } } + + FUNC_LEAVE_VOID(); } int hash_table_iter_has_more(HashTableIterator *iterator) { - return iterator->next_entry != NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(iterator->next_entry != NULL); } HashTablePair hash_table_iter_next(HashTableIterator *iterator) { + FUNC_ENTER(NULL); + HashTableEntry *current_entry; HashTable * hash_table; HashTablePair pair = {NULL, NULL}; @@ -576,5 +621,5 @@ hash_table_iter_next(HashTableIterator *iterator) iterator->next_chain = chain; } - return pair; + FUNC_LEAVE(pair); } diff --git a/src/commons/collections/pdc_set.c b/src/commons/collections/pdc_set.c index 8ec6524ae..47f7fb35d 100644 --- a/src/commons/collections/pdc_set.c +++ b/src/commons/collections/pdc_set.c @@ -22,6 +22,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "pdc_set.h" #include "pdc_malloc.h" +#include "pdc_timing.h" /* malloc() / free() testing */ @@ -62,6 +63,8 @@ static const unsigned int set_num_primes = sizeof(set_primes) / sizeof(int); static int set_allocate_table(Set *set) { + FUNC_ENTER(NULL); + /* Determine the table size based on the current prime index. * An attempt is made here to ensure sensible behavior if the * maximum prime is exceeded, but in practice other things are @@ -76,14 +79,16 @@ set_allocate_table(Set *set) /* Allocate the table and initialise to NULL */ - set->table = calloc(set->table_size, sizeof(SetEntry *)); + set->table = PDC_calloc(set->table_size, sizeof(SetEntry *)); - return set->table != NULL; + FUNC_LEAVE(set->table != NULL); } static void set_free_entry(Set *set, SetEntry *entry) { + FUNC_ENTER(NULL); + /* If there is a free function registered, call it to free the * data for this entry first */ @@ -93,12 +98,16 @@ set_free_entry(Set *set, SetEntry *entry) /* Free the entry structure */ - free(entry); + entry = (SetEntry *)PDC_free(entry); + + FUNC_LEAVE_VOID(); } Set * set_new(SetHashFunc hash_func, SetEqualFunc equal_func) { + FUNC_ENTER(NULL); + Set *new_set; /* Allocate a new set and fill in the fields */ @@ -106,7 +115,7 @@ set_new(SetHashFunc hash_func, SetEqualFunc equal_func) new_set = (Set *)PDC_malloc(sizeof(Set)); if (new_set == NULL) { - return NULL; + FUNC_LEAVE(NULL); } new_set->hash_func = hash_func; @@ -118,16 +127,18 @@ set_new(SetHashFunc hash_func, SetEqualFunc equal_func) /* Allocate the table */ if (!set_allocate_table(new_set)) { - free(new_set); - return NULL; + new_set = (Set *)PDC_free(new_set); + FUNC_LEAVE(NULL); } - return new_set; + FUNC_LEAVE(new_set); } void set_free(Set *set) { + FUNC_ENTER(NULL); + SetEntry * rover; SetEntry * next; unsigned int i; @@ -151,23 +162,29 @@ set_free(Set *set) } /* Free the table */ - - free(set->table); + set->table = (SetEntry **)PDC_free(set->table); /* Free the set structure */ + set = (Set *)PDC_free(set); - free(set); + FUNC_LEAVE_VOID(); } void set_register_free_function(Set *set, SetFreeFunc free_func) { + FUNC_ENTER(NULL); + set->free_func = free_func; + + FUNC_LEAVE_VOID(); } static int set_enlarge(Set *set) { + FUNC_ENTER(NULL); + SetEntry * rover; SetEntry * next; SetEntry ** old_table; @@ -193,7 +210,7 @@ set_enlarge(Set *set) set->table_size = old_table_size; set->prime_index = old_prime_index; - return 0; + FUNC_LEAVE(0); } /* Iterate through all entries in the old table and add them @@ -222,17 +239,17 @@ set_enlarge(Set *set) } /* Free back the old table */ - - free(old_table); + old_table = (SetEntry **)PDC_free(old_table); /* Resized successfully */ - - return 1; + FUNC_LEAVE(1); } int set_insert(Set *set, SetValue data) { + FUNC_ENTER(NULL); + SetEntry * newentry; SetEntry * rover; unsigned int index; @@ -246,7 +263,7 @@ set_insert(Set *set, SetValue data) * in size */ if (!set_enlarge(set)) { - return 0; + FUNC_LEAVE(0); } } @@ -266,7 +283,7 @@ set_insert(Set *set, SetValue data) /* This data is already in the set */ - return 0; + FUNC_LEAVE(0); } rover = rover->next; @@ -279,7 +296,7 @@ set_insert(Set *set, SetValue data) newentry = (SetEntry *)PDC_malloc(sizeof(SetEntry)); if (newentry == NULL) { - return 0; + FUNC_LEAVE(0); } newentry->data = data; @@ -295,12 +312,14 @@ set_insert(Set *set, SetValue data) /* Added successfully */ - return 1; + FUNC_LEAVE(1); } int set_remove(Set *set, SetValue data) { + FUNC_ENTER(NULL); + SetEntry ** rover; SetEntry * entry; unsigned int index; @@ -332,7 +351,7 @@ set_remove(Set *set, SetValue data) set_free_entry(set, entry); - return 1; + FUNC_LEAVE(1); } /* Advance to the next entry */ @@ -342,12 +361,14 @@ set_remove(Set *set, SetValue data) /* Not found in set */ - return 0; + FUNC_LEAVE(0); } int set_query(Set *set, SetValue data) { + FUNC_ENTER(NULL); + SetEntry * rover; unsigned int index; @@ -364,7 +385,7 @@ set_query(Set *set, SetValue data) /* Found the entry */ - return 1; + FUNC_LEAVE(1); } /* Advance to the next entry in the chain */ @@ -374,18 +395,21 @@ set_query(Set *set, SetValue data) /* Not found */ - return 0; + FUNC_LEAVE(0); } unsigned int set_num_entries(Set *set) { - return set->entries; + FUNC_ENTER(NULL); + FUNC_LEAVE(set->entries); } SetValue * set_to_array(Set *set) { + FUNC_ENTER(NULL); + SetValue * array; int array_counter; unsigned int i; @@ -396,7 +420,7 @@ set_to_array(Set *set) array = PDC_malloc(sizeof(SetValue) * set->entries); if (array == NULL) { - return NULL; + FUNC_LEAVE(NULL); } array_counter = 0; @@ -420,12 +444,14 @@ set_to_array(Set *set) } } - return array; + FUNC_LEAVE(array); } Set * set_union(Set *set1, Set *set2) { + FUNC_ENTER(NULL); + SetIterator iterator; Set * new_set; SetValue value; @@ -433,7 +459,7 @@ set_union(Set *set1, Set *set2) new_set = set_new(set1->hash_func, set1->equal_func); if (new_set == NULL) { - return NULL; + FUNC_LEAVE(NULL); } /* Add all values from the first set */ @@ -453,7 +479,7 @@ set_union(Set *set1, Set *set2) /* Failed to insert */ set_free(new_set); - return NULL; + FUNC_LEAVE(NULL); } } @@ -476,17 +502,19 @@ set_union(Set *set1, Set *set2) /* Failed to insert */ set_free(new_set); - return NULL; + FUNC_LEAVE(NULL); } } } - return new_set; + FUNC_LEAVE(new_set); } Set * set_intersection(Set *set1, Set *set2) { + FUNC_ENTER(NULL); + Set * new_set; SetIterator iterator; SetValue value; @@ -494,7 +522,7 @@ set_intersection(Set *set1, Set *set2) new_set = set_new(set1->hash_func, set2->equal_func); if (new_set == NULL) { - return NULL; + FUNC_LEAVE(NULL); } /* Iterate over all values in set 1. */ @@ -518,17 +546,19 @@ set_intersection(Set *set1, Set *set2) if (!set_insert(new_set, value)) { set_free(new_set); - return NULL; + FUNC_LEAVE(NULL); } } } - return new_set; + FUNC_LEAVE(new_set); } void set_iterate(Set *set, SetIterator *iter) { + FUNC_ENTER(NULL); + unsigned int chain; iter->set = set; @@ -547,11 +577,15 @@ set_iterate(Set *set, SetIterator *iter) } iter->next_chain = chain; + + FUNC_LEAVE_VOID(); } SetValue set_iter_next(SetIterator *iterator) { + FUNC_ENTER(NULL); + Set * set; SetValue result; SetEntry * current_entry; @@ -562,7 +596,7 @@ set_iter_next(SetIterator *iterator) /* No more entries? */ if (iterator->next_entry == NULL) { - return SET_NULL; + FUNC_LEAVE(SET_NULL); } /* We have the result immediately */ @@ -609,11 +643,12 @@ set_iter_next(SetIterator *iterator) iterator->next_chain = chain; } - return result; + FUNC_LEAVE(result); } int set_iter_has_more(SetIterator *iterator) { - return iterator->next_entry != NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(iterator->next_entry != NULL); } diff --git a/src/commons/collections/pdc_set_test.c b/src/commons/collections/pdc_set_test.c index 694d8370d..4dfc659f0 100644 --- a/src/commons/collections/pdc_set_test.c +++ b/src/commons/collections/pdc_set_test.c @@ -2,6 +2,8 @@ #include "pdc_compare.h" #include "pdc_hash.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #include #include #include @@ -11,25 +13,31 @@ void set_value_free(SetValue value) { - free((void *)value); + FUNC_ENTER(NULL); + + value = (SetValue)PDC_free((void *)value); + + FUNC_LEAVE_VOID(); } int main(int argc, char **argv) { + FUNC_ENTER(NULL); + // read the max id from the command line char * endptr; uint64_t max_id = strtoull(argv[1], &endptr, 10); if (*endptr != '\0') { LOG_ERROR("Invalid number: %s\n", argv[1]); - return 1; + FUNC_LEAVE(1); } Set *set = set_new(ui64_hash, ui64_equal); set_register_free_function(set, set_value_free); for (uint64_t i = 0; i < max_id; i++) { - uint64_t *value = malloc(sizeof(uint64_t)); + uint64_t *value = PDC_malloc(sizeof(uint64_t)); *value = i; set_insert(set, value); } @@ -38,16 +46,16 @@ main(int argc, char **argv) if (set_num_entries(set) != (unsigned int)max_id) { LOG_ERROR("Error: set size is not correct\n"); - return 1; + FUNC_LEAVE(1); } // retrieve all values from the set for (uint64_t i = 0; i < max_id; i++) { - uint64_t *value = malloc(sizeof(uint64_t)); + uint64_t *value = PDC_malloc(sizeof(uint64_t)); *value = i; if (!set_query(set, value)) { LOG_ERROR("Error: value %" PRIu64 " not found in the set\n", i); - return 1; + FUNC_LEAVE(1); } } @@ -58,10 +66,10 @@ main(int argc, char **argv) uint64_t *value = set_iter_next(it); if (!set_query(set, value)) { LOG_ERROR("Error: value %" PRIu64 " not found in the set\n", *value); - return 1; + FUNC_LEAVE(1); } } set_free(set); - return 0; + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/collections/pdc_stack.c b/src/commons/collections/pdc_stack.c index 85f8724c5..22df1d45e 100644 --- a/src/commons/collections/pdc_stack.c +++ b/src/commons/collections/pdc_stack.c @@ -3,45 +3,61 @@ #include #include "pdc_logger.h" #include "pdc_stack.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #define DEFAULT_CAPACITY 16 void stack_init(PDC_stack_t *stack) { - stack->data = malloc(sizeof(void *) * DEFAULT_CAPACITY); + FUNC_ENTER(NULL); + + stack->data = PDC_malloc(sizeof(void *) * DEFAULT_CAPACITY); stack->size = 0; stack->capacity = DEFAULT_CAPACITY; + + FUNC_LEAVE_VOID(); } void stack_push(PDC_stack_t *stack, void *value) { + FUNC_ENTER(NULL); + if (stack->size == stack->capacity) { size_t new_capacity = stack->capacity * 2; - void **new_data = realloc(stack->data, sizeof(void *) * new_capacity); + void **new_data = PDC_realloc(stack->data, sizeof(void *) * new_capacity); if (new_data == NULL) { - LOG_ERROR("Failed to reallocate memory for stack!\n"); + LOG_ERROR("Failed to reallocate memory for stack\n"); exit(1); } stack->data = new_data; stack->capacity = new_capacity; } stack->data[stack->size++] = value; + + FUNC_LEAVE_VOID(); } void * stack_pop(PDC_stack_t *stack) { + FUNC_ENTER(NULL); + if (stack->size == 0) { - LOG_ERROR("Stack underflow!\n"); + LOG_ERROR("Stack underflow\n"); exit(1); } - return stack->data[--stack->size]; + FUNC_LEAVE(stack->data[--stack->size]); } void stack_free(PDC_stack_t *stack) { - free(stack->data); + FUNC_ENTER(NULL); + + stack->data = (void **)PDC_free(stack->data); + + FUNC_LEAVE_VOID(); } \ No newline at end of file diff --git a/src/commons/collections/pdc_vector.c b/src/commons/collections/pdc_vector.c index ac28c646d..3a5285c15 100644 --- a/src/commons/collections/pdc_vector.c +++ b/src/commons/collections/pdc_vector.c @@ -1,25 +1,30 @@ #include "pdc_vector.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" PDC_VECTOR * pdc_vector_new() { - return pdc_vector_create(100, 2.0); + FUNC_ENTER(NULL); + FUNC_LEAVE(pdc_vector_create(100, 2.0)); } PDC_VECTOR * pdc_vector_create(size_t initial_capacity, double expansion_factor) { + FUNC_ENTER(NULL); + // Allocate memory for the vector struct. - PDC_VECTOR *vector = (PDC_VECTOR *)malloc(sizeof(PDC_VECTOR)); + PDC_VECTOR *vector = (PDC_VECTOR *)PDC_malloc(sizeof(PDC_VECTOR)); if (vector == NULL) { - return NULL; + FUNC_LEAVE(NULL); } // Allocate memory for the array of items. - vector->items = (void **)malloc(initial_capacity * sizeof(void *)); + vector->items = (void **)PDC_malloc(initial_capacity * sizeof(void *)); if (vector->items == NULL) { - free(vector); - return NULL; + vector = (PDC_VECTOR *)PDC_free(vector); + FUNC_LEAVE(NULL); } // Initialize the vector fields. @@ -27,139 +32,164 @@ pdc_vector_create(size_t initial_capacity, double expansion_factor) vector->capacity = initial_capacity; vector->expansion_factor = expansion_factor; - return vector; + FUNC_LEAVE(vector); } void pdc_vector_destroy(PDC_VECTOR *vector) { + FUNC_ENTER(NULL); + if (vector == NULL) { - return; + FUNC_LEAVE_VOID(); } // Free all allocated memory for each item. for (size_t i = 0; i < vector->item_count; i++) { - free(vector->items[i]); + vector->items[i] = (void *)PDC_free(vector->items[i]); } // Free the array of items and the vector struct. - free(vector->items); - free(vector); + vector->items = (void **)PDC_free(vector->items); + vector = (PDC_VECTOR *)PDC_free(vector); + + FUNC_LEAVE_VOID(); } void pdc_vector_add(PDC_VECTOR *vector, void *item) { + FUNC_ENTER(NULL); + if (vector == NULL || item == NULL) { - return; + FUNC_LEAVE_VOID(); } // Expand the array of items if necessary. if (vector->item_count >= vector->capacity) { vector->capacity *= vector->expansion_factor; - vector->items = (void **)realloc(vector->items, vector->capacity * sizeof(void *)); + vector->items = (void **)PDC_realloc(vector->items, vector->capacity * sizeof(void *)); if (vector->items == NULL) { - return; + FUNC_LEAVE_VOID(); } } // Add the new item to the end of the array. vector->items[vector->item_count++] = item; + + FUNC_LEAVE_VOID(); } void * pdc_vector_get(PDC_VECTOR *vector, size_t index) { + FUNC_ENTER(NULL); + if (vector == NULL || index >= vector->item_count) { - return NULL; + FUNC_LEAVE(NULL); } // Return a pointer to the item at the given index. - return vector->items[index]; + FUNC_LEAVE(vector->items[index]); } size_t pdc_vector_size(PDC_VECTOR *vector) { + FUNC_ENTER(NULL); + if (vector == NULL) { - return 0; + FUNC_LEAVE(0); } // Return the number of items in the vector. - return vector->item_count; + FUNC_LEAVE(vector->item_count); } void pdc_vector_set_expansion_factor(PDC_VECTOR *vector, double expansion_factor) { + FUNC_ENTER(NULL); + if (vector == NULL) { - return; + FUNC_LEAVE_VOID(); } // Set the new expansion factor for the vector. vector->expansion_factor = expansion_factor; + + FUNC_LEAVE_VOID(); } double pdc_vector_get_expansion_factor(PDC_VECTOR *vector) { + FUNC_ENTER(NULL); + if (vector == NULL) { - return 0; + FUNC_LEAVE(0); } // Return the current expansion factor for the vector. - return vector->expansion_factor; + FUNC_LEAVE(vector->expansion_factor); } PDC_VECTOR_ITERATOR * pdc_vector_iterator_new(PDC_VECTOR *vector) { + FUNC_ENTER(NULL); + if (vector == NULL) { - return NULL; + FUNC_LEAVE(NULL); } // Allocate memory for the iterator struct. - PDC_VECTOR_ITERATOR *iterator = (PDC_VECTOR_ITERATOR *)malloc(sizeof(PDC_VECTOR_ITERATOR)); + PDC_VECTOR_ITERATOR *iterator = (PDC_VECTOR_ITERATOR *)PDC_malloc(sizeof(PDC_VECTOR_ITERATOR)); if (iterator == NULL) { - return NULL; + FUNC_LEAVE(NULL); } // Initialize the iterator fields. iterator->vector = vector; iterator->index = 0; - return iterator; + FUNC_LEAVE(iterator); } void pdc_vector_iterator_destroy(PDC_VECTOR_ITERATOR *iterator) { - if (iterator == NULL) { - return; - } + if (iterator == NULL) + FUNC_LEAVE_VOID(); // Free the iterator struct. - free(iterator); + iterator = (PDC_VECTOR_ITERATOR *)PDC_free(iterator); + + FUNC_LEAVE_VOID(); } void * pdc_vector_iterator_next(PDC_VECTOR_ITERATOR *iterator) { + FUNC_ENTER(NULL); + if (iterator == NULL) { - return NULL; + FUNC_LEAVE(NULL); } // Return the next item in the vector. - return pdc_vector_get(iterator->vector, iterator->index++); + FUNC_LEAVE(pdc_vector_get(iterator->vector, iterator->index++)); } int pdc_vector_iterator_has_next(PDC_VECTOR_ITERATOR *iterator) { + FUNC_ENTER(NULL); + if (iterator == NULL) { - return 0; + FUNC_LEAVE(0); } // Return true if there are more items in the vector. - return iterator->index < pdc_vector_size(iterator->vector); + FUNC_LEAVE(iterator->index < pdc_vector_size(iterator->vector)); } \ No newline at end of file diff --git a/src/commons/file/bin_file_ops.c b/src/commons/file/bin_file_ops.c index fcc695aac..cd0b3daad 100644 --- a/src/commons/file/bin_file_ops.c +++ b/src/commons/file/bin_file_ops.c @@ -1,145 +1,180 @@ #include "bin_file_ops.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" // type 1 int, 2 double, 3 string, 4 uint64, 5 size_t void bin_append_int(int data, FILE *stream) { + FUNC_ENTER(NULL); + int type = 1; size_t length = 1; fwrite(&type, sizeof(int), 1, stream); fwrite(&length, sizeof(size_t), 1, stream); fwrite(&data, sizeof(int), length, stream); + + FUNC_LEAVE_VOID(); } void bin_append_double(double data, FILE *stream) { + FUNC_ENTER(NULL); + int type = 2; size_t length = 1; fwrite(&type, sizeof(int), 1, stream); fwrite(&length, sizeof(size_t), 1, stream); fwrite(&data, sizeof(double), length, stream); + + FUNC_LEAVE_VOID(); } void bin_append_string(char *data, FILE *stream) { + FUNC_ENTER(NULL); + size_t length = strlen(data); bin_append_string_with_len(data, length, stream); + + FUNC_LEAVE_VOID(); } void bin_append_string_with_len(char *data, size_t len, FILE *stream) { + FUNC_ENTER(NULL); + int type = 3; fwrite(&type, sizeof(int), 1, stream); fwrite(&len, sizeof(size_t), 1, stream); fwrite(data, sizeof(char), len, stream); + + FUNC_LEAVE_VOID(); } void bin_append_uint64(uint64_t data, FILE *stream) { + FUNC_ENTER(NULL); + int type = 4; size_t length = 1; fwrite(&type, sizeof(int), 1, stream); fwrite(&length, sizeof(size_t), 1, stream); fwrite(&data, sizeof(uint64_t), length, stream); + + FUNC_LEAVE_VOID(); } void bin_append_size_t(size_t data, FILE *stream) { + FUNC_ENTER(NULL); + int type = 5; size_t length = 1; fwrite(&type, sizeof(int), 1, stream); fwrite(&length, sizeof(size_t), 1, stream); fwrite(&data, sizeof(size_t), length, stream); + + FUNC_LEAVE_VOID(); } void bin_read_general(int *t, size_t *len, void **data, FILE *stream) { + FUNC_ENTER(NULL); + int type = -1; size_t length = 0; fread(&type, sizeof(int), 1, stream); fread(&length, sizeof(size_t), 1, stream); void *_data; if (type == 1) { - _data = (int *)calloc(length, sizeof(int)); + _data = (int *)PDC_calloc(length, sizeof(int)); fread(_data, sizeof(int), length, stream); } else if (type == 2) { - _data = (double *)calloc(length, sizeof(double)); + _data = (double *)PDC_calloc(length, sizeof(double)); fread(_data, sizeof(double), length, stream); } else if (type == 3) { - _data = (char *)calloc(length + 1, sizeof(char)); + _data = (char *)PDC_calloc(length + 1, sizeof(char)); fread(_data, sizeof(char), length, stream); } else if (type == 4) { - _data = (uint64_t *)calloc(length, sizeof(uint64_t)); + _data = (uint64_t *)PDC_calloc(length, sizeof(uint64_t)); fread(_data, sizeof(uint64_t), length, stream); } else if (type == 5) { - _data = (size_t *)calloc(length, sizeof(size_t)); + _data = (size_t *)PDC_calloc(length, sizeof(size_t)); fread(_data, sizeof(size_t), length, stream); } data[0] = (void *)_data; *t = type; *len = length; + + FUNC_LEAVE_VOID(); } size_t miqs_skip_field(FILE *stream) { + FUNC_ENTER(NULL); + size_t rst = 0; int type = -1; size_t length = 0; fread(&type, sizeof(int), 1, stream); if (type == EOF) { - return rst; // end of file, nothing to skip + FUNC_LEAVE(rst); // end of file, nothing to skip } rst += sizeof(int); fread(&length, sizeof(size_t), 1, stream); rst += sizeof(size_t); void *_data; if (type == 1) { - _data = (int *)calloc(length, sizeof(int)); + _data = (int *)PDC_calloc(length, sizeof(int)); fread(_data, sizeof(int), length, stream); rst += sizeof(int) * length; } else if (type == 2) { - _data = (double *)calloc(length, sizeof(double)); + _data = (double *)PDC_calloc(length, sizeof(double)); fread(_data, sizeof(double), length, stream); rst += sizeof(double) * length; } else if (type == 3) { - _data = (char *)calloc(length + 1, sizeof(char)); + _data = (char *)PDC_calloc(length + 1, sizeof(char)); fread(_data, sizeof(char), length, stream); rst += sizeof(char) * length; } else if (type == 4) { - _data = (uint64_t *)calloc(length, sizeof(uint64_t)); + _data = (uint64_t *)PDC_calloc(length, sizeof(uint64_t)); fread(_data, sizeof(uint64_t), length, stream); rst += sizeof(uint64_t) * length; } else if (type == 5) { - _data = (size_t *)calloc(length, sizeof(size_t)); + _data = (size_t *)PDC_calloc(length, sizeof(size_t)); fread(_data, sizeof(size_t), length, stream); rst += sizeof(size_t) * length; } - free(_data); - return rst; + _data = (void *)PDC_free(_data); + + FUNC_LEAVE(rst); } void * bin_read_index_numeric_value(int *is_float, FILE *file) { + FUNC_ENTER(NULL); + int type = 1; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (len == 1) { if (type == 1) { @@ -149,77 +184,97 @@ bin_read_index_numeric_value(int *is_float, FILE *file) *is_float = 1; } } - return *data; + + FUNC_LEAVE(*data); } int * bin_read_int(FILE *file) { + FUNC_ENTER(NULL); + int type = 1; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (type == 1 && len == 1) { - return (int *)*data; + FUNC_LEAVE((int *)*data); } - return NULL; + + FUNC_LEAVE(NULL); } double * bin_read_double(FILE *file) { + FUNC_ENTER(NULL); + int type = 2; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (type == 2 && len == 1) { - return (double *)*data; + FUNC_LEAVE((double *)*data); } - return NULL; + + FUNC_LEAVE(NULL); } char * bin_read_string(FILE *file) { + FUNC_ENTER(NULL); + int type = 3; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (type == 3) { - return (char *)*data; + FUNC_LEAVE((char *)*data); } - return NULL; + + FUNC_LEAVE(NULL); } uint64_t * bin_read_uint64(FILE *file) { + FUNC_ENTER(NULL); + int type = 4; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (type == 4 && len == 1) { - return (uint64_t *)*data; + FUNC_LEAVE((uint64_t *)*data); } - return NULL; + + FUNC_LEAVE(NULL); } size_t * bin_read_size_t(FILE *file) { + FUNC_ENTER(NULL); + int type = 5; size_t len = 1; - void **data = (void **)calloc(1, sizeof(void *)); + void **data = (void **)PDC_calloc(1, sizeof(void *)); bin_read_general(&type, &len, data, file); if (type == 5 && len == 1) { - return (size_t *)*data; + FUNC_LEAVE((size_t *)*data); } - return NULL; + + FUNC_LEAVE(NULL); } // type: 1, int, 2, float, 3. string, 4. uint64 5. size_t void bin_append_type(int type, FILE *stream) { + FUNC_ENTER(NULL); + bin_append_int(type, stream); + + FUNC_LEAVE_VOID(); } diff --git a/src/commons/file/common_io.c b/src/commons/file/common_io.c index a5e1f0ea4..22831d539 100644 --- a/src/commons/file/common_io.c +++ b/src/commons/file/common_io.c @@ -5,106 +5,135 @@ #include #include #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" FILE * open_file(char *filename, char *mode) { + FUNC_ENTER(NULL); + FILE *fp = fopen(filename, mode); if (fp == NULL) { LOG_ERROR("Error opening file %s: %s\n", filename, strerror(errno)); exit(1); } - return fp; + + FUNC_LEAVE(fp); } int close_file(FILE *fp) { + FUNC_ENTER(NULL); + if (fclose(fp) != 0) { LOG_ERROR("Error closing file\n"); - return 1; + FUNC_LEAVE(1); } - return 0; + + FUNC_LEAVE(0); } int read_file(FILE *fp, io_buffer_t *buffer) { + FUNC_ENTER(NULL); + // Determine the file size fseek(fp, 0L, SEEK_END); buffer->size = ftell(fp); rewind(fp); // Allocate memory for the buffer - buffer->buffer = (char *)malloc(buffer->size + 1); + buffer->buffer = (char *)PDC_malloc(buffer->size + 1); if (buffer->buffer == NULL) { LOG_ERROR("Error allocating memory for file buffer\n"); - return 1; + FUNC_LEAVE(1); } // Read the file into the buffer if (fread(buffer->buffer, 1, buffer->size, fp) != buffer->size) { LOG_ERROR("Error reading file\n"); - return 1; + FUNC_LEAVE(1); } buffer->buffer[buffer->size] = '\0'; - return 0; + FUNC_LEAVE(0); } int write_file(FILE *fp, io_buffer_t *buffer) { + FUNC_ENTER(NULL); + if (fwrite(buffer->buffer, 1, buffer->size, fp) != buffer->size) { LOG_ERROR("Error writing file\n"); - return 1; + FUNC_LEAVE(1); } - return 0; + + FUNC_LEAVE(0); } void print_string(char *string) { + FUNC_ENTER(NULL); + LOG_JUST_PRINT("%s", string); + + FUNC_LEAVE_VOID(); } int read_line(FILE *fp, char *buffer, size_t size) { + FUNC_ENTER(NULL); + if (fgets(buffer, size, fp) == NULL) { LOG_ERROR("Error reading line\n"); - return 1; + FUNC_LEAVE(1); } // Remove the newline character if present if (strchr(buffer, '\n') != NULL) { buffer[strcspn(buffer, "\n")] = '\0'; } - return 0; + + FUNC_LEAVE(0); } int get_input(char *buffer, size_t size) { + FUNC_ENTER(NULL); + if (fgets(buffer, size, stdin) == NULL) { LOG_ERROR("Error getting input\n"); - return 1; + FUNC_LEAVE(1); } // Remove the newline character if present if (strchr(buffer, '\n') != NULL) { buffer[strcspn(buffer, "\n")] = '\0'; } - return 0; + + FUNC_LEAVE(0); } void print_error(char *message) { + FUNC_ENTER(NULL); + LOG_ERROR("Error: %s\n", message); + + FUNC_LEAVE_VOID(); } int read_text_file(char *filename, void (*callback)(char *line)) { + FUNC_ENTER(NULL); + FILE * fp = open_file(filename, IO_MODE_READ); char * line = NULL; size_t len = 0; @@ -117,73 +146,86 @@ read_text_file(char *filename, void (*callback)(char *line)) } if (ferror(fp)) { LOG_ERROR("Error reading file\n"); - return 1; + FUNC_LEAVE(1); } - free(line); + line = (char *)PDC_free(line); close_file(fp); - return 0; + + FUNC_LEAVE(0); } int write_text_file(char *filename, char **lines, size_t num_lines) { + FUNC_ENTER(NULL); + FILE *fp = open_file(filename, IO_MODE_WRITE); for (size_t i = 0; i < num_lines; i++) { if (fprintf(fp, "%s\n", lines[i]) < 0) { LOG_ERROR("Error writing to file\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } } close_file(fp); - return 0; + + FUNC_LEAVE(0); } int read_binary_file(char *filename, void *buffer, size_t size) { + FUNC_ENTER(NULL); + FILE *fp = open_file(filename, IO_MODE_BINARY IO_MODE_READ); if (fread(buffer, 1, size, fp) != size) { LOG_ERROR("Error reading file\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } close_file(fp); - return 0; + + FUNC_LEAVE(0); } int write_binary_file(char *filename, void *buffer, size_t size) { + FUNC_ENTER(NULL); + FILE *fp = open_file(filename, IO_MODE_BINARY IO_MODE_WRITE); if (fwrite(buffer, 1, size, fp) != size) { LOG_ERROR("Error writing file\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } close_file(fp); - return 0; + + FUNC_LEAVE(0); } int update_binary_file(char *filename, void *buffer, size_t size, unsigned long start_pos, size_t length) { + FUNC_ENTER(NULL); + FILE *fp = open_file(filename, IO_MODE_BINARY IO_MODE_READ IO_MODE_WRITE); if (fseek(fp, start_pos, SEEK_SET) != 0) { LOG_ERROR("Error seeking to starting position\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } if (fwrite(buffer, 1, size, fp) != size) { LOG_ERROR("Error writing to file\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } if (length != size && ftruncate(fileno(fp), start_pos + size) != 0) { LOG_ERROR("Error truncating file\n"); close_file(fp); - return 1; + FUNC_LEAVE(1); } close_file(fp); - return 0; + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/generic/pdc_generic.c b/src/commons/generic/pdc_generic.c index 198449769..7f0b19128 100644 --- a/src/commons/generic/pdc_generic.c +++ b/src/commons/generic/pdc_generic.c @@ -1,16 +1,20 @@ #include "pdc_generic.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" size_t get_number_from_string(char *str, pdc_c_var_type_t type, void **val_ptr) { + FUNC_ENTER(NULL); + if (val_ptr == NULL) { - return 0; + FUNC_LEAVE(0); } void * k = NULL; size_t key_len = get_size_by_dtype(type); - k = malloc(key_len); + k = PDC_malloc(key_len); switch (type) { case PDC_SHORT: @@ -52,10 +56,11 @@ get_number_from_string(char *str, pdc_c_var_type_t type, void **val_ptr) *((double *)k) = strtod(str, NULL); break; default: - free(k); - return 0; + k = (void *)PDC_free(k); + FUNC_LEAVE(0); } *val_ptr = k; - return key_len; + + FUNC_LEAVE(key_len); } \ No newline at end of file diff --git a/src/commons/index/dart/dart_algo.c b/src/commons/index/dart/dart_algo.c index 6546d0c39..d4221e32b 100644 --- a/src/commons/index/dart/dart_algo.c +++ b/src/commons/index/dart/dart_algo.c @@ -1,4 +1,6 @@ #include "dart_algo.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #include #include #include @@ -12,6 +14,8 @@ uint32_t murmur3_32(const uint8_t *key, size_t len, uint32_t seed) { + FUNC_ENTER(NULL); + uint32_t h = seed; if (len > 3) { const uint32_t *key_x4 = (const uint32_t *)key; @@ -46,28 +50,35 @@ murmur3_32(const uint8_t *key, size_t len, uint32_t seed) h ^= h >> 13; h *= 0xc2b2ae35; h ^= h >> 16; - return h; + + FUNC_LEAVE(h); } void to_bytes(uint32_t val, uint8_t *bytes) { + FUNC_ENTER(NULL); + bytes[0] = (uint8_t)val; bytes[1] = (uint8_t)(val >> 8); bytes[2] = (uint8_t)(val >> 16); bytes[3] = (uint8_t)(val >> 24); + + FUNC_LEAVE_VOID(); } uint32_t to_int32(const uint8_t *bytes) { - return (uint32_t)bytes[0] | ((uint32_t)bytes[1] << 8) | ((uint32_t)bytes[2] << 16) | - ((uint32_t)bytes[3] << 24); + FUNC_ENTER(NULL); + FUNC_LEAVE((uint32_t)bytes[0] | ((uint32_t)bytes[1] << 8) | ((uint32_t)bytes[2] << 16) | + ((uint32_t)bytes[3] << 24)); } void md5(const uint8_t *initial_msg, size_t initial_len, uint8_t *digest) { + FUNC_ENTER(NULL); // Constants are the integer part of the sines of integers (in radians) * 2^32. const uint32_t k[64] = { @@ -110,7 +121,7 @@ md5(const uint8_t *initial_msg, size_t initial_len, uint8_t *digest) for (new_len = initial_len + 1; new_len % (512 / 8) != 448 / 8; new_len++) ; - msg = (uint8_t *)malloc(new_len + 8); + msg = (uint8_t *)PDC_malloc(new_len + 8); memcpy(msg, initial_msg, initial_len); msg[initial_len] = 0x80; // append the "1" bit; most significant bit is "first" for (offset = initial_len + 1; offset < new_len; offset++) @@ -170,18 +181,22 @@ md5(const uint8_t *initial_msg, size_t initial_len, uint8_t *digest) } // cleanup - free(msg); + msg = (uint8_t *)PDC_free(msg); // var char digest[16] := h0 append h1 append h2 append h3 //(Output is in little-endian) to_bytes(h0, digest); to_bytes(h1, digest + 4); to_bytes(h2, digest + 8); to_bytes(h3, digest + 12); + + FUNC_LEAVE_VOID(); } uint32_t djb2_hash(char *str, int len) { + FUNC_ENTER(NULL); + uint32_t hash = 5381; int i = 0; int c; @@ -196,17 +211,19 @@ djb2_hash(char *str, int len) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ } - return hash; + FUNC_LEAVE(hash); } uint32_t md5_hash(int prefix_len, char *word) { + FUNC_ENTER(NULL); - char *prefix = (char *)calloc(prefix_len + 1, sizeof(char)); + char *prefix = (char *)PDC_calloc(prefix_len + 1, sizeof(char)); strncpy(prefix, word, prefix_len); uint8_t digest; md5((uint8_t *)prefix, strlen(prefix), &digest); uint32_t inthash = to_int32(&digest); - return inthash; + + FUNC_LEAVE(inthash); } diff --git a/src/commons/index/dart/dart_core.c b/src/commons/index/dart/dart_core.c index 9c54a5ba4..390c08d38 100644 --- a/src/commons/index/dart/dart_core.c +++ b/src/commons/index/dart/dart_core.c @@ -2,6 +2,8 @@ #include "dart_algo.h" #include "dart_math.h" #include "dart_core.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #ifdef PDC_DART_MAX_SERVER_NUM_TO_ADAPT #define DART_MAX_SERVER_NUM_TO_ADAPT PDC_DART_MAX_SERVER_NUM_TO_ADAPT @@ -26,34 +28,43 @@ threadpool dart_thpool_g; threadpool get_dart_temp_thpool(int count) { - return thpool_init(count); + FUNC_ENTER(NULL); + FUNC_LEAVE(thpool_init(count)); } threadpool get_dart_thpool_g() { - return dart_thpool_g; + FUNC_ENTER(NULL); + FUNC_LEAVE(dart_thpool_g); } int is_index_write_op(dart_op_type_t op_type) { - return (op_type == OP_INSERT || op_type == OP_DELETE); + FUNC_ENTER(NULL); + FUNC_LEAVE((op_type == OP_INSERT || op_type == OP_DELETE)); } void dart_space_init(DART *dart, int num_server) { + FUNC_ENTER(NULL); + __dart_space_init(dart, num_server, DART_ALPHABET_SIZE, 0, DART_REPLICATION_FACTOR, DART_MAX_SERVER_NUM_TO_ADAPT); + + FUNC_LEAVE_VOID(); } void __dart_space_init(DART *dart, int num_server, int alphabet_size, int extra_tree_height, int replication_factor, int max_server_num_to_adapt) { + FUNC_ENTER(NULL); + if (dart == NULL) { - dart = (DART *)calloc(1, sizeof(DART)); + dart = (DART *)PDC_calloc(1, sizeof(DART)); } dart->alphabet_size = alphabet_size; // initialize servers; @@ -68,13 +79,17 @@ __dart_space_init(DART *dart, int num_server, int alphabet_size, int extra_tree_ dart->num_vnode = (uint64_t)pow(dart->alphabet_size, dart->dart_tree_height); dart->replication_factor = replication_factor; // dart_thpool_g = thpool_init(num_server); + + FUNC_LEAVE_VOID(); } void dart_determine_query_token_by_key_query(char *k_query, char **out_token, dart_op_type_t *out_op_type) { + FUNC_ENTER(NULL); + if (out_token == NULL || out_op_type == NULL) { - return; + FUNC_LEAVE_VOID(); } char *affix = NULL; @@ -107,9 +122,11 @@ dart_determine_query_token_by_key_query(char *k_query, char **out_token, dart_op break; } if (affix != NULL) { - free(affix); + affix = (char *)PDC_free(affix); affix = NULL; } + + FUNC_LEAVE_VOID(); } /** @@ -119,18 +136,23 @@ dart_determine_query_token_by_key_query(char *k_query, char **out_token, dart_op uint64_t get_server_id_by_vnode_id(DART *dart, uint64_t vnode_id) { + FUNC_ENTER(NULL); + int num_vnode_per_server = dart->num_vnode / dart->num_server; - return (vnode_id / num_vnode_per_server) % dart->num_server; + + FUNC_LEAVE((vnode_id / num_vnode_per_server) % dart->num_server); } size_t get_vnode_ids_by_serverID(DART *dart, uint32_t serverID, uint64_t **out) { + FUNC_ENTER(NULL); + if (out == NULL) { - return 0; + FUNC_LEAVE(0); } size_t num_result = 0; - uint64_t *temp_out = (uint64_t *)calloc(dart->num_vnode, sizeof(uint64_t)); + uint64_t *temp_out = (uint64_t *)PDC_calloc(dart->num_vnode, sizeof(uint64_t)); int vid = 0; for (vid = 0; vid < dart->num_vnode; vid++) { if (get_server_id_by_vnode_id(dart, vid) == serverID) { @@ -138,10 +160,11 @@ get_vnode_ids_by_serverID(DART *dart, uint32_t serverID, uint64_t **out) num_result++; } } - out[0] = (uint64_t *)calloc(num_result, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(num_result, sizeof(uint64_t)); memcpy(out[0], temp_out, num_result * sizeof(uint64_t)); - free(temp_out); - return num_result; + temp_out = (uint64_t *)PDC_free(temp_out); + + FUNC_LEAVE(num_result); } /** @@ -151,11 +174,14 @@ get_vnode_ids_by_serverID(DART *dart, uint32_t serverID, uint64_t **out) int dart_client_request_count_incr(DART *dart_g) { + FUNC_ENTER(NULL); + if (dart_g->client_request_count < 0) { dart_g->client_request_count = 0; } dart_g->client_request_count = dart_g->client_request_count + 1; - return dart_g->client_request_count; + + FUNC_LEAVE(dart_g->client_request_count); } /** @@ -165,6 +191,8 @@ dart_client_request_count_incr(DART *dart_g) uint64_t get_base_virtual_node_id_by_string(DART *dart, char *str) { + FUNC_ENTER(NULL); + int n = 0; uint64_t c; uint64_t rst = 0; @@ -180,7 +208,8 @@ get_base_virtual_node_id_by_string(DART *dart, char *str) c = (i_t_n) * ((uint64_t)uint32_pow(dart->alphabet_size, dart->dart_tree_height - n)); rst += c; } - return (rst % (uint64_t)dart->num_vnode); + + FUNC_LEAVE((rst % (uint64_t)dart->num_vnode)); } /** @@ -191,6 +220,7 @@ uint64_t get_reconciled_vnode_id_with_power_of_two_choice_rehashing_2(DART *dart, uint64_t base_vnode_idx, char *word, get_server_info_callback get_server_cb) { + FUNC_ENTER(NULL); // base virtual node address always in the first element of the array. uint64_t rst = base_vnode_idx; @@ -205,7 +235,7 @@ get_reconciled_vnode_id_with_power_of_two_choice_rehashing_2(DART *dart, uint64_ uint64_t reconciled_vnode_idx = base_vnode_idx; if (dart->dart_tree_height <= 1) { - return reconciled_vnode_idx; + FUNC_LEAVE(reconciled_vnode_idx); } // The procedure of picking alternative virtual node is important. @@ -299,7 +329,8 @@ get_reconciled_vnode_id_with_power_of_two_choice_rehashing_2(DART *dart, uint64_ else { rst = reconciled_vnode_idx; } - return rst; + + FUNC_LEAVE(rst); } /** @@ -311,10 +342,12 @@ get_reconciled_vnode_id_with_power_of_two_choice_rehashing_2(DART *dart, uint64_ int get_replica_node_ids(DART *dart, uint64_t master_node_id, int is_physical, uint64_t **out) { + FUNC_ENTER(NULL); + if (out == NULL) { - return 0; + FUNC_LEAVE(0); } - out[0] = (uint64_t *)calloc(dart->replication_factor, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(dart->replication_factor, sizeof(uint64_t)); out[0][0] = master_node_id; @@ -331,7 +364,7 @@ get_replica_node_ids(DART *dart, uint64_t master_node_id, int is_physical, uint6 } } - return dart->replication_factor; + FUNC_LEAVE(dart->replication_factor); } /** @@ -348,8 +381,10 @@ get_replica_node_ids(DART *dart, uint64_t master_node_id, int is_physical, uint6 int get_server_ids_for_insert(DART *dart_g, char *keyword, get_server_info_callback get_server_cb, uint64_t **out) { + FUNC_ENTER(NULL); + if (out == NULL) { - return 0; + FUNC_LEAVE(0); } int rst = 0; // not success uint64_t base_virtual_node_id = get_base_virtual_node_id_by_string(dart_g, keyword); @@ -360,7 +395,8 @@ get_server_ids_for_insert(DART *dart_g, char *keyword, get_server_info_callback // We call the following function to calculate all the server IDs. int is_physical = 0; int rst_len = get_replica_node_ids(dart_g, alter_virtual_node_id, is_physical, out); - return rst_len; + + FUNC_LEAVE(rst_len); } /** @@ -394,23 +430,25 @@ get_server_ids_for_insert(DART *dart_g, char *keyword, get_server_info_callback int get_server_ids_for_query(DART *dart_g, char *token, dart_op_type_t op_type, uint64_t **out) { + FUNC_ENTER(NULL); + if (out == NULL) { - return 0; + FUNC_LEAVE(0); } if (op_type == OP_INSERT) { - return 0; + FUNC_LEAVE(0); } // For INSERT operation, we return nothing here. // We first eliminate possibility of INFIX query. // Note: if suffix tree mode is ON, we don't have to search all servers. #ifndef PDC_DART_SFX_TREE if (op_type == OP_INFIX_QUERY) { - out[0] = (uint64_t *)calloc(dart_g->num_server, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(dart_g->num_server, sizeof(uint64_t)); int i = 0; for (i = 0; i < dart_g->num_server; i++) { out[0][i] = i; } - return dart_g->num_server; + FUNC_LEAVE(dart_g->num_server); } #endif @@ -434,14 +472,14 @@ get_server_ids_for_query(DART *dart_g, char *token, dart_op_type_t op_type, uint uint64_t server_end = get_server_id_by_vnode_id(dart_g, region_start + region_size - 1); int num_srvs = server_end - server_start + 1; - out[0] = (uint64_t *)calloc(num_srvs, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(num_srvs, sizeof(uint64_t)); int num_srv_ids = 0; uint64_t srvId = server_start; for (; srvId <= server_end; srvId++) { out[0][num_srv_ids++] = srvId; } - return num_srvs; + FUNC_LEAVE(num_srvs); } else { // this branch handles the following cases: @@ -474,7 +512,7 @@ get_server_ids_for_query(DART *dart_g, char *token, dart_op_type_t op_type, uint int num_alter_reps = get_replica_node_ids(dart_g, reconciled_vnode_id, is_physical, &alter_replicas); if (op_type == OP_DELETE) { // for delete operations, we need to perform delete on all replicas - out[0] = (uint64_t *)calloc(num_base_reps + num_alter_reps, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(num_base_reps + num_alter_reps, sizeof(uint64_t)); int i = 0; for (i = 0; i < num_base_reps; i++) { out[0][i] = base_replicas[i]; @@ -482,21 +520,21 @@ get_server_ids_for_query(DART *dart_g, char *token, dart_op_type_t op_type, uint for (i = 0; i < num_alter_reps; i++) { out[0][num_base_reps + i] = alter_replicas[i]; } - return num_base_reps + num_alter_reps; + FUNC_LEAVE(num_base_reps + num_alter_reps); } else { // for other query operations, we only provide two servers for them to access // and the server has to be any two of the possible replicas. int req_count = dart_client_request_count_incr(dart_g); int rep_index = req_count % num_base_reps; - out[0] = (uint64_t *)calloc(2, sizeof(uint64_t)); + out[0] = (uint64_t *)PDC_calloc(2, sizeof(uint64_t)); int rst_size = 1; out[0][0] = base_replicas[rep_index]; if (base_replicas[rep_index] != alter_replicas[rep_index]) { rst_size = 2; out[0][1] = alter_replicas[rep_index]; } - return rst_size; + FUNC_LEAVE(rst_size); } } } @@ -524,10 +562,12 @@ int DART_hash(DART *dart_g, char *key, dart_op_type_t op_type, get_server_info_callback get_server_cb, index_hash_result_t **out) { + FUNC_ENTER(NULL); + int ret_value = 0; if (out == NULL) { - return ret_value; + FUNC_LEAVE(ret_value); } uint64_t *temp_out = NULL; @@ -574,10 +614,10 @@ DART_hash(DART *dart_g, char *key, dart_op_type_t op_type, get_server_info_callb // now we have the result of DART hash, we need to merge it with the previous results. ret_value += tmp_out_len; if (*out == NULL) { - *out = (index_hash_result_t *)calloc(ret_value, sizeof(index_hash_result_t)); + *out = (index_hash_result_t *)PDC_calloc(ret_value, sizeof(index_hash_result_t)); } else { - *out = (index_hash_result_t *)realloc(*out, ret_value * sizeof(index_hash_result_t)); + *out = (index_hash_result_t *)PDC_realloc(*out, ret_value * sizeof(index_hash_result_t)); } for (int j = 0; j < tmp_out_len; j++) { (*out)[ret_value - tmp_out_len + j].virtual_node_id = temp_out[j]; @@ -586,9 +626,10 @@ DART_hash(DART *dart_g, char *key, dart_op_type_t op_type, get_server_info_callb (*out)[ret_value - tmp_out_len + j].is_suffix = is_suffix; } if (temp_out != NULL) - free(temp_out); + temp_out = (uint64_t *)PDC_free(temp_out); } - return ret_value; + + FUNC_LEAVE(ret_value); } /** @@ -598,8 +639,10 @@ DART_hash(DART *dart_g, char *key, dart_op_type_t op_type, get_server_info_callb int DHT_hash(DART *dart_g, size_t len, char *key, dart_op_type_t op_type, index_hash_result_t **out) { + FUNC_ENTER(NULL); + if (out == NULL) { - return 0; + FUNC_LEAVE(0); } uint64_t hashVal = djb2_hash(key, (int)len); uint64_t server_id = hashVal % (dart_g->num_server); @@ -629,7 +672,7 @@ DHT_hash(DART *dart_g, size_t len, char *key, dart_op_type_t op_type, index_hash // according to different scan type, we return different results. if (is_full_scan) { ret_value = dart_g->num_server; - *out = (index_hash_result_t *)calloc(ret_value, sizeof(index_hash_result_t)); + *out = (index_hash_result_t *)PDC_calloc(ret_value, sizeof(index_hash_result_t)); for (i = 0; i < dart_g->num_server; i++) { (*out)[i].server_id = i; (*out)[i].key = key; @@ -637,9 +680,10 @@ DHT_hash(DART *dart_g, size_t len, char *key, dart_op_type_t op_type, index_hash } else { ret_value = 1; - *out = (index_hash_result_t *)calloc(ret_value, sizeof(index_hash_result_t)); + *out = (index_hash_result_t *)PDC_calloc(ret_value, sizeof(index_hash_result_t)); (*out)[0].server_id = server_id; (*out)[0].key = key; } - return ret_value; + + FUNC_LEAVE(ret_value); } \ No newline at end of file diff --git a/src/commons/index/dart/dart_core_test.c b/src/commons/index/dart/dart_core_test.c index 51339458d..05718237a 100644 --- a/src/commons/index/dart/dart_core_test.c +++ b/src/commons/index/dart/dart_core_test.c @@ -1,5 +1,7 @@ #include "dart_core.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" int32_t request_count_g; @@ -8,12 +10,14 @@ dart_server *all_servers; dart_server virtual_dart_retrieve_server_info_cb(uint32_t server_id) { - return all_servers[server_id]; + FUNC_ENTER(NULL); + FUNC_LEAVE(all_servers[server_id]); } int main(int argc, char *argv[]) { + FUNC_ENTER(NULL); if (argc != 4) { LOG_JUST_PRINT("Usage: %s \n", argv[0]); @@ -30,7 +34,7 @@ main(int argc, char *argv[]) replication_factor = replication_factor == 0 ? num_server / 10 : replication_factor; // Init all servers - all_servers = (dart_server *)malloc(num_server * sizeof(dart_server)); + all_servers = (dart_server *)PDC_malloc(num_server * sizeof(dart_server)); for (int i = 0; i < num_server; i++) { all_servers[i].id = i; all_servers[i].indexed_word_count = 0; @@ -39,10 +43,10 @@ main(int argc, char *argv[]) __dart_space_init(&dart, num_server, alphabet_size, extra_tree_height, replication_factor, 1024); - println( - "num_server: %d, num_client: %d, alphabet_size: %d, extra_tree_height: %d, replication_factor: %d", + LOG_INFO( + "num_server: %d, num_client: %d, alphabet_size: %d, extra_tree_height: %d, replication_factor: %d\n", num_server, num_client, alphabet_size, extra_tree_height, replication_factor); - println("DART: num_vnode: %lu", dart.num_vnode); + LOG_INFO("DART: num_vnode: %lu\n", dart.num_vnode); index_hash_result_t *out; int array_len = DART_hash(&dart, query_str, OP_INSERT, NULL, &out); @@ -53,7 +57,7 @@ main(int argc, char *argv[]) } LOG_JUST_PRINT("\n}\n"); - free(out); + out = (index_hash_result_t *)PDC_free(out); array_len = DART_hash(&dart, query_str, OP_EXACT_QUERY, NULL, &out); LOG_JUST_PRINT("server ids for exact search (%d): \n{", array_len); @@ -62,7 +66,7 @@ main(int argc, char *argv[]) } LOG_JUST_PRINT("\n}\n"); - free(out); + out = (index_hash_result_t *)PDC_free(out); array_len = DART_hash(&dart, substring(query_str, 0, strlen(query_str) - 3), OP_PREFIX_QUERY, NULL, &out); LOG_JUST_PRINT("server ids for prefix search (%d): \n{", array_len); @@ -71,7 +75,7 @@ main(int argc, char *argv[]) } LOG_JUST_PRINT("\n}\n"); - free(out); + out = (index_hash_result_t *)PDC_free(out); array_len = DART_hash(&dart, substring(query_str, 3, strlen(query_str)), OP_SUFFIX_QUERY, NULL, &out); LOG_JUST_PRINT("server ids for suffix search (%d): \n{", array_len); @@ -80,7 +84,7 @@ main(int argc, char *argv[]) } LOG_JUST_PRINT("\n}\n"); - free(out); + out = (index_hash_result_t *)PDC_free(out); array_len = DART_hash(&dart, substring(query_str, 2, strlen(query_str) - 2), OP_INFIX_QUERY, NULL, &out); LOG_JUST_PRINT("server ids for infix search (%d): \n{", array_len); @@ -89,5 +93,5 @@ main(int argc, char *argv[]) } LOG_JUST_PRINT("\n}\n"); - return 0; + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/index/dart/dart_math.c b/src/commons/index/dart/dart_math.c index 4818be1b0..172fead92 100644 --- a/src/commons/index/dart/dart_math.c +++ b/src/commons/index/dart/dart_math.c @@ -1,4 +1,5 @@ #include "dart_math.h" +#include "pdc_timing.h" #include #include @@ -8,36 +9,46 @@ double log_with_base(double base, double x) { - return log(x) / log(base); + FUNC_ENTER(NULL); + FUNC_LEAVE(log(x) / log(base)); } uint32_t uint32_pow(uint32_t base, uint32_t pow) { + FUNC_ENTER(NULL); + uint32_t p = 0; uint32_t rst = 1; for (p = 0; p < pow; p++) { rst = base * rst; } - return rst; + + FUNC_LEAVE(rst); } uint64_t uint64_pow(uint64_t base, uint64_t pow) { + FUNC_ENTER(NULL); + uint64_t p = 0; uint64_t rst = 1; for (p = 0; p < pow; p++) { rst = base * rst; } - return rst; + + FUNC_LEAVE(rst); } int int_abs(int a) { + FUNC_ENTER(NULL); + if (a < 0) { - return 0 - a; + FUNC_LEAVE(0 - a); } - return a; + + FUNC_LEAVE(a); } \ No newline at end of file diff --git a/src/commons/index/dart/dart_utils.c b/src/commons/index/dart/dart_utils.c index 2024b9bbc..2cf27ae31 100644 --- a/src/commons/index/dart/dart_utils.c +++ b/src/commons/index/dart/dart_utils.c @@ -4,6 +4,7 @@ #include #include #include "dart_utils.h" +#include "pdc_timing.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif @@ -11,31 +12,41 @@ void random_seed(long int seed) { + FUNC_ENTER(NULL); + if (seed > 0) srand(seed); else if (seed == 0) srand(time(NULL)); + + FUNC_LEAVE_VOID(); } double random_range(double min, double max) { + FUNC_ENTER(NULL); + // return numbers between a given range double range = (max - min); double div = RAND_MAX / range; - return min + (rand() / div); + + FUNC_LEAVE(min + (rand() / div)); } double random_uniform() { + FUNC_ENTER(NULL); // return numbers between 0 and 1 - return (double)rand() / (RAND_MAX + 1.0); + FUNC_LEAVE((double)rand() / (RAND_MAX + 1.0)); } double random_normal(double mean, double dev) { + FUNC_ENTER(NULL); + // returns numbers based on normal distribution given mean and std dev // normal distribution centered on 0 with std dev of 1 @@ -44,12 +55,14 @@ random_normal(double mean, double dev) sqrt(-2 * log((rand() + 1.0) / (RAND_MAX + 1.0))) * cos(2 * M_PI * (rand() + 1.0) / (RAND_MAX + 1.0)); double y = mean + dev * randomNum_normal; - return y; + FUNC_LEAVE(y); } double random_exponential(double mean) { + FUNC_ENTER(NULL); + // returns numbers based on exp distr given mean double x = 1.0 / mean; // inverse lambda @@ -62,36 +75,41 @@ random_exponential(double mean) } while ((u == 0) || (u == 1)); exp_value = -x * log(u); - return (exp_value); + FUNC_LEAVE(exp_value); } int64_t get_timestamp_ns() { + FUNC_ENTER(NULL); + struct timespec current; int64_t rst = -1; if (clock_gettime(CLOCK_REALTIME, ¤t) == -1) { - return rst; + FUNC_LEAVE(rst); } - return current.tv_sec * (int64_t)1e9 + current.tv_nsec; + FUNC_LEAVE(current.tv_sec * (int64_t)1e9 + current.tv_nsec); } int64_t get_timestamp_us() { - return get_timestamp_ns() / 1000; + FUNC_ENTER(NULL); + FUNC_LEAVE(get_timestamp_ns() / 1000); } int64_t get_timestamp_ms() { - return get_timestamp_us() / 1000; + FUNC_ENTER(NULL); + FUNC_LEAVE(get_timestamp_us() / 1000); } int64_t get_timestamp_s() { - return get_timestamp_ms() / 1000; + FUNC_ENTER(NULL); + FUNC_LEAVE(get_timestamp_ms() / 1000); } \ No newline at end of file diff --git a/src/commons/index/dart/index/idioms/idioms_local_index.c b/src/commons/index/dart/index/idioms/idioms_local_index.c index 16c0d31eb..89c4a82a2 100644 --- a/src/commons/index/dart/index/idioms/idioms_local_index.c +++ b/src/commons/index/dart/index/idioms/idioms_local_index.c @@ -8,6 +8,7 @@ #include "string_utils.h" #include "query_utils.h" #include "pdc_logger.h" +#include "pdc_timing.h" #include #include #include @@ -19,20 +20,22 @@ IDIOMS_t * IDIOMS_init(uint32_t server_id, uint32_t num_servers) { - IDIOMS_t *idioms = (IDIOMS_t *)calloc(1, sizeof(IDIOMS_t)); - idioms->art_key_prefix_tree_g = (art_tree *)calloc(1, sizeof(art_tree)); + FUNC_ENTER(NULL); + + IDIOMS_t *idioms = (IDIOMS_t *)PDC_calloc(1, sizeof(IDIOMS_t)); + idioms->art_key_prefix_tree_g = (art_tree *)PDC_calloc(1, sizeof(art_tree)); art_tree_init(idioms->art_key_prefix_tree_g); - idioms->art_key_suffix_tree_g = (art_tree *)calloc(1, sizeof(art_tree)); + idioms->art_key_suffix_tree_g = (art_tree *)PDC_calloc(1, sizeof(art_tree)); art_tree_init(idioms->art_key_suffix_tree_g); idioms->server_id_g = server_id; idioms->num_servers_g = num_servers; - idioms->dart_info_g = (DART *)calloc(1, sizeof(DART)); + idioms->dart_info_g = (DART *)PDC_calloc(1, sizeof(DART)); _init_dart_space_via_idioms(idioms->dart_info_g, idioms->num_servers_g); - return idioms; + FUNC_LEAVE(idioms); } /****************************/ @@ -43,10 +46,12 @@ perr_t insert_obj_ids_into_value_leaf(void *index, void *attr_val, int is_trie, size_t value_len, uint64_t *obj_ids, size_t num_obj_ids) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (index == NULL) { LOG_ERROR("index was null\n"); - return FAIL; + FUNC_LEAVE(FAIL); } void *entry = NULL; @@ -82,16 +87,19 @@ insert_obj_ids_into_value_leaf(void *index, void *attr_val, int is_trie, size_t set_insert(((value_index_leaf_content_t *)entry)->obj_id_set, (SetValue)obj_id); size_t num_entires = set_num_entries(((value_index_leaf_content_t *)entry)->obj_id_set); } - return ret; + + FUNC_LEAVE(ret); } perr_t insert_value_into_second_level_index(key_index_leaf_content_t *leaf_content, IDIOMS_md_idx_record_t * idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (leaf_content == NULL) { - return FAIL; + FUNC_LEAVE(FAIL); } char *value_type_str = get_enum_name_by_dtype(idx_record->type); @@ -103,7 +111,7 @@ insert_value_into_second_level_index(key_index_leaf_content_t *leaf_content, idx_record->type == PDC_STRING, value_str_len, idx_record->obj_ids, idx_record->num_obj_ids); if (ret == FAIL) { - return ret; + FUNC_LEAVE(ret); } #ifndef PDC_DART_SFX_TREE void *reverted_val = reverse_str((char *)attr_val); @@ -129,15 +137,18 @@ insert_value_into_second_level_index(key_index_leaf_content_t *leaf_content, idx_record->type == PDC_STRING, idx_record->value_len, idx_record->obj_ids, idx_record->num_obj_ids); } - return ret; + + FUNC_LEAVE(ret); } perr_t insert_into_key_trie(art_tree *key_trie, char *key, int len, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (key_trie == NULL) { - return FAIL; + FUNC_LEAVE(FAIL); } // look up for leaf_content @@ -186,12 +197,14 @@ insert_into_key_trie(art_tree *key_trie, char *key, int len, IDIOMS_md_idx_recor // insert the value part into second level index. ret = insert_value_into_second_level_index(key_leaf_content, idx_record); - return ret; + FUNC_LEAVE(ret); } perr_t idioms_local_index_create(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; // get the key and create key_index_leaf_content node for it. char *key = idx_record->key; @@ -261,7 +274,7 @@ idioms_local_index_create(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) idioms->index_record_count_g++; idioms->insert_request_count_g++; - return ret; + FUNC_LEAVE(ret); } /****************************/ @@ -271,9 +284,11 @@ perr_t delete_obj_ids_from_value_leaf(void *index, void *attr_val, int is_trie, size_t value_len, uint64_t *obj_ids, size_t num_obj_ids) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (index == NULL) { - return ret; + FUNC_LEAVE(ret); } void *entry = NULL; @@ -287,13 +302,13 @@ delete_obj_ids_from_value_leaf(void *index, void *attr_val, int is_trie, size_t } if (idx_found != 0) { // not found - return SUCCEED; + FUNC_LEAVE(SUCCEED); } uint64_t *obj_id = (uint64_t *)PDC_calloc(1, sizeof(uint64_t)); for (int j = 0; j < num_obj_ids; j++) { if (ret == FAIL) { - return ret; + FUNC_LEAVE(ret); } // obj_id here is just for comparison purpose, and no need to allocate memory for it every time. *obj_id = obj_ids[j]; @@ -312,16 +327,19 @@ delete_obj_ids_from_value_leaf(void *index, void *attr_val, int is_trie, size_t } // PDC_free(entry); } - return ret; + + FUNC_LEAVE(ret); } perr_t delete_value_from_second_level_index(key_index_leaf_content_t *leaf_content, IDIOMS_md_idx_record_t * idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (leaf_content == NULL) { - return FAIL; + FUNC_LEAVE(FAIL); } char *value_type_str = get_enum_name_by_dtype(idx_record->type); if (_getCompoundTypeFromBitmap(leaf_content->val_idx_dtype) == PDC_STRING && @@ -334,7 +352,7 @@ delete_value_from_second_level_index(key_index_leaf_content_t *leaf_content, idx_record->type == PDC_STRING, value_str_len, idx_record->obj_ids, idx_record->num_obj_ids); if (ret == FAIL) { - return ret; + FUNC_LEAVE(ret); } #ifndef PDC_DART_SFX_TREE void *reverted_val = reverse_str((char *)attr_val); @@ -363,17 +381,21 @@ delete_value_from_second_level_index(key_index_leaf_content_t *leaf_content, idx_record->type == PDC_STRING, idx_record->value_len, idx_record->obj_ids, idx_record->num_obj_ids); } - return ret; + + FUNC_LEAVE(ret); } int is_key_leaf_cnt_empty(key_index_leaf_content_t *leaf_content) { + FUNC_ENTER(NULL); + if (leaf_content->primary_trie == NULL && leaf_content->secondary_trie == NULL && leaf_content->primary_rbt == NULL && leaf_content->secondary_rbt == NULL) { - return 1; + FUNC_LEAVE(1); } - return 0; + + FUNC_LEAVE(0); } /** @@ -382,22 +404,24 @@ is_key_leaf_cnt_empty(key_index_leaf_content_t *leaf_content) perr_t delete_from_key_trie(art_tree *key_trie, char *key, int len, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; if (key_trie == NULL) { - return FAIL; + FUNC_LEAVE(FAIL); } // look up for leaf_content key_index_leaf_content_t *key_leaf_content = (key_index_leaf_content_t *)art_search(key_trie, (unsigned char *)key, len); // if no corresponding leaf_content, that means the key has been deleted already. if (key_leaf_content == NULL) { - return SUCCEED; + FUNC_LEAVE(SUCCEED); } // delete the value part from second level index. ret = delete_value_from_second_level_index(key_leaf_content, idx_record); if (ret == FAIL) { - return ret; + FUNC_LEAVE(ret); } char *value_type_str = get_enum_name_by_dtype(idx_record->type); @@ -426,13 +450,12 @@ delete_from_key_trie(art_tree *key_trie, char *key, int len, IDIOMS_md_idx_recor if (is_key_leaf_cnt_empty(key_leaf_content)) { // delete the key from the the key trie along with the key_leaf_content. - free(key_leaf_content); - // LOG_DEBUG("Deleted key %s from the key trie\n", key); + key_leaf_content = (key_index_leaf_content_t *)PDC_free(key_leaf_content); art_delete(key_trie, (unsigned char *)key, len); - return SUCCEED; + FUNC_LEAVE(SUCCEED); } - return ret; + FUNC_LEAVE(ret); } /** @@ -441,6 +464,8 @@ delete_from_key_trie(art_tree *key_trie, char *key, int len, IDIOMS_md_idx_recor perr_t idioms_local_index_delete(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + perr_t ret = SUCCEED; // get the key and create key_index_leaf_content node for it. char *key = idx_record->key; // in a delete function for trie, there is no need to duplicate the string. @@ -485,7 +510,8 @@ idioms_local_index_delete(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) idioms->time_to_delete_index_g += timer_delta_us(&index_timer); idioms->index_record_count_g--; idioms->delete_request_count_g++; - return ret; + + FUNC_LEAVE(ret); } /****************************/ @@ -495,15 +521,17 @@ idioms_local_index_delete(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) int collect_obj_ids(value_index_leaf_content_t *value_index_leaf, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + Set *obj_id_set = (Set *)value_index_leaf->obj_id_set; // get number of object IDs in the set int num_obj_ids = set_num_entries(obj_id_set); // realloc the obj_ids array in idx_record - idx_record->obj_ids = - (uint64_t *)realloc(idx_record->obj_ids, sizeof(uint64_t) * (idx_record->num_obj_ids + num_obj_ids)); - size_t offset = idx_record->num_obj_ids; + idx_record->obj_ids = (uint64_t *)PDC_realloc(idx_record->obj_ids, + sizeof(uint64_t) * (idx_record->num_obj_ids + num_obj_ids)); + size_t offset = idx_record->num_obj_ids; SetIterator value_set_iter; set_iterate(obj_id_set, &value_set_iter); while (set_iter_has_more(&value_set_iter)) { @@ -515,14 +543,17 @@ collect_obj_ids(value_index_leaf_content_t *value_index_leaf, IDIOMS_md_idx_reco idx_record->num_obj_ids += num_obj_ids; } else { - LOG_ERROR("ERROR: offset %zu != num_obj_ids %d\n", offset, num_obj_ids); + LOG_ERROR("Error offset %zu != num_obj_ids %d\n", offset, num_obj_ids); } - return 0; + + FUNC_LEAVE(0); } int value_trie_callback(void *data, const unsigned char *key, uint32_t key_len, void *value) { + FUNC_ENTER(NULL); + value_index_leaf_content_t *value_index_leaf = (value_index_leaf_content_t *)(value); IDIOMS_md_idx_record_t * idx_record = (IDIOMS_md_idx_record_t *)(data); @@ -531,25 +562,29 @@ value_trie_callback(void *data, const unsigned char *key, uint32_t key_len, void if (value_query_type == PATTERN_MIDDLE) { char *infix = substring(v_query, 1, strlen(v_query) - 1); if (contains((char *)key, infix) == 0) { - return 0; + FUNC_LEAVE(0); } } if (value_index_leaf != NULL) { collect_obj_ids(value_index_leaf, idx_record); } - return 0; + + FUNC_LEAVE(0); } rbt_walk_return_code_t value_rbt_callback(rbt_t *rbt, void *key, size_t klen, void *value, void *priv) { + FUNC_ENTER(NULL); + value_index_leaf_content_t *value_index_leaf = (value_index_leaf_content_t *)(value); IDIOMS_md_idx_record_t * idx_record = (IDIOMS_md_idx_record_t *)(priv); if (value_index_leaf != NULL) { collect_obj_ids(value_index_leaf, idx_record); } - return RBT_WALK_CONTINUE; + + FUNC_LEAVE(RBT_WALK_CONTINUE); } /** @@ -570,8 +605,10 @@ int value_number_query(char *secondary_query, key_index_leaf_content_t *leafcnt, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + if (leafcnt->primary_rbt == NULL) { - return 0; + FUNC_LEAVE(0); } // allocate memory according to the val_idx_dtype for value 1 and value 2. @@ -612,8 +649,8 @@ value_number_query(char *secondary_query, key_index_leaf_content_t *leafcnt, // the string is not ended or started with '~', and if it contains '~', it is a in-between query. split_string(secondary_query, "~", &tokens, &num_tokens); if (num_tokens != 2) { - LOG_ERROR("ERROR: invalid range query: %s\n", secondary_query); - return -1; + LOG_ERROR("Error invalid range query: %s\n", secondary_query); + FUNC_LEAVE(-1); } char *lo_tok = tokens[0]; char *hi_tok = tokens[1]; @@ -629,7 +666,6 @@ value_number_query(char *secondary_query, key_index_leaf_content_t *leafcnt, int num_visited_node = rbt_range_walk(leafcnt->primary_rbt, val1, klen1, val2, klen2, value_rbt_callback, idx_record, beginInclusive, endInclusive); - // println("[value_number_query] num_visited_node: %d\n", num_visited_node); } else { // exact query by default @@ -642,15 +678,17 @@ value_number_query(char *secondary_query, key_index_leaf_content_t *leafcnt, if (value_index_leaf != NULL) { collect_obj_ids(value_index_leaf, idx_record); } - // free(num_str); } - return 0; + + FUNC_LEAVE(0); } int value_string_query(char *secondary_query, key_index_leaf_content_t *leafcnt, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + pattern_type_t level_two_ptn_type = determine_pattern_type(secondary_query); char * tok = NULL; switch (level_two_ptn_type) { @@ -706,12 +744,15 @@ value_string_query(char *secondary_query, key_index_leaf_content_t *leafcnt, default: break; } - return 0; + + FUNC_LEAVE(0); } int key_index_search_callback(void *data, const unsigned char *key, uint32_t key_len, void *value) { + FUNC_ENTER(NULL); + key_index_leaf_content_t *leafcnt = (key_index_leaf_content_t *)value; IDIOMS_md_idx_record_t * idx_record = (IDIOMS_md_idx_record_t *)(data); @@ -722,7 +763,7 @@ key_index_search_callback(void *data, const unsigned char *key, uint32_t key_len if (key_query_type == PATTERN_MIDDLE) { char *infix = substring(k_query, 1, strlen(k_query) - 1); if (contains((char *)key, infix) == 0) { - return 0; + FUNC_LEAVE(0); } } @@ -740,7 +781,8 @@ key_index_search_callback(void *data, const unsigned char *key, uint32_t key_len // perform number search query_rst |= value_number_query(v_query, leafcnt, idx_record); } - return query_rst; + + FUNC_LEAVE(query_rst); } /** @@ -765,14 +807,16 @@ key_index_search_callback(void *data, const unsigned char *key, uint32_t key_len uint64_t idioms_local_index_search(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) { + FUNC_ENTER(NULL); + uint64_t result_count = 0; stopwatch_t index_timer; if (idioms == NULL) { - println("[Server_Side_Query_%d] idioms is NULL.", idioms->server_id_g); - return result_count; + LOG_INFO("[Server_Side_Query_%d] idioms is NULL\n", idioms->server_id_g); + FUNC_LEAVE(result_count); } if (idx_record == NULL) { - return result_count; + FUNC_LEAVE(result_count); } char *query = idx_record->key; @@ -780,17 +824,17 @@ idioms_local_index_search(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) if (NULL == kdelim_ptr) { if (DART_SERVER_DEBUG) { - println("[Server_Side_Query_%d]query string '%s' is not valid.", idioms->server_id_g, query); + LOG_INFO("[Server_Side_Query_%d]query string '%s' is not valid\n", idioms->server_id_g, query); } - return result_count; + FUNC_LEAVE(result_count); } char *k_query = get_key(query, KV_DELIM); char *v_query = get_value(query, KV_DELIM); if (DART_SERVER_DEBUG) { - println("[Server_Side_Query_%d] k_query = '%s' | v_query = '%s' ", idioms->server_id_g, k_query, - v_query); + LOG_INFO("[Server_Side_Query_%d] k_query = '%s' | v_query = '%s'\n", idioms->server_id_g, k_query, + v_query); } idx_record->key = k_query; @@ -863,5 +907,6 @@ idioms_local_index_search(IDIOMS_t *idioms, IDIOMS_md_idx_record_t *idx_record) } idioms->time_to_search_index_g += timer_delta_us(&index_timer); idioms->search_request_count_g += 1; - return result_count; + + FUNC_LEAVE(result_count); } diff --git a/src/commons/index/dart/index/idioms/idioms_local_index_test.c b/src/commons/index/dart/index/idioms/idioms_local_index_test.c index 3a4922bb5..3fe7dd84f 100644 --- a/src/commons/index/dart/index/idioms/idioms_local_index_test.c +++ b/src/commons/index/dart/index/idioms/idioms_local_index_test.c @@ -3,6 +3,7 @@ #include "bulki.h" #include "assert.h" #include "pdc_logger.h" +#include "pdc_timing.h" typedef enum { IDIOMS_INSERT = 1, IDIOMS_DELETE = 2, IDIOMS_QUERY = 3 } IDIOMS_OP_TYPE; @@ -35,24 +36,30 @@ dummy_client_t *clients; void init_servers(int num_servers) { + FUNC_ENTER(NULL); + // create an array of dummy_server_t - servers = (dummy_server_t *)malloc(num_servers * sizeof(dummy_server_t)); + servers = (dummy_server_t *)PDC_malloc(num_servers * sizeof(dummy_server_t)); // initialize each server, simulating the initialization of every single process for (int i = 0; i < num_servers; i++) { servers[i].id = i; servers[i].idioms = IDIOMS_init(i, num_servers); } + + FUNC_LEAVE_VOID(); } void init_clients(int num_clients, int num_servers) { + FUNC_ENTER(NULL); + // create an array of dummy_client_t - clients = (dummy_client_t *)malloc(num_clients * sizeof(dummy_client_t)); + clients = (dummy_client_t *)PDC_malloc(num_clients * sizeof(dummy_client_t)); // initialize each client, simulating the initialization of every single process for (int i = 0; i < num_clients; i++) { clients[i].id = i; - clients[i].dart = (DART *)calloc(1, sizeof(DART)); + clients[i].dart = (DART *)PDC_calloc(1, sizeof(DART)); clients[i].num_servers = num_servers; clients[i].DART_ALPHABET_SIZE = 27; clients[i].extra_tree_height = 0; @@ -64,6 +71,8 @@ init_clients(int num_clients, int num_servers) for (int i = 0; i < num_clients; i++) { dart_space_init(clients[i].dart, clients[i].num_servers); } + + FUNC_LEAVE_VOID(); } /** @@ -79,6 +88,7 @@ void client_generate_request(dummy_client_t *client, IDIOMS_OP_TYPE op_type, char *key, BULKI_Entity *value_ent, uint64_t *id) { + FUNC_ENTER(NULL); BULKI_Entity *bentArr = empty_Bent_Array_Entity(); BULKI_ENTITY_append_BULKI_Entity(bentArr, @@ -90,19 +100,27 @@ client_generate_request(dummy_client_t *client, IDIOMS_OP_TYPE op_type, char *ke BULKI_ENTITY_append_BULKI_Entity(bentArr, BULKI_ENTITY(id, 1, PDC_UINT64, PDC_CLS_ITEM)); // 3. id } client->buffer_out = BULKI_Entity_serialize(bentArr, &client->buffer_out_size); + + FUNC_LEAVE_VOID(); } void get_server_info_cb(dart_server *server_ptr) { + FUNC_ENTER(NULL); + uint32_t server_id = server_ptr->id; servers[server_id].idioms->index_record_count_g = 100; + + FUNC_LEAVE_VOID(); } int client_select_server(dummy_client_t *client, char *attr_key, IDIOMS_OP_TYPE op_type, index_hash_result_t **hash_result) { + FUNC_ENTER(NULL); + // select a server based on the key dart_op_type_t dart_op = OP_INSERT; char * input_key = attr_key; @@ -117,74 +135,96 @@ client_select_server(dummy_client_t *client, char *attr_key, IDIOMS_OP_TYPE op_t else if (op_type == IDIOMS_DELETE) { dart_op = OP_DELETE; } - return DART_hash(client->dart, attr_key, dart_op, gsi_cp, hash_result); + FUNC_LEAVE(DART_hash(client->dart, attr_key, dart_op, gsi_cp, hash_result)); } void sending_request_to_server(dummy_client_t *client, dummy_server_t *server) { + FUNC_ENTER(NULL); + // memcpy to simulate the sending of the request to the server server->buffer_in_size = client->buffer_out_size; - server->buffer_in = (void *)malloc(server->buffer_in_size); + server->buffer_in = (void *)PDC_malloc(server->buffer_in_size); memcpy(server->buffer_in, client->buffer_out, server->buffer_in_size); - free(client->buffer_out); + client->buffer_out = (void *)PDC_free(client->buffer_out); + + FUNC_LEAVE_VOID(); } void get_response_from_server(dummy_client_t *client, dummy_server_t *server) { + FUNC_ENTER(NULL); + // memcpy to simulate the receiving of the response from the server client->buffer_in_size = server->buffer_out_size; - client->buffer_in = (void *)malloc(client->buffer_in_size); + client->buffer_in = (void *)PDC_malloc(client->buffer_in_size); memcpy(client->buffer_in, server->buffer_out, client->buffer_in_size); - free(server->buffer_out); + server->buffer_out = (void *)PDC_free(server->buffer_out); + + FUNC_LEAVE_VOID(); } perr_t server_perform_query(dummy_server_t *server, char *query_str, uint64_t **object_id_list, uint64_t *count) { - IDIOMS_md_idx_record_t *idx_record = (IDIOMS_md_idx_record_t *)calloc(1, sizeof(IDIOMS_md_idx_record_t)); - idx_record->key = query_str; + FUNC_ENTER(NULL); + + IDIOMS_md_idx_record_t *idx_record = + (IDIOMS_md_idx_record_t *)PDC_calloc(1, sizeof(IDIOMS_md_idx_record_t)); + idx_record->key = query_str; idioms_local_index_search(server->idioms, idx_record); *object_id_list = idx_record->obj_ids; *count = idx_record->num_obj_ids; - return SUCCEED; + + FUNC_LEAVE(SUCCEED); } perr_t server_perform_insert(dummy_server_t *server, char *key, BULKI_Entity *value_ent, uint64_t id) { + FUNC_ENTER(NULL); + // we assume that the count of value_ent is 1. - IDIOMS_md_idx_record_t *idx_record = (IDIOMS_md_idx_record_t *)calloc(1, sizeof(IDIOMS_md_idx_record_t)); - idx_record->key = key; - idx_record->value = value_ent->data; - idx_record->value_len = value_ent->size; - idx_record->type = value_ent->pdc_type; - idx_record->num_obj_ids = 1; - idx_record->obj_ids = (uint64_t *)calloc(1, sizeof(uint64_t)); - idx_record->obj_ids[0] = id; + IDIOMS_md_idx_record_t *idx_record = + (IDIOMS_md_idx_record_t *)PDC_calloc(1, sizeof(IDIOMS_md_idx_record_t)); + idx_record->key = key; + idx_record->value = value_ent->data; + idx_record->value_len = value_ent->size; + idx_record->type = value_ent->pdc_type; + idx_record->num_obj_ids = 1; + idx_record->obj_ids = (uint64_t *)PDC_calloc(1, sizeof(uint64_t)); + idx_record->obj_ids[0] = id; idioms_local_index_create(server->idioms, idx_record); - return SUCCEED; + + FUNC_LEAVE(SUCCEED); } perr_t server_perform_delete(dummy_server_t *server, char *key, BULKI_Entity *value_ent, uint64_t id) { - IDIOMS_md_idx_record_t *idx_record = (IDIOMS_md_idx_record_t *)calloc(1, sizeof(IDIOMS_md_idx_record_t)); - idx_record->key = key; - idx_record->value = value_ent->data; - idx_record->value_len = value_ent->size; - idx_record->type = value_ent->pdc_type; - idx_record->num_obj_ids = 1; - idx_record->obj_ids = (uint64_t *)calloc(1, sizeof(uint64_t)); - idx_record->obj_ids[0] = id; + FUNC_ENTER(NULL); + + IDIOMS_md_idx_record_t *idx_record = + (IDIOMS_md_idx_record_t *)PDC_calloc(1, sizeof(IDIOMS_md_idx_record_t)); + idx_record->key = key; + idx_record->value = value_ent->data; + idx_record->value_len = value_ent->size; + idx_record->type = value_ent->pdc_type; + idx_record->num_obj_ids = 1; + idx_record->obj_ids = (uint64_t *)PDC_calloc(1, sizeof(uint64_t)); + idx_record->obj_ids[0] = id; idioms_local_index_delete(server->idioms, idx_record); - return SUCCEED; + + FUNC_LEAVE(SUCCEED); } void server_perform_operation(dummy_server_t *server) { + FUNC_ENTER(NULL); + BULKI_Entity * resultBent = empty_Bent_Array_Entity(); BULKI_Entity * bentArr = BULKI_Entity_deserialize(server->buffer_in); BULKI_Entity * opType_ent = BULKI_ENTITY_get_BULKI_Entity(bentArr, 0); @@ -214,12 +254,16 @@ server_perform_operation(dummy_server_t *server) BULKI_ENTITY(obj_id_list, count, PDC_UINT64, PDC_CLS_ARRAY)); } server->buffer_out = BULKI_Entity_serialize(resultBent, &server->buffer_out_size); - free(server->buffer_in); + server->buffer_in = (void *)PDC_free(server->buffer_in); + + FUNC_LEAVE_VOID(); } perr_t client_parse_response(dummy_client_t *client, uint64_t **obj_id_list, uint64_t *count) { + FUNC_ENTER(NULL); + BULKI_Entity *resultBent = BULKI_Entity_deserialize(client->buffer_in); int result = *(int *)BULKI_ENTITY_get_BULKI_Entity(resultBent, 0)->data; if (result == SUCCEED && obj_id_list != NULL && count != NULL) { @@ -229,13 +273,16 @@ client_parse_response(dummy_client_t *client, uint64_t **obj_id_list, uint64_t * *count = obj_id_bent->count; } } - free(client->buffer_in); - return result; + client->buffer_in = (void *)PDC_free(client->buffer_in); + + FUNC_LEAVE(result); } perr_t client_insert_data(dummy_client_t *client, int id) { + FUNC_ENTER(NULL); + char key[64]; char value[64]; char int_key[64]; @@ -267,24 +314,31 @@ client_insert_data(dummy_client_t *client, int id) } char *result_str = result == SUCCEED ? "SUCCEED" : "FAILED"; LOG_INFO("Insert result: %s\n", result_str); - return result; + + FUNC_LEAVE(result); } void client_print_result(uint64_t *rst_ids, uint64_t rst_count) { + FUNC_ENTER(NULL); + LOG_JUST_PRINT("Result count : %" PRIu64 " | ", rst_count); for (int i = 0; i < rst_count; i++) { LOG_JUST_PRINT("%lu ", rst_ids[i]); } LOG_JUST_PRINT("|\n"); + + FUNC_LEAVE_VOID(); } uint64_t client_perform_search(dummy_client_t *client, char *query, uint64_t **rst_ids) { + FUNC_ENTER(NULL); + if (rst_ids == NULL) { - return 0; + FUNC_LEAVE(0); } // generate a request for each client index_hash_result_t *hash_result = NULL; @@ -302,21 +356,24 @@ client_perform_search(dummy_client_t *client, char *query, uint64_t **rst_ids) if (result == SUCCEED && count > 0) { rst_count += count; if (*rst_ids == NULL) { - *rst_ids = (uint64_t *)malloc(rst_count * sizeof(uint64_t)); + *rst_ids = (uint64_t *)PDC_malloc(rst_count * sizeof(uint64_t)); } else { - *rst_ids = (uint64_t *)realloc(*rst_ids, rst_count * sizeof(uint64_t)); + *rst_ids = (uint64_t *)PDC_realloc(*rst_ids, rst_count * sizeof(uint64_t)); } memcpy(*rst_ids + rst_count - count, obj_id_list, count * sizeof(uint64_t)); } } client_print_result(*rst_ids, rst_count); - return rst_count; + + FUNC_LEAVE(rst_count); } perr_t client_delete_data(dummy_client_t *client, int id) { + FUNC_ENTER(NULL); + char key[64]; char value[64]; char int_key[64]; @@ -348,12 +405,15 @@ client_delete_data(dummy_client_t *client, int id) } char *result_str = result == SUCCEED ? "SUCCEED" : "FAILED"; LOG_INFO("Delete result: %s\n", result_str); - return result; + + FUNC_LEAVE(result); } void basic_test() { + FUNC_ENTER(NULL); + perr_t insert_rst = client_insert_data(&clients[0], 10); assert(insert_rst == SUCCEED); @@ -443,38 +503,42 @@ basic_test() rst_count = client_perform_search(&clients[0], query, &rst_ids); assert(rst_count == 0); assert(rst_ids == NULL); + + FUNC_LEAVE_VOID(); } int compare_uint64(const void *a, const void *b) { - return (*(uint64_t *)a - *(uint64_t *)b); + FUNC_ENTER(NULL); + FUNC_LEAVE((*(uint64_t *)a - *(uint64_t *)b)); } int validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) { + FUNC_ENTER(NULL); + int i; int query_series = world_rank % 6; int step_failed = -1; switch (query_series) { case 0: if (nres != 1) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d. Expect 1 result but got %d result\n", + LOG_ERROR("Failed to query kvtag [%s]. Expect 1 result but got %d result\n", "str109str=str109str", world_rank, nres); step_failed = 0; } if (pdc_ids[0] != 109) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. Expect 1 result which is 109, but got result " - "%" PRIu64 ".\n", - "str109str=str109str", world_rank, pdc_ids[0]); + LOG_ERROR("Failed to query kvtag [%s]. Expect 1 result which is 109, but got result " + "%" PRIu64 ".\n", + "str109str=str109str", world_rank, pdc_ids[0]); step_failed = 0; } break; case 1: if (nres != 10) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d. Expect 10 Result, but got %d result.\n", + LOG_ERROR("Failed to query kvtag [%s]. Expect 10 Result, but got %d result.\n", "str09*=str09*", world_rank, nres); step_failed = 1; } @@ -482,10 +546,9 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) qsort(pdc_ids, nres, sizeof(uint64_t), compare_uint64); for (i = 0; i < nres; i++) { if (pdc_ids[i] != i + 90) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. The %d th result does not match. Expect " - "%d, but got %" PRIu64 "\n", - "str09*=str09*", world_rank, i, i + 90, pdc_ids[i]); + LOG_ERROR("Failed to query kvtag [%s]. The %d th result does not match. Expect " + "%d, but got %" PRIu64 "\n", + "str09*=str09*", world_rank, i, i + 90, pdc_ids[i]); step_failed = 1; break; } @@ -493,7 +556,7 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) break; case 2: if (nres != 10) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d. Expect 10 result, but got %d result.\n", + LOG_ERROR("Failed to query kvtag [%s]. Expect 10 result, but got %d result.\n", "*09str=*09str", world_rank, nres); step_failed = 2; } @@ -501,10 +564,9 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) qsort(pdc_ids, nres, sizeof(uint64_t), compare_uint64); for (i = 0; i < nres; i++) { if (pdc_ids[i] != i * 10 + 9) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. The $d th result does not match. Expect " - "%d, but got %" PRIu64 "\n", - "*09str=*09str", world_rank, i, i * 10 + 9, pdc_ids[i]); + LOG_ERROR("Failed to query kvtag [%s]. The $d th result does not match. Expect " + "%d, but got %" PRIu64 "\n", + "*09str=*09str", world_rank, i, i * 10 + 9, pdc_ids[i]); step_failed = 2; break; } @@ -512,9 +574,8 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) break; case 3: if (nres != 20) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. Expected 20 results, but got %d results\n", - "*09*=*09*", world_rank, nres); + LOG_ERROR("Failed to query kvtag [%s]. Expected 20 results, but got %d results\n", + "*09*=*09*", world_rank, nres); step_failed = 3; } // the result is not in order, so we need to sort the result first @@ -523,10 +584,9 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) 99, 109, 209, 309, 409, 509, 609, 709, 809, 909}; for (i = 0; i < nres; i++) { if (pdc_ids[i] != expected[i]) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. The %d th result does not match. Expect " - "%" PRIu64 ", but got %" PRIu64 " results.\n", - "*09*=*09*", world_rank, i, expected[i], pdc_ids[i]); + LOG_ERROR("Failed to query kvtag [%s]. The %d th result does not match. Expect " + "%" PRIu64 ", but got %" PRIu64 " results.\n", + "*09*=*09*", world_rank, i, expected[i], pdc_ids[i]); step_failed = 3; break; } @@ -534,12 +594,12 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) break; case 4: if (nres != 1) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d. Expected 1 result, but got %d results\n", - "intkey=109", world_rank, nres); + LOG_ERROR("Failed to query kvtag [%s]. Expected 1 result, but got %d results\n", "intkey=109", + world_rank, nres); step_failed = 4; } if (pdc_ids[0] != 109) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d. Expected 1 result which is 109, but got " + LOG_ERROR("Failed to query kvtag [%s]. Expected 1 result which is 109, but got " "%" PRIu64 "\n", "intkey=109", world_rank, pdc_ids[0]); step_failed = 4; @@ -547,19 +607,17 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) break; case 5: if (nres != 10) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. Expected 10 results, but got %d results. \n", - "intkey=90|~|99", world_rank, nres); + LOG_ERROR("Failed to query kvtag [%s]. Expected 10 results, but got %d results. \n", + "intkey=90|~|99", world_rank, nres); step_failed = 5; } // the result is not in order, so we need to sort the result first qsort(pdc_ids, nres, sizeof(uint64_t), compare_uint64); for (i = 0; i < nres; i++) { if (pdc_ids[i] != i + 90) { - LOG_ERROR( - "Failed to query kvtag [%s] with rank %d. The %d th result does not match, expect " - "%d but got %" PRIu64 "\n", - "intkey=90|~|99", world_rank, i, i + 90, pdc_ids[i]); + LOG_ERROR("Failed to query kvtag [%s]. The %d th result does not match, expect " + "%d but got %" PRIu64 "\n", + "intkey=90|~|99", world_rank, i, i + 90, pdc_ids[i]); step_failed = 5; break; } @@ -568,12 +626,15 @@ validate_query_result(int world_rank, int nres, uint64_t *pdc_ids) default: break; } - return step_failed; + + FUNC_LEAVE(step_failed); } void perform_loop_test(int num_clients, int num_servers) { + FUNC_ENTER(NULL); + for (int i = 0; i < 1000; i++) { client_insert_data(&clients[i % num_clients], i); } @@ -614,11 +675,15 @@ perform_loop_test(int num_clients, int num_servers) LOG_ERROR("query [%s] with rank %d failed\n", query, client_rank); } } + + FUNC_LEAVE_VOID(); } int main(int argc, char *argv[]) { + FUNC_ENTER(NULL); + // read number of servers from first console argument int num_servers = atoi(argv[1]); // read number of clients from second console argument @@ -669,5 +734,5 @@ main(int argc, char *argv[]) // } // } - return 0; + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/index/dart/index/idioms/idioms_persistence.c b/src/commons/index/dart/index/idioms/idioms_persistence.c index e1a00f1f8..a45cf0e07 100644 --- a/src/commons/index/dart/index/idioms/idioms_persistence.c +++ b/src/commons/index/dart/index/idioms/idioms_persistence.c @@ -9,6 +9,7 @@ #include "string_utils.h" #include "query_utils.h" #include "pdc_logger.h" +#include "pdc_timing.h" #include #include #include @@ -29,6 +30,8 @@ uint64_t append_obj_id_set(Set *obj_id_set, BULKI_Entity *id_set_entity) { + FUNC_ENTER(NULL); + uint64_t num_obj_id = set_num_entries(obj_id_set); SetIterator iter; set_iterate(obj_id_set, &iter); @@ -37,12 +40,15 @@ append_obj_id_set(Set *obj_id_set, BULKI_Entity *id_set_entity) BULKI_Entity *id_entity = BULKI_ENTITY(item, 1, PDC_UINT64, PDC_CLS_ITEM); BULKI_ENTITY_append_BULKI_Entity(id_set_entity, id_entity); } - return num_obj_id + 1; + + FUNC_LEAVE(num_obj_id + 1); } int append_value_tree_node(void *v_id_bulki, void *key, uint32_t key_size, pdc_c_var_type_t key_type, void *value) { + FUNC_ENTER(NULL); + BULKI *bulki = (BULKI *)v_id_bulki; // entity for the key BULKI_Entity *key_entity = @@ -62,7 +68,7 @@ append_value_tree_node(void *v_id_bulki, void *key, uint32_t key_size, pdc_c_var BULKI_put(bulki, key_entity, id_set_entity); - return 0; // return 0 for art iteration to continue; + FUNC_LEAVE(0); // return 0 for art iteration to continue; } /** @@ -72,14 +78,18 @@ append_value_tree_node(void *v_id_bulki, void *key, uint32_t key_size, pdc_c_var int append_string_value_node(void *v_id_bulki, const unsigned char *key, uint32_t key_len, void *value) { - return append_value_tree_node(v_id_bulki, (void *)key, key_len, PDC_STRING, value); + FUNC_ENTER(NULL); + FUNC_LEAVE(append_value_tree_node(v_id_bulki, (void *)key, key_len, PDC_STRING, value)); } rbt_walk_return_code_t append_numeric_value_node(rbt_t *rbt, void *key, size_t klen, void *value, void *v_id_bulki) { + FUNC_ENTER(NULL); + append_value_tree_node(v_id_bulki, key, klen, rbt_get_dtype(rbt), value); - return RBT_WALK_CONTINUE; + + FUNC_LEAVE(RBT_WALK_CONTINUE); } /** @@ -91,8 +101,11 @@ append_numeric_value_node(rbt_t *rbt, void *key, size_t klen, void *value, void uint64_t append_string_value_tree(art_tree *art, BULKI *v_id_bulki) { + FUNC_ENTER(NULL); + uint64_t rst = art_iter(art, append_string_value_node, v_id_bulki); - return rst; + + FUNC_LEAVE(rst); } /** @@ -104,8 +117,11 @@ append_string_value_tree(art_tree *art, BULKI *v_id_bulki) uint64_t append_numeric_value_tree(rbt_t *rbt, BULKI *v_id_bulki) { + FUNC_ENTER(NULL); + uint64_t rst = rbt_walk(rbt, append_numeric_value_node, v_id_bulki); - return rst; + + FUNC_LEAVE(rst); } /** @@ -116,6 +132,8 @@ append_numeric_value_tree(rbt_t *rbt, BULKI *v_id_bulki) int append_attr_name_node(void *data, const unsigned char *key, uint32_t key_len, void *value) { + FUNC_ENTER(NULL); + int rst = 0; key_index_leaf_content_t *leafcnt = (key_index_leaf_content_t *)value; @@ -168,7 +186,8 @@ append_attr_name_node(void *data, const unsigned char *key, uint32_t key_len, vo } // add the kv pair to the bulki structure BULKI_put(kv_bulki, key_entity, data_entity); - return 0; // return 0 for art iteration to continue; + + FUNC_LEAVE(0); // return 0 for art iteration to continue; } /** @@ -178,6 +197,8 @@ append_attr_name_node(void *data, const unsigned char *key, uint32_t key_len, vo int dump_attr_root_tree(art_tree *art, char *dir_path, char *base_name, uint32_t serverID) { + FUNC_ENTER(NULL); + HashTable *vid_buf_hash = hash_table_new(pdc_default_uint64_hash_func_ptr, pdc_default_uint64_equal_func_ptr); int rst = art_iter(art, append_attr_name_node, vid_buf_hash); @@ -198,12 +219,15 @@ dump_attr_root_tree(art_tree *art, char *dir_path, char *base_name, uint32_t ser FILE *stream = fopen(file_name, "wb"); BULKI_serialize_to_file(bulki, stream); } - return rst; + + FUNC_LEAVE(rst); } void dump_dart_info(DART *dart, char *dir_path, uint32_t serverID) { + FUNC_ENTER(NULL); + if (serverID == 0) { char file_name[1024]; sprintf(file_name, "%s/%s.bin", dir_path, "dart_info"); @@ -225,11 +249,15 @@ dump_dart_info(DART *dart, char *dir_path, uint32_t serverID) BULKI_Entity_serialize_to_file(dart_ent, stream); } + + FUNC_LEAVE_VOID(); } perr_t idioms_metadata_index_dump(IDIOMS_t *idioms, char *dir_path, uint32_t serverID) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; stopwatch_t timer; @@ -242,9 +270,10 @@ idioms_metadata_index_dump(IDIOMS_t *idioms, char *dir_path, uint32_t serverID) dump_attr_root_tree(idioms->art_key_suffix_tree_g, dir_path, "idioms_suffix", serverID); timer_pause(&timer); - println("[IDIOMS_Index_Dump_%d] Timer to dump index = %.4f microseconds\n", serverID, - timer_delta_us(&timer)); - return ret_value; + LOG_INFO("[IDIOMS_Index_Dump_%d] Timer to dump index = %.4f microseconds\n", serverID, + timer_delta_us(&timer)); + + FUNC_LEAVE(ret_value); } // *********************** Index Loading *********************************** @@ -253,22 +282,27 @@ int fill_set_from_BULKI_Entity(value_index_leaf_content_t *value_index_leaf, BULKI_Entity *data_entity, int64_t *index_record_count) { + FUNC_ENTER(NULL); + BULKI_Entity_Iterator *it = Bent_iterator_init(data_entity, NULL, PDC_UNKNOWN); while (Bent_iterator_has_next_Bent(it)) { BULKI_Entity *id_entity = Bent_iterator_next_Bent(it); - uint64_t * obj_id = calloc(1, sizeof(uint64_t)); + uint64_t * obj_id = PDC_calloc(1, sizeof(uint64_t)); memcpy(obj_id, id_entity->data, sizeof(uint64_t)); set_insert(value_index_leaf->obj_id_set, obj_id); value_index_leaf->indexed_item_count++; (*index_record_count)++; } - return 0; + + FUNC_LEAVE(0); } int read_attr_value_node(key_index_leaf_content_t *leaf_cnt, int value_tree_idx, BULKI *v_id_bulki, int64_t *index_record_count) { + FUNC_ENTER(NULL); + int rst = 0; BULKI_KV_Pair_Iterator *it = BULKI_KV_Pair_iterator_init(v_id_bulki); while (BULKI_KV_Pair_iterator_has_next(it)) { @@ -277,7 +311,7 @@ read_attr_value_node(key_index_leaf_content_t *leaf_cnt, int value_tree_idx, BUL BULKI_Entity * data_entity = &(kv_pair->value); value_index_leaf_content_t *value_index_leaf = - (value_index_leaf_content_t *)calloc(1, sizeof(value_index_leaf_content_t)); + (value_index_leaf_content_t *)PDC_calloc(1, sizeof(value_index_leaf_content_t)); value_index_leaf->obj_id_set = set_new(ui64_hash, ui64_equal); set_register_free_function(value_index_leaf->obj_id_set, free); @@ -304,24 +338,27 @@ read_attr_value_node(key_index_leaf_content_t *leaf_cnt, int value_tree_idx, BUL rbt_add(value_index_rbt, key_entity->data, key_entity->size, value_index_leaf); } } - return rst; + + FUNC_LEAVE(rst); } int read_value_tree(key_index_leaf_content_t *leaf_cnt, int value_tree_idx, BULKI *v_id_bulki, int64_t *index_record_count) { + FUNC_ENTER(NULL); + int rst = 0; switch (value_tree_idx) { case 0: - leaf_cnt->primary_trie = (art_tree *)calloc(1, sizeof(art_tree)); + leaf_cnt->primary_trie = (art_tree *)PDC_calloc(1, sizeof(art_tree)); art_tree_init(leaf_cnt->primary_trie); _encodeTypeToBitmap(&(leaf_cnt->val_idx_dtype), PDC_STRING); rst = read_attr_value_node(leaf_cnt, 0, v_id_bulki, index_record_count); break; case 1: - leaf_cnt->secondary_trie = (art_tree *)calloc(1, sizeof(art_tree)); + leaf_cnt->secondary_trie = (art_tree *)PDC_calloc(1, sizeof(art_tree)); art_tree_init(leaf_cnt->secondary_trie); _encodeTypeToBitmap(&(leaf_cnt->val_idx_dtype), PDC_STRING); rst = read_attr_value_node(leaf_cnt, 1, v_id_bulki, index_record_count); @@ -345,23 +382,26 @@ read_value_tree(key_index_leaf_content_t *leaf_cnt, int value_tree_idx, BULKI *v default: break; } - return rst; + + FUNC_LEAVE(rst); } int read_attr_name_node(IDIOMS_t *idioms, char *dir_path, char *base_name, uint32_t serverID, uint64_t vnode_id) { + FUNC_ENTER(NULL); + int rst = 0; char file_name[1024]; sprintf(file_name, "%s/%s_%" PRIu32 "_%" PRIu64 ".bin", dir_path, base_name, serverID, vnode_id); // check file existence if (access(file_name, F_OK) == -1) { - return FAIL; + FUNC_LEAVE(FAIL); } FILE *stream = fopen(file_name, "rb"); if (stream == NULL) { - return FAIL; + FUNC_LEAVE(FAIL); } BULKI *bulki = BULKI_deserialize_from_file(stream); @@ -374,7 +414,7 @@ read_attr_name_node(IDIOMS_t *idioms, char *dir_path, char *base_name, uint32_t } else { LOG_ERROR("Unknown base_name: %s\n", base_name); - return FAIL; + FUNC_LEAVE(FAIL); } LOG_INFO("Loaded Index from file_name: %s\n", file_name); @@ -387,7 +427,7 @@ read_attr_name_node(IDIOMS_t *idioms, char *dir_path, char *base_name, uint32_t BULKI_Entity * data_entity = &(kv_pair->value); key_index_leaf_content_t *leafcnt = - (key_index_leaf_content_t *)calloc(1, sizeof(key_index_leaf_content_t)); + (key_index_leaf_content_t *)PDC_calloc(1, sizeof(key_index_leaf_content_t)); art_insert(art_key_index, (const unsigned char *)key_entity->data, strlen(key_entity->data), leafcnt); BULKI *tree_bulki = (BULKI *)data_entity->data; @@ -420,18 +460,21 @@ read_attr_name_node(IDIOMS_t *idioms, char *dir_path, char *base_name, uint32_t read_value_tree(leafcnt, 3, v_id_bulki, &(idioms->index_record_count_g)); } } - return rst; + + FUNC_LEAVE(rst); } void load_dart_info(DART *dart, char *dir_path, uint32_t serverID) { + FUNC_ENTER(NULL); + if (serverID == 0) { char file_name[1024]; sprintf(file_name, "%s/%s.bin", dir_path, "dart_info"); FILE *stream = fopen(file_name, "rb"); if (stream == NULL) { - return; + FUNC_LEAVE_VOID(); } BULKI_Entity * dart_ent = BULKI_Entity_deserialize_from_file(stream); BULKI_Entity_Iterator *it = Bent_iterator_init(dart_ent, NULL, PDC_UNKNOWN); @@ -476,11 +519,15 @@ load_dart_info(DART *dart, char *dir_path, uint32_t serverID) i++; } } + + FUNC_LEAVE_VOID(); } perr_t idioms_metadata_index_recover(IDIOMS_t *idioms, char *dir_path, int num_server, uint32_t serverID) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; stopwatch_t timer; @@ -499,7 +546,8 @@ idioms_metadata_index_recover(IDIOMS_t *idioms, char *dir_path, int num_server, } } timer_pause(&timer); - println("[IDIOMS_Index_Recover_%d] Timer to recover index = %.4f microseconds\n", serverID, - timer_delta_us(&timer)); - return ret_value; + LOG_JUST_PRINT("[IDIOMS_Index_Recover_%d] Timer to recover index = %.4f microseconds\n", serverID, + timer_delta_us(&timer)); + + FUNC_LEAVE(ret_value); } diff --git a/src/commons/index/dart/index/idioms/include/idioms_local_index.h b/src/commons/index/dart/index/idioms/include/idioms_local_index.h index d4ba187f5..a53fd2117 100644 --- a/src/commons/index/dart/index/idioms/include/idioms_local_index.h +++ b/src/commons/index/dart/index/idioms/include/idioms_local_index.h @@ -6,6 +6,7 @@ #include "query_utils.h" #include "timer_utils.h" #include "pdc_generic.h" +#include "pdc_timing.h" #include "art.h" #include "pdc_set.h" #include "pdc_hash.h" @@ -93,14 +94,20 @@ typedef struct { static void _init_dart_space_via_idioms(DART *dart, int num_server) { + FUNC_ENTER(NULL); + dart_space_init(dart, num_server); + + FUNC_LEAVE_VOID(); } static void _encodeTypeToBitmap(uint8_t *bitmap, enum pdc_c_var_type_t type) { + FUNC_ENTER(NULL); + if (bitmap == NULL) { - return; + FUNC_LEAVE_VOID(); } if (type >= PDC_STRING) { // Non-numerical types *bitmap |= ((type - PDC_STRING + 1) << 4); // Shift by 4 to set in the higher 4 bits @@ -108,21 +115,25 @@ _encodeTypeToBitmap(uint8_t *bitmap, enum pdc_c_var_type_t type) else { // Numerical types *bitmap |= (type & 0x0F); // Ensure only lower 4 bits are used for numerical types } + + FUNC_LEAVE_VOID(); } // Function to get numerical type from the bitmap static enum pdc_c_var_type_t _getNumericalTypeFromBitmap(uint8_t bitmap) { - return (enum pdc_c_var_type_t)(bitmap & 0x0F); // Extract lower 4 bits + FUNC_ENTER(NULL); + FUNC_LEAVE((enum pdc_c_var_type_t)(bitmap & 0x0F)); // Extract lower 4 bits } // Function to get string (non-numerical) type from the bitmap static enum pdc_c_var_type_t _getCompoundTypeFromBitmap(uint8_t bitmap) { - return (enum pdc_c_var_type_t)(((bitmap >> 4) & 0x0F) + PDC_STRING - - 1); // Extract higher 4 bits and adjust index + FUNC_ENTER(NULL); + FUNC_LEAVE((enum pdc_c_var_type_t)(((bitmap >> 4) & 0x0F) + PDC_STRING - + 1)); // Extract higher 4 bits and adjust index } /** diff --git a/src/commons/logging/include/pdc_logger.h b/src/commons/logging/include/pdc_logger.h index 8d7ac720b..161945e85 100644 --- a/src/commons/logging/include/pdc_logger.h +++ b/src/commons/logging/include/pdc_logger.h @@ -18,25 +18,37 @@ static char logFilenames[4][MAX_LOG_FILE_NAME_LENGTH]; static PDC_LogLevel logLevel = LOG_LEVEL_INFO; void setLogFile(PDC_LogLevel level, const char *fileName); - void setLogLevel(PDC_LogLevel level); /** * just_print is equivalent to calling printf("%s", args) meaning no extra information * such as the file and line number will be printed */ -void log_message(bool just_print, PDC_LogLevel level, const char *file, const char *func, int line_number, - const char *format, ...); +void log_message(bool is_server, bool just_print, PDC_LogLevel level, const char *file, const char *func, + int line_number, const char *format, ...); +#ifdef IS_PDC_SERVER +#define LOG_ERROR(format, ...) \ + log_message(true, false, LOG_LEVEL_ERROR, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#define LOG_WARNING(format, ...) \ + log_message(true, false, LOG_LEVEL_WARNING, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#define LOG_INFO(format, ...) \ + log_message(true, false, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#define LOG_DEBUG(format, ...) \ + log_message(true, false, LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#define LOG_JUST_PRINT(format, ...) \ + log_message(true, true, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#else #define LOG_ERROR(format, ...) \ - log_message(false, LOG_LEVEL_ERROR, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + log_message(false, false, LOG_LEVEL_ERROR, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) #define LOG_WARNING(format, ...) \ - log_message(false, LOG_LEVEL_WARNING, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + log_message(false, false, LOG_LEVEL_WARNING, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) #define LOG_INFO(format, ...) \ - log_message(false, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + log_message(false, false, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) #define LOG_DEBUG(format, ...) \ - log_message(false, LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + log_message(false, false, LOG_LEVEL_DEBUG, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) #define LOG_JUST_PRINT(format, ...) \ - log_message(true, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) + log_message(false, true, LOG_LEVEL_INFO, __FILE__, __func__, __LINE__, format, ##__VA_ARGS__) +#endif #endif // PDC_LOGGER_H \ No newline at end of file diff --git a/src/commons/logging/pdc_logger.c b/src/commons/logging/pdc_logger.c index 86618222b..ce3b3d05e 100644 --- a/src/commons/logging/pdc_logger.c +++ b/src/commons/logging/pdc_logger.c @@ -1,4 +1,5 @@ #include "pdc_logger.h" +#include "pdc_timing.h" #include #include #include @@ -6,6 +7,7 @@ void setLogFile(PDC_LogLevel level, const char *fileName) { + FUNC_ENTER(NULL); if (logFiles[level] && logFiles[level] != stdout && logFiles[level] != stderr) { fclose(logFiles[level]); @@ -26,20 +28,28 @@ setLogFile(PDC_LogLevel level, const char *fileName) else { logFiles[level] = stdout; } + + FUNC_LEAVE_VOID(); } void setLogLevel(PDC_LogLevel level) { + FUNC_ENTER(NULL); + logLevel = level; + + FUNC_LEAVE_VOID(); } void rotate_log_file(PDC_LogLevel level) { + FUNC_ENTER(NULL); + if (logFiles[level]) { if (logFiles[level] == stdout || logFiles[level] == stderr) { - return; // for stdout and stderr, we don't rotate + FUNC_LEAVE_VOID(); // for stdout and stderr, we don't rotate } fclose(logFiles[level]); logFiles[level] = NULL; @@ -56,11 +66,15 @@ rotate_log_file(PDC_LogLevel level) snprintf(newFilename, MAX_LOG_FILE_NAME_LENGTH, "%s_%s", logFilenames[level], timeStr); rename(logFilenames[level], newFilename); logFiles[level] = fopen(logFilenames[level], "a"); + + FUNC_LEAVE_VOID(); } static FILE * get_cur_log_file(PDC_LogLevel level) { + FUNC_ENTER(NULL); + // Rotate log file if it exceeds the maximum size, but this doesn't apply to stdout and stderr if (logFiles[level] != stdout && logFiles[level] != stderr) { struct stat st; @@ -69,15 +83,18 @@ get_cur_log_file(PDC_LogLevel level) rotate_log_file(level); } } - return logFiles[level] ? logFiles[level] : stdout; + + FUNC_LEAVE(logFiles[level] ? logFiles[level] : stdout); } -void -_log_message(PDC_LogLevel level, const char *file, const char *func, int line_number, const char *format, - va_list args, bool just_print) +static void +_log_message(bool is_server, PDC_LogLevel level, const char *file, const char *func, int line_number, + const char *format, va_list args, bool just_print) { + FUNC_ENTER(NULL); + if (level > logLevel) { - return; + FUNC_LEAVE_VOID(); } FILE *logFile = get_cur_log_file(level); @@ -98,49 +115,82 @@ _log_message(PDC_LogLevel level, const char *file, const char *func, int line_nu break; } - // Extract only the filename (stem) from the full path + // Extract only the filename from the full path const char *filename = strrchr(file, '/'); - if (filename) { - filename++; - } - else { - filename = file; - } + filename = filename ? filename + 1 : file; - // Properly format timestamp + // Format timestamp struct timeval tv; gettimeofday(&tv, NULL); struct tm timeinfo; localtime_r(&tv.tv_sec, &timeinfo); char timestr[30]; - strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", &timeinfo); - - const char *log_format = "[%s.%06ld] [%s] [%s:%s:%d] %s"; + strftime(timestr, sizeof(timestr), "%H:%M:%S", &timeinfo); char message[MAX_LOG_MSG_LENGTH + 1]; vsnprintf(message, MAX_LOG_MSG_LENGTH, format, args); - fprintf(logFile, log_format, timestr, tv.tv_usec, prefix, filename, func, line_number, message); +#ifdef ENABLE_MPI + static int my_rank = -1; + if (my_rank == -1) + my_rank = PDC_get_rank(); +#endif + + // Print differently based on log level + if (level == LOG_LEVEL_ERROR || level == LOG_LEVEL_DEBUG) { +#ifdef ENABLE_MPI + if (is_server) + fprintf(logFile, "[%s.%06ld] [%s] [%s:%d] PDC_SERVER[%d]: %s", timestr, tv.tv_usec, prefix, + filename, line_number, my_rank, message); + else + fprintf(logFile, "[%s.%06ld] [%s] [%s:%d] PDC_CLIENT[%d]: %s", timestr, tv.tv_usec, prefix, + filename, line_number, my_rank, message); +#else + if (is_server) + fprintf(logFile, "[%s.%06ld] [%s] [%s:%d] PDC_SERVER: %s", timestr, tv.tv_usec, prefix, + filename, line_number, message); + else + fprintf(logFile, "[%s.%06ld] [%s] [%s:%d] PC_CLIENT: %s", timestr, tv.tv_usec, prefix, + filename, line_number, message); +#endif + } + else { +#ifdef ENABLE_MPI + if (is_server) + fprintf(logFile, "[%s] PDC_SERVER[%d]: %s", prefix, my_rank, message); + else + fprintf(logFile, "[%s] PDC_CLIENT[%d]: %s", prefix, my_rank, message); +#else + if (is_server) + fprintf(logFile, "[%s] PDC_SERVER: %s", prefix, message); + else + fprintf(logFile, "[%s] PC_CLIENT: %s", prefix, message); +#endif + } } else { const char *log_format = "%s"; char message[MAX_LOG_MSG_LENGTH + 1]; vsnprintf(message, MAX_LOG_MSG_LENGTH, format, args); - fprintf(logFile, log_format, message); } fflush(logFile); + + FUNC_LEAVE_VOID(); } void -log_message(bool just_print, PDC_LogLevel level, const char *file, const char *func, int line_number, - const char *format, ...) +log_message(bool is_server, bool just_print, PDC_LogLevel level, const char *file, const char *func, + int line_number, const char *format, ...) { + FUNC_ENTER(NULL); va_list args; va_start(args, format); - _log_message(level, file, func, line_number, format, args, just_print); + _log_message(is_server, level, file, func, line_number, format, args, just_print); va_end(args); + + FUNC_LEAVE_VOID(); } \ No newline at end of file diff --git a/src/commons/profiling/pdc_hashtab.c b/src/commons/profiling/pdc_hashtab.c index 3483e5ef3..8008ee4f8 100644 --- a/src/commons/profiling/pdc_hashtab.c +++ b/src/commons/profiling/pdc_hashtab.c @@ -38,14 +38,30 @@ Boston, MA 02111-1307, USA. */ #include "pdc_config.h" #include "pdc_hashtab.h" #include "pdc_logger.h" +#include "pdc_timing.h" + +// see comment in pdc_stack_ops.c +#ifdef ENABLE_PROFILING +#undef PDC_Malloc +#undef PDC_Realloc +#undef PDC_Free +#undef PDC_Calloc +#define PDC_Malloc malloc +#define PDC_Realloc realloc +#define PDC_Free(p) ((void *)free(p), (void *)NULL) +#define PDC_Calloc calloc + +#undef FUNC_ENTER +#undef FUNC_LEAVE +#define FUNC_ENTER(x) +#define FUNC_LEAVE(x) return (x) +#endif /* This macro defines reserved value for empty table entry. */ - #define EMPTY_ENTRY ((PTR)0) /* This macro defines reserved value for table entry which contained a deleted element. */ - #define DELETED_ENTRY ((PTR)1) static unsigned long higher_prime_number(unsigned long); @@ -65,6 +81,8 @@ htab_eq htab_eq_pointer = eq_pointer; static unsigned long higher_prime_number(n) unsigned long n; { + FUNC_ENTER(NULL); + /* These are primes that are near, but slightly smaller than, a power of two. */ static const unsigned long primes[] = { @@ -118,14 +136,15 @@ static unsigned long higher_prime_number(n) unsigned long n; abort(); } - return *low; + FUNC_LEAVE(*low); } /* Returns a hash code for P. */ static hashval_t hash_pointer(p) const PTR p; { - return (hashval_t)((long)p >> 3); + FUNC_ENTER(NULL); + FUNC_LEAVE((hashval_t)((long)p >> 3)); } /* Returns non-zero if P1 and P2 are equal. */ @@ -133,7 +152,8 @@ static hashval_t hash_pointer(p) const PTR p; static int eq_pointer(p1, p2) const PTR p1; const PTR p2; { - return p1 == p2; + FUNC_ENTER(NULL); + FUNC_LEAVE(p1 == p2); } /* This function creates table with length slightly longer than given @@ -148,17 +168,19 @@ htab_del del_f; htab_alloc alloc_f; htab_free free_f; { + FUNC_ENTER(NULL); + htab_t result; size = higher_prime_number(size); result = (htab_t)(*alloc_f)(1, sizeof(struct htab)); if (result == NULL) - return NULL; + FUNC_LEAVE(NULL); result->entries = (PTR *)(*alloc_f)(size, sizeof(PTR)); if (result->entries == NULL) { if (free_f != NULL) (*free_f)(result); - return NULL; + FUNC_LEAVE(NULL); } result->size = size; result->hash_f = hash_f; @@ -167,7 +189,7 @@ htab_free free_f; result->alloc_f = alloc_f; result->free_f = free_f; - return result; + FUNC_LEAVE(result); } /* These functions exist solely for backward compatibility. */ @@ -178,7 +200,8 @@ htab_hash hash_f; htab_eq eq_f; htab_del del_f; { - return htab_create_alloc(size, hash_f, eq_f, del_f, calloc, free); + FUNC_ENTER(NULL); + FUNC_LEAVE(htab_create_alloc(size, hash_f, eq_f, del_f, calloc, free)); } htab_t htab_try_create(size, hash_f, eq_f, del_f) size_t size; @@ -186,7 +209,8 @@ htab_hash hash_f; htab_eq eq_f; htab_del del_f; { - return htab_create_alloc(size, hash_f, eq_f, del_f, calloc, free); + FUNC_ENTER(NULL); + FUNC_LEAVE(htab_create_alloc(size, hash_f, eq_f, del_f, calloc, free)); } /* This function frees all memory allocated for given hash table. @@ -194,6 +218,8 @@ htab_del del_f; void htab_delete(htab) htab_t htab; { + FUNC_ENTER(NULL); + int i; if (htab->del_f) { @@ -205,12 +231,16 @@ void htab_delete(htab) htab_t htab; (*htab->free_f)(htab->entries); (*htab->free_f)(htab); } + + FUNC_LEAVE_VOID(); } /* This function clears all entries in the given hash table. */ void htab_empty(htab) htab_t htab; { + FUNC_ENTER(NULL); + int i; if (htab->del_f) @@ -219,6 +249,8 @@ void htab_empty(htab) htab_t htab; (*htab->del_f)(htab->entries[i]); memset(htab->entries, 0, htab->size * sizeof(PTR)); + + FUNC_LEAVE_VOID(); } /* Similar to htab_find_slot, but without several unwanted side effects: @@ -231,13 +263,15 @@ void htab_empty(htab) htab_t htab; static PTR *find_empty_slot_for_expand(htab, hash) htab_t htab; hashval_t hash; { + FUNC_ENTER(NULL); + size_t size = htab->size; unsigned int index = hash % size; PTR * slot = htab->entries + index; hashval_t hash2; if (*slot == EMPTY_ENTRY) - return slot; + FUNC_LEAVE(slot); else if (*slot == DELETED_ENTRY) abort(); @@ -249,7 +283,7 @@ hashval_t hash; slot = htab->entries + index; if (*slot == EMPTY_ENTRY) - return slot; + FUNC_LEAVE(slot); else if (*slot == DELETED_ENTRY) abort(); } @@ -265,6 +299,8 @@ hashval_t hash; static int htab_expand(htab) htab_t htab; { + FUNC_ENTER(NULL); + PTR *oentries; PTR *olimit; PTR *p; @@ -277,7 +313,7 @@ static int htab_expand(htab) htab_t htab; nentries = (PTR *)(*htab->alloc_f)(htab->size, sizeof(PTR *)); if (nentries == NULL) - return 0; + FUNC_LEAVE(0); htab->entries = nentries; htab->n_elements -= htab->n_deleted; htab->n_deleted = 0; @@ -296,7 +332,7 @@ static int htab_expand(htab) htab_t htab; if (htab->free_f != NULL) (*htab->free_f)(oentries); - return 1; + FUNC_LEAVE(1); } /* This function searches for a hash table entry equal to the given @@ -306,6 +342,8 @@ PTR htab_find_with_hash(htab, element, hash) htab_t htab; const PTR element; hashval_t hash; { + FUNC_ENTER(NULL); + unsigned int index; hashval_t hash2; size_t size; @@ -317,7 +355,7 @@ hashval_t hash; entry = htab->entries[index]; if (entry == EMPTY_ENTRY || (entry != DELETED_ENTRY && (*htab->eq_f)(entry, element))) - return entry; + FUNC_LEAVE(entry); hash2 = 1 + hash % (size - 2); @@ -329,7 +367,7 @@ hashval_t hash; entry = htab->entries[index]; if (entry == EMPTY_ENTRY || (entry != DELETED_ENTRY && (*htab->eq_f)(entry, element))) - return entry; + FUNC_LEAVE(entry); } } @@ -339,7 +377,8 @@ hashval_t hash; PTR htab_find(htab, element) htab_t htab; const PTR element; { - return htab_find_with_hash(htab, element, (*htab->hash_f)(element)); + FUNC_ENTER(NULL); + FUNC_LEAVE(htab_find_with_hash(htab, element, (*htab->hash_f)(element))); } /* This function searches for a hash table slot containing an entry @@ -355,6 +394,8 @@ const PTR element; hashval_t hash; enum insert_option insert; { + FUNC_ENTER(NULL); + PTR * first_deleted_slot; unsigned int index; hashval_t hash2; @@ -362,7 +403,7 @@ enum insert_option insert; PTR entry; if (insert == INSERT && htab->size * 3 <= htab->n_elements * 4 && htab_expand(htab) == 0) - return NULL; + FUNC_LEAVE(NULL); size = htab->size; index = hash % size; @@ -376,7 +417,7 @@ enum insert_option insert; else if (entry == DELETED_ENTRY) first_deleted_slot = &htab->entries[index]; else if ((*htab->eq_f)(entry, element)) - return &htab->entries[index]; + FUNC_LEAVE(&htab->entries[index]); hash2 = 1 + hash % (size - 2); for (;;) { @@ -393,31 +434,31 @@ enum insert_option insert; first_deleted_slot = &htab->entries[index]; } else if ((*htab->eq_f)(entry, element)) - return &htab->entries[index]; + FUNC_LEAVE(&htab->entries[index]); } empty_entry: if (insert == NO_INSERT) - return NULL; + FUNC_LEAVE(NULL); htab->n_elements++; if (first_deleted_slot) { *first_deleted_slot = EMPTY_ENTRY; - return first_deleted_slot; + FUNC_LEAVE(first_deleted_slot); } - return &htab->entries[index]; + FUNC_LEAVE(&htab->entries[index]); } /* Like htab_find_slot_with_hash, but compute the hash value from the element. */ - PTR * htab_find_slot(htab, element, insert) htab_t htab; const PTR element; enum insert_option insert; { - return htab_find_slot_with_hash(htab, element, (*htab->hash_f)(element), insert); + FUNC_ENTER(NULL); + FUNC_LEAVE(htab_find_slot_with_hash(htab, element, (*htab->hash_f)(element), insert)); } /* This function deletes an element with the given value from hash @@ -427,17 +468,21 @@ enum insert_option insert; void htab_remove_elt(htab, element) htab_t htab; PTR element; { + FUNC_ENTER(NULL); + PTR *slot; slot = htab_find_slot(htab, element, NO_INSERT); if (*slot == EMPTY_ENTRY) - return; + FUNC_LEAVE_VOID(); if (htab->del_f) (*htab->del_f)(*slot); *slot = DELETED_ENTRY; htab->n_deleted++; + + FUNC_LEAVE_VOID(); } /* This function clears a specified slot in a hash table. It is @@ -447,6 +492,8 @@ PTR element; void htab_clear_slot(htab, slot) htab_t htab; PTR *slot; { + FUNC_ENTER(NULL); + if (slot < htab->entries || slot >= htab->entries + htab->size || *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY) abort(); @@ -456,6 +503,8 @@ PTR *slot; *slot = DELETED_ENTRY; htab->n_deleted++; + + FUNC_LEAVE_VOID(); } /* This function scans over the entire hash table calling @@ -467,6 +516,8 @@ void htab_traverse(htab, callback, info) htab_t htab; htab_trav callback; PTR info; { + FUNC_ENTER(NULL); + PTR *slot = htab->entries; PTR *limit = slot + htab->size; @@ -476,20 +527,24 @@ PTR info; if (!(*callback)(slot, info)) break; } while (++slot < limit); + + FUNC_LEAVE_VOID(); } /* Return the current size of given hash table. */ size_t htab_size(htab) htab_t htab; { - return htab->size; + FUNC_ENTER(NULL); + FUNC_LEAVE(htab->size); } /* Return the current number of elements in given hash table. */ size_t htab_elements(htab) htab_t htab; { - return htab->n_elements - htab->n_deleted; + FUNC_ENTER(NULL); + FUNC_LEAVE(htab->n_elements - htab->n_deleted); } /* Return the fraction of fixed collisions during all work with given @@ -497,10 +552,12 @@ size_t htab_elements(htab) htab_t htab; double htab_collisions(htab) htab_t htab; { + FUNC_ENTER(NULL); + if (htab->searches == 0) - return 0.0; + FUNC_LEAVE(0.0); - return (double)htab->collisions / (double)htab->searches; + FUNC_LEAVE((double)htab->collisions / (double)htab->searches); } /* Hash P as a null-terminated string. @@ -530,6 +587,8 @@ double htab_collisions(htab) htab_t htab; hashval_t htab_hash_string(p) const PTR p; { + FUNC_ENTER(NULL); + const unsigned char *str = (const unsigned char *)p; hashval_t r = 0; unsigned char c; @@ -537,5 +596,5 @@ hashval_t htab_hash_string(p) const PTR p; while ((c = *str++) != 0) r = r * 67 + c - 113; - return r; + FUNC_LEAVE(r); } diff --git a/src/commons/profiling/pdc_stack_ops.c b/src/commons/profiling/pdc_stack_ops.c index 38dc65a26..3a1fa51af 100644 --- a/src/commons/profiling/pdc_stack_ops.c +++ b/src/commons/profiling/pdc_stack_ops.c @@ -4,6 +4,7 @@ #include "pdc_stack_ops.h" #include "pdc_logger.h" #include "pdc_hashtab.h" +#include "pdc_malloc.h" profileEntry_t *calltree = NULL; profileEntry_t *freelist = NULL; @@ -11,14 +12,33 @@ profileEntry_t *freelist = NULL; static int profilerrors = 0; hash_table_t hashtable; +htab_t thisHashTable; -htab_t thisHashTable; - -/* For now we disable profiling (by default) - * Note that one can always ENABLE it by set the - * environment variable "PROFILE_ENABLE=true" +/** + * We need to disable these macros in certain + * files (pdc_stack_ops.c, pdc_malloc.c, and pdc_hashtab.c) + * so we do not create an infinite recursion chain + * + * Only the FUNC_* need to be disabled in pdc_malloc.c */ +#ifdef ENABLE_PROFILING +pbool_t enableProfiling = TRUE; +#undef PDC_Malloc +#undef PDC_Realloc +#undef PDC_Free +#undef PDC_Calloc +#define PDC_Malloc malloc +#define PDC_Realloc realloc +#define PDC_Free(p) ((void *)free(p), (void *)NULL) +#define PDC_Calloc calloc + +#undef FUNC_ENTER +#undef FUNC_LEAVE +#define FUNC_ENTER(x) +#define FUNC_LEAVE(x) return (x) +#else pbool_t enableProfiling = FALSE; +#endif /* * The idea of this implementation is to simulate the call stack @@ -82,7 +102,6 @@ pbool_t enableProfiling = FALSE; * sum all of the individual profile times, the total should * match the execution time of the program. */ - void push(const char *ftnkey, const char *tags) { @@ -92,7 +111,7 @@ push(const char *ftnkey, const char *tags) freelist = thisEntry->next; } else { - if ((thisEntry = (profileEntry_t *)malloc(sizeof(profileEntry_t))) == NULL) { + if ((thisEntry = (profileEntry_t *)PDC_malloc(sizeof(profileEntry_t))) == NULL) { perror("malloc"); profilerrors++; } @@ -134,7 +153,8 @@ pop() void **tableEntry = htab_find_slot(thisHashTable, thisEntry, INSERT); if (*tableEntry == NULL) { /* No table entry found so add it now ... */ - master = (profileEntry_t *)malloc(sizeof(profileEntry_t)); + // do NOT use will cause infinite recursion between PDC_malloc and pop + master = (profileEntry_t *)PDC_malloc(sizeof(profileEntry_t)); if (master) { thisEntry->count = 1; memcpy(master, thisEntry, sizeof(profileEntry_t)); @@ -197,8 +217,9 @@ show_profile_info(void **ht_live_entry, void *extraInfo ATTRIBUTE(unused)) if (count == 0) puts(header); totalTime = thisEntry->totalTime; - LOG_INFO("%s\n %d\t%-6" PRId64 " %6" PRId64 ",%6" PRId64 "\t\t %s\n", LineBreak, ++count, totalCalls, - totalTime.tv_sec / totalCalls, totalTime.tv_nsec / totalCalls, thisEntry->ftnkey); + LOG_JUST_PRINT("%s\n %d\t%-6" PRId64 " %6" PRId64 ",%6" PRId64 "\t\t %s\n", LineBreak, ++count, + totalCalls, totalTime.tv_sec / totalCalls, totalTime.tv_nsec / totalCalls, + thisEntry->ftnkey); } return TRUE; @@ -224,7 +245,6 @@ toggle_profile_enable() * The profile_fini should probably be used to dump the contents of the profile * hashtable. */ - void __attribute__((constructor)) profile_init(void) { int default_HashtableSize = 128; diff --git a/src/commons/query/qc_parser.c b/src/commons/query/qc_parser.c index b2c015156..f3bec9561 100644 --- a/src/commons/query/qc_parser.c +++ b/src/commons/query/qc_parser.c @@ -1,9 +1,13 @@ #include "qc_parser.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" void printSubExpression(char *expression, Condition *condition) { + FUNC_ENTER(NULL); + if (condition == NULL) { LOG_JUST_PRINT("NULL\n"); return; @@ -19,23 +23,30 @@ printSubExpression(char *expression, Condition *condition) printSubExpression(expression, condition->left); LOG_JUST_PRINT("right:"); printSubExpression(expression, condition->right); + + FUNC_LEAVE_VOID(); } Condition * createSubCondition(int start, int end, int level) { - Condition *condition = (Condition *)malloc(sizeof(Condition)); + FUNC_ENTER(NULL); + + Condition *condition = (Condition *)PDC_malloc(sizeof(Condition)); condition->start = start; condition->end = end; condition->level = level; - return condition; + + FUNC_LEAVE(condition); } int isFactor(char *expression, Condition *condition) { + FUNC_ENTER(NULL); + if (condition->start == condition->end) { - return 0; + FUNC_LEAVE(0); } // if the string contains matching pairs of '(' and ')' then it is a string of expression int pLevel = 0; @@ -46,7 +57,7 @@ isFactor(char *expression, Condition *condition) if (expression[i] == ')') { pLevel--; if (pLevel == 0) { - return 1; + FUNC_LEAVE(1); } } } @@ -54,20 +65,23 @@ isFactor(char *expression, Condition *condition) // if the string contains 'AND'/'OR' then it is not a factor for (int i = condition->start; i < condition->end; i++) { if (expression[i] == 'A' && expression[i + 1] == 'N' && expression[i + 2] == 'D') { - return 0; + FUNC_LEAVE(0); } if (expression[i] == 'O' && expression[i + 1] == 'R') { - return 0; + FUNC_LEAVE(0); } } - return 1; + + FUNC_LEAVE(1); } int isTerm(char *expression, Condition *condition) { + FUNC_ENTER(NULL); + if (condition->start == condition->end) { - return 0; + FUNC_LEAVE(0); } // if the string contains matching pairs of '(' and ')' then it is a string of expression int pLevel = 0; @@ -80,22 +94,26 @@ isTerm(char *expression, Condition *condition) } } if (pLevel == 0) { - return 1; + FUNC_LEAVE(1); } // if the string contains 'AND'/'OR' then it is not a factor for (int i = condition->start; i < condition->end; i++) { if (expression[i] == 'A' && expression[i + 1] == 'N' && expression[i + 2] == 'D') { - return 1; + FUNC_LEAVE(1); } } - return 0; + + FUNC_LEAVE(0); } + int isExpression(char *expression, Condition *condition); int isExpressionStringFactor(char *expression, Condition *condition); int extractExpression(char *expression, Condition *condition) { + FUNC_ENTER(NULL); + int levelCounter = condition->level; int i1 = condition->start; int i2 = i1 + 1; @@ -137,16 +155,18 @@ extractExpression(char *expression, Condition *condition) i2 = i1 + 1; rst = 0; } - return rst; + + FUNC_LEAVE(rst); } int extractTerm(char *expression, Condition *condition); - int extractFactor(char *expression, Condition *condition); int splitCondition(char *expression, Condition *condition) { + FUNC_ENTER(NULL); + int levelCounter = condition->level; int i1 = condition->start; int i2 = i1 + 1; @@ -197,12 +217,15 @@ splitCondition(char *expression, Condition *condition) i2 = i1 + 1; rst = 0; } - return rst; + + FUNC_LEAVE(rst); } int subClauseExtractor(char *expression, int start, int end, int level, subClause **subPtr) { + FUNC_ENTER(NULL); + int levelCounter = level; *subPtr = NULL; // Initially, there are no subclauses. int numSubClauses = 0; @@ -212,10 +235,10 @@ subClauseExtractor(char *expression, int start, int end, int level, subClause ** levelCounter++; if (levelCounter == level + 1) { // Allocate or reallocate space for a new subclause. - *subPtr = (subClause *)realloc(*subPtr, sizeof(subClause) * (numSubClauses + 1)); - subClause *newClause = &((*subPtr)[numSubClauses]); - newClause->start = i + 1; - newClause->level = levelCounter; + *subPtr = (subClause *)PDC_realloc(*subPtr, sizeof(subClause) * (numSubClauses + 1)); + subClause *newClause = &((*subPtr)[numSubClauses]); + newClause->start = i + 1; + newClause->level = levelCounter; newClause->subClauseArray = NULL; // Important to initialize. } } @@ -230,12 +253,15 @@ subClauseExtractor(char *expression, int start, int end, int level, subClause ** } } } - return numSubClauses; + + FUNC_LEAVE(numSubClauses); } void printSubClauses(char *expression, subClause *subPtr, int numSubClauses) { + FUNC_ENTER(NULL); + for (int i = 0; i < numSubClauses; i++) { LOG_JUST_PRINT("SubClause %d: Level: %d, Expression: ", i, subPtr[i].level); for (int j = subPtr[i].start; j <= subPtr[i].end; j++) { @@ -246,4 +272,6 @@ printSubClauses(char *expression, subClause *subPtr, int numSubClauses) printSubClauses(expression, subPtr[i].subClauseArray, subPtr[i].numSubClauses); } } + + FUNC_LEAVE_VOID(); } \ No newline at end of file diff --git a/src/commons/query/qc_parser_test.c b/src/commons/query/qc_parser_test.c index 36babbf68..27ccaf3b8 100644 --- a/src/commons/query/qc_parser_test.c +++ b/src/commons/query/qc_parser_test.c @@ -1,8 +1,11 @@ #include "qc_parser.h" +#include "pdc_timing.h" int main() { + FUNC_ENTER(NULL); + char *expression = "z=\"tsa\" AND t=234234 OR NOT (e=234 AND (a=123 OR b=\"abc\") AND ((NOT c=987) OR d=258))"; Condition *root = (Condition *)malloc(sizeof(Condition)); @@ -10,4 +13,6 @@ main() root->end = strlen(expression); root->level = 0; splitCondition(expression, root); + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/serde/bulki/bulki.c b/src/commons/serde/bulki/bulki.c index 8a9b607f7..b9d4deaeb 100644 --- a/src/commons/serde/bulki/bulki.c +++ b/src/commons/serde/bulki/bulki.c @@ -1,12 +1,16 @@ #include "bulki.h" #include "bulki_vle_util.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" size_t get_BULKI_Entity_size(BULKI_Entity *bulk_entity) { + FUNC_ENTER(NULL); + if (bulk_entity == NULL) { - return 0; + FUNC_LEAVE(0); } size_t size = sizeof(int8_t) * 2 + sizeof(uint64_t) * 2; @@ -42,14 +46,17 @@ get_BULKI_Entity_size(BULKI_Entity *bulk_entity) } } bulk_entity->size = size; - return size; + + FUNC_LEAVE(size); } size_t get_BULKI_size(BULKI *bulki) { + FUNC_ENTER(NULL); + if (bulki == NULL) { - return 0; + FUNC_LEAVE(0); } size_t size = sizeof(uint64_t) * 6; // totalSize, numKeys, headerSize, dataSize, headerOffset, dataOffset @@ -58,15 +65,18 @@ get_BULKI_size(BULKI *bulki) size += get_BULKI_Entity_size(&bulki->data->values[i]); } bulki->totalSize = size; - return size; + + FUNC_LEAVE(size); } void BULKI_Entity_print(BULKI_Entity *bulk_entity) { + FUNC_ENTER(NULL); + if (bulk_entity == NULL) { LOG_ERROR("bulki_entity is NULL\n"); - return; + FUNC_LEAVE_VOID(); } LOG_INFO("BULKI_Entity:\n"); LOG_INFO("pdc_class: %d\n", bulk_entity->pdc_class); @@ -105,14 +115,18 @@ BULKI_Entity_print(BULKI_Entity *bulk_entity) LOG_INFO("%s\n", DataTypeNames[bulk_entity->pdc_type]); } } + + FUNC_LEAVE_VOID(); } void BULKI_print(BULKI *bulki) { + FUNC_ENTER(NULL); + if (bulki == NULL) { LOG_ERROR("Error: bulki is NULL\n"); - return; + FUNC_LEAVE_VOID(); } LOG_INFO("BULKI:\n"); LOG_INFO("totalSize: %zu\n", bulki->totalSize); @@ -125,112 +139,134 @@ BULKI_print(BULKI *bulki) LOG_INFO("value[%zu]:\n", i); BULKI_Entity_print(&bulki->data->values[i]); } + + FUNC_LEAVE_VOID(); } BULKI_Entity * empty_BULKI_Array_Entity() { - BULKI_Entity *bulki_entity = (BULKI_Entity *)calloc(1, sizeof(BULKI_Entity)); + FUNC_ENTER(NULL); + + BULKI_Entity *bulki_entity = (BULKI_Entity *)PDC_calloc(1, sizeof(BULKI_Entity)); bulki_entity->pdc_type = PDC_BULKI; bulki_entity->pdc_class = PDC_CLS_ARRAY; bulki_entity->count = 0; bulki_entity->data = NULL; get_BULKI_Entity_size(bulki_entity); - return bulki_entity; + + FUNC_LEAVE(bulki_entity); } BULKI_Entity * empty_Bent_Array_Entity() { - BULKI_Entity *bulki_entity = (BULKI_Entity *)calloc(1, sizeof(BULKI_Entity)); + FUNC_ENTER(NULL); + + BULKI_Entity *bulki_entity = (BULKI_Entity *)PDC_calloc(1, sizeof(BULKI_Entity)); bulki_entity->pdc_type = PDC_BULKI_ENT; bulki_entity->pdc_class = PDC_CLS_ARRAY; bulki_entity->count = 0; bulki_entity->data = NULL; get_BULKI_Entity_size(bulki_entity); - return bulki_entity; + + FUNC_LEAVE(bulki_entity); } BULKI_Entity * BULKI_ENTITY_append_BULKI(BULKI_Entity *dest, BULKI *src) { + FUNC_ENTER(NULL); + if (src == NULL || dest == NULL) { LOG_ERROR("Error: bulki is NULL\n"); - return NULL; + FUNC_LEAVE(NULL); } if (dest->pdc_class != PDC_CLS_ARRAY || dest->pdc_type != PDC_BULKI) { LOG_ERROR("Error: dest is not an array of BULKI structure\n"); - return NULL; + FUNC_LEAVE(NULL); } dest->count = dest->count + 1; - dest->data = realloc(dest->data, dest->count * sizeof(BULKI)); + dest->data = PDC_realloc(dest->data, dest->count * sizeof(BULKI)); memcpy(dest->data + (dest->count - 1) * sizeof(BULKI), src, sizeof(BULKI)); get_BULKI_Entity_size(dest); - return dest; + + FUNC_LEAVE(dest); } BULKI * BULKI_ENTITY_get_BULKI(BULKI_Entity *bulki_entity, size_t idx) { + FUNC_ENTER(NULL); + if (bulki_entity == NULL) { LOG_ERROR("Error: bulki_entity is NULL\n"); - return NULL; + FUNC_LEAVE(NULL); } if (bulki_entity->pdc_class != PDC_CLS_ARRAY || bulki_entity->pdc_type != PDC_BULKI) { LOG_ERROR("Error: bulki_entity is not an array of BULKI structure\n"); - return NULL; + FUNC_LEAVE(NULL); } if (idx >= bulki_entity->count) { LOG_WARNING("idx = %d, count = %d Warning: index for bulki_entity is out of bound\n", idx, bulki_entity->count); - return NULL; + FUNC_LEAVE(NULL); } - return &((BULKI *)bulki_entity->data)[idx]; + + FUNC_LEAVE(&((BULKI *)bulki_entity->data)[idx]); } BULKI_Entity * BULKI_ENTITY_append_BULKI_Entity(BULKI_Entity *dest, BULKI_Entity *src) { + FUNC_ENTER(NULL); + if (src == NULL || dest == NULL) { LOG_ERROR("Error: bulki is NULL\n"); - return NULL; + FUNC_LEAVE(NULL); } if (dest->pdc_class != PDC_CLS_ARRAY || dest->pdc_type != PDC_BULKI_ENT) { LOG_ERROR("Error: dest is not an array of BULKI_Entity structure\n"); - return NULL; + FUNC_LEAVE(NULL); } dest->count = dest->count + 1; - dest->data = realloc(dest->data, dest->count * sizeof(BULKI_Entity)); + dest->data = PDC_realloc(dest->data, dest->count * sizeof(BULKI_Entity)); memcpy(dest->data + (dest->count - 1) * sizeof(BULKI_Entity), src, sizeof(BULKI_Entity)); get_BULKI_Entity_size(dest); - return dest; + + FUNC_LEAVE(dest); } BULKI_Entity * BULKI_ENTITY_get_BULKI_Entity(BULKI_Entity *bulki_entity, size_t idx) { + FUNC_ENTER(NULL); + if (bulki_entity == NULL) { LOG_ERROR("Error: bulki_entity is NULL\n"); - return NULL; + FUNC_LEAVE(NULL); } if (bulki_entity->pdc_class != PDC_CLS_ARRAY || bulki_entity->pdc_type != PDC_BULKI_ENT) { LOG_ERROR("Error: bulki_entity is not an array of BULKI_Entity structure\n"); - return NULL; + FUNC_LEAVE(NULL); } if (idx >= bulki_entity->count) { - return NULL; + FUNC_LEAVE(NULL); } - return &((BULKI_Entity *)bulki_entity->data)[idx]; + + FUNC_LEAVE(&((BULKI_Entity *)bulki_entity->data)[idx]); } BULKI_Entity * BULKI_ENTITY(void *data, uint64_t count, pdc_c_var_type_t pdc_type, pdc_c_var_class_t pdc_class) { + FUNC_ENTER(NULL); + if (pdc_type == PDC_BULKI_ENT && pdc_class == PDC_CLS_ITEM) { LOG_ERROR("Error: BULKI_Entity cannot be an single item in another BULKI_Entity\n"); - return NULL; + FUNC_LEAVE(NULL); } - BULKI_Entity *bulki_entity = (BULKI_Entity *)calloc(1, sizeof(BULKI_Entity)); + BULKI_Entity *bulki_entity = (BULKI_Entity *)PDC_calloc(1, sizeof(BULKI_Entity)); bulki_entity->pdc_type = pdc_type; bulki_entity->pdc_class = pdc_class; bulki_entity->count = (pdc_class == PDC_CLS_ITEM) ? 1 : count; @@ -244,49 +280,57 @@ BULKI_ENTITY(void *data, uint64_t count, pdc_c_var_type_t pdc_type, pdc_c_var_cl bulki_entity->data = data; } else { - bulki_entity->data = calloc(1, size); + bulki_entity->data = PDC_calloc(1, size); memcpy(bulki_entity->data, data, size); } get_BULKI_Entity_size(bulki_entity); - return bulki_entity; + + FUNC_LEAVE(bulki_entity); } BULKI_Entity * BULKI_singleton_ENTITY(void *data, pdc_c_var_type_t pdc_type) { - return BULKI_ENTITY(data, 1, pdc_type, PDC_CLS_ITEM); + FUNC_ENTER(NULL); + FUNC_LEAVE(BULKI_ENTITY(data, 1, pdc_type, PDC_CLS_ITEM)); } BULKI_Entity * BULKI_array_ENTITY(void *data, uint64_t count, pdc_c_var_type_t pdc_type) { - return BULKI_ENTITY(data, count, pdc_type, PDC_CLS_ARRAY); + FUNC_ENTER(NULL); + FUNC_LEAVE(BULKI_ENTITY(data, count, pdc_type, PDC_CLS_ARRAY)); } BULKI * BULKI_init(int initial_field_count) { - BULKI *buiki = calloc(1, sizeof(BULKI)); + FUNC_ENTER(NULL); + + BULKI *buiki = PDC_calloc(1, sizeof(BULKI)); buiki->numKeys = 0; buiki->capacity = initial_field_count; - buiki->header = calloc(1, sizeof(BULKI_Header)); - buiki->header->keys = calloc(buiki->capacity, sizeof(BULKI_Entity)); + buiki->header = PDC_calloc(1, sizeof(BULKI_Header)); + buiki->header->keys = PDC_calloc(buiki->capacity, sizeof(BULKI_Entity)); buiki->header->headerSize = 0; - buiki->data = calloc(1, sizeof(BULKI_Data)); - buiki->data->values = calloc(buiki->capacity, sizeof(BULKI_Entity)); + buiki->data = PDC_calloc(1, sizeof(BULKI_Data)); + buiki->data->values = PDC_calloc(buiki->capacity, sizeof(BULKI_Entity)); buiki->data->dataSize = 0; get_BULKI_size(buiki); - return buiki; + + FUNC_LEAVE(buiki); } int BULKI_Entity_equal(BULKI_Entity *be1, BULKI_Entity *be2) { + FUNC_ENTER(NULL); + int meta_equal = be1->pdc_type == be2->pdc_type && be1->pdc_class == be2->pdc_class && be1->count == be2->count && be1->size == be2->size; if (!meta_equal) { - return 0; + FUNC_LEAVE(0); } if (be1->pdc_class == PDC_CLS_ARRAY) { if (be1->pdc_type == PDC_BULKI) { @@ -294,7 +338,7 @@ BULKI_Entity_equal(BULKI_Entity *be1, BULKI_Entity *be2) BULKI *bulki_array2 = (BULKI *)be2->data; for (size_t i = 0; i < be1->count; i++) { if (!BULKI_equal(&bulki_array1[i], &bulki_array2[i])) { - return 0; + FUNC_LEAVE(0); } } } @@ -303,56 +347,62 @@ BULKI_Entity_equal(BULKI_Entity *be1, BULKI_Entity *be2) BULKI_Entity *bulki_entity_array2 = (BULKI_Entity *)be2->data; for (size_t i = 0; i < be1->count; i++) { if (!BULKI_Entity_equal(&bulki_entity_array1[i], &bulki_entity_array2[i])) { - return 0; + FUNC_LEAVE(0); } } } else { if (memcmp(be1->data, be2->data, be1->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2) != 0) { - return 0; + FUNC_LEAVE(0); } } } else if (be1->pdc_class == PDC_CLS_ITEM) { if (be1->pdc_type == PDC_BULKI) { if (!BULKI_equal((BULKI *)be1->data, (BULKI *)be2->data)) { - return 0; + FUNC_LEAVE(0); } } else { if (memcmp(be1->data, be2->data, be1->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2) != 0) { - return 0; + FUNC_LEAVE(0); } } } - return 1; + + FUNC_LEAVE(1); } int BULKI_equal(BULKI *bulki1, BULKI *bulki2) { + FUNC_ENTER(NULL); + if (bulki1->numKeys != bulki2->numKeys || bulki1->totalSize != bulki2->totalSize || bulki1->header->headerSize != bulki2->header->headerSize || bulki1->data->dataSize != bulki2->data->dataSize) { LOG_ERROR("Error: bulki1 and bulki2 are not equal in terms of metadata\n"); - return 0; + FUNC_LEAVE(0); } for (size_t i = 0; i < bulki1->numKeys; i++) { if (!BULKI_Entity_equal(&bulki1->header->keys[i], &bulki2->header->keys[i]) || !BULKI_Entity_equal(&bulki1->data->values[i], &bulki2->data->values[i])) { LOG_ERROR("Error: bulki1 and bulki2 are not equal in terms of data\n"); - return 0; + FUNC_LEAVE(0); } } - return 1; + + FUNC_LEAVE(1); } void BULKI_put(BULKI *bulki, BULKI_Entity *key, BULKI_Entity *value) { + FUNC_ENTER(NULL); + if (bulki == NULL || key == NULL || value == NULL) { LOG_ERROR("Error: bulki, key, or value is NULL\n"); - return; + FUNC_LEAVE_VOID(); } // search for existing key BULKI_Entity *existing_value = BULKI_get(bulki, key); @@ -363,12 +413,12 @@ BULKI_put(BULKI *bulki, BULKI_Entity *key, BULKI_Entity *value) bulki->header->headerSize += key->size; bulki->data->dataSize += value->size; get_BULKI_size(bulki); - return; + FUNC_LEAVE_VOID(); } if (bulki->numKeys >= bulki->capacity) { bulki->capacity *= 2; - bulki->header->keys = realloc(bulki->header->keys, bulki->capacity * sizeof(BULKI_Entity)); - bulki->data->values = realloc(bulki->data->values, bulki->capacity * sizeof(BULKI_Entity)); + bulki->header->keys = PDC_realloc(bulki->header->keys, bulki->capacity * sizeof(BULKI_Entity)); + bulki->data->values = PDC_realloc(bulki->data->values, bulki->capacity * sizeof(BULKI_Entity)); } memcpy(&bulki->header->keys[bulki->numKeys], key, sizeof(BULKI_Entity)); // append bytes for type, size, and key @@ -380,11 +430,15 @@ BULKI_put(BULKI *bulki, BULKI_Entity *key, BULKI_Entity *value) bulki->numKeys++; get_BULKI_size(bulki); + + FUNC_LEAVE_VOID(); } BULKI_Entity * BULKI_delete(BULKI *bulki, BULKI_Entity *key) { + FUNC_ENTER(NULL); + BULKI_Entity *value = NULL; for (size_t i = 0; i < bulki->numKeys; i++) { if (BULKI_Entity_equal(&bulki->header->keys[i], key)) { @@ -398,17 +452,20 @@ BULKI_delete(BULKI *bulki, BULKI_Entity *key) } } get_BULKI_size(bulki); - return value; + + FUNC_LEAVE(value); } BULKI_Entity_Iterator * Bent_iterator_init(BULKI_Entity *array, void *filter, pdc_c_var_type_t filter_type) { + FUNC_ENTER(NULL); + if (array == NULL || array->pdc_class != PDC_CLS_ARRAY) { LOG_ERROR("Error: not a proper array\n"); - return NULL; + FUNC_LEAVE(NULL); } - BULKI_Entity_Iterator *iter = (BULKI_Entity_Iterator *)calloc(1, sizeof(BULKI_Entity_Iterator)); + BULKI_Entity_Iterator *iter = (BULKI_Entity_Iterator *)PDC_calloc(1, sizeof(BULKI_Entity_Iterator)); iter->entity_array = array; iter->total_size = array->count; iter->current_idx = 0; @@ -419,14 +476,17 @@ Bent_iterator_init(BULKI_Entity *array, void *filter, pdc_c_var_type_t filter_ty iter->filter_type = filter_type; } // if the filter is not appropriate, just ignore it. } - return iter; + + FUNC_LEAVE(iter); } int Bent_iterator_has_next_BULKI(BULKI_Entity_Iterator *it) { + FUNC_ENTER(NULL); + if (it->bent_filter == NULL) { - return it->current_idx < it->total_size; + FUNC_LEAVE(it->current_idx < it->total_size); } else { while (it->current_idx < it->total_size) { @@ -434,20 +494,23 @@ Bent_iterator_has_next_BULKI(BULKI_Entity_Iterator *it) BULKI *array_content = (BULKI *)it->entity_array->data; BULKI *current_bulki = &(array_content[it->current_idx]); if (BULKI_equal(current_bulki, it->bent_filter)) { - return 1; + FUNC_LEAVE(1); } } it->current_idx++; } } - return 0; + + FUNC_LEAVE(0); } int Bent_iterator_has_next_Bent(BULKI_Entity_Iterator *it) { + FUNC_ENTER(NULL); + if (it->bent_filter == NULL) { - return it->current_idx < it->total_size; + FUNC_LEAVE(it->current_idx < it->total_size); } else { while (it->current_idx < it->total_size) { @@ -455,86 +518,105 @@ Bent_iterator_has_next_Bent(BULKI_Entity_Iterator *it) BULKI_Entity *array_content = (BULKI_Entity *)it->entity_array->data; BULKI_Entity *current_entity = &(array_content[it->current_idx]); if (BULKI_Entity_equal(current_entity, it->bent_filter)) { - return 1; + FUNC_LEAVE(1); } } it->current_idx++; } } - return 0; + + FUNC_LEAVE(0); } BULKI * Bent_iterator_next_BULKI(BULKI_Entity_Iterator *it) { + FUNC_ENTER(NULL); + if (it->current_idx < it->total_size) { if (it->entity_array->pdc_type == PDC_BULKI) { BULKI *array_content = (BULKI *)it->entity_array->data; - return &(array_content[it->current_idx++]); + FUNC_LEAVE(&(array_content[it->current_idx++])); } } - return NULL; + + FUNC_LEAVE(NULL); } BULKI_Entity * Bent_iterator_next_Bent(BULKI_Entity_Iterator *it) { + FUNC_ENTER(NULL); + if (it->current_idx < it->total_size) { if (it->entity_array->pdc_type == PDC_BULKI_ENT) { BULKI_Entity *array_content = (BULKI_Entity *)it->entity_array->data; - return &(array_content[it->current_idx++]); + FUNC_LEAVE(&(array_content[it->current_idx++])); } } - return NULL; + + FUNC_LEAVE(NULL); } BULKI_KV_Pair_Iterator * BULKI_KV_Pair_iterator_init(BULKI *bulki) { + FUNC_ENTER(NULL); + if (bulki == NULL) { LOG_ERROR("Error: bulki is NULL\n"); - return NULL; + FUNC_LEAVE(NULL); } - BULKI_KV_Pair_Iterator *iter = (BULKI_KV_Pair_Iterator *)calloc(1, sizeof(BULKI_KV_Pair_Iterator)); + BULKI_KV_Pair_Iterator *iter = (BULKI_KV_Pair_Iterator *)PDC_calloc(1, sizeof(BULKI_KV_Pair_Iterator)); iter->bulki = bulki; iter->total_size = bulki->numKeys; iter->current_idx = 0; - return iter; + + FUNC_LEAVE(iter); } int BULKI_KV_Pair_iterator_has_next(BULKI_KV_Pair_Iterator *it) { - return it->current_idx < it->total_size; + FUNC_ENTER(NULL); + FUNC_LEAVE(it->current_idx < it->total_size); } BULKI_KV_Pair * BULKI_KV_Pair_iterator_next(BULKI_KV_Pair_Iterator *it) { + FUNC_ENTER(NULL); + if (it->current_idx < it->total_size) { - BULKI_KV_Pair *pair = (BULKI_KV_Pair *)calloc(1, sizeof(BULKI_KV_Pair)); + BULKI_KV_Pair *pair = (BULKI_KV_Pair *)PDC_calloc(1, sizeof(BULKI_KV_Pair)); pair->key = it->bulki->header->keys[it->current_idx]; pair->value = it->bulki->data->values[it->current_idx]; it->current_idx++; - return pair; + FUNC_LEAVE(pair); } - return NULL; + + FUNC_LEAVE(NULL); } BULKI_Entity * BULKI_get(BULKI *bulki, BULKI_Entity *key) { + FUNC_ENTER(NULL); + for (size_t i = 0; i < bulki->numKeys; i++) { if (BULKI_Entity_equal(&bulki->header->keys[i], key)) { - return &bulki->data->values[i]; + FUNC_LEAVE(&bulki->data->values[i]); } } - return NULL; + + FUNC_LEAVE(NULL); } void BULKI_Entity_free(BULKI_Entity *bulk_entity, int free_struct) { + FUNC_ENTER(NULL); + if (bulk_entity != NULL) { if (bulk_entity->pdc_class == PDC_CLS_ARRAY) { // if the entity is an array of BULKI or BULKI_Entity if (bulk_entity->pdc_type == PDC_BULKI && bulk_entity->data != NULL) { @@ -567,29 +649,33 @@ BULKI_Entity_free(BULKI_Entity *bulk_entity, int free_struct) "bulki_entity->class: %d, bulki_entity->class: %d, bulki_entity->data: %p, bulki_entity: " "%p\n", bulk_entity->pdc_class, bulk_entity->pdc_type, bulk_entity->data, bulk_entity); - free(bulk_entity->data); + bulk_entity->data = (void *)PDC_free(bulk_entity->data); bulk_entity->data = NULL; } if (free_struct) { - free(bulk_entity); + bulk_entity = (BULKI_Entity *)PDC_free(bulk_entity); bulk_entity = NULL; } } + + FUNC_LEAVE_VOID(); } // BULKI_Entity_free void BULKI_free(BULKI *bulki, int free_struct) { + FUNC_ENTER(NULL); + if (bulki != NULL) { if (bulki->header != NULL) { if (bulki->header->keys != NULL) { for (size_t i = 0; i < bulki->numKeys; i++) { BULKI_Entity_free(&bulki->header->keys[i], 0); } - free(bulki->header->keys); + bulki->header->keys = (BULKI_Entity *)PDC_free(bulki->header->keys); bulki->header->keys = NULL; } - free(bulki->header); + bulki->header = (BULKI_Header *)PDC_free(bulki->header); bulki->header = NULL; } if (bulki->data != NULL) { @@ -597,15 +683,17 @@ BULKI_free(BULKI *bulki, int free_struct) for (size_t i = 0; i < bulki->numKeys; i++) { BULKI_Entity_free(&bulki->data->values[i], 0); } - free(bulki->data->values); + bulki->data->values = (BULKI_Entity *)PDC_free(bulki->data->values); bulki->data->values = NULL; } - free(bulki->data); + bulki->data = (BULKI_Data *)PDC_free(bulki->data); bulki->data = NULL; } if (free_struct) { - free(bulki); + bulki = (BULKI *)PDC_free(bulki); bulki = NULL; } } + + FUNC_LEAVE_VOID(); } // BULKI_free \ No newline at end of file diff --git a/src/commons/serde/bulki/bulki_endianness_util.c b/src/commons/serde/bulki/bulki_endianness_util.c index a99a2d6a9..a7dd0ff59 100644 --- a/src/commons/serde/bulki/bulki_endianness_util.c +++ b/src/commons/serde/bulki/bulki_endianness_util.c @@ -1,139 +1,165 @@ #include "bulki_endianness_util.h" +#include "pdc_timing.h" int BULKI_is_system_le() { + FUNC_ENTER(NULL); + uint16_t test = 0x1; uint8_t *byte = (uint8_t *)&test; - return byte[0] == 0x1; + + FUNC_LEAVE(byte[0] == 0x1); } int BULKI_is_system_be() { - return !BULKI_is_system_le(); + FUNC_ENTER(NULL); + FUNC_LEAVE(!BULKI_is_system_le()); } uint8_t BULKI_to_little_endian_u8(uint8_t value) { - return value; // 8-bit values don't need conversion + FUNC_ENTER(NULL); + FUNC_LEAVE(value); // 8-bit values don't need conversion } uint16_t BULKI_to_little_endian_u16(uint16_t value) { + FUNC_ENTER(NULL); + if (BULKI_is_system_le()) { - return value; + FUNC_LEAVE(value); } else { - return ((value & 0xFF00) >> 8) | ((value & 0x00FF) << 8); + FUNC_LEAVE(((value & 0xFF00) >> 8) | ((value & 0x00FF) << 8)); } } uint32_t BULKI_to_little_endian_u32(uint32_t value) { + FUNC_ENTER(NULL); + if (BULKI_is_system_le()) { - return value; + FUNC_LEAVE(value); } else { - return ((value & 0xFF000000) >> 24) | ((value & 0x00FF0000) >> 8) | ((value & 0x0000FF00) << 8) | - ((value & 0x000000FF) << 24); + FUNC_LEAVE(((value & 0xFF000000) >> 24) | ((value & 0x00FF0000) >> 8) | ((value & 0x0000FF00) << 8) | + ((value & 0x000000FF) << 24)); } } uint64_t BULKI_to_little_endian_u64(uint64_t value) { + FUNC_ENTER(NULL); + if (BULKI_is_system_le()) { - return value; + FUNC_LEAVE(value); } else { - return ((value & 0xFF00000000000000ULL) >> 56) | ((value & 0x00FF000000000000ULL) >> 40) | - ((value & 0x0000FF0000000000ULL) >> 24) | ((value & 0x000000FF00000000ULL) >> 8) | - ((value & 0x00000000FF000000ULL) << 8) | ((value & 0x0000000000FF0000ULL) << 24) | - ((value & 0x000000000000FF00ULL) << 40) | ((value & 0x00000000000000FFULL) << 56); + FUNC_LEAVE(((value & 0xFF00000000000000ULL) >> 56) | ((value & 0x00FF000000000000ULL) >> 40) | + ((value & 0x0000FF0000000000ULL) >> 24) | ((value & 0x000000FF00000000ULL) >> 8) | + ((value & 0x00000000FF000000ULL) << 8) | ((value & 0x0000000000FF0000ULL) << 24) | + ((value & 0x000000000000FF00ULL) << 40) | ((value & 0x00000000000000FFULL) << 56)); } } int8_t BULKI_to_little_endian_i8(int8_t value) { - return value; // 8-bit values don't need conversion + FUNC_ENTER(NULL); + FUNC_LEAVE(value); // 8-bit values don't need conversion } int16_t BULKI_to_little_endian_i16(int16_t value) { - return (int16_t)BULKI_to_little_endian_u16((uint16_t)value); + FUNC_ENTER(NULL); + FUNC_LEAVE((int16_t)BULKI_to_little_endian_u16((uint16_t)value)); } int32_t BULKI_to_little_endian_i32(int32_t value) { - return (int32_t)BULKI_to_little_endian_u32((uint32_t)value); + FUNC_ENTER(NULL); + FUNC_LEAVE((int32_t)BULKI_to_little_endian_u32((uint32_t)value)); } int64_t BULKI_to_little_endian_i64(int64_t value) { - return (int64_t)BULKI_to_little_endian_u64((uint64_t)value); + FUNC_ENTER(NULL); + FUNC_LEAVE((int64_t)BULKI_to_little_endian_u64((uint64_t)value)); } float BULKI_to_little_endian_f32(float value) { + FUNC_ENTER(NULL); + union { float f; uint32_t i; } u; u.f = value; u.i = BULKI_to_little_endian_u32(u.i); - return u.f; + + FUNC_LEAVE(u.f); } double BULKI_to_little_endian_f64(double value) { + FUNC_ENTER(NULL); + union { double d; uint64_t i; } u; u.d = value; u.i = BULKI_to_little_endian_u64(u.i); - return u.d; + + FUNC_LEAVE(u.d); } int BULKI_to_little_endian_int(int value) { - return (int)BULKI_to_little_endian_u32((uint32_t)value); + FUNC_ENTER(NULL); + FUNC_LEAVE((int)BULKI_to_little_endian_u32((uint32_t)value)); } long BULKI_to_little_endian_long(long value) { + FUNC_ENTER(NULL); + if (sizeof(long) == 4) { - return (long)BULKI_to_little_endian_u32((uint32_t)value); + FUNC_LEAVE((long)BULKI_to_little_endian_u32((uint32_t)value)); } else if (sizeof(long) == 8) { - return (long)BULKI_to_little_endian_u64((uint64_t)value); + FUNC_LEAVE((long)BULKI_to_little_endian_u64((uint64_t)value)); } else { // Handle unexpected long size - return value; + FUNC_LEAVE(value); } } short BULKI_to_little_endian_short(short value) { - return (short)BULKI_to_little_endian_u16((uint16_t)value); + FUNC_ENTER(NULL); + FUNC_LEAVE((short)BULKI_to_little_endian_u16((uint16_t)value)); } char BULKI_to_little_endian_char(char value) { - return value; // char is typically 8-bit, so no conversion needed + FUNC_LEAVE(value); // char is typically 8-bit, so no conversion needed } \ No newline at end of file diff --git a/src/commons/serde/bulki/bulki_serde.c b/src/commons/serde/bulki/bulki_serde.c index 471d2d9e5..c55851cc1 100644 --- a/src/commons/serde/bulki/bulki_serde.c +++ b/src/commons/serde/bulki/bulki_serde.c @@ -1,6 +1,8 @@ #include "bulki_serde.h" #include "bulki_vle_util.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" // clang-format off /** @@ -47,20 +49,24 @@ uint8_t serialize_type_class(pdc_c_var_type_t type, pdc_c_var_class_t class) { + FUNC_ENTER(NULL); + // Ensure the type and class values fit within their bit allocations if (type >= PDC_TYPE_COUNT || class >= PDC_CLS_COUNT) { - return 0; // Handle invalid inputs, or use an appropriate error handling approach + FUNC_LEAVE(0); // Handle invalid inputs, or use an appropriate error handling approach } // Pack the type and class into a single byte uint8_t serialized = (type & 0x1F) | ((class & 0x01) << 5); - return serialized; + FUNC_LEAVE(serialized); } void * BULKI_Entity_serialize_to_buffer(BULKI_Entity *entity, void *buffer, size_t *offset) { + FUNC_ENTER(NULL); + // serialize the size uint64_t size = (uint64_t)get_BULKI_Entity_size(entity); *offset += BULKI_vle_encode_uint(size, buffer + *offset); @@ -105,31 +111,37 @@ BULKI_Entity_serialize_to_buffer(BULKI_Entity *entity, void *buffer, size_t *off } else { LOG_ERROR("unsupported class type %d\n", entity->pdc_class); - return NULL; + FUNC_LEAVE(NULL); } - return buffer; + + FUNC_LEAVE(buffer); } void * BULKI_Entity_serialize(BULKI_Entity *entity, size_t *size) { + FUNC_ENTER(NULL); + size_t estimated_size = get_BULKI_Entity_size(entity); - void * buffer = calloc(1, estimated_size); + void * buffer = PDC_calloc(1, estimated_size); size_t offset = 0; BULKI_Entity_serialize_to_buffer(entity, buffer, &offset); if (offset < estimated_size) { - void *small_buffer = realloc(buffer, offset); + void *small_buffer = PDC_realloc(buffer, offset); if (small_buffer != NULL) { buffer = small_buffer; } } *size = offset; - return buffer; + + FUNC_LEAVE(buffer); } void * BULKI_serialize_to_buffer(BULKI *bulki, void *buffer, size_t *offset) { + FUNC_ENTER(NULL); + // serialize the total size *offset += BULKI_vle_encode_uint(bulki->totalSize, buffer + *offset); @@ -160,44 +172,55 @@ BULKI_serialize_to_buffer(BULKI *bulki, void *buffer, size_t *offset) ofst = (uint64_t)(*offset); *offset += BULKI_vle_encode_uint(ofst, buffer + *offset); - return buffer; + FUNC_LEAVE(buffer); } void * BULKI_serialize(BULKI *data, size_t *size) { + FUNC_ENTER(NULL); + size_t estimated_size = get_BULKI_size(data); - void * buffer = calloc(1, estimated_size); + void * buffer = PDC_calloc(1, estimated_size); size_t offset = 0; BULKI_serialize_to_buffer(data, buffer, &offset); if (offset < estimated_size) { - void *small_buffer = realloc(buffer, offset); + void *small_buffer = PDC_realloc(buffer, offset); if (small_buffer != NULL) { buffer = small_buffer; } } *size = offset; - return buffer; + + FUNC_LEAVE(buffer); } void BULKI_Entity_serialize_to_file(BULKI_Entity *entity, FILE *fp) { + FUNC_ENTER(NULL); + size_t size; void * buffer = BULKI_Entity_serialize(entity, &size); fwrite(buffer, size, 1, fp); - free(buffer); + buffer = (void *)PDC_free(buffer); fclose(fp); + + FUNC_LEAVE_VOID(); } void BULKI_serialize_to_file(BULKI *bulki, FILE *fp) { + FUNC_ENTER(NULL); + size_t size = 0; void * buffer = BULKI_serialize(bulki, &size); fwrite(buffer, size, 1, fp); - free(buffer); + buffer = (void *)PDC_free(buffer); fclose(fp); + + FUNC_LEAVE_VOID(); } /********************** Deserialize ************************** */ @@ -205,15 +228,21 @@ BULKI_serialize_to_file(BULKI *bulki, FILE *fp) void deserialize_type_class(uint8_t byte, pdc_c_var_type_t *type, pdc_c_var_class_t *class) { + FUNC_ENTER(NULL); + // Extract the type and class from the byte *type = (pdc_c_var_type_t)(byte & 0x1F); *class = (pdc_c_var_class_t)((byte >> 5) & 0x01); + + FUNC_LEAVE_VOID(); } BULKI_Entity * BULKI_Entity_deserialize_from_buffer(void *buffer, size_t *offset) { - BULKI_Entity *entity = malloc(sizeof(BULKI_Entity)); + FUNC_ENTER(NULL); + + BULKI_Entity *entity = PDC_malloc(sizeof(BULKI_Entity)); // deserialize the size size_t bytes_read; uint64_t size = BULKI_vle_decode_uint(buffer + *offset, &bytes_read); @@ -240,21 +269,21 @@ BULKI_Entity_deserialize_from_buffer(void *buffer, size_t *offset) entity->data = BULKI_Entity_deserialize_from_buffer(buffer, offset); } else { // all base types - entity->data = malloc(entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); + entity->data = PDC_malloc(entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); memcpy(entity->data, buffer + *offset, entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); *offset += (entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); } } else if (entity->pdc_class <= PDC_CLS_ARRAY) { if (entity->pdc_type == PDC_BULKI) { // BULKI - BULKI *bulki_array = malloc(sizeof(BULKI) * entity->count); + BULKI *bulki_array = PDC_malloc(sizeof(BULKI) * entity->count); for (size_t i = 0; i < entity->count; i++) { memcpy(bulki_array + i, BULKI_deserialize_from_buffer(buffer, offset), sizeof(BULKI)); } entity->data = bulki_array; } else if (entity->pdc_type == PDC_BULKI_ENT) { // BULKI_Entity - BULKI_Entity *bulki_entity_array = malloc(sizeof(BULKI_Entity) * entity->count); + BULKI_Entity *bulki_entity_array = PDC_malloc(sizeof(BULKI_Entity) * entity->count); for (size_t i = 0; i < entity->count; i++) { memcpy(bulki_entity_array + i, BULKI_Entity_deserialize_from_buffer(buffer, offset), sizeof(BULKI_Entity)); @@ -262,22 +291,25 @@ BULKI_Entity_deserialize_from_buffer(void *buffer, size_t *offset) entity->data = bulki_entity_array; } else { // all base types - entity->data = malloc(entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); + entity->data = PDC_malloc(entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); memcpy(entity->data, buffer + *offset, entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); *offset += (entity->size - sizeof(uint8_t) * 2 - sizeof(uint64_t) * 2); } } else { LOG_ERROR("unsupported class type %d\n", entity->pdc_class); - return NULL; + FUNC_LEAVE(NULL); } - return entity; + + FUNC_LEAVE(entity); } BULKI * BULKI_deserialize_from_buffer(void *buffer, size_t *offset) { - BULKI *bulki = malloc(sizeof(BULKI)); + FUNC_ENTER(NULL); + + BULKI *bulki = PDC_malloc(sizeof(BULKI)); // deserialize the total size size_t bytes_read; uint64_t totalSize = BULKI_vle_decode_uint(buffer + *offset, &bytes_read); @@ -298,8 +330,8 @@ BULKI_deserialize_from_buffer(void *buffer, size_t *offset) *offset += bytes_read; // deserialize the header - BULKI_Header *header = malloc(sizeof(BULKI_Header)); - header->keys = malloc(sizeof(BULKI_Entity) * numKeys); + BULKI_Header *header = PDC_malloc(sizeof(BULKI_Header)); + header->keys = PDC_malloc(sizeof(BULKI_Entity) * numKeys); header->headerSize = headerSize; for (size_t i = 0; i < numKeys; i++) { memcpy(&(header->keys[i]), BULKI_Entity_deserialize_from_buffer(buffer, offset), @@ -313,15 +345,15 @@ BULKI_deserialize_from_buffer(void *buffer, size_t *offset) LOG_ERROR("Error1: data offset does not match the expected offset. Expected: %zu, Found: %zu, " "bytes_read: %zu \n", (size_t)dataOffset, *offset, bytes_read); - return NULL; + FUNC_LEAVE(NULL); } *offset += bytes_read; bulki->header = header; // deserialize the data - BULKI_Data *data = malloc(sizeof(BULKI_Data)); - data->values = malloc(sizeof(BULKI_Entity) * numKeys); + BULKI_Data *data = PDC_malloc(sizeof(BULKI_Data)); + data->values = PDC_malloc(sizeof(BULKI_Entity) * numKeys); data->dataSize = dataSize; for (size_t i = 0; i < numKeys; i++) { memcpy(&(data->values[i]), BULKI_Entity_deserialize_from_buffer(buffer, offset), @@ -335,55 +367,67 @@ BULKI_deserialize_from_buffer(void *buffer, size_t *offset) LOG_ERROR("Error2: data offset does not match the expected offset. Expected: %zu, Found: %zu, " "bytes_read: %zu\n", (size_t)dataOffset, *offset, bytes_read); - return NULL; + FUNC_LEAVE(NULL); } *offset += bytes_read; bulki->data = data; - return bulki; + FUNC_LEAVE(bulki); } BULKI_Entity * BULKI_Entity_deserialize(void *buffer) { + FUNC_ENTER(NULL); + size_t offset = 0; - return BULKI_Entity_deserialize_from_buffer(buffer, &offset); + + FUNC_LEAVE(BULKI_Entity_deserialize_from_buffer(buffer, &offset)); } BULKI * BULKI_deserialize(void *buffer) { + FUNC_ENTER(NULL); + size_t offset = 0; - return BULKI_deserialize_from_buffer(buffer, &offset); + + FUNC_LEAVE(BULKI_deserialize_from_buffer(buffer, &offset)); } BULKI_Entity * BULKI_Entity_deserialize_from_file(FILE *fp) { + FUNC_ENTER(NULL); + fseek(fp, 0, SEEK_END); size_t fsize = ftell(fp); fseek(fp, 0, SEEK_SET); /* same as rewind(f); */ // read the file into the buffer - void *buffer = malloc(fsize + 1); + void *buffer = PDC_malloc(fsize + 1); fread(buffer, fsize, 1, fp); fclose(fp); BULKI_Entity *rst = BULKI_Entity_deserialize(buffer); - free(buffer); - return rst; + buffer = (void *)PDC_free(buffer); + + FUNC_LEAVE(rst); } BULKI * BULKI_deserialize_from_file(FILE *fp) { + FUNC_ENTER(NULL); + fseek(fp, 0, SEEK_END); size_t fsize = ftell(fp); fseek(fp, 0, SEEK_SET); /* same as rewind(f); */ // read the file into the buffer - void *buffer = malloc(fsize + 1); + void *buffer = PDC_malloc(fsize + 1); fread(buffer, fsize, 1, fp); fclose(fp); BULKI *rst = BULKI_deserialize(buffer); - free(buffer); - return rst; + buffer = (void *)PDC_free(buffer); + + FUNC_LEAVE(rst); } \ No newline at end of file diff --git a/src/commons/serde/bulki/bulki_serde_test.c b/src/commons/serde/bulki/bulki_serde_test.c index 9f1f1076f..0f2a7b79f 100644 --- a/src/commons/serde/bulki/bulki_serde_test.c +++ b/src/commons/serde/bulki/bulki_serde_test.c @@ -1,9 +1,13 @@ #include "bulki_serde.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" int test_base_type() { + FUNC_ENTER(NULL); + // Initialize a serialized data structure BULKI *bulki = BULKI_init(2); @@ -14,7 +18,7 @@ test_base_type() BULKI_Entity *intValue = BULKI_ENTITY(&intVal, 1, PDC_INT, PDC_CLS_ITEM); BULKI_put(bulki, intKey, intValue); - int *intArrVal = (int *)malloc(3 * sizeof(int)); + int *intArrVal = (int *)PDC_malloc(3 * sizeof(int)); intArrVal[0] = 9; // x intArrVal[1] = 8; // y intArrVal[2] = 7; // z @@ -53,7 +57,7 @@ test_base_type() long fsize = ftell(fp); fseek(fp, 0, SEEK_SET); /* same as rewind(f); */ // read the file into the buffer - void *buffer2 = malloc(fsize + 1); + void *buffer2 = PDC_malloc(fsize + 1); fread(buffer2, fsize, 1, fp); fclose(fp); @@ -66,14 +70,16 @@ test_base_type() // Free the memory BULKI_free(deserializedBulki, 1); - free(buffer); + buffer = (void *)PDC_free(buffer); - return equal; + FUNC_LEAVE(equal); } int test_put_replace() { + FUNC_ENTER(NULL); + // Initialize a serialized data structure BULKI *bulki = BULKI_init(2); @@ -94,12 +100,15 @@ test_put_replace() dataEnt = BULKI_get(bulki, BULKI_ENTITY("key2", 1, PDC_STRING, PDC_CLS_ITEM)); equal = BULKI_Entity_equal(dataEnt, BULKI_ENTITY("value2", 1, PDC_STRING, PDC_CLS_ITEM)); LOG_INFO("second value not changed after replace put: %d\n", equal); - return equal; + + FUNC_LEAVE(equal); } int test_base_array_entitiy() { + FUNC_ENTER(NULL); + // Initialize a serialized data structure BULKI *bulki = BULKI_init(2); @@ -165,14 +174,16 @@ test_base_array_entitiy() // Free the memory BULKI_free(deserializedBulki, 1); BULKI_free(bulki, 1); - free(buffer); + buffer = (void *)PDC_free(buffer); - return equal; + FUNC_LEAVE(equal); } int test_embedded_entitiy() { + FUNC_ENTER(NULL); + // Initialize a serialized data structure BULKI *bulki = BULKI_init(2); @@ -217,14 +228,15 @@ test_embedded_entitiy() // Free the memory BULKI_free(deserializedBulki, 1); BULKI_free(bulki, 1); - free(buffer); + buffer = (void *)PDC_free(buffer); - return equal; + FUNC_LEAVE(equal); } int test_bulki_in_entitiy() { + FUNC_ENTER(NULL); // Initialize a serialized data structure BULKI *bulki = BULKI_init(1); @@ -259,12 +271,14 @@ test_bulki_in_entitiy() equal = BULKI_Entity_equal(nestEntity, des_nestEntity); LOG_INFO("non-empty compound BULKI in BULKI Entity with array = %d \n", equal); - return equal; + FUNC_LEAVE(equal); } int bulki_small_json_serialization_test() { + FUNC_ENTER(NULL); + // Initialize the BULKI structure BULKI *dataset = BULKI_init(10); // Assuming initial field count is 10 @@ -337,17 +351,20 @@ bulki_small_json_serialization_test() // Free the memory // BULKI_free(dataset, 1); - return 0; + FUNC_LEAVE(0); } int main(int argc, char *argv[]) { + FUNC_ENTER(NULL); + LOG_INFO("test_base_type RST = %d\n", test_base_type()); LOG_INFO("test_put_replace RST = %d\n", test_put_replace()); LOG_INFO("test_base_array_entitiy RST = %d\n", test_base_array_entitiy()); LOG_INFO("test_embedded_entitiy RST = %d\n", test_embedded_entitiy()); LOG_INFO("test_nested_entitiy RST = %d\n", test_bulki_in_entitiy()); LOG_INFO("bulki_small_json_serialization_test RST = %d\n", bulki_small_json_serialization_test()); - return 0; + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/serde/bulki/bulki_vle_util.c b/src/commons/serde/bulki/bulki_vle_util.c index d5a9df94b..4d2ab6682 100644 --- a/src/commons/serde/bulki/bulki_vle_util.c +++ b/src/commons/serde/bulki/bulki_vle_util.c @@ -1,9 +1,12 @@ #include "bulki_vle_util.h" +#include "pdc_timing.h" // Encode an unsigned integer using Variable-Length Encoding size_t BULKI_vle_encode_uint(uint64_t value, uint8_t *buffer) { + FUNC_ENTER(NULL); + size_t bytes_written = 0; do { uint8_t byte = value & 0x7F; @@ -13,26 +16,32 @@ BULKI_vle_encode_uint(uint64_t value, uint8_t *buffer) } buffer[bytes_written++] = byte; } while (value != 0); - return bytes_written; + + FUNC_LEAVE(bytes_written); } // quickly calculate the encoded size of an unsigned integer size_t BULKI_vle_encoded_uint_size(uint64_t value) { + FUNC_ENTER(NULL); + size_t bytes_written = 1; // 0x80 is 128 in decimal, meaning we have more than 7 bits to encode while (value >= 0x80) { // this test will help us to save some computation. value >>= 7; bytes_written++; } - return bytes_written; + + FUNC_LEAVE(bytes_written); } // Decode an unsigned integer using Variable-Length Encoding uint64_t BULKI_vle_decode_uint(const uint8_t *buffer, size_t *bytes_read) { + FUNC_ENTER(NULL); + uint64_t result = 0; size_t shift = 0; size_t byte_count = 0; @@ -50,28 +59,37 @@ BULKI_vle_decode_uint(const uint8_t *buffer, size_t *bytes_read) *bytes_read = byte_count; } - return result; + FUNC_LEAVE(result); } size_t BULKI_vle_encode_int(int64_t value, uint8_t *buffer) { + FUNC_ENTER(NULL); + // ZigZag encode the signed integer uint64_t zigzag_encoded = (value << 1) ^ (value >> 63); - return BULKI_vle_encode_uint(zigzag_encoded, buffer); + + FUNC_LEAVE(BULKI_vle_encode_uint(zigzag_encoded, buffer)); } int64_t BULKI_vle_decode_int(const uint8_t *buffer, size_t *bytes_read) { + FUNC_ENTER(NULL); + uint64_t zigzag_encoded = BULKI_vle_decode_uint(buffer, bytes_read); - return (zigzag_encoded >> 1) ^ -(zigzag_encoded & 1); + + FUNC_LEAVE((zigzag_encoded >> 1) ^ -(zigzag_encoded & 1)); } size_t BULKI_vle_encoded_int_size(int64_t value) { + FUNC_ENTER(NULL); + // ZigZag encode the signed integer uint64_t zigzag_encoded = (value << 1) ^ (value >> 63); - return BULKI_vle_encoded_uint_size(zigzag_encoded); + + FUNC_LEAVE(BULKI_vle_encoded_uint_size(zigzag_encoded)); } \ No newline at end of file diff --git a/src/commons/utils/include/pdc_private.h b/src/commons/utils/include/pdc_private.h index 4118781c7..e6ede80d6 100644 --- a/src/commons/utils/include/pdc_private.h +++ b/src/commons/utils/include/pdc_private.h @@ -138,56 +138,17 @@ extern pbool_t err_occurred; #define PGOTO_ERROR(ret_val, ...) \ do { \ LOG_ERROR(__VA_ARGS__); \ + LOG_JUST_PRINT("\n"); \ PGOTO_DONE(ret_val); \ } while (0) #define PGOTO_ERROR_VOID(...) \ do { \ LOG_ERROR(__VA_ARGS__); \ + LOG_JUST_PRINT("\n"); \ PGOTO_DONE_VOID; \ } while (0) -/* Include a basic profiling interface */ -#ifdef ENABLE_PROFILING -#include "pdc_stack_ops.h" - -#define FUNC_ENTER(X) \ - do { \ - if (enableProfiling) \ - push(__func__, (X)); \ - } while (0) - -#define FUNC_LEAVE(ret_value) \ - do { \ - if (enableProfiling) \ - pop(); \ - return (ret_value); \ - } while (0) - -#define FUNC_LEAVE_VOID \ - do { \ - if (enableProfiling) \ - pop(); \ - return; \ - } while (0) - -#else - -#define FUNC_ENTER(X) \ - do { \ - } while (0) - -#define FUNC_LEAVE(ret_value) \ - do { \ - return (ret_value); \ - } while (0) - -#define FUNC_LEAVE_VOID \ - do { \ - return; \ - } while (0) -#endif - #if defined(IS_PDC_SERVER) && defined(ENABLE_MULTITHREAD) // Macros for multi-thread callback, grabbed from Mercury/Testing/mercury_rpc_cb.c diff --git a/src/commons/utils/include/pdc_timing.h b/src/commons/utils/include/pdc_timing.h index fd409732e..44aafe35e 100644 --- a/src/commons/utils/include/pdc_timing.h +++ b/src/commons/utils/include/pdc_timing.h @@ -10,6 +10,7 @@ #endif /* HOST_NAME_MAX */ #include "pdc_config.h" +#include "pdc_stack_ops.h" #ifdef ENABLE_MPI #include #endif @@ -196,3 +197,44 @@ extern int pdc_timing_rank_g; void PDC_get_time_str(char *cur_time); int PDC_get_rank(); #endif + +/* Include a basic profiling interface */ +#ifdef ENABLE_PROFILING +#include "pdc_stack_ops.h" + +#define FUNC_ENTER(X) \ + do { \ + if (enableProfiling) \ + push(__func__, (X)); \ + } while (0) + +#define FUNC_LEAVE(ret_value) \ + do { \ + if (enableProfiling) \ + pop(); \ + return (ret_value); \ + } while (0) + +#define FUNC_LEAVE_VOID() \ + do { \ + if (enableProfiling) \ + pop(); \ + return; \ + } while (0) + +#else + +#define FUNC_ENTER(X) \ + do { \ + } while (0) + +#define FUNC_LEAVE(ret_value) \ + do { \ + return (ret_value); \ + } while (0) + +#define FUNC_LEAVE_VOID() \ + do { \ + return; \ + } while (0) +#endif diff --git a/src/commons/utils/include/string_utils.h b/src/commons/utils/include/string_utils.h index ce264d449..6072220b2 100644 --- a/src/commons/utils/include/string_utils.h +++ b/src/commons/utils/include/string_utils.h @@ -124,23 +124,6 @@ int equals(const char *str, const char *tok); */ char *dsprintf(const char *format, ...); -/** - * Print anything on stdout. - * Always put a line feed after the string you want to print. - * - * @param format - * @param ... - */ -void println(const char *format, ...); - -/** - * Print anything on stderr. - * Always put a line feed after the string you want to print. - * - * @param format - * @param ... - */ -void stderr_println(const char *format, ...); /** * Only support expressions like: * diff --git a/src/commons/utils/pdc_malloc.c b/src/commons/utils/pdc_malloc.c index 8bcd2812b..c9178328e 100644 --- a/src/commons/utils/pdc_malloc.c +++ b/src/commons/utils/pdc_malloc.c @@ -25,7 +25,15 @@ #include #include #include "pdc_malloc.h" -#include "pdc_private.h" +#include "pdc_timing.h" + +// see comment in pdc_stack_ops.c +#ifdef ENABLE_PROFILING +#undef FUNC_ENTER +#undef FUNC_LEAVE +#define FUNC_ENTER(x) +#define FUNC_LEAVE(x) return (x) +#endif #ifdef HAVE_MALLOC_USABLE_SIZE #include @@ -38,10 +46,10 @@ size_t PDC_mem_usage_g; void * PDC_malloc(size_t size) { - void *ret_value; - FUNC_ENTER(NULL); + void *ret_value; + assert(size); if (size) @@ -58,19 +66,22 @@ PDC_malloc(size_t size) void * PDC_malloc_addsize(size_t size, size_t *mem_usage_ptr) { + FUNC_ENTER(NULL); + void *ret_value = PDC_malloc(size); if (ret_value && mem_usage_ptr) *mem_usage_ptr += size; - return ret_value; + + FUNC_LEAVE(ret_value); } void * PDC_calloc(size_t count, size_t size) { - void *ret_value; - FUNC_ENTER(NULL); + void *ret_value; + assert(count); assert(size); @@ -88,19 +99,22 @@ PDC_calloc(size_t count, size_t size) void * PDC_calloc_addsize(size_t count, size_t size, size_t *mem_usage_ptr) { + FUNC_ENTER(NULL); + void *ret_value = PDC_calloc(count, size); if (ret_value && mem_usage_ptr) *mem_usage_ptr += size; - return ret_value; + + FUNC_LEAVE(ret_value); } void * PDC_realloc_knowing_oldsize(void *ptr, size_t size, size_t old_size) { - void *ret_value; - FUNC_ENTER(NULL); + void *ret_value; + assert(size); size_t _old_size = old_size; if (size) @@ -121,16 +135,20 @@ PDC_realloc_knowing_oldsize(void *ptr, size_t size, size_t old_size) void * PDC_realloc(void *ptr, size_t size) { + FUNC_ENTER(NULL); + size_t _old_size = 0; #ifdef HAVE_MALLOC_USABLE_SIZE _old_size = malloc_usable_size(ptr); #endif - return PDC_realloc_knowing_oldsize(ptr, size, _old_size); + FUNC_LEAVE(PDC_realloc_knowing_oldsize(ptr, size, _old_size)); } void * PDC_realloc_addsize_knowing_oldsize(void *ptr, size_t size, size_t old_size, size_t *mem_usage_ptr) { + FUNC_ENTER(NULL); + size_t _old_size = old_size; void * ret_value = PDC_realloc_knowing_oldsize(ptr, size, _old_size); if (ret_value && mem_usage_ptr) { @@ -139,33 +157,35 @@ PDC_realloc_addsize_knowing_oldsize(void *ptr, size_t size, size_t old_size, siz *mem_usage_ptr -= _old_size; } } - return ret_value; + + FUNC_LEAVE(ret_value); } void * PDC_realloc_addsize(void *ptr, size_t size, size_t *mem_usage_ptr) { + FUNC_ENTER(NULL); + size_t _old_size = 0; #ifdef HAVE_MALLOC_USABLE_SIZE _old_size = malloc_usable_size(ptr); #endif - return PDC_realloc_addsize_knowing_oldsize(ptr, size, _old_size, mem_usage_ptr); + + FUNC_LEAVE(PDC_realloc_addsize_knowing_oldsize(ptr, size, _old_size, mem_usage_ptr)); } void * PDC_free_knowing_old_size(void *mem, size_t old_size) { - size_t _old_size = old_size; - - void *ret_value = NULL; - FUNC_ENTER(NULL); + size_t _old_size = old_size; + void * ret_value = NULL; + if (mem) { free(mem); - if (_old_size) { + if (_old_size) PDC_mem_usage_g -= _old_size; - } } FUNC_LEAVE(ret_value); @@ -174,21 +194,29 @@ PDC_free_knowing_old_size(void *mem, size_t old_size) void * PDC_free(void *mem) { + FUNC_ENTER(NULL); + size_t _old_size = 0; #ifdef HAVE_MALLOC_USABLE_SIZE _old_size = malloc_usable_size(mem); #endif - return PDC_free_knowing_old_size(mem, _old_size); + + FUNC_LEAVE(PDC_free_knowing_old_size(mem, _old_size)); } void PDC_free_void(void *mem) { + FUNC_ENTER(NULL); + PDC_free(mem); + + FUNC_LEAVE_VOID(); } size_t PDC_get_global_mem_usage() { - return PDC_mem_usage_g; + FUNC_ENTER(NULL); + FUNC_LEAVE(PDC_mem_usage_g); } \ No newline at end of file diff --git a/src/commons/utils/pdc_timing.c b/src/commons/utils/pdc_timing.c index 0adea269a..ce92c25e3 100644 --- a/src/commons/utils/pdc_timing.c +++ b/src/commons/utils/pdc_timing.c @@ -1,4 +1,8 @@ #include "pdc_timing.h" +#include "pdc_logger.h" +#include "pdc_stack_ops.h" +#include "pdc_malloc.h" +#include "pdc_logger.h" #include "assert.h" #include "mpi.h" @@ -8,15 +12,20 @@ static double pdc_base_time; static int pdc_timestamp_clean(pdc_timestamp *timestamp) { + FUNC_ENTER(NULL); + if (timestamp->timestamp_size) { - free(timestamp->start); + timestamp->start = (double *)PDC_free(timestamp->start); } - return 0; + + FUNC_LEAVE(0); } static int timestamp_log(FILE *stream, const char *header, pdc_timestamp *timestamp) { + FUNC_ENTER(NULL); + size_t i; double total = 0.0; fprintf(stream, "%s", header); @@ -29,12 +38,14 @@ timestamp_log(FILE *stream, const char *header, pdc_timestamp *timestamp) if (i > 0) fprintf(stream, "%s_total, %f\n", header, total); - return 0; + FUNC_LEAVE(0); } int PDC_timing_init() { + FUNC_ENTER(NULL); + char hostname[HOST_NAME_MAX]; int rank; pdc_timestamp *ptr; @@ -48,7 +59,7 @@ PDC_timing_init() memset(&pdc_timings, 0, sizeof(pdc_timing)); - pdc_client_buf_obj_map_timestamps = calloc(16, sizeof(pdc_timestamp)); + pdc_client_buf_obj_map_timestamps = PDC_calloc(16, sizeof(pdc_timestamp)); ptr = pdc_client_buf_obj_map_timestamps + 1; pdc_client_buf_obj_unmap_timestamps = ptr; ptr++; @@ -84,12 +95,14 @@ PDC_timing_init() ptr++; pdc_client_transfer_request_metadata_query_timestamps = ptr; - return 0; + FUNC_LEAVE(0); } int PDC_timing_finalize() { + FUNC_ENTER(NULL); + pdc_timestamp_clean(pdc_client_buf_obj_map_timestamps); pdc_timestamp_clean(pdc_client_buf_obj_unmap_timestamps); @@ -109,13 +122,16 @@ PDC_timing_finalize() pdc_timestamp_clean(pdc_client_transfer_request_wait_all_timestamps); pdc_timestamp_clean(pdc_client_transfer_request_metadata_query_timestamps); - free(pdc_client_buf_obj_map_timestamps); - return 0; + pdc_client_buf_obj_map_timestamps = (pdc_timestamp *)PDC_free(pdc_client_buf_obj_map_timestamps); + + FUNC_LEAVE(0); } int PDC_timing_report(const char *prefix) { + FUNC_ENTER(NULL); + pdc_timing max_timings; int rank; char filename[256], header[256]; @@ -250,12 +266,14 @@ PDC_timing_report(const char *prefix) memset(&pdc_timings, 0, sizeof(pdc_timings)); - return 0; + FUNC_LEAVE(0); } int PDC_server_timing_init() { + FUNC_ENTER(NULL); + char hostname[HOST_NAME_MAX]; int rank; @@ -263,19 +281,10 @@ PDC_server_timing_init() gethostname(hostname, HOST_NAME_MAX); LOG_INFO("server process rank %d, hostname = %s\n", rank, hostname); - /* - LOG_INFO("rank = %d, hostname = %s, PDCbuf_obj_map_rpc = %lf, PDCreg_obtain_lock_rpc = %lf, " - "PDCreg_release_lock_write_rpc = " - "%lf, PDCreg_release_lock_read_rpc = %lf, PDCbuf_obj_unmap_rpc = %lf, " - "region_release_bulk_transfer_cb = %lf\n", - rank, hostname, server_timings->PDCbuf_obj_map_rpc, server_timings->PDCreg_obtain_lock_rpc, - server_timings->PDCreg_release_lock_write_rpc, server_timings->PDCreg_release_lock_read_rpc, - server_timings->PDCbuf_obj_unmap_rpc, server_timings->PDCreg_release_lock_bulk_transfer_rpc); - */ MPI_Barrier(MPI_COMM_WORLD); - pdc_server_timings = calloc(1, sizeof(pdc_server_timing)); - pdc_timestamp *ptr = calloc(25, sizeof(pdc_timestamp)); + pdc_server_timings = PDC_calloc(1, sizeof(pdc_server_timing)); + pdc_timestamp *ptr = PDC_calloc(25, sizeof(pdc_timestamp)); pdc_buf_obj_map_timestamps = ptr; ptr++; pdc_buf_obj_unmap_timestamps = ptr; @@ -332,22 +341,24 @@ PDC_server_timing_init() // 25 timestamps pdc_base_time = MPI_Wtime(); - return 0; + FUNC_LEAVE(0); } int pdc_timestamp_register(pdc_timestamp *timestamp, double start, double end) { + FUNC_ENTER(NULL); + double *temp; if (timestamp->timestamp_max_size == 0) { timestamp->timestamp_max_size = 256; - timestamp->start = (double *)malloc(sizeof(double) * timestamp->timestamp_max_size * 2); - timestamp->end = timestamp->start + timestamp->timestamp_max_size; - timestamp->timestamp_size = 0; + timestamp->start = (double *)PDC_malloc(sizeof(double) * timestamp->timestamp_max_size * 2); + timestamp->end = timestamp->start + timestamp->timestamp_max_size; + timestamp->timestamp_size = 0; } else if (timestamp->timestamp_size == timestamp->timestamp_max_size) { - temp = (double *)malloc(sizeof(double) * timestamp->timestamp_max_size * 4); + temp = (double *)PDC_malloc(sizeof(double) * timestamp->timestamp_max_size * 4); memcpy(temp, timestamp->start, sizeof(double) * timestamp->timestamp_max_size); memcpy(temp + timestamp->timestamp_max_size * 2, timestamp->end, sizeof(double) * timestamp->timestamp_max_size); @@ -358,12 +369,15 @@ pdc_timestamp_register(pdc_timestamp *timestamp, double start, double end) timestamp->start[timestamp->timestamp_size] = start; timestamp->end[timestamp->timestamp_size] = end; timestamp->timestamp_size++; - return 0; + + FUNC_LEAVE(0); } int PDC_server_timing_report() { + FUNC_ENTER(NULL); + pdc_server_timing max_timings; int rank; char filename[256]; @@ -493,7 +507,7 @@ PDC_server_timing_report() fclose(stream); - free(pdc_server_timings); + pdc_server_timings = (pdc_server_timing *)PDC_free(pdc_server_timings); pdc_timestamp_clean(pdc_buf_obj_map_timestamps); pdc_timestamp_clean(pdc_buf_obj_unmap_timestamps); @@ -526,15 +540,17 @@ PDC_server_timing_report() /* pdc_timestamp_clean(pdc_create_obj_timestamps); */ /* pdc_timestamp_clean(pdc_create_cont_timestamps); */ - free(pdc_buf_obj_map_timestamps); - return 0; + pdc_buf_obj_map_timestamps = (pdc_timestamp *)PDC_free(pdc_buf_obj_map_timestamps); + + FUNC_LEAVE(0); } #else int PDC_timing_report(const char *prefix __attribute__((unused))) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); } #endif // PDC_TIMING @@ -543,18 +559,23 @@ int pdc_timing_rank_g = -1; inline int PDC_get_rank() { + FUNC_ENTER(NULL); + #ifdef ENABLE_MPI if (pdc_timing_rank_g == -1) MPI_Comm_rank(MPI_COMM_WORLD, &pdc_timing_rank_g); - return pdc_timing_rank_g; + FUNC_LEAVE(pdc_timing_rank_g); #else - return 0; + + FUNC_LEAVE(0); #endif } inline void PDC_get_time_str(char *cur_time) { + FUNC_ENTER(NULL); + struct timespec ts; assert(cur_time); @@ -564,5 +585,5 @@ PDC_get_time_str(char *cur_time) localtime(&ts.tv_sec)->tm_mon + 1, localtime(&ts.tv_sec)->tm_mday, localtime(&ts.tv_sec)->tm_hour, localtime(&ts.tv_sec)->tm_min, localtime(&ts.tv_sec)->tm_sec, ts.tv_nsec / 1000); - return; + FUNC_LEAVE_VOID(); } diff --git a/src/commons/utils/query_utils.c b/src/commons/utils/query_utils.c index c1a02372e..18a04a6e5 100644 --- a/src/commons/utils/query_utils.c +++ b/src/commons/utils/query_utils.c @@ -1,26 +1,26 @@ -// -// Created by Wei Zhang on 7/10/17. -// #include "query_utils.h" #include #include #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" int _gen_affix_for_token(char *token_str, int affix_type, size_t affix_len, char **out_str) { + FUNC_ENTER(NULL); size_t token_len = strlen(token_str); if (affix_type == 0) { *out_str = strdup(token_str); - return token_len; + FUNC_LEAVE(token_len); } affix_len = affix_len < token_len ? affix_len : token_len; size_t copy_len = affix_type == 0 ? token_len : affix_len; char * source = affix_type <= 1 ? token_str : &(token_str[token_len - affix_len]); - char * affix_str = (char *)calloc(copy_len + 3, sizeof(char)); + char * affix_str = (char *)PDC_calloc(copy_len + 3, sizeof(char)); strncpy(affix_str, source, copy_len + 1); @@ -47,32 +47,34 @@ _gen_affix_for_token(char *token_str, int affix_type, size_t affix_len, char **o affix_str[affix_len + 2] = '\0'; } else { - LOG_ERROR("Invalid affix type %d!\n", affix_type); - return 0; + LOG_ERROR("Invalid affix type %d\n", affix_type); + FUNC_LEAVE(0); } *out_str = affix_str; - return strlen(*out_str); + FUNC_LEAVE(strlen(*out_str)); } void gen_query_key_value(query_gen_input_t *input, query_gen_output_t *output) { + FUNC_ENTER(NULL); + char * key_ptr = NULL; size_t key_ptr_len = 0; char * value_ptr = NULL; size_t value_ptr_len = 0; // check base_tag->name length if (strlen(input->base_tag->name) < 3) { - char *new_tag_name = (char *)calloc(4, sizeof(char)); + char *new_tag_name = (char *)PDC_calloc(4, sizeof(char)); memset(new_tag_name, input->base_tag->name[0], 3); input->base_tag->name = new_tag_name; input->affix_len = 1; } // check base_tag->value length if it is a string if (input->base_tag->type == PDC_STRING && strlen((char *)input->base_tag->value) < 3) { - char *new_tag_value = (char *)calloc(4, sizeof(char)); + char *new_tag_value = (char *)PDC_calloc(4, sizeof(char)); memset(new_tag_value, ((char *)input->base_tag->value)[0], 3); input->base_tag->value = (void *)new_tag_value; input->affix_len = 1; @@ -82,8 +84,8 @@ gen_query_key_value(query_gen_input_t *input, query_gen_output_t *output) // "hello" key_ptr_len = _gen_affix_for_token(input->base_tag->name, input->key_query_type, affix_len, &key_ptr); if (key_ptr_len == 0) { - LOG_ERROR("Failed to generate key query!\n"); - return; + LOG_ERROR("Failed to generate key query\n"); + FUNC_LEAVE_VOID(); } // process value in base_tag @@ -91,15 +93,15 @@ gen_query_key_value(query_gen_input_t *input, query_gen_output_t *output) char *temp_value = NULL; value_ptr_len = _gen_affix_for_token((char *)input->base_tag->value, input->value_query_type, affix_len, &temp_value); - value_ptr = (char *)calloc(value_ptr_len + 3, sizeof(char)); + value_ptr = (char *)PDC_calloc(value_ptr_len + 3, sizeof(char)); value_ptr[0] = '"'; strcat(value_ptr, temp_value); value_ptr[value_ptr_len + 1] = '"'; value_ptr[value_ptr_len + 2] = '\0'; if (value_ptr_len == 0) { - LOG_ERROR("Failed to generate value query!\n"); - return; + LOG_ERROR("Failed to generate value query\n"); + FUNC_LEAVE_VOID(); } } else { @@ -113,27 +115,27 @@ gen_query_key_value(query_gen_input_t *input, query_gen_output_t *output) input->base_tag->type = PDC_DOUBLE; } else { - LOG_ERROR("Invalid tag type!\n"); - return; + LOG_ERROR("Invalid tag type\n"); + FUNC_LEAVE_VOID(); } char *format_str = get_format_by_dtype(input->base_tag->type); if (input->value_query_type == 4) { value_ptr_len = snprintf(NULL, 0, format_str, ((int64_t *)input->base_tag->value)[0]); - value_ptr = (char *)calloc(value_ptr_len + 1, sizeof(char)); + value_ptr = (char *)PDC_calloc(value_ptr_len + 1, sizeof(char)); snprintf(value_ptr, value_ptr_len + 1, format_str, ((int64_t *)input->base_tag->value)[0]); } else if (input->value_query_type == 5) { size_t lo_len = snprintf(NULL, 0, format_str, input->range_lo); size_t hi_len = snprintf(NULL, 0, format_str, input->range_hi); value_ptr_len = lo_len + hi_len + 1; - value_ptr = (char *)calloc(value_ptr_len + 1, sizeof(char)); + value_ptr = (char *)PDC_calloc(value_ptr_len + 1, sizeof(char)); char fmt_str[20]; snprintf(fmt_str, 20, "%s~%s", format_str, format_str); snprintf(value_ptr, value_ptr_len + 1, fmt_str, input->range_lo, input->range_hi); } else { - LOG_ERROR("Invalid value query type for integer!\n"); - return; + LOG_ERROR("Invalid value query type for integer\n"); + FUNC_LEAVE_VOID(); } } @@ -141,28 +143,37 @@ gen_query_key_value(query_gen_input_t *input, query_gen_output_t *output) output->key_query_len = key_ptr_len; output->value_query = value_ptr; output->value_query_len = value_ptr_len; + + FUNC_LEAVE_VOID(); } char * gen_query_str(query_gen_output_t *query_gen_output) { - char *final_query_str = - (char *)calloc(query_gen_output->key_query_len + query_gen_output->value_query_len + 2, sizeof(char)); + FUNC_ENTER(NULL); + + char *final_query_str = (char *)PDC_calloc( + query_gen_output->key_query_len + query_gen_output->value_query_len + 2, sizeof(char)); strcat(final_query_str, query_gen_output->key_query); strcat(final_query_str, "="); strcat(final_query_str, query_gen_output->value_query); - return final_query_str; + + FUNC_LEAVE(final_query_str); } void free_query_output(query_gen_output_t *output) { + FUNC_ENTER(NULL); + if (output->key_query != NULL) { - free(output->key_query); + output->key_query = (char *)PDC_free(output->key_query); } if (output->value_query != NULL) { - free(output->value_query); + output->value_query = (char *)PDC_free(output->value_query); } + + FUNC_LEAVE_VOID(); } /** @@ -179,14 +190,16 @@ free_query_output(query_gen_output_t *output) char * get_key(const char *kv_pair, char delim) { + FUNC_ENTER(NULL); char *ret = NULL; int idx = indexOf(kv_pair, delim); if (idx < 0) { - return ret; + FUNC_LEAVE(ret); } - return subrstr(kv_pair, idx); + + FUNC_LEAVE(subrstr(kv_pair, idx)); } /** @@ -202,15 +215,16 @@ get_key(const char *kv_pair, char delim) char * get_value(const char *kv_pair, char delim) { + FUNC_ENTER(NULL); char *ret = NULL; int idx = indexOf(kv_pair, delim); if (idx < 0) { - return ret; + FUNC_LEAVE(ret); } - return substr(kv_pair, idx + 1); + FUNC_LEAVE(substr(kv_pair, idx + 1)); } /** @@ -224,6 +238,8 @@ get_value(const char *kv_pair, char delim) char * gen_tags(int obj_id) { + FUNC_ENTER(NULL); + int j; int tag_num = obj_id % 20; char *ret = ""; @@ -231,11 +247,12 @@ gen_tags(int obj_id) char *fspace = ret; ret = dsprintf("%stag%d=%d%d,", ret, j, obj_id, j); if (strlen(fspace) > 0) { - free(fspace); + fspace = (char *)PDC_free(fspace); } } ret[strlen(ret) - 1] = '\0'; - return ret; + + FUNC_LEAVE(ret); } /** @@ -246,17 +263,19 @@ gen_tags(int obj_id) void gen_tags_in_loop() { + FUNC_ENTER(NULL); int my_count = 1000; int i; for (i = 0; i < my_count; i++) { int tag_num = i % 20; char *ret = gen_tags(tag_num); - println("helloworld, %s", ret); if (ret != NULL) { - free(ret); + ret = (char *)PDC_free(ret); } } + + FUNC_LEAVE_VOID(); } /** * returns 1 if the tag is found, otherwise, returns 0. @@ -267,6 +286,8 @@ gen_tags_in_loop() int has_tag(const char *tagslist, const char *tagname) { + FUNC_ENTER(NULL); + /* char *pattern = strdup(tagname); if (startsWith("*", pattern)) { @@ -276,7 +297,7 @@ has_tag(const char *tagslist, const char *tagname) pattern[strlen(pattern)]='\0'; } */ - return has_tag_p(tagslist, tagname); + FUNC_LEAVE(has_tag_p(tagslist, tagname)); } /** * Check if there is any tag in the tags list that matches the given pattern. @@ -288,12 +309,15 @@ has_tag(const char *tagslist, const char *tagname) int has_tag_p(const char *tagslist, const char *pattern) { - return (k_v_matches_p(tagslist, pattern, NULL) != NULL); + FUNC_ENTER(NULL); + FUNC_LEAVE(k_v_matches_p(tagslist, pattern, NULL) != NULL); } char * k_v_matches_p(const char *tagslist, const char *key_pattern, const char *value_pattern) { + FUNC_ENTER(NULL); + char *rst_kv = NULL; char *_tags_list = NULL; @@ -326,10 +350,10 @@ k_v_matches_p(const char *tagslist, const char *key_pattern, const char *value_p (value_pattern == NULL ? is_key_matched : (is_key_matched && is_value_matched)); if (key != NULL) { - free(key); + key = (char *)PDC_free(key); } if (value != NULL) { - free(value); + value = (char *)PDC_free(value); } if (pattern_matches) { @@ -340,59 +364,59 @@ k_v_matches_p(const char *tagslist, const char *key_pattern, const char *value_p tag_kv = strtok(NULL, TAG_DELIMITER); } - if (_tags_list != NULL) { - // free(_tags_list); - } - return rst_kv; + FUNC_LEAVE(rst_kv); } int is_value_match(const char *tagslist, const char *tagname, const char *val) { - /* - char *pattern = strdup(val); - if (startsWith("*", pattern)) { - pattern = &pattern[1]; - } - if (endsWith("*", pattern)) { - pattern[strlen(pattern)]='\0'; - } - */ - return is_value_match_p(tagslist, tagname, val); + FUNC_ENTER(NULL); + FUNC_LEAVE(is_value_match_p(tagslist, tagname, val)); } + int is_value_match_p(const char *tagslist, const char *tagname, const char *pattern) { - return (k_v_matches_p(tagslist, tagname, pattern) != NULL); + FUNC_ENTER(NULL); + FUNC_LEAVE(k_v_matches_p(tagslist, tagname, pattern) != NULL); } + int is_value_in_range(const char *tagslist, const char *tagname, int from, int to) { + FUNC_ENTER(NULL); + const char *matched_kv = k_v_matches_p(tagslist, tagname, NULL); char * value = get_value(matched_kv, '='); int v = atoi(value); - return (v >= from && v <= to); + + FUNC_LEAVE(v >= from && v <= to); } int is_string_query(char *value_query) { - return is_quoted_string(value_query); + FUNC_ENTER(NULL); + FUNC_LEAVE(is_quoted_string(value_query)); } int is_affix_query(char *value_query) { + FUNC_ENTER(NULL); + if (is_string_query(value_query) && contains(value_query, "*")) { - return 1; + FUNC_LEAVE(1); } - return 0; + + FUNC_LEAVE(0); } int is_number_query(char *value_query) { - return !is_string_query(value_query); + FUNC_ENTER(NULL); + FUNC_LEAVE(!is_string_query(value_query)); } int @@ -400,6 +424,8 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, num_query_action_collection_t *action_collection, void *cb_input, uint64_t *cb_out_len, void **cb_out) { + FUNC_ENTER(NULL); + // allocate memory according to the val_idx_dtype for value 1 and value 2. void *val1; void *val2; @@ -409,12 +435,6 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, size_t klen1 = get_number_from_string(num_str, num_type, &val1); action_collection->exact_action(val1, NULL, NULL, 1, 1, num_type, cb_input, cb_out, cb_out_len); - - // value_index_leaf_content_t *value_index_leaf = NULL; - // rbt_find(leafcnt->primary_rbt, val1, klen1, (void **)&value_index_leaf); - // if (value_index_leaf != NULL) { - // collect_obj_ids(value_index_leaf, idx_record); - // } } else if (startsWith(num_val_query, "~")) { // LESS THAN int endInclusive = num_val_query[1] == '|'; @@ -424,8 +444,6 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, size_t klen1 = get_number_from_string(numstr, num_type, &val1); action_collection->lt_action(NULL, NULL, val1, 0, endInclusive, num_type, cb_input, cb_out, cb_out_len); - - // rbt_range_lt(leafcnt->primary_rbt, val1, klen1, value_rbt_callback, idx_record, endInclusive); } else if (endsWith(num_val_query, "~")) { // GEATER THAN int beginInclusive = num_val_query[strlen(num_val_query) - 2] == '|'; @@ -436,7 +454,6 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, action_collection->gt_action(NULL, val1, NULL, beginInclusive, 0, num_type, cb_input, cb_out, cb_out_len); - // rbt_range_gt(leafcnt->primary_rbt, val1, klen1, value_rbt_callback, idx_record, beginInclusive); } else if (contains(num_val_query, "~")) { // BETWEEN int num_tokens = 0; @@ -444,7 +461,7 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, // the string is not ended or started with '~', and if it contains '~', it is a in-between query. split_string(num_val_query, "~", &tokens, &num_tokens); if (num_tokens != 2) { - LOG_ERROR("ERROR: invalid range query: %s\n", num_val_query); + LOG_ERROR("Error invalid range query: %s\n", num_val_query); return -1; } char *lo_tok = tokens[0]; @@ -459,10 +476,6 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, action_collection->between_action(NULL, val1, val2, beginInclusive, endInclusive, num_type, cb_input, cb_out, cb_out_len); - // int num_visited_node = rbt_range_walk(leafcnt->primary_rbt, val1, klen1, val2, klen2, - // value_rbt_callback, idx_record, beginInclusive, - // endInclusive); - // println("[value_number_query] num_visited_node: %d\n", num_visited_node); } else { // exact query by default @@ -471,12 +484,7 @@ parse_and_run_number_value_query(char *num_val_query, pdc_c_var_type_t num_type, size_t klen1 = get_number_from_string(num_str, num_type, &val1); action_collection->exact_action(val1, NULL, NULL, 1, 1, num_type, cb_input, cb_out, cb_out_len); - // value_index_leaf_content_t *value_index_leaf = NULL; - // rbt_find(leafcnt->primary_rbt, val1, klen1, (void **)&value_index_leaf); - // if (value_index_leaf != NULL) { - // collect_obj_ids(value_index_leaf, idx_record); - // } - // free(num_str); } - return 0; + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/utils/query_utils_test.c b/src/commons/utils/query_utils_test.c index 73ebd940a..5b7a6ba5d 100644 --- a/src/commons/utils/query_utils_test.c +++ b/src/commons/utils/query_utils_test.c @@ -1,21 +1,31 @@ #include "query_utils.h" +#include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" void print_query_output(query_gen_output_t *output) { - println("key query: %s, len: %lu", output->key_query, output->key_query_len); - println("value query: %s, len: %lu", output->value_query, output->value_query_len); + FUNC_ENTER(NULL); + + LOG_JUST_PRINT("key query: %s, len: %lu\n", output->key_query, output->key_query_len); + LOG_JUST_PRINT("value query: %s, len: %lu\n", output->value_query, output->value_query_len); + char *final_query_str = gen_query_str(output); - println("final query: %s, len: %lu", final_query_str, strlen(final_query_str)); - free(final_query_str); + LOG_JUST_PRINT("final query: %s, len: %lu", final_query_str, strlen(final_query_str)); + final_query_str = (char *)PDC_free(final_query_str); + + FUNC_LEAVE_VOID(); } int main(int argc, char *argv[]) { + FUNC_ENTER(NULL); + int affix_length = atoi(argv[1]); pdc_kvtag_t *base_string_tag; - base_string_tag = (pdc_kvtag_t *)calloc(1, sizeof(pdc_kvtag_t)); + base_string_tag = (pdc_kvtag_t *)PDC_calloc(1, sizeof(pdc_kvtag_t)); base_string_tag->name = "testname"; base_string_tag->type = PDC_STRING; base_string_tag->value = "testvalue"; @@ -36,10 +46,10 @@ main(int argc, char *argv[]) pdc_kvtag_t *base_int_tag; int int_value = 234; - base_int_tag = (pdc_kvtag_t *)calloc(1, sizeof(pdc_kvtag_t)); + base_int_tag = (pdc_kvtag_t *)PDC_calloc(1, sizeof(pdc_kvtag_t)); base_int_tag->name = "testname"; base_int_tag->type = PDC_INT; - base_int_tag->value = (void *)calloc(1, sizeof(int)); + base_int_tag->value = (void *)PDC_calloc(1, sizeof(int)); ((int *)base_int_tag->value)[0] = int_value; for (int i = 4; i < 6; i++) { @@ -60,5 +70,5 @@ main(int argc, char *argv[]) free_query_output(&output); } - return 0; + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/commons/utils/string_utils.c b/src/commons/utils/string_utils.c index aa810d3b7..633a5a8c1 100644 --- a/src/commons/utils/string_utils.c +++ b/src/commons/utils/string_utils.c @@ -1,9 +1,7 @@ -// -// Created by Wei Zhang on 7/12/17. -// - #include "string_utils.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #include const char *VISIBLE_ALPHABET = @@ -12,39 +10,49 @@ const char *VISIBLE_ALPHABET = int startsWith(const char *str, const char *pre) { + FUNC_ENTER(NULL); + if (str == NULL || pre == NULL) - return 0; - return strncmp(str, pre, strlen(pre)) == 0; + FUNC_LEAVE(0); + + FUNC_LEAVE(strncmp(str, pre, strlen(pre)) == 0); } int endsWith(const char *str, const char *suf) { + FUNC_ENTER(NULL); + if (str == NULL || suf == NULL) - return 0; + FUNC_LEAVE(0); size_t lensuf = strlen(suf), lenstr = strlen(str); - return lenstr < lensuf ? 0 : (strncmp(str + lenstr - lensuf, suf, lensuf) == 0); + + FUNC_LEAVE(lenstr < lensuf ? 0 : (strncmp(str + lenstr - lensuf, suf, lensuf) == 0)); } int contains(const char *str, const char *tok) { - return strstr(str, tok) != NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(strstr(str, tok) != NULL); } int equals(const char *str, const char *tok) { - return strcmp(tok, str) == 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(strcmp(tok, str) == 0); } int simple_matches(const char *str, const char *pattern) { + FUNC_ENTER(NULL); + int result = 0; // Ensure both str and pattern cannot be empty. if (str == NULL || pattern == NULL) { - return result; + FUNC_LEAVE(result); } int pattern_type = determine_pattern_type(pattern); @@ -69,49 +77,55 @@ simple_matches(const char *str, const char *pattern) break; } if (tok != NULL) { - free(tok); + tok = (char *)PDC_free(tok); } - return result; + + FUNC_LEAVE(result); } pattern_type_t determine_pattern_type(const char *pattern) { + FUNC_ENTER(NULL); if (startsWith(pattern, "*")) { if (endsWith(pattern, "*")) { - return PATTERN_MIDDLE; + FUNC_LEAVE(PATTERN_MIDDLE); } else { - return PATTERN_SUFFIX; + FUNC_LEAVE(PATTERN_SUFFIX); } } else { if (endsWith(pattern, "*")) { - return PATTERN_PREFIX; + FUNC_LEAVE(PATTERN_PREFIX); } else { - return PATTERN_EXACT; + FUNC_LEAVE(PATTERN_EXACT); } } } char * substr(const char *str, int start) { - return substring(str, start, strlen(str) + 1); + FUNC_ENTER(NULL); + FUNC_LEAVE(substring(str, start, strlen(str) + 1)); } char * subrstr(const char *str, int end) { - return substring(str, 0, end); + FUNC_ENTER(NULL); + FUNC_LEAVE(substring(str, 0, end)); } char * substring(const char *str, int start, int end) { + FUNC_ENTER(NULL); + // Check for invalid parameters if (str == NULL || end < start || start < 0 || end < 0) { - return NULL; + FUNC_LEAVE(NULL); } // Length of the original string @@ -126,9 +140,9 @@ substring(const char *str, int start, int end) int substr_len = end - start; // Allocate memory for the new string (including null-terminator) - char *substr = (char *)malloc((substr_len + 1) * sizeof(char)); + char *substr = (char *)PDC_malloc((substr_len + 1) * sizeof(char)); if (substr == NULL) { // Check if malloc succeeded - return NULL; + FUNC_LEAVE(NULL); } // Copy the substring into the new string @@ -137,31 +151,39 @@ substring(const char *str, int start, int end) // Null-terminate the new string substr[substr_len] = '\0'; - return substr; + FUNC_LEAVE(substr); } int indexOfStr(const char *str, char *tok) { + FUNC_ENTER(NULL); + const char *p = strstr(str, tok); if (p) { - return p - str; + FUNC_LEAVE(p - str); } - return -1; + + FUNC_LEAVE(-1); } int indexOf(const char *str, char c) { + FUNC_ENTER(NULL); + const char *p = strchr(str, c); if (p) { - return p - str; + FUNC_LEAVE(p - str); } - return -1; + + FUNC_LEAVE(-1); } char * dsprintf(const char *format, ...) { + FUNC_ENTER(NULL); + char *ret; // 1. declare argument list va_list args; @@ -169,57 +191,30 @@ dsprintf(const char *format, ...) va_start(args, format); // 3. get arguments value int numbytes = vsnprintf((char *)NULL, 0, format, args); - ret = (char *)calloc((numbytes + 1), sizeof(char)); + ret = (char *)PDC_calloc((numbytes + 1), sizeof(char)); va_start(args, format); vsprintf(ret, format, args); // 4. ending argument list va_end(args); - return ret; -} - -void -println(const char *format, ...) -{ - // 1. declare argument list - va_list args; - // 2. starting argument list - va_start(args, format); - // 3. get arguments value - vfprintf(stdout, format, args); - // 4. ending argument list - va_end(args); - fputc('\n', stdout); - fflush(stdout); -} -void -stderr_println(const char *format, ...) -{ - // 1. declare argument list - va_list args; - // 2. starting argument list - va_start(args, format); - // 3. get arguments value - vfprintf(stderr, format, args); - // 4. ending argument list - va_end(args); - fputc('\n', stderr); - fflush(stderr); + FUNC_LEAVE(ret); } char * reverse_str(char *str) { + FUNC_ENTER(NULL); + if (str == NULL) { - return NULL; + FUNC_LEAVE(NULL); } int length = strlen(str); - char *reversed = (char *)malloc(length + 1); // +1 for the null-terminator + char *reversed = (char *)PDC_malloc(length + 1); // +1 for the null-terminator if (reversed == NULL) { - return NULL; // Return NULL if memory allocation fails + FUNC_LEAVE(NULL); } for (int i = 0; i < length; i++) { @@ -228,14 +223,16 @@ reverse_str(char *str) reversed[length] = '\0'; // Null-terminate the new string - return reversed; + FUNC_LEAVE(reversed); } int split_string(const char *str, const char *delim, char ***result, int *result_len) { + FUNC_ENTER(NULL); + if (str == NULL || delim == NULL || result == NULL || result_len == NULL) { - return -1; + FUNC_LEAVE(-1); } regex_t regex; @@ -245,7 +242,7 @@ split_string(const char *str, const char *delim, char ***result, int *result_len reti = regcomp(®ex, delim, 0); if (reti) { LOG_ERROR("Could not compile regex\n"); - return -1; + FUNC_LEAVE(-1); } const char *tmp = str; @@ -259,9 +256,9 @@ split_string(const char *str, const char *delim, char ***result, int *result_len } *result_len = count + 1; - *result = (char **)malloc((*result_len) * sizeof(char *)); + *result = (char **)PDC_malloc((*result_len) * sizeof(char *)); if (!*result) { - return -1; // Memory allocation failed + FUNC_LEAVE(-1); } tmp = str; // Reset tmp @@ -271,15 +268,15 @@ split_string(const char *str, const char *delim, char ***result, int *result_len while (i < count && regexec(®ex, tmp, 1, pmatch, 0) != REG_NOMATCH) { int len = pmatch[0].rm_so; - (*result)[i] = (char *)malloc((len + 1) * sizeof(char)); + (*result)[i] = (char *)PDC_malloc((len + 1) * sizeof(char)); if (!(*result)[i]) { for (int j = 0; j < i; j++) { - free((*result)[j]); + (*result)[j] = (char *)PDC_free((*result)[j]); } - free(*result); + *result = (char **)PDC_free(*result); *result = NULL; regfree(®ex); - return -1; + FUNC_LEAVE(-1); } memcpy((*result)[i], start, len); @@ -293,30 +290,33 @@ split_string(const char *str, const char *delim, char ***result, int *result_len (*result)[i] = strdup(start); if (!(*result)[i]) { for (int j = 0; j < i; j++) { - free((*result)[j]); + (*result)[j] = (char *)PDC_free((*result)[j]); } - free(*result); + *result = (char **)PDC_free(*result); *result = NULL; regfree(®ex); - return -1; + FUNC_LEAVE(-1); } regfree(®ex); - return *result_len; + + FUNC_LEAVE(*result_len); } char ** gen_random_strings(int count, int minlen, int maxlen, int alphabet_size) { + FUNC_ENTER(NULL); + int c = 0; int i = 0; - char **result = (char **)calloc(count, sizeof(char *)); + char **result = (char **)PDC_calloc(count, sizeof(char *)); int abc_size = alphabet_size > strlen(VISIBLE_ALPHABET) ? strlen(VISIBLE_ALPHABET) : alphabet_size; abc_size = abc_size < 1 ? 26 : abc_size; // the minimum alphabet size is 26 for (c = 0; c < count; c++) { int len = (rand() % maxlen) + 1; len = len < minlen ? minlen : len; // Ensure at least minlen character - char *str = (char *)calloc(len + 1, sizeof(char)); + char *str = (char *)PDC_calloc(len + 1, sizeof(char)); for (i = 0; i < len; i++) { int randnum = rand(); if (randnum < 0) @@ -327,16 +327,20 @@ gen_random_strings(int count, int minlen, int maxlen, int alphabet_size) str[len] = '\0'; // Null-terminate the string result[c] = str; } - return result; + + FUNC_LEAVE(result); } int is_quoted_string(char *token) { + FUNC_ENTER(NULL); + if (startsWith(token, "\"") || endsWith(token, "\"")) { - return 1; + FUNC_LEAVE(1); } - return 0; + + FUNC_LEAVE(0); } /** @@ -345,18 +349,20 @@ is_quoted_string(char *token) char * stripQuotes(const char *str) { + FUNC_ENTER(NULL); + if (str == NULL) { - return NULL; + FUNC_LEAVE(NULL); } int len = strlen(str); if (len >= 2 && str[0] == '"' && str[len - 1] == '"') { // Call substring to remove the first and last character char *stripped = substring(str, 1, len - 1); - return stripped; + FUNC_LEAVE(stripped); } else { // No quotes to strip, return a copy of the original string - return strdup(str); // strdup allocates memory for the copy + FUNC_LEAVE(strdup(str)); // strdup allocates memory for the copy } } \ No newline at end of file diff --git a/src/commons/utils/thpool.c b/src/commons/utils/thpool.c index a064fe74d..e5e983f83 100644 --- a/src/commons/utils/thpool.c +++ b/src/commons/utils/thpool.c @@ -29,6 +29,8 @@ #include "thpool.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" #ifdef THPOOL_DEBUG #define THPOOL_DEBUG 1 @@ -112,6 +114,7 @@ static void bsem_wait(struct bsem *bsem_p); struct thpool_ * thpool_init(int num_threads) { + FUNC_ENTER(NULL); threads_on_hold = 0; threads_keepalive = 1; @@ -122,10 +125,10 @@ thpool_init(int num_threads) /* Make new thread pool */ thpool_ *thpool_p; - thpool_p = (struct thpool_ *)malloc(sizeof(struct thpool_)); + thpool_p = (struct thpool_ *)PDC_malloc(sizeof(struct thpool_)); if (thpool_p == NULL) { err("thpool_init(): Could not allocate memory for thread pool\n"); - return NULL; + FUNC_LEAVE(NULL); } thpool_p->num_threads_alive = 0; thpool_p->num_threads_working = 0; @@ -133,17 +136,17 @@ thpool_init(int num_threads) /* Initialise the job queue */ if (jobqueue_init(&thpool_p->jobqueue) == -1) { err("thpool_init(): Could not allocate memory for job queue\n"); - free(thpool_p); - return NULL; + thpool_p = (thpool_ *)PDC_free(thpool_p); + FUNC_LEAVE(NULL); } /* Make threads in pool */ - thpool_p->threads = (struct thread **)malloc(num_threads * sizeof(struct thread *)); + thpool_p->threads = (struct thread **)PDC_malloc(num_threads * sizeof(struct thread *)); if (thpool_p->threads == NULL) { err("thpool_init(): Could not allocate memory for threads\n"); jobqueue_destroy(&thpool_p->jobqueue); - free(thpool_p); - return NULL; + thpool_p = (thpool_ *)PDC_free(thpool_p); + FUNC_LEAVE(NULL); } pthread_mutex_init(&(thpool_p->thcount_lock), NULL); @@ -162,19 +165,21 @@ thpool_init(int num_threads) while (thpool_p->num_threads_alive != num_threads) { } - return thpool_p; + FUNC_LEAVE(thpool_p); } /* Add work to the thread pool */ int thpool_add_work(thpool_ *thpool_p, void (*function_p)(void *), void *arg_p) { + FUNC_ENTER(NULL); + job *newjob; - newjob = (struct job *)malloc(sizeof(struct job)); + newjob = (struct job *)PDC_malloc(sizeof(struct job)); if (newjob == NULL) { err("thpool_add_work(): Could not allocate memory for new job\n"); - return -1; + FUNC_LEAVE(-1); } /* add function and argument */ @@ -184,27 +189,33 @@ thpool_add_work(thpool_ *thpool_p, void (*function_p)(void *), void *arg_p) /* add job to queue */ jobqueue_push(&thpool_p->jobqueue, newjob); - return 0; + FUNC_LEAVE(0); } /* Wait until all jobs have finished */ void thpool_wait(thpool_ *thpool_p) { + FUNC_ENTER(NULL); + pthread_mutex_lock(&thpool_p->thcount_lock); while (thpool_p->jobqueue.len || thpool_p->num_threads_working) { pthread_cond_wait(&thpool_p->threads_all_idle, &thpool_p->thcount_lock); } pthread_mutex_unlock(&thpool_p->thcount_lock); + + FUNC_LEAVE_VOID(); } /* Destroy the threadpool */ void thpool_destroy(thpool_ *thpool_p) { + FUNC_ENTER(NULL); + /* No need to destory if it's NULL */ if (thpool_p == NULL) - return; + FUNC_LEAVE_VOID(); volatile int threads_total = thpool_p->num_threads_alive; @@ -235,36 +246,47 @@ thpool_destroy(thpool_ *thpool_p) for (n = 0; n < threads_total; n++) { thread_destroy(thpool_p->threads[n]); } - free(thpool_p->threads); - free(thpool_p); + thpool_p->threads = (thread **)PDC_free(thpool_p->threads); + thpool_p = (thpool_ *)PDC_free(thpool_p); + + FUNC_LEAVE_VOID(); } /* Pause all threads in threadpool */ void thpool_pause(thpool_ *thpool_p) { + FUNC_ENTER(NULL); + int n; for (n = 0; n < thpool_p->num_threads_alive; n++) { pthread_kill(thpool_p->threads[n]->pthread, SIGUSR1); } + + FUNC_LEAVE_VOID(); } /* Resume all threads in threadpool */ void thpool_resume(thpool_ *thpool_p) { + FUNC_ENTER(NULL); + // resuming a single threadpool hasn't been // implemented yet, meanwhile this supresses // the warnings (void)thpool_p; threads_on_hold = 0; + + FUNC_LEAVE_VOID(); } int thpool_num_threads_working(thpool_ *thpool_p) { - return thpool_p->num_threads_working; + FUNC_ENTER(NULL); + FUNC_LEAVE(thpool_p->num_threads_working); } /* ============================ THREAD ============================== */ @@ -278,11 +300,12 @@ thpool_num_threads_working(thpool_ *thpool_p) static int thread_init(thpool_ *thpool_p, struct thread **thread_p, int id) { + FUNC_ENTER(NULL); - *thread_p = (struct thread *)malloc(sizeof(struct thread)); + *thread_p = (struct thread *)PDC_malloc(sizeof(struct thread)); if (thread_p == NULL) { err("thread_init(): Could not allocate memory for thread\n"); - return -1; + FUNC_LEAVE(-1); } (*thread_p)->thpool_p = thpool_p; @@ -290,18 +313,23 @@ thread_init(thpool_ *thpool_p, struct thread **thread_p, int id) pthread_create(&(*thread_p)->pthread, NULL, (void *)thread_do, (*thread_p)); pthread_detach((*thread_p)->pthread); - return 0; + + FUNC_LEAVE(0); } /* Sets the calling thread on hold */ static void thread_hold(int sig_id) { + FUNC_ENTER(NULL); + (void)sig_id; threads_on_hold = 1; while (threads_on_hold) { sleep(1); } + + FUNC_LEAVE_VOID(); } /* What each thread is doing @@ -315,6 +343,7 @@ thread_hold(int sig_id) static void * thread_do(struct thread *thread_p) { + FUNC_ENTER(NULL); /* Set thread name for profiling and debuging */ char thread_name[128] = {0}; @@ -364,7 +393,7 @@ thread_do(struct thread *thread_p) func_buff = job_p->function; arg_buff = job_p->arg; func_buff(arg_buff); - free(job_p); + job_p = (job *)PDC_free(job_p); } pthread_mutex_lock(&thpool_p->thcount_lock); @@ -379,14 +408,16 @@ thread_do(struct thread *thread_p) thpool_p->num_threads_alive--; pthread_mutex_unlock(&thpool_p->thcount_lock); - return NULL; + FUNC_LEAVE(NULL); } /* Frees a thread */ static void thread_destroy(thread *thread_p) { - free(thread_p); + thread_p = (thread *)PDC_free(thread_p); + + FUNC_LEAVE_VOID(); } /* ============================ JOB QUEUE =========================== */ @@ -395,34 +426,40 @@ thread_destroy(thread *thread_p) static int jobqueue_init(jobqueue *jobqueue_p) { + FUNC_ENTER(NULL); + jobqueue_p->len = 0; jobqueue_p->front = NULL; jobqueue_p->rear = NULL; - jobqueue_p->has_jobs = (struct bsem *)malloc(sizeof(struct bsem)); + jobqueue_p->has_jobs = (struct bsem *)PDC_malloc(sizeof(struct bsem)); if (jobqueue_p->has_jobs == NULL) { - return -1; + FUNC_LEAVE(-1); } pthread_mutex_init(&(jobqueue_p->rwmutex), NULL); bsem_init(jobqueue_p->has_jobs, 0); - return 0; + FUNC_LEAVE(0); } /* Clear the queue */ static void jobqueue_clear(jobqueue *jobqueue_p) { + FUNC_ENTER(NULL); while (jobqueue_p->len) { - free(jobqueue_pull(jobqueue_p)); + struct job *j = jobqueue_pull(jobqueue_p); + j = (struct job *)PDC_free(j); } jobqueue_p->front = NULL; jobqueue_p->rear = NULL; bsem_reset(jobqueue_p->has_jobs); jobqueue_p->len = 0; + + FUNC_LEAVE_VOID(); } /* Add (allocated) job to queue @@ -430,6 +467,7 @@ jobqueue_clear(jobqueue *jobqueue_p) static void jobqueue_push(jobqueue *jobqueue_p, struct job *newjob) { + FUNC_ENTER(NULL); pthread_mutex_lock(&jobqueue_p->rwmutex); newjob->prev = NULL; @@ -449,11 +487,14 @@ jobqueue_push(jobqueue *jobqueue_p, struct job *newjob) bsem_post(jobqueue_p->has_jobs); pthread_mutex_unlock(&jobqueue_p->rwmutex); + + FUNC_LEAVE_VOID(); } static struct job * jobqueue_pull(jobqueue *jobqueue_p) { + FUNC_ENTER(NULL); pthread_mutex_lock(&jobqueue_p->rwmutex); job *job_p = jobqueue_p->front; @@ -477,15 +518,20 @@ jobqueue_pull(jobqueue *jobqueue_p) } pthread_mutex_unlock(&jobqueue_p->rwmutex); - return job_p; + + FUNC_LEAVE(job_p); } /* Free all queue resources back to the system */ static void jobqueue_destroy(jobqueue *jobqueue_p) { + FUNC_ENTER(NULL); + jobqueue_clear(jobqueue_p); - free(jobqueue_p->has_jobs); + jobqueue_p->has_jobs = (bsem *)PDC_free(jobqueue_p->has_jobs); + + FUNC_LEAVE_VOID(); } /* ======================== SYNCHRONISATION ========================= */ @@ -494,6 +540,8 @@ jobqueue_destroy(jobqueue *jobqueue_p) static void bsem_init(bsem *bsem_p, int value) { + FUNC_ENTER(NULL); + if (value < 0 || value > 1) { err("bsem_init(): Binary semaphore can take only values 1 or 0"); exit(1); @@ -501,43 +549,61 @@ bsem_init(bsem *bsem_p, int value) pthread_mutex_init(&(bsem_p->mutex), NULL); pthread_cond_init(&(bsem_p->cond), NULL); bsem_p->v = value; + + FUNC_LEAVE_VOID(); } /* Reset semaphore to 0 */ static void bsem_reset(bsem *bsem_p) { + FUNC_ENTER(NULL); + bsem_init(bsem_p, 0); + + FUNC_LEAVE_VOID(); } /* Post to at least one thread */ static void bsem_post(bsem *bsem_p) { + FUNC_ENTER(NULL); + pthread_mutex_lock(&bsem_p->mutex); bsem_p->v = 1; pthread_cond_signal(&bsem_p->cond); pthread_mutex_unlock(&bsem_p->mutex); + + FUNC_LEAVE_VOID(); } /* Post to all threads */ static void bsem_post_all(bsem *bsem_p) { + FUNC_ENTER(NULL); + pthread_mutex_lock(&bsem_p->mutex); bsem_p->v = 1; pthread_cond_broadcast(&bsem_p->cond); pthread_mutex_unlock(&bsem_p->mutex); + + FUNC_LEAVE_VOID(); } /* Wait on semaphore until semaphore has value 0 */ static void bsem_wait(bsem *bsem_p) { + FUNC_ENTER(NULL); + pthread_mutex_lock(&bsem_p->mutex); while (bsem_p->v != 1) { pthread_cond_wait(&bsem_p->cond, &bsem_p->mutex); } bsem_p->v = 0; pthread_mutex_unlock(&bsem_p->mutex); + + FUNC_LEAVE_VOID(); } \ No newline at end of file diff --git a/src/commons/utils/timer_utils.c b/src/commons/utils/timer_utils.c index a768ae19a..08d9ca38a 100644 --- a/src/commons/utils/timer_utils.c +++ b/src/commons/utils/timer_utils.c @@ -1,4 +1,5 @@ #include "timer_utils.h" +#include "pdc_timing.h" #define MICROSECONDS_IN_SECONDS 1000000 @@ -9,9 +10,11 @@ int64_t timer_us_timestamp() { + FUNC_ENTER(NULL); + struct timeval tmp; gettimeofday(&(tmp), NULL); - return ((int64_t)tmp.tv_usec) + (int64_t)(tmp.tv_sec * MICROSECONDS_IN_SECONDS); + FUNC_LEAVE(((int64_t)tmp.tv_usec) + (int64_t)(tmp.tv_sec * MICROSECONDS_IN_SECONDS)); } /** @@ -21,7 +24,8 @@ timer_us_timestamp() int64_t timer_ms_timestamp() { - return (timer_us_timestamp() / 1000); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_us_timestamp() / 1000); } /** @@ -31,73 +35,92 @@ timer_ms_timestamp() int64_t timer_s_timestamp() { - return (timer_ms_timestamp() / 1000); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_ms_timestamp() / 1000); } void timer_start(stopwatch_t *t) { + FUNC_ENTER(NULL); + t->start_mark = timer_us_timestamp(); t->pause_mark = 0; t->running = true; t->paused = false; + + FUNC_LEAVE_VOID(); } void timer_pause(stopwatch_t *t) { + FUNC_ENTER(NULL); + if (!(t->running) || (t->paused)) - return; + FUNC_LEAVE_VOID(); t->pause_mark = timer_us_timestamp() - (t->start_mark); t->running = false; t->paused = true; + + FUNC_LEAVE_VOID(); } void timer_unpause(stopwatch_t *t) { + FUNC_ENTER(NULL); + if (t->running || !(t->paused)) - return; + FUNC_LEAVE_VOID(); t->start_mark = timer_us_timestamp() - (t->pause_mark); t->running = true; t->paused = false; + + FUNC_LEAVE_VOID(); } double timer_delta_us(stopwatch_t *t) { + FUNC_ENTER(NULL); + if (t->running) - return timer_us_timestamp() - (t->start_mark); + FUNC_LEAVE(timer_us_timestamp() - (t->start_mark)); if (t->paused) - return t->pause_mark; + FUNC_LEAVE(t->pause_mark); // Will never actually get here - return (double)((t->pause_mark) - (t->start_mark)); + FUNC_LEAVE((double)((t->pause_mark) - (t->start_mark))); } double timer_delta_ms(stopwatch_t *t) { - return (timer_delta_us(t) / 1000.0); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_delta_us(t) / 1000.0); } double timer_delta_s(stopwatch_t *t) { - return (timer_delta_ms(t) / 1000.0); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_delta_ms(t) / 1000.0); } double timer_delta_m(stopwatch_t *t) { - return (timer_delta_s(t) / 60.0); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_delta_s(t) / 60.0); } double timer_delta_h(stopwatch_t *t) { - return (timer_delta_m(t) / 60.0); + FUNC_ENTER(NULL); + FUNC_LEAVE(timer_delta_m(t) / 60.0); } diff --git a/src/server/dablooms/pdc_dablooms.c b/src/server/dablooms/pdc_dablooms.c index 6a6c287f6..6c0048808 100644 --- a/src/server/dablooms/pdc_dablooms.c +++ b/src/server/dablooms/pdc_dablooms.c @@ -13,11 +13,12 @@ #include #include #include -#include "pdc_malloc.h" +#include "pdc_malloc.h" #include "pdc_murmur.h" #include "pdc_dablooms.h" #include "pdc_logger.h" +#include "pdc_timing.h" #define DABLOOMS_VERSION "0.9.1" @@ -27,21 +28,29 @@ const char * dablooms_version(void) { - return DABLOOMS_VERSION; + FUNC_ENTER(NULL); + FUNC_LEAVE(DABLOOMS_VERSION); } void free_bitmap(bitmap_t *bitmap) { - free(bitmap); + FUNC_ENTER(NULL); + + bitmap = (bitmap_t *)PDC_free(bitmap); + + FUNC_LEAVE_VOID(); } bitmap_t * bitmap_resize(bitmap_t *bitmap, size_t new_size) { + FUNC_ENTER(NULL); + bitmap->array = PDC_malloc(new_size); bitmap->bytes = new_size; - return bitmap; + + FUNC_LEAVE(bitmap); } /* Create a new bitmap, not full featured, simple to give @@ -50,25 +59,29 @@ bitmap_resize(bitmap_t *bitmap, size_t new_size) bitmap_t * new_bitmap(size_t bytes) { + FUNC_ENTER(NULL); + bitmap_t *bitmap; if ((bitmap = (bitmap_t *)PDC_malloc(sizeof(bitmap_t))) == NULL) { - return NULL; + FUNC_LEAVE(NULL); } bitmap->bytes = bytes; bitmap->array = NULL; if ((bitmap = bitmap_resize(bitmap, bytes)) == NULL) { - return NULL; + FUNC_LEAVE(NULL); } - return bitmap; + FUNC_LEAVE(bitmap); } int bitmap_increment(bitmap_t *bitmap, unsigned int index, long offset) { + FUNC_ENTER(NULL); + long access = index / 2 + offset; uint8_t temp; uint8_t n = bitmap->array[access]; @@ -83,17 +96,20 @@ bitmap_increment(bitmap_t *bitmap, unsigned int index, long offset) if (temp == 0x0f) { LOG_ERROR("Error, 4 bit int Overflow\n"); - return -1; + FUNC_LEAVE(-1); } bitmap->array[access] = n; - return 0; + + FUNC_LEAVE(0); } /* increments the four bit counter */ int bitmap_decrement(bitmap_t *bitmap, unsigned int index, long offset) { + FUNC_ENTER(NULL); + long access = index / 2 + offset; uint8_t temp; uint8_t n = bitmap->array[access]; @@ -109,36 +125,39 @@ bitmap_decrement(bitmap_t *bitmap, unsigned int index, long offset) if (temp == 0x00) { LOG_ERROR("Error, Decrementing zero\n"); - return -1; + FUNC_LEAVE(-1); } bitmap->array[access] = n; - return 0; + + FUNC_LEAVE(0); } /* decrements the four bit counter */ int bitmap_check(bitmap_t *bitmap, unsigned int index, long offset) { + FUNC_ENTER(NULL); + long access = index / 2 + offset; if (index % 2 != 0) { - return bitmap->array[access] & 0x0f; - } - else { - return bitmap->array[access] & 0xf0; + FUNC_LEAVE(bitmap->array[access] & 0x0f); } + + FUNC_LEAVE(bitmap->array[access] & 0xf0); } int bitmap_flush(bitmap_t *bitmap) { + FUNC_ENTER(NULL); + if ((msync(bitmap->array, bitmap->bytes, MS_SYNC) < 0)) { perror("Error, flushing bitmap to disk"); - return -1; - } - else { - return 0; + FUNC_LEAVE(-1); } + + FUNC_LEAVE(0); } /* @@ -153,6 +172,8 @@ bitmap_flush(bitmap_t *bitmap) void hash_func(counting_bloom_t *bloom, const char *key, size_t key_len, uint32_t *hashes) { + FUNC_ENTER(NULL); + size_t i; uint32_t checksum[4]; @@ -163,29 +184,36 @@ hash_func(counting_bloom_t *bloom, const char *key, size_t key_len, uint32_t *ha for (i = 0; i < bloom->nfuncs; i++) { hashes[i] = (h1 + i * h2) % bloom->counts_per_func; } + + FUNC_LEAVE_VOID(); } int free_counting_bloom(counting_bloom_t *bloom) { + FUNC_ENTER(NULL); + if (bloom != NULL) { - free(bloom->hashes); + bloom->hashes = (uint32_t *)PDC_free(bloom->hashes); bloom->hashes = NULL; - free(bloom->bitmap); - free(bloom); - bloom = NULL; + bloom->bitmap = (bitmap_t *)PDC_free(bloom->bitmap); + bloom = (counting_bloom_t *)PDC_free(bloom); + bloom = NULL; } - return 0; + + FUNC_LEAVE(0); } counting_bloom_t * counting_bloom_init(unsigned int capacity, double error_rate, long offset) { + FUNC_ENTER(NULL); + counting_bloom_t *bloom; if ((bloom = PDC_malloc(sizeof(counting_bloom_t))) == NULL) { LOG_ERROR("Error, could not realloc a new bloom filter\n"); - return NULL; + FUNC_LEAVE(NULL); } bloom->bitmap = NULL; bloom->capacity = capacity; @@ -198,23 +226,28 @@ counting_bloom_init(unsigned int capacity, double error_rate, long offset) bloom->num_bytes = ((bloom->size + 1) / 2) + sizeof(counting_bloom_header_t); bloom->hashes = PDC_calloc(bloom->nfuncs, sizeof(uint32_t)); - return bloom; + FUNC_LEAVE(bloom); } counting_bloom_t * new_counting_bloom(unsigned int capacity, double error_rate) { + FUNC_ENTER(NULL); + counting_bloom_t *cur_bloom; cur_bloom = counting_bloom_init(capacity, error_rate, 0); cur_bloom->bitmap = new_bitmap(cur_bloom->num_bytes); cur_bloom->header = (counting_bloom_header_t *)(cur_bloom->bitmap->array); - return cur_bloom; + + FUNC_LEAVE(cur_bloom); } int counting_bloom_add(counting_bloom_t *bloom, const char *s, size_t len) { + FUNC_ENTER(NULL); + unsigned int index, i, offset; unsigned int *hashes = bloom->hashes; @@ -227,12 +260,14 @@ counting_bloom_add(counting_bloom_t *bloom, const char *s, size_t len) } bloom->header->count++; - return 0; + FUNC_LEAVE(0); } int counting_bloom_remove(counting_bloom_t *bloom, const char *s, size_t len) { + FUNC_ENTER(NULL); + unsigned int index, i, offset; unsigned int *hashes = bloom->hashes; @@ -245,12 +280,14 @@ counting_bloom_remove(counting_bloom_t *bloom, const char *s, size_t len) } bloom->header->count--; - return 0; + FUNC_LEAVE(0); } int counting_bloom_check(counting_bloom_t *bloom, const char *s, size_t len) { + FUNC_ENTER(NULL); + unsigned int index, i, offset; unsigned int *hashes = bloom->hashes; @@ -260,32 +297,38 @@ counting_bloom_check(counting_bloom_t *bloom, const char *s, size_t len) offset = i * bloom->counts_per_func; index = hashes[i] + offset; if (!(bitmap_check(bloom->bitmap, index, bloom->offset))) { - return 0; + FUNC_LEAVE(0); } } - return 1; + + FUNC_LEAVE(1); } int free_scaling_bloom(scaling_bloom_t *bloom) { + FUNC_ENTER(NULL); + int i; for (i = bloom->num_blooms - 1; i >= 0; i--) { - free(bloom->blooms[i]->hashes); + bloom->blooms[i]->hashes = (uint32_t *)PDC_free(bloom->blooms[i]->hashes); bloom->blooms[i]->hashes = NULL; - free(bloom->blooms[i]); - bloom->blooms[i] = NULL; + bloom->blooms[i] = (counting_bloom_t *)PDC_free(bloom->blooms[i]); + bloom->blooms[i] = NULL; } - free(bloom->blooms); + bloom->blooms = (counting_bloom_t **)PDC_free(bloom->blooms); free_bitmap(bloom->bitmap); - free(bloom); - return 0; + bloom = (scaling_bloom_t *)PDC_free(bloom); + + FUNC_LEAVE(0); } /* creates a new counting bloom filter from a given scaling bloom filter, with count and id */ counting_bloom_t * new_counting_bloom_from_scale(scaling_bloom_t *bloom) { + FUNC_ENTER(NULL); + unsigned int i; long offset; double error_rate; @@ -293,10 +336,10 @@ new_counting_bloom_from_scale(scaling_bloom_t *bloom) error_rate = bloom->error_rate * (pow(ERROR_TIGHTENING_RATIO, bloom->num_blooms + 1)); - if ((bloom->blooms = realloc(bloom->blooms, (bloom->num_blooms + 1) * sizeof(counting_bloom_t *))) == + if ((bloom->blooms = PDC_realloc(bloom->blooms, (bloom->num_blooms + 1) * sizeof(counting_bloom_t *))) == NULL) { LOG_ERROR("Error, could not realloc a new bloom filter\n"); - return NULL; + FUNC_LEAVE(NULL); } cur_bloom = counting_bloom_init(bloom->capacity, error_rate, bloom->num_bytes); @@ -317,12 +360,14 @@ new_counting_bloom_from_scale(scaling_bloom_t *bloom) bloom->num_bytes += cur_bloom->num_bytes; cur_bloom->bitmap = bloom->bitmap; - return cur_bloom; + FUNC_LEAVE(cur_bloom); } int scaling_bloom_add(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t id) { + FUNC_ENTER(NULL); + int i; counting_bloom_t *cur_bloom = NULL; @@ -343,12 +388,14 @@ scaling_bloom_add(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t id } counting_bloom_add(cur_bloom, s, len); - return 1; + FUNC_LEAVE(1); } int scaling_bloom_remove(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t id) { + FUNC_ENTER(NULL); + counting_bloom_t *cur_bloom; int i; @@ -356,38 +403,44 @@ scaling_bloom_remove(scaling_bloom_t *bloom, const char *s, size_t len, uint64_t cur_bloom = bloom->blooms[i]; if (id >= cur_bloom->header->id) { counting_bloom_remove(cur_bloom, s, len); - return 1; + FUNC_LEAVE(1); } } - return 0; + + FUNC_LEAVE(0); } int scaling_bloom_check(scaling_bloom_t *bloom, const char *s, size_t len) { + FUNC_ENTER(NULL); + int i; counting_bloom_t *cur_bloom; for (i = bloom->num_blooms - 1; i >= 0; i--) { cur_bloom = bloom->blooms[i]; if (counting_bloom_check(cur_bloom, s, len)) { - return 1; + FUNC_LEAVE(1); } } - return 0; + + FUNC_LEAVE(0); } scaling_bloom_t * scaling_bloom_init(unsigned int capacity, double error_rate) { + FUNC_ENTER(NULL); + scaling_bloom_t *bloom; - if ((bloom = malloc(sizeof(scaling_bloom_t))) == NULL) { - return NULL; + if ((bloom = PDC_malloc(sizeof(scaling_bloom_t))) == NULL) { + FUNC_LEAVE(NULL); } if ((bloom->bitmap = new_bitmap(sizeof(scaling_bloom_header_t))) == NULL) { LOG_ERROR("Error, Could not create bitmap with file\n"); free_scaling_bloom(bloom); - return NULL; + FUNC_LEAVE(NULL); } bloom->header = (scaling_bloom_header_t *)bloom->bitmap->array; @@ -397,12 +450,13 @@ scaling_bloom_init(unsigned int capacity, double error_rate) bloom->num_bytes = sizeof(scaling_bloom_header_t); bloom->blooms = NULL; - return bloom; + FUNC_LEAVE(bloom); } scaling_bloom_t * new_scaling_bloom(unsigned int capacity, double error_rate) { + FUNC_ENTER(NULL); scaling_bloom_t * bloom; counting_bloom_t *cur_bloom; @@ -412,10 +466,10 @@ new_scaling_bloom(unsigned int capacity, double error_rate) if (!(cur_bloom = new_counting_bloom_from_scale(bloom))) { LOG_ERROR("Error, Could not create counting bloom\n"); free_scaling_bloom(bloom); - return NULL; + FUNC_LEAVE(NULL); } cur_bloom->header->count = 0; cur_bloom->header->id = 0; - return bloom; + FUNC_LEAVE(bloom); } diff --git a/src/server/dablooms/pdc_murmur.c b/src/server/dablooms/pdc_murmur.c index 8b1ea0901..b29ed5c6e 100644 --- a/src/server/dablooms/pdc_murmur.c +++ b/src/server/dablooms/pdc_murmur.c @@ -8,6 +8,7 @@ // non-native version will be less than optimal. #include "pdc_murmur.h" +#include "pdc_timing.h" #define FORCE_INLINE inline static @@ -49,6 +50,8 @@ fmix64(uint64_t k) void MurmurHash3_x64_128(const void *key, const int len, const uint32_t seed, void *out) { + FUNC_ENTER(NULL); + const uint8_t *data = (const uint8_t *)key; const int nblocks = len / 16; @@ -184,6 +187,8 @@ MurmurHash3_x64_128(const void *key, const int len, const uint32_t seed, void *o ((uint64_t *)out)[0] = h1; ((uint64_t *)out)[1] = h2; + + FUNC_LEAVE_VOID(); } //----------------------------------------------------------------------------- diff --git a/src/server/include/pdc_client_server_common.h b/src/server/include/pdc_client_server_common.h index 5b7a6bf62..92da04254 100644 --- a/src/server/include/pdc_client_server_common.h +++ b/src/server/include/pdc_client_server_common.h @@ -31,6 +31,7 @@ #include "pdc_prop_pkg.h" #include "pdc_analysis_and_transforms_common.h" #include "pdc_query.h" +#include "pdc_malloc.h" #include "pdc_timing.h" #include "pdc_server_region_transfer_metadata_query.h" @@ -53,7 +54,6 @@ extern struct timeval last_cache_activity_timeval_g; #define NA_STRING_INFO_LEN ADDR_MAX / 2 #define HOSTNAME_LEN ADDR_MAX / 8 #define TMP_DIR_STRING_LEN ADDR_MAX / 2 -#define DIM_MAX 4 #define TAG_LEN_MAX 2048 #define OBJ_NAME_MAX TAG_LEN_MAX / 2 #define PDC_SERVER_ID_INTERVEL 1000000000ull @@ -198,14 +198,6 @@ typedef struct region_list_t { // NOTE: when modified, need to change init and deep_cp routines } region_list_t; -// Similar structure PDC_region_info_t defined in pdc_obj_pkg.h -// TODO: currently only support upto four dimensions -typedef struct region_info_transfer_t { - size_t ndim; - uint64_t start_0, start_1, start_2, start_3; - uint64_t count_0, count_1, count_2, count_3; -} region_info_transfer_t; - typedef struct pdc_metadata_transfer_t { int32_t user_id; const char *app_name; @@ -791,9 +783,7 @@ typedef struct { hg_bulk_t local_bulk_handle; region_info_transfer_t remote_region; uint64_t obj_id; - uint64_t obj_dim0; - uint64_t obj_dim1; - uint64_t obj_dim2; + uint64_t obj_dims[DIM_MAX]; size_t remote_unit; int32_t obj_ndim; uint32_t meta_server_id; @@ -1201,1279 +1191,1230 @@ typedef struct { static hg_return_t hg_proc_pdc_kvtag_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_kvtag_t *struct_data = (pdc_kvtag_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->size) { switch (hg_proc_get_op(proc)) { case HG_DECODE: - struct_data->value = malloc(struct_data->size); + struct_data->value = PDC_malloc(struct_data->size); /* HG_FALLTHROUGH(); */ /* FALLTHRU */ case HG_ENCODE: ret = hg_proc_raw(proc, struct_data->value, struct_data->size); break; case HG_FREE: - free(struct_data->value); + struct_data->value = (void *)PDC_free(struct_data->value); default: break; } } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_region_info_transfer_t */ static hg_return_t hg_proc_region_info_transfer_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_info_transfer_t *struct_data = (region_info_transfer_t *)data; ret = hg_proc_hg_size_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; - } - - ret = hg_proc_uint64_t(proc, &struct_data->start_0); - if (ret != HG_SUCCESS) { - - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->start_1); - if (ret != HG_SUCCESS) { - - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->start_2); - if (ret != HG_SUCCESS) { - - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->start_3); - if (ret != HG_SUCCESS) { - - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->count_0); - if (ret != HG_SUCCESS) { - - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->count_1); - if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_uint64_t(proc, &struct_data->count_2); - if (ret != HG_SUCCESS) { - return ret; + for (int i = 0; i < DIM_MAX; i++) { + ret = hg_proc_uint64_t(proc, &(struct_data->start[i])); + if (ret != HG_SUCCESS) { + FUNC_LEAVE(ret); + } } - ret = hg_proc_uint64_t(proc, &struct_data->count_3); - if (ret != HG_SUCCESS) { - - return ret; + for (int i = 0; i < DIM_MAX; i++) { + ret = hg_proc_uint64_t(proc, &(struct_data->count[i])); + if (ret != HG_SUCCESS) { + FUNC_LEAVE(ret); + } } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_region_lock_in_t */ static HG_INLINE hg_return_t hg_proc_region_lock_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_lock_in_t *struct_data = (region_lock_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->local_reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->mapping); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->data_unit); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->lock_mode); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_region_lock_out_t */ static HG_INLINE hg_return_t hg_proc_region_lock_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_lock_out_t *struct_data = (region_lock_out_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_region_transform_and_lock_in_t */ static HG_INLINE hg_return_t hg_proc_region_transform_and_lock_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_transform_and_lock_in_t *struct_data = (region_transform_and_lock_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->local_reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->mapping); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->lock_mode); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->dest_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->transform_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->transform_state); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->transform_data_size); if (ret != HG_SUCCESS) { + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->client_data_ptr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_region_analysis_and_lock_in_t */ static HG_INLINE hg_return_t hg_proc_region_analysis_and_lock_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_analysis_and_lock_in_t *struct_data = (region_analysis_and_lock_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->local_reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->mapping); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->lock_mode); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->analysis_meta_index); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_args); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->output_obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->type_extent); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->output_type_extent); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->input_iter); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->output_iter); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_query_transfer_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_query_transfer_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_query_transfer_in_t *struct_data = (metadata_query_transfer_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->is_list_all); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->user_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->app_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step_from); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step_to); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->tags); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->k_query); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->vfrom_query); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->vto_query); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_query_transfer_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_query_transfer_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_query_transfer_out_t *struct_data = (metadata_query_transfer_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->server_time_elapsed); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->server_memory_consumption); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_metadata_transfer_t */ static hg_return_t hg_proc_pdc_metadata_transfer_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_metadata_transfer_t *struct_data = (pdc_metadata_transfer_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->user_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->app_name); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc app_name error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc obj_name error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->cont_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_uint64_t(proc, &struct_data->dims0); - if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims1); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims2); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims3); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->data_location); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc data_location error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->tags); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc tags error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->data_server_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc data_server_id error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->region_partition); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc region_partition error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->consistency); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc consistency error"); - return ret; + FUNC_LEAVE(ret); } // Added to support transforms ret = hg_proc_int32_t(proc, &struct_data->current_state); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->t_storage_order); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->t_dtype); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->t_ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->t_dims0); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->t_dims1); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->t_dims2); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->t_dims3); - if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->t_meta_index); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_send_rpc_in_t */ static HG_INLINE hg_return_t hg_proc_send_rpc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; send_rpc_in_t *struct_data = (send_rpc_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_send_rpc_out_t */ static HG_INLINE hg_return_t hg_proc_send_rpc_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; send_rpc_out_t *struct_data = (send_rpc_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_add_tag_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_add_tag_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_add_tag_in_t *struct_data = (metadata_add_tag_in_t *)data; ret = hg_proc_hg_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_const_string_t(proc, &struct_data->new_tag); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_get_kvtag_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_get_kvtag_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_get_kvtag_in_t *struct_data = (metadata_get_kvtag_in_t *)data; ret = hg_proc_hg_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->key); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_add_tag_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_add_tag_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_add_tag_out_t *struct_data = (metadata_add_tag_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_get_kvtag_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_get_kvtag_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_get_kvtag_out_t *struct_data = (metadata_get_kvtag_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_kvtag_t(proc, &struct_data->kvtag); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_metadata_add_kvtag_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_add_kvtag_in_t *struct_data = (metadata_add_kvtag_in_t *)data; ret = hg_proc_hg_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_kvtag_t(proc, &struct_data->kvtag); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_update_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_update_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_update_in_t *struct_data = (metadata_update_in_t *)data; ret = hg_proc_hg_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->new_metadata); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_update_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_update_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_update_out_t *struct_data = (metadata_update_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_delete_by_id_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_delete_by_id_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_delete_by_id_in_t *struct_data = (metadata_delete_by_id_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_delete_by_id_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_delete_by_id_out_t(hg_proc_t proc, void *data) - { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_delete_by_id_out_t *struct_data = (metadata_delete_by_id_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_delete_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_delete_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_delete_in_t *struct_data = (metadata_delete_in_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_delete_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_delete_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_delete_out_t *struct_data = (metadata_delete_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_query_in_t */ static HG_INLINE hg_return_t hg_proc_metadata_query_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; metadata_query_in_t *struct_data = (metadata_query_in_t *)data; ret = hg_proc_hg_const_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_metadata_query_out_t */ static HG_INLINE hg_return_t hg_proc_metadata_query_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; metadata_query_out_t *struct_data = (metadata_query_out_t *)data; ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_gen_cont_id_in_t */ static HG_INLINE hg_return_t hg_proc_gen_cont_id_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; gen_cont_id_in_t *struct_data = (gen_cont_id_in_t *)data; ret = hg_proc_hg_const_string_t(proc, &struct_data->cont_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_gen_cont_id_out_t */ static HG_INLINE hg_return_t hg_proc_gen_cont_id_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; gen_cont_id_out_t *struct_data = (gen_cont_id_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->cont_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_gen_obj_id_in_t */ static HG_INLINE hg_return_t hg_proc_gen_obj_id_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; gen_obj_id_in_t *struct_data = (gen_obj_id_in_t *)data; ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->data); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_gen_obj_id_out_t */ static HG_INLINE hg_return_t hg_proc_gen_obj_id_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; gen_obj_id_out_t *struct_data = (gen_obj_id_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_server_lookup_remote_server_in_t */ static HG_INLINE hg_return_t hg_proc_server_lookup_remote_server_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; server_lookup_remote_server_in_t *struct_data = (server_lookup_remote_server_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_server_lookup_remote_server_out_t */ static HG_INLINE hg_return_t hg_proc_server_lookup_remote_server_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; server_lookup_remote_server_out_t *struct_data = (server_lookup_remote_server_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_server_lookup_client_in_t */ static HG_INLINE hg_return_t hg_proc_server_lookup_client_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; server_lookup_client_in_t *struct_data = (server_lookup_client_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nserver); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->server_addr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_server_lookup_client_out_t */ static HG_INLINE hg_return_t hg_proc_server_lookup_client_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; server_lookup_client_out_t *struct_data = (server_lookup_client_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_client_test_connect_in_t */ static HG_INLINE hg_return_t hg_proc_client_test_connect_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; client_test_connect_in_t *struct_data = (client_test_connect_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nclient); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->is_init); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->client_addr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_client_test_connect_out_t */ static HG_INLINE hg_return_t hg_proc_client_test_connect_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; client_test_connect_out_t *struct_data = (client_test_connect_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_notify_io_complete_in_t */ static HG_INLINE hg_return_t hg_proc_notify_io_complete_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; notify_io_complete_in_t *struct_data = (notify_io_complete_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->io_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->shm_addr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_notify_io_complete_out_t */ static HG_INLINE hg_return_t hg_proc_notify_io_complete_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; notify_io_complete_out_t *struct_data = (notify_io_complete_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_notify_region_update_in_t */ static HG_INLINE hg_return_t hg_proc_notify_region_update_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; notify_region_update_in_t *struct_data = (notify_region_update_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_notify_region_update_out_t */ static HG_INLINE hg_return_t hg_proc_notify_region_update_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; notify_region_update_out_t *struct_data = (notify_region_update_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_flush_obj_all_in_t */ static HG_INLINE hg_return_t hg_proc_flush_obj_all_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; flush_obj_all_in_t *struct_data = (flush_obj_all_in_t *)data; ret = hg_proc_uint8_t(proc, &struct_data->tag); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_flush_obj_all_out_t */ static HG_INLINE hg_return_t hg_proc_flush_obj_all_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; flush_obj_all_out_t *struct_data = (flush_obj_all_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_obj_reset_dims_in_t */ static HG_INLINE hg_return_t hg_proc_obj_reset_dims_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; obj_reset_dims_in_t *struct_data = (obj_reset_dims_in_t *)data; ret = hg_proc_hg_const_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->time_step); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims0); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims1); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->dims2); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_obj_reset_dims_out_t */ static HG_INLINE hg_return_t hg_proc_obj_reset_dims_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; obj_reset_dims_out_t *struct_data = (obj_reset_dims_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_flush_obj_in_t */ static HG_INLINE hg_return_t hg_proc_flush_obj_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; flush_obj_in_t *struct_data = (flush_obj_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_flush_obj_out_t */ static HG_INLINE hg_return_t hg_proc_flush_obj_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; flush_obj_out_t *struct_data = (flush_obj_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_close_server_in_t */ static HG_INLINE hg_return_t hg_proc_close_server_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; close_server_in_t *struct_data = (close_server_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_close_server_out_t */ static HG_INLINE hg_return_t hg_proc_close_server_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; close_server_out_t *struct_data = (close_server_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_bulk_rpc_in_t */ @@ -2481,812 +2422,813 @@ hg_proc_close_server_out_t(hg_proc_t proc, void *data) static HG_INLINE hg_return_t hg_proc_bulk_rpc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; bulk_rpc_in_t *struct_data = (bulk_rpc_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->cnt); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->total); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->seq_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->seq_id2); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->origin); - if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_int32_t(proc, &struct_data->op_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_int32_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->cnt > 0) { ret = hg_proc_hg_bulk_t(proc, &struct_data->bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_bulk_rpc_out_t */ static HG_INLINE hg_return_t hg_proc_bulk_rpc_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; bulk_rpc_out_t *struct_data = (bulk_rpc_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_remote_metadata_in_t */ static HG_INLINE hg_return_t hg_proc_get_remote_metadata_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_remote_metadata_in_t *struct_data = (get_remote_metadata_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_remote_metadata_out_t */ static HG_INLINE hg_return_t hg_proc_get_remote_metadata_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_remote_metadata_out_t *struct_data = (get_remote_metadata_out_t *)data; ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_buf_map_in_t */ static HG_INLINE hg_return_t hg_proc_buf_map_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; buf_map_in_t *struct_data = (buf_map_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->local_reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->remote_obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->local_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->remote_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->ndim); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_size_t(proc, &struct_data->remote_unit); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->remote_region_unit); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->remote_region_nounit); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->local_region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_buf_map_out_t */ static HG_INLINE hg_return_t hg_proc_buf_map_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; buf_map_out_t *struct_data = (buf_map_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_transfer_request_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_in_t *struct_data = (transfer_request_in_t *)data; ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->remote_region); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->obj_dim0); - if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_uint64_t(proc, &struct_data->obj_dim1); - if (ret != HG_SUCCESS) { - return ret; - } - ret = hg_proc_uint64_t(proc, &struct_data->obj_dim2); - if (ret != HG_SUCCESS) { - return ret; + for (int i = 0; i < DIM_MAX; i++) { + ret = hg_proc_uint64_t(proc, &struct_data->obj_dims[i]); + if (ret != HG_SUCCESS) { + FUNC_LEAVE(ret); + } } ret = hg_proc_hg_size_t(proc, &struct_data->remote_unit); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->obj_ndim); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_out_t *struct_data = (transfer_request_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->metadata_id); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_status_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_status_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_status_in_t *struct_data = (transfer_request_status_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->transfer_request_id); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_status_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_status_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_status_out_t *struct_data = (transfer_request_status_out_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->status); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_wait_all_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_wait_all_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_wait_all_in_t *struct_data = (transfer_request_wait_all_in_t *)data; ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->total_buf_size); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_objs); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_wait_all_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_wait_all_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_wait_all_out_t *struct_data = (transfer_request_wait_all_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_all_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_all_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_all_in_t *struct_data = (transfer_request_all_in_t *)data; ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->total_buf_size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_objs); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_all_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_all_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_all_out_t *struct_data = (transfer_request_all_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->metadata_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_metadata_query_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_metadata_query_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_metadata_query_in_t *struct_data = (transfer_request_metadata_query_in_t *)data; ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->total_buf_size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_objs); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->is_write); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_metadata_query_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_metadata_query_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_metadata_query_out_t *struct_data = (transfer_request_metadata_query_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_uint64_t(proc, &struct_data->total_buf_size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_metadata_query2_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_metadata_query2_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_metadata_query2_in_t *struct_data = (transfer_request_metadata_query2_in_t *)data; ret = hg_proc_hg_bulk_t(proc, &struct_data->local_bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->total_buf_size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_metadata_query2_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_metadata_query2_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_metadata_query2_out_t *struct_data = (transfer_request_metadata_query2_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_wait_in_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_wait_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_wait_in_t *struct_data = (transfer_request_wait_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->access_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->transfer_request_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_transfer_request_wait_out_t */ static HG_INLINE hg_return_t hg_proc_transfer_request_wait_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; transfer_request_wait_out_t *struct_data = (transfer_request_wait_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_buf_unmap_in_t */ static HG_INLINE hg_return_t hg_proc_buf_unmap_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; buf_unmap_in_t *struct_data = (buf_unmap_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->meta_server_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->remote_obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->remote_reg_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->remote_region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_buf_unmap_out_t */ static HG_INLINE hg_return_t hg_proc_buf_unmap_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; buf_unmap_out_t *struct_data = (buf_unmap_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_read_in_t */ static HG_INLINE hg_return_t hg_proc_data_server_read_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_read_in_t *struct_data = (data_server_read_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nclient); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nupdate); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->cache_percentage); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_read_out_t */ static HG_INLINE hg_return_t hg_proc_data_server_read_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_read_out_t *struct_data = (data_server_read_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_write_in_t */ static HG_INLINE hg_return_t hg_proc_data_server_write_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_write_in_t *struct_data = (data_server_write_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nclient); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nupdate); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->shm_addr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_write_out_t */ static HG_INLINE hg_return_t hg_proc_data_server_write_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_write_out_t *struct_data = (data_server_write_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_read_check_in_t */ static HG_INLINE hg_return_t hg_proc_data_server_read_check_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_read_check_in_t *struct_data = (data_server_read_check_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_read_check_out_t */ static HG_INLINE hg_return_t hg_proc_data_server_read_check_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_read_check_out_t *struct_data = (data_server_read_check_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->shm_addr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_write_check_in_t */ static HG_INLINE hg_return_t hg_proc_data_server_write_check_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_write_check_in_t *struct_data = (data_server_write_check_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_data_server_write_check_out_t */ static HG_INLINE hg_return_t hg_proc_data_server_write_check_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; data_server_write_check_out_t *struct_data = (data_server_write_check_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_region_storage_meta_t */ static HG_INLINE hg_return_t hg_proc_region_storage_meta_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; region_storage_meta_t *struct_data = (region_storage_meta_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region_transfer); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->storage_location); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->offset); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_histogram_t */ static HG_INLINE hg_return_t hg_proc_pdc_histogram_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_histogram_t *struct_data = (pdc_histogram_t *)data; ret = hg_proc_int32_t(proc, &struct_data->dtype); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->nbin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->incr); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->nbin > 0) { switch (hg_proc_get_op(proc)) { case HG_DECODE: - struct_data->range = malloc(struct_data->nbin * sizeof(double) * 2); - struct_data->bin = malloc(struct_data->nbin * sizeof(uint64_t)); + struct_data->range = PDC_malloc(struct_data->nbin * sizeof(double) * 2); + struct_data->bin = PDC_malloc(struct_data->nbin * sizeof(uint64_t)); /* HG_FALLTHROUGH(); */ /* FALLTHRU */ case HG_ENCODE: @@ -3295,398 +3237,411 @@ hg_proc_pdc_histogram_t(hg_proc_t proc, void *data) break; case HG_FREE: if (struct_data->range) - free(struct_data->range); + struct_data->range = (double *)PDC_free(struct_data->range); if (struct_data->bin) - free(struct_data->bin); + struct_data->bin = (uint64_t *)PDC_free(struct_data->bin); /* FALLTHRU */ default: break; } } - return ret; + FUNC_LEAVE(ret); } /* Define hg_proc_update_region_loc_in_t */ static HG_INLINE hg_return_t hg_proc_update_region_loc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; update_region_loc_in_t *struct_data = (update_region_loc_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->storage_location); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->offset); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->has_hist); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->has_hist == 1) { ret = hg_proc_pdc_histogram_t(proc, &struct_data->hist); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_update_region_loc_out_t */ static HG_INLINE hg_return_t hg_proc_update_region_loc_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; update_region_loc_out_t *struct_data = (update_region_loc_out_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_metadata_by_id_in_t */ static HG_INLINE hg_return_t hg_proc_get_metadata_by_id_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_metadata_by_id_in_t *struct_data = (get_metadata_by_id_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_metadata_by_id_out_t */ static HG_INLINE hg_return_t hg_proc_get_metadata_by_id_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_metadata_by_id_out_t *struct_data = (get_metadata_by_id_out_t *)data; ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->res_meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_serialized_data_t */ static HG_INLINE hg_return_t hg_proc_pdc_serialized_data_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_serialized_data_t *struct_data = (pdc_serialized_data_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->buf); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_storage_info_single_out_t */ static HG_INLINE hg_return_t hg_proc_get_storage_info_single_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_storage_info_single_out_t *struct_data = (get_storage_info_single_out_t *)data; ret = hg_proc_region_info_transfer_t(proc, &struct_data->region_transfer); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->storage_loc); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->file_offset); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_get_storage_info_in_t */ static HG_INLINE hg_return_t hg_proc_get_storage_info_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_storage_info_in_t *struct_data = (get_storage_info_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->req_region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_int_send_t */ static HG_INLINE hg_return_t hg_proc_pdc_int_send_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_int_send_t *struct_data = (pdc_int_send_t *)data; ret = hg_proc_int32_t(proc, &struct_data->origin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_int_ret_t */ static HG_INLINE hg_return_t hg_proc_pdc_int_ret_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_int_ret_t *struct_data = (pdc_int_ret_t *)data; ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_aggregated_io_to_server_t */ static HG_INLINE hg_return_t hg_proc_pdc_aggregated_io_to_server_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_aggregated_io_to_server_t *struct_data = (pdc_aggregated_io_to_server_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->buf); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_pdc_metadata_transfer_t(proc, &struct_data->meta); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_cont_add_del_objs_rpc_in_t*/ static HG_INLINE hg_return_t hg_proc_cont_add_del_objs_rpc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; cont_add_del_objs_rpc_in_t *struct_data = (cont_add_del_objs_rpc_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->op); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->cnt); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->origin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->cont_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_bulk_rpc_out_t */ static HG_INLINE hg_return_t hg_proc_cont_add_del_objs_rpc_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; bulk_rpc_out_t *struct_data = (bulk_rpc_out_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_cont_add_tags_rpc_in_t */ static HG_INLINE hg_return_t hg_proc_cont_add_tags_rpc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; cont_add_tags_rpc_in_t *struct_data = (cont_add_tags_rpc_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->cont_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->tags); - if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_query_read_obj_name_in_t */ static HG_INLINE hg_return_t hg_proc_query_read_obj_name_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; query_read_obj_name_in_t *struct_data = (query_read_obj_name_in_t *)data; ret = hg_proc_int32_t(proc, &struct_data->client_seq_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->cnt); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->total_size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->origin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_query_read_obj_name_out_t */ static HG_INLINE hg_return_t hg_proc_query_read_obj_name_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; bulk_rpc_out_t *struct_data = (bulk_rpc_out_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_container_query_in_t */ static HG_INLINE hg_return_t hg_proc_container_query_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; container_query_in_t *struct_data = (container_query_in_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->cont_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->hash_value); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_container_query_out_t */ static HG_INLINE hg_return_t hg_proc_container_query_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; container_query_out_t *struct_data = (container_query_out_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->cont_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_storage_meta_name_query_in_t */ static HG_INLINE hg_return_t hg_proc_storage_meta_name_query_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; storage_meta_name_query_in_t *struct_data = (storage_meta_name_query_in_t *)data; ret = hg_proc_hg_string_t(proc, &struct_data->obj_name); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->task_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->origin_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_pdc_query_xfer_t */ @@ -3697,310 +3652,284 @@ hg_return_t hg_proc_pdc_query_xfer_t(hg_proc_t proc, void *data); static HG_INLINE hg_return_t hg_proc_get_sel_data_rpc_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; get_sel_data_rpc_in_t *struct_data = (get_sel_data_rpc_in_t *)data; ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->origin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_send_nhits_t */ static HG_INLINE hg_return_t hg_proc_send_nhits_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; send_nhits_t *struct_data = (send_nhits_t *)data; ret = hg_proc_int32_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - ret = hg_proc_uint64_t(proc, &struct_data->nhits); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /* Define hg_proc_query_storage_region_transfer_t */ static HG_INLINE hg_return_t hg_proc_query_storage_region_transfer_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; query_storage_region_transfer_t *struct_data = (query_storage_region_transfer_t *)data; ret = hg_proc_int32_t(proc, &struct_data->origin); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->total_region); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->op); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->is_done); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->data_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->manager); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region_transfer); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->storage_location); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->offset); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->size); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->has_hist); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->has_hist == 1) { ret = hg_proc_pdc_histogram_t(proc, &struct_data->hist); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } } - return ret; + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_dart_get_server_info_in_t(hg_proc_t proc, void *data) { - hg_return_t ret; + FUNC_ENTER(NULL); + hg_return_t ret; dart_get_server_info_in_t *struct_data = (dart_get_server_info_in_t *)data; ret = hg_proc_uint32_t(proc, &struct_data->serverId); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_dart_get_server_info_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; dart_get_server_info_out_t *struct_data = (dart_get_server_info_out_t *)data; ret = hg_proc_int64_t(proc, &struct_data->indexed_word_count); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->request_count); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_dart_perform_one_server_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; dart_perform_one_server_in_t *struct_data = (dart_perform_one_server_in_t *)data; ret = hg_proc_int8_t(proc, &struct_data->op_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->hash_algo); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_string_t(proc, &struct_data->attr_key); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->attr_vsize); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint8_t(proc, &struct_data->attr_vtype); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->vnode_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->obj_ref_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_primary_ref); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_secondary_ref); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint64_t(proc, &struct_data->obj_server_ref); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->inserting_suffix); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->timestamp); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_uint32_t(proc, &struct_data->src_client_id); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } if (struct_data->attr_vsize) { switch (hg_proc_get_op(proc)) { case HG_DECODE: - struct_data->attr_val = malloc(struct_data->attr_vsize); + struct_data->attr_val = PDC_malloc(struct_data->attr_vsize); /* HG_FALLTHROUGH(); */ /* FALLTHRU */ case HG_ENCODE: ret = hg_proc_raw(proc, struct_data->attr_val, struct_data->attr_vsize); break; case HG_FREE: - free(struct_data->attr_val); + struct_data->attr_val = (void *)PDC_free(struct_data->attr_val); + break; default: break; } } - return ret; + + FUNC_LEAVE(ret); } static HG_INLINE hg_return_t hg_proc_dart_perform_one_server_out_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; dart_perform_one_server_out_t *struct_data = (dart_perform_one_server_out_t *)data; ret = hg_proc_int8_t(proc, &struct_data->op_type); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->ret); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_hg_bulk_t(proc, &struct_data->bulk_handle); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->indexed_word_count); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->request_count); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int8_t(proc, &struct_data->has_bulk); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->n_items); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->timestamp); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->server_time_elapsed); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int64_t(proc, &struct_data->server_memory_consumption); if (ret != HG_SUCCESS) { - - return ret; + FUNC_LEAVE(ret); } - return ret; + + FUNC_LEAVE(ret); } /***************************/ diff --git a/src/server/include/pdc_server_metadata.h b/src/server/include/pdc_server_metadata.h index c41e27b12..cb763d2e6 100644 --- a/src/server/include/pdc_server_metadata.h +++ b/src/server/include/pdc_server_metadata.h @@ -127,16 +127,6 @@ perr_t PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_p */ perr_t PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle); -/** - * Check if two regions are identical - * - * \param reg1 [IN] Region to compare - * \param reg2 [IN] Region to compare - * - * \return 1 if they are the same/-1 otherwise - */ -pbool_t PDC_region_is_identical(region_info_transfer_t reg1, region_info_transfer_t reg2); - /** * Check if two regions overlap * diff --git a/src/server/pdc_client_server_common.c b/src/server/pdc_client_server_common.c index 17dec6159..b75c8f567 100644 --- a/src/server/pdc_client_server_common.c +++ b/src/server/pdc_client_server_common.c @@ -34,7 +34,9 @@ #include "pdc_utlist.h" #include "pdc_server.h" #include "pdc_server_data.h" +#include "pdc_region.h" #include "pdc_logger.h" +#include "pdc_timing.h" #include #include @@ -71,70 +73,61 @@ struct timeval last_cache_activity_timeval_g; hg_return_t hg_proc_pdc_query_xfer_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret; pdc_query_xfer_t *struct_data = (pdc_query_xfer_t *)data; ret = hg_proc_int32_t(proc, &struct_data->query_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->client_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->get_op); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->manager); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_unique_obj); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->query_op); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->next_server_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->prev_server_id); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_constraints); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_int32_t(proc, &struct_data->n_combine_ops); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } ret = hg_proc_region_info_transfer_t(proc, &struct_data->region); if (ret != HG_SUCCESS) { - // HG_LOG_ERROR("Proc error"); - return ret; + FUNC_LEAVE(ret); } if (struct_data->n_constraints > 0) { switch (hg_proc_get_op(proc)) { case HG_DECODE: - struct_data->combine_ops = malloc(struct_data->n_combine_ops * sizeof(int)); + struct_data->combine_ops = PDC_malloc(struct_data->n_combine_ops * sizeof(int)); struct_data->constraints = - malloc(struct_data->n_constraints * sizeof(pdc_query_constraint_t)); + PDC_malloc(struct_data->n_constraints * sizeof(pdc_query_constraint_t)); // HG_FALLTHROUGH(); /* FALLTHRU */ case HG_ENCODE: @@ -143,24 +136,23 @@ hg_proc_pdc_query_xfer_t(hg_proc_t proc, void *data) struct_data->n_constraints * sizeof(pdc_query_constraint_t)); break; case HG_FREE: - // free(struct_data->combine_ops); // Something is wrong with these 2 free - // free(struct_data->constraints); + // FIXME:: need to free struct_data->combine_ops & struct_data->constraints default: break; } } - return ret; + FUNC_LEAVE(ret); } static hg_return_t hg_proc_send_shm_in_t(hg_proc_t proc, void *data) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; send_shm_in_t *struct_data = (send_shm_in_t *)data; - FUNC_ENTER(NULL); - ret_value = hg_proc_uint32_t(proc, &struct_data->client_id); if (ret_value != HG_SUCCESS) PGOTO_ERROR(ret_value, "Proc error"); @@ -174,17 +166,16 @@ hg_proc_send_shm_in_t(hg_proc_t proc, void *data) PGOTO_ERROR(ret_value, "Proc error"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } double PDC_get_elapsed_time_double(struct timeval *tstart, struct timeval *tend) { - double ret_value = 0; - FUNC_ENTER(NULL); + double ret_value = 0; + ret_value = (double)(((tend->tv_sec - tstart->tv_sec) * 1000000LL + tend->tv_usec - tstart->tv_usec) / 1000000.0); @@ -194,12 +185,12 @@ PDC_get_elapsed_time_double(struct timeval *tstart, struct timeval *tend) perr_t PDC_get_self_addr(hg_class_t *hg_class, char *self_addr_string) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_addr_t self_addr; hg_size_t self_addr_string_size = ADDR_MAX; - FUNC_ENTER(NULL); - // Get self addr to tell client about HG_Addr_self(hg_class, &self_addr); HG_Addr_to_string(hg_class, self_addr_string, &self_addr_string_size, self_addr); @@ -211,11 +202,10 @@ PDC_get_self_addr(hg_class_t *hg_class, char *self_addr_string) uint32_t PDC_get_local_server_id(int my_rank, int n_client_per_server, int n_server) { - uint32_t ret_value = 0; - FUNC_ENTER(NULL); - ret_value = (my_rank / n_client_per_server) % n_server; + uint32_t ret_value = 0; + ret_value = (my_rank / n_client_per_server) % n_server; FUNC_LEAVE(ret_value); } @@ -223,11 +213,11 @@ PDC_get_local_server_id(int my_rank, int n_client_per_server, int n_server) uint32_t PDC_get_server_by_obj_id(uint64_t obj_id, int n_server) { + FUNC_ENTER(NULL); + // TODO: need a smart way to deal with server number change uint32_t ret_value = 0; - FUNC_ENTER(NULL); - ret_value = (uint32_t)(obj_id / PDC_SERVER_ID_INTERVEL) - 1; ret_value %= n_server; @@ -237,58 +227,47 @@ PDC_get_server_by_obj_id(uint64_t obj_id, int n_server) int PDC_get_var_type_size(pdc_var_type_t dtype) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = 0; + /* TODO: How to determine the size of compound types and or * the other enumerated types currently handled by the default * case which returns 0. */ switch (dtype) { case PDC_INT: - ret_value = sizeof(int); - goto done; + PGOTO_DONE(sizeof(int)); break; case PDC_FLOAT: - ret_value = sizeof(float); - goto done; + PGOTO_DONE(sizeof(float)); break; case PDC_DOUBLE: - ret_value = sizeof(double); - goto done; + PGOTO_DONE(sizeof(double)); break; case PDC_CHAR: - ret_value = sizeof(char); - goto done; + PGOTO_DONE(sizeof(char)); break; case PDC_INT16: - ret_value = sizeof(int16_t); - goto done; + PGOTO_DONE(sizeof(int16_t)); break; case PDC_INT8: - ret_value = sizeof(int8_t); - goto done; + PGOTO_DONE(sizeof(int8_t)); break; case PDC_UINT8: - ret_value = sizeof(uint8_t); - goto done; + PGOTO_DONE(sizeof(uint8_t)); break; case PDC_UINT16: - ret_value = sizeof(uint16_t); - goto done; + PGOTO_DONE(sizeof(uint16_t)); break; case PDC_INT64: - ret_value = sizeof(int64_t); - goto done; + PGOTO_DONE(sizeof(int64_t)); break; case PDC_UINT64: - ret_value = sizeof(uint64_t); - goto done; + PGOTO_DONE(sizeof(uint64_t)); break; case PDC_UINT: - ret_value = sizeof(uint); - goto done; + PGOTO_DONE(sizeof(uint)); break; case PDC_UNKNOWN: default: @@ -299,18 +278,17 @@ PDC_get_var_type_size(pdc_var_type_t dtype) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } static uint32_t pdc_hash_djb2(const char *pc) { + FUNC_ENTER(NULL); + uint32_t ret_value = 0; uint32_t hash = 5381, c; - FUNC_ENTER(NULL); - while ((c = *pc++)) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ @@ -322,11 +300,11 @@ pdc_hash_djb2(const char *pc) int PDC_msleep(unsigned long milisec) { + FUNC_ENTER(NULL); + int ret_value = 0; struct timespec req = {0}; - FUNC_ENTER(NULL); - time_t sec = (int)(milisec / 1000); milisec = milisec - (sec * 1000); req.tv_sec = sec; @@ -340,13 +318,11 @@ PDC_msleep(unsigned long milisec) uint32_t PDC_get_hash_by_name(const char *name) - { - uint32_t ret_value = 0; - FUNC_ENTER(NULL); - ret_value = pdc_hash_djb2(name); + uint32_t ret_value = 0; + ret_value = pdc_hash_djb2(name); FUNC_LEAVE(ret_value); } @@ -354,11 +330,10 @@ PDC_get_hash_by_name(const char *name) uint32_t PDC_get_server_by_name(char *name, int n_server) { - // TODO: need a smart way to deal with server number change - uint32_t ret_value; - FUNC_ENTER(NULL); + // TODO: need a smart way to deal with server number change + uint32_t ret_value; ret_value = PDC_get_hash_by_name(name) % n_server; FUNC_LEAVE(ret_value); @@ -367,10 +342,10 @@ PDC_get_server_by_name(char *name, int n_server) int PDC_metadata_cmp(pdc_metadata_t *a, pdc_metadata_t *b) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = 0; + // Timestep if (a->time_step >= 0 && b->time_step >= 0) { ret_value = (a->time_step - b->time_step); @@ -404,11 +379,11 @@ PDC_metadata_cmp(pdc_metadata_t *a, pdc_metadata_t *b) void PDC_mkdir(const char *dir) { + FUNC_ENTER(NULL); + char tmp[TMP_DIR_STRING_LEN]; char *p = NULL; - FUNC_ENTER(NULL); - snprintf(tmp, sizeof(tmp), "%s", dir); for (p = tmp + 1; *p; p++) @@ -418,19 +393,19 @@ PDC_mkdir(const char *dir) *p = '/'; } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_print_metadata(pdc_metadata_t *a) { + FUNC_ENTER(NULL); + size_t i; region_list_t *elt; - FUNC_ENTER(NULL); - if (a == NULL) - PGOTO_ERROR_VOID("==Empty metadata structure"); + PGOTO_ERROR_VOID("Empty metadata structure"); LOG_JUST_PRINT("================================\n"); LOG_JUST_PRINT(" data_type = [%d]\n", a->data_type); @@ -446,26 +421,24 @@ PDC_print_metadata(pdc_metadata_t *a) LOG_JUST_PRINT(" dims = %" PRIu64 "", a->dims[0]); for (i = 1; i < a->ndim; i++) LOG_JUST_PRINT(", %" PRIu64 "", a->dims[i]); - // print regiono info + DL_FOREACH(a->storage_region_list_head, elt) PDC_print_region_list(elt); LOG_JUST_PRINT("\n================================\n\n"); - fflush(stdout); done: - fflush(stdout); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } perr_t PDC_metadata_init(pdc_metadata_t *a) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (a == NULL) - PGOTO_ERROR(FAIL, "Unable to init NULL pdc_metadata_t\n"); + PGOTO_ERROR(FAIL, "Unable to init NULL pdc_metadata_t"); memset(a, 0, sizeof(pdc_metadata_t)); @@ -494,17 +467,16 @@ PDC_metadata_init(pdc_metadata_t *a) a->bloom = NULL; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_init_region_list(region_list_t *a) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + memset(a, 0, sizeof(region_list_t)); a->shm_fd = -1; a->data_loc_type = PDC_NONE; @@ -520,13 +492,13 @@ PDC_init_region_list(region_list_t *a) int PDC_is_same_region_shape(region_list_t *a, size_t extent_a, region_list_t *b, size_t extent_b) { + FUNC_ENTER(NULL); + int ret_value = 1; size_t i = 0; - FUNC_ENTER(NULL); - if (NULL == a || NULL == b) - PGOTO_ERROR(-1, "==Empty region_list_t structure"); + PGOTO_ERROR(-1, "Empty region_list_t structure"); if (a->ndim != b->ndim) PGOTO_DONE(-1); @@ -539,7 +511,6 @@ PDC_is_same_region_shape(region_list_t *a, size_t extent_a, region_list_t *b, si } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -548,13 +519,13 @@ PDC_is_same_region_shape(region_list_t *a, size_t extent_a, region_list_t *b, si int PDC_is_same_region_list(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + int ret_value = 1; size_t i = 0; - FUNC_ENTER(NULL); - if (NULL == a || NULL == b) - PGOTO_ERROR(-1, "==Empty region_list_t structure"); + PGOTO_ERROR(FAIL, "Empty region_list_t structure"); if (a->ndim != b->ndim) PGOTO_DONE(-1); @@ -567,58 +538,22 @@ PDC_is_same_region_list(region_list_t *a, region_list_t *b) } done: - fflush(stdout); - FUNC_LEAVE(ret_value); -} - -int -PDC_is_same_region_transfer(region_info_transfer_t *a, region_info_transfer_t *b) -{ - int ret_value = 0; - - FUNC_ENTER(NULL); - - if (NULL == a || NULL == b) - PGOTO_ERROR(-1, "==Empty region_info_transfer_t structure"); - - if (a->ndim != b->ndim) - PGOTO_DONE(-1); - - if (a->ndim >= 1) - if (a->start_0 != b->start_0 || a->count_0 != b->count_0) - PGOTO_DONE(-1); - - if (a->ndim >= 2) - if (a->start_1 != b->start_1 || a->count_1 != b->count_1) - PGOTO_DONE(-1); - - if (a->ndim >= 3) - - if (a->start_2 != b->start_2 || a->count_2 != b->count_2) - PGOTO_DONE(-1); - - if (a->ndim >= 4) - if (a->start_3 != b->start_3 || a->count_3 != b->count_3) - PGOTO_DONE(-1); - -done: - fflush(stdout); FUNC_LEAVE(ret_value); } void PDC_print_storage_region_list(region_list_t *a) { - size_t i; - FUNC_ENTER(NULL); + size_t i; + if (a == NULL) { - PGOTO_ERROR_VOID("==Empty region_list_t structure"); + PGOTO_ERROR_VOID("Empty region_list_t structure"); } if (a->ndim > 4) { - PGOTO_ERROR_VOID("==Error with ndim %lu", a->ndim); + PGOTO_ERROR_VOID("Error with ndim %lu", a->ndim); } LOG_JUST_PRINT("================================\n"); @@ -635,27 +570,25 @@ PDC_print_storage_region_list(region_list_t *a) LOG_JUST_PRINT(" offset: %" PRIu64 "\n", a->offset); LOG_JUST_PRINT("================================\n\n"); - fflush(stdout); done: - fflush(stdout); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_print_region_list(region_list_t *a) { - size_t i; - FUNC_ENTER(NULL); + size_t i; + if (a == NULL) - PGOTO_ERROR_VOID("==Empty region_list_t structure"); + PGOTO_ERROR_VOID("Empty region_list_t structure"); LOG_JUST_PRINT("\n == Region Info ==\n"); LOG_JUST_PRINT(" ndim = %lu\n", a->ndim); if (a->ndim > 4) - PGOTO_ERROR_VOID("Error with dim %lu\n", a->ndim); + PGOTO_ERROR_VOID("Error with dim %lu", a->ndim); for (i = 0; i < a->ndim; i++) { LOG_JUST_PRINT(" %5" PRIu64 " %5" PRIu64 "\n", a->start[i], a->count[i]); } @@ -672,21 +605,19 @@ PDC_print_region_list(region_list_t *a) LOG_JUST_PRINT("\n =================\n"); done: - fflush(stdout); - - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } uint64_t PDC_get_region_size(region_list_t *a) { + FUNC_ENTER(NULL); + uint64_t ret_value = 0; uint64_t size = 1; unsigned i; - FUNC_ENTER(NULL); - for (i = 0; i < a->ndim; i++) size *= a->count[i]; @@ -698,15 +629,15 @@ PDC_get_region_size(region_list_t *a) perr_t PDC_region_list_t_deep_cp(region_list_t *from, region_list_t *to) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (NULL == from || NULL == to) - PGOTO_ERROR(FAIL, "PDC_region_list_t_deep_cp(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); if (from->ndim > 4 || from->ndim <= 0) - PGOTO_ERROR(FAIL, "PDC_region_list_t_deep_cp(): ndim %zu ERROR!", from->ndim); + PGOTO_ERROR(FAIL, "ndim %zu error", from->ndim); memcpy(to, from, sizeof(region_list_t)); @@ -720,18 +651,16 @@ PDC_region_list_t_deep_cp(region_list_t *from, region_list_t *to) to->next = NULL; done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_region_list_seq_id_cmp(region_list_t *a, region_list_t *b) { - int ret_value = 0; - FUNC_ENTER(NULL); - ret_value = (a->seq_id > b->seq_id) ? 1 : -1; + int ret_value = 0; + ret_value = (a->seq_id > b->seq_id) ? 1 : -1; FUNC_LEAVE(ret_value); } @@ -739,51 +668,35 @@ PDC_region_list_seq_id_cmp(region_list_t *a, region_list_t *b) perr_t PDC_region_transfer_t_to_list_t(region_info_transfer_t *transfer, region_list_t *region) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (NULL == region || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_region_transfer_t_to_list_t(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); - region->ndim = transfer->ndim; - region->start[0] = transfer->start_0; - region->count[0] = transfer->count_0; + region->ndim = transfer->ndim; - if (region->ndim > 1) { - region->start[1] = transfer->start_1; - region->count[1] = transfer->count_1; - } - - if (region->ndim > 2) { - region->start[2] = transfer->start_2; - region->count[2] = transfer->count_2; - } - - if (region->ndim > 3) { - region->start[3] = transfer->start_3; - region->count[3] = transfer->count_3; - } + PDC_copy_region_desc(transfer->start, region->start, region->ndim, region->ndim); + PDC_copy_region_desc(transfer->count, region->count, region->ndim, region->ndim); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_region_info_to_list_t(struct pdc_region_info *region, region_list_t *list) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t i; - FUNC_ENTER(NULL); - if (NULL == region || NULL == list) - PGOTO_ERROR(FAIL, "PDC_region_info_to_list_t(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); size_t ndim = region->ndim; if (ndim <= 0 || ndim >= 5) - PGOTO_ERROR(FAIL, "PDC_region_info_to_list_t() unsupported dim: %lu", ndim); + PGOTO_ERROR(FAIL, "Unsupported dim: %lu", ndim); list->ndim = ndim; for (i = 0; i < ndim; i++) { @@ -792,67 +705,29 @@ PDC_region_info_to_list_t(struct pdc_region_info *region, region_list_t *list) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_region_info_t_to_transfer(struct pdc_region_info *region, region_info_transfer_t *transfer) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t ndim = region->ndim; - FUNC_ENTER(NULL); - if (NULL == region || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_region_info_t_to_transfer(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); if (ndim <= 0 || ndim >= 5) - PGOTO_ERROR(FAIL, "PDC_region_info_t_to_transfer() unsupported dim: %lu", ndim); + PGOTO_ERROR(FAIL, "Unsupported dim: %lu", ndim); transfer->ndim = ndim; - if (ndim >= 1) - transfer->start_0 = region->offset[0]; - else - transfer->start_0 = 0; - - if (ndim >= 2) - transfer->start_1 = region->offset[1]; - else - transfer->start_1 = 0; - - if (ndim >= 3) - transfer->start_2 = region->offset[2]; - else - transfer->start_2 = 0; - if (ndim >= 4) - transfer->start_3 = region->offset[3]; - else - transfer->start_3 = 0; - - if (ndim >= 1) - transfer->count_0 = region->size[0]; - else - transfer->count_0 = 0; - - if (ndim >= 2) - transfer->count_1 = region->size[1]; - else - transfer->count_1 = 0; - - if (ndim >= 3) - transfer->count_2 = region->size[2]; - else - transfer->count_2 = 0; - - if (ndim >= 4) - transfer->count_3 = region->size[3]; - else - transfer->count_3 = 0; + PDC_copy_region_desc(region->offset, transfer->start, transfer->ndim, transfer->ndim); + PDC_copy_region_desc(region->size, transfer->count, transfer->ndim, transfer->ndim); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -860,127 +735,66 @@ perr_t PDC_region_info_t_to_transfer_unit(struct pdc_region_info *region, region_info_transfer_t *transfer, size_t unit) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (NULL == region || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_region_info_t_to_transfer_unit(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); size_t ndim = region->ndim; if (ndim <= 0 || ndim >= 5) - PGOTO_ERROR(FAIL, "PDC_region_info_t_to_transfer() unsupported dim: %lu", ndim); + PGOTO_ERROR(FAIL, "Unsupported dim: %lu", ndim); transfer->ndim = ndim; - if (ndim >= 1) - transfer->start_0 = unit * region->offset[0]; - else - transfer->start_0 = 0; - - if (ndim >= 2) - transfer->start_1 = unit * region->offset[1]; - else - transfer->start_1 = 0; - - if (ndim >= 3) - transfer->start_2 = unit * region->offset[2]; - else - transfer->start_2 = 0; - - if (ndim >= 4) - transfer->start_3 = unit * region->offset[3]; - else - transfer->start_3 = 0; - - if (ndim >= 1) - transfer->count_0 = unit * region->size[0]; - else - transfer->count_0 = 0; - - if (ndim >= 2) - transfer->count_1 = unit * region->size[1]; - else - transfer->count_1 = 0; - - if (ndim >= 3) - transfer->count_2 = unit * region->size[2]; - else - transfer->count_2 = 0; - - if (ndim >= 4) - transfer->count_3 = unit * region->size[3]; - else - transfer->count_3 = 0; + PDC_copy_region_desc_elements_to_bytes(region->offset, transfer->start, unit, ndim); + PDC_copy_region_desc_elements_to_bytes(region->size, transfer->count, unit, ndim); done: - fflush(stdout); FUNC_LEAVE(ret_value); } struct pdc_region_info * PDC_region_transfer_t_to_region_info(region_info_transfer_t *transfer) { + FUNC_ENTER(NULL); + struct pdc_region_info *ret_value = NULL; int ndim; struct pdc_region_info *region; - FUNC_ENTER(NULL); - if (NULL == transfer) - PGOTO_ERROR(NULL, "PDC_region_transfer_t_to_region_info(): NULL input!"); + PGOTO_ERROR(NULL, "NULL input"); - region = (struct pdc_region_info *)calloc(1, sizeof(struct pdc_region_info)); + region = (struct pdc_region_info *)PDC_calloc(1, sizeof(struct pdc_region_info)); ndim = region->ndim = transfer->ndim; - region->offset = (uint64_t *)calloc(sizeof(uint64_t), ndim); - region->size = (uint64_t *)calloc(sizeof(uint64_t), ndim); + region->offset = (uint64_t *)PDC_calloc(sizeof(uint64_t), ndim); + region->size = (uint64_t *)PDC_calloc(sizeof(uint64_t), ndim); - if (ndim > 0) { - region->offset[0] = transfer->start_0; - region->size[0] = transfer->count_0; - } - if (ndim > 1) { - region->offset[1] = transfer->start_1; - region->size[1] = transfer->count_1; - } - if (ndim > 2) { - region->offset[2] = transfer->start_2; - region->size[2] = transfer->count_2; - } - if (ndim > 3) { - region->offset[3] = transfer->start_3; - region->size[3] = transfer->count_3; - } + PDC_copy_region_desc(transfer->start, region->offset, ndim, ndim); + PDC_copy_region_desc(transfer->count, region->size, ndim, ndim); ret_value = region; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_region_list_t_to_transfer(region_list_t *region, region_info_transfer_t *transfer) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - if (NULL == region || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_region_list_t_to_transfer(): NULL input!"); + perr_t ret_value = SUCCEED; - transfer->ndim = region->ndim; - transfer->start_0 = region->start[0]; - transfer->start_1 = region->start[1]; - transfer->start_2 = region->start[2]; - transfer->start_3 = region->start[3]; + if (NULL == region || NULL == transfer) + PGOTO_ERROR(FAIL, "NULL input"); - transfer->count_0 = region->count[0]; - transfer->count_1 = region->count[1]; - transfer->count_2 = region->count[2]; - transfer->count_3 = region->count[3]; + transfer->ndim = region->ndim; + PDC_copy_region_desc(region->start, transfer->start, transfer->ndim, transfer->ndim); + PDC_copy_region_desc(region->count, transfer->count, transfer->ndim, transfer->ndim); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -988,12 +802,12 @@ PDC_region_list_t_to_transfer(region_list_t *region, region_info_transfer_t *tra perr_t PDC_metadata_t_to_transfer_t(pdc_metadata_t *meta, pdc_metadata_transfer_t *transfer) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (NULL == meta || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_metadata_t_to_transfer_t(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); transfer->user_id = meta->user_id; transfer->app_name = meta->app_name; @@ -1023,19 +837,18 @@ PDC_metadata_t_to_transfer_t(pdc_metadata_t *meta, pdc_metadata_transfer_t *tran transfer->t_meta_index = meta->current_state.meta_index; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_transfer_t_to_metadata_t(pdc_metadata_transfer_t *transfer, pdc_metadata_t *meta) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (NULL == meta || NULL == transfer) - PGOTO_ERROR(FAIL, "PDC_transfer_t_to_metadata_t(): NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); meta->user_id = transfer->user_id; meta->data_type = transfer->data_type; @@ -1071,33 +884,28 @@ PDC_transfer_t_to_metadata_t(pdc_metadata_transfer_t *transfer, pdc_metadata_t * } done: - fflush(stdout); FUNC_LEAVE(ret_value); } #ifndef IS_PDC_SERVER -// Dummy function for client to compile, real function is used only by server and code is in pdc_server.c -pbool_t -PDC_region_is_identical(region_info_transfer_t reg1 ATTRIBUTE(unused), - region_info_transfer_t reg2 ATTRIBUTE(unused)) -{ - return SUCCEED; -} hg_return_t PDC_Server_get_client_addr(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in ATTRIBUTE(unused), gen_obj_id_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_search_with_name_hash(const char *obj_name ATTRIBUTE(unused), uint32_t hash_key ATTRIBUTE(unused), pdc_metadata_t **out ATTRIBUTE(unused)) { + FUNC_ENTER(NULL); return SUCCEED; } perr_t @@ -1105,161 +913,187 @@ PDC_Server_search_with_name_timestep(const char *obj_name ATTRIBUTE(unused), uint32_t hash_key ATTRIBUTE(unused), uint32_t ts ATTRIBUTE(unused), pdc_metadata_t **out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_delete_metadata_from_hash_table(metadata_delete_in_t *in ATTRIBUTE(unused), metadata_delete_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in ATTRIBUTE(unused), metadata_delete_by_id_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_update_metadata(metadata_update_in_t *in ATTRIBUTE(unused), metadata_update_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in ATTRIBUTE(unused), metadata_add_tag_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_add_kvtag(metadata_add_kvtag_in_t *in ATTRIBUTE(unused), metadata_add_tag_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_del_kvtag(metadata_get_kvtag_in_t *in ATTRIBUTE(unused), metadata_add_tag_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_kvtag(metadata_get_kvtag_in_t *in ATTRIBUTE(unused), metadata_get_kvtag_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in ATTRIBUTE(unused), hg_handle_t *handle ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Data_Server_buf_unmap(const struct hg_info *info ATTRIBUTE(unused), buf_unmap_in_t *in ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Meta_Server_buf_map(buf_map_in_t *in ATTRIBUTE(unused), region_buf_map_t *new_buf_map_ptr ATTRIBUTE(unused), hg_handle_t *handle ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Data_Server_region_release(region_lock_in_t *in ATTRIBUTE(unused), region_lock_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Data_Server_region_lock(region_lock_in_t *in ATTRIBUTE(unused), region_lock_out_t *out ATTRIBUTE(unused), hg_handle_t *handle ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_region_lock_status(PDC_mapping_info_t *mapped_region ATTRIBUTE(unused), int *lock_status ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_local_region_lock_status(PDC_mapping_info_t *mapped_region ATTRIBUTE(unused), int *lock_status ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_partial_query_result(metadata_query_transfer_in_t *in ATTRIBUTE(unused), uint32_t *n_meta ATTRIBUTE(unused), void ***buf_ptrs ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_kvtag_query_result(pdc_kvtag_t *in ATTRIBUTE(unused), uint32_t *n_meta ATTRIBUTE(unused), uint64_t **buf_ptrs ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_update_local_region_storage_loc(region_list_t *region ATTRIBUTE(unused), uint64_t obj_id ATTRIBUTE(unused), int type ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_release_lock_request(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_data_write_out(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region_info ATTRIBUTE(unused), void *buf ATTRIBUTE(unused), size_t unit ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_data_read_from(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region_info ATTRIBUTE(unused), void *buf ATTRIBUTE(unused), size_t unit ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_data_read_in(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region_info ATTRIBUTE(unused), void *buf ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_data_write_direct(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region_info ATTRIBUTE(unused), void *buf ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_data_read_direct(uint64_t obj_id ATTRIBUTE(unused), struct pdc_region_info *region_info ATTRIBUTE(unused), void *buf ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_notify_region_update_to_client(uint64_t meta_id ATTRIBUTE(unused), uint64_t reg_id ATTRIBUTE(unused), int32_t client_id ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_local_metadata_by_id(uint64_t obj_id ATTRIBUTE(unused), pdc_metadata_t **res_meta ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_local_storage_location_of_region(uint64_t obj_id ATTRIBUTE(unused), @@ -1267,136 +1101,160 @@ PDC_Server_get_local_storage_location_of_region(uint64_t obj_id uint32_t *n_loc ATTRIBUTE(unused), region_list_t **overlap_region_loc ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_get_total_str_len(region_list_t **regions ATTRIBUTE(unused), uint32_t n_region ATTRIBUTE(unused), uint32_t *len ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_serialize_regions_info(region_list_t **regions ATTRIBUTE(unused), uint32_t n_region ATTRIBUTE(unused), void *buf ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } pdc_metadata_t * PDC_Server_get_obj_metadata(pdcid_t obj_id ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_update_region_storage_meta_bulk_local( update_region_storage_meta_bulk_t **bulk_ptrs ATTRIBUTE(unused), int cnt ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_Server_count_write_check_update_storage_meta_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_create_container(gen_cont_id_in_t *in ATTRIBUTE(unused), gen_cont_id_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_set_close() { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_Server_checkpoint_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_recv_shm_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } data_server_region_t * PDC_Server_get_obj_region(pdcid_t obj_id ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(NULL); } perr_t PDC_Server_register_obj_region(pdcid_t obj_id ATTRIBUTE(unused)) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); } perr_t PDC_Server_unregister_obj_region(pdcid_t obj_id ATTRIBUTE(unused)) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); } perr_t PDC_Server_register_obj_region_by_pointer(data_server_region_t **new_obj_reg ATTRIBUTE(unused), pdcid_t obj_id ATTRIBUTE(unused), int close_flag ATTRIBUTE(unused)) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); } perr_t PDC_Server_unregister_obj_region_by_pointer(data_server_region_t *new_obj_reg ATTRIBUTE(unused), int close_flag ATTRIBUTE(unused)) { - return 0; + FUNC_ENTER(NULL); + FUNC_LEAVE(0); } region_buf_map_t * PDC_Data_Server_buf_map(const struct hg_info *info ATTRIBUTE(unused), buf_map_in_t *in ATTRIBUTE(unused), region_list_t *request_region ATTRIBUTE(unused), void *data_ptr ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } void * PDC_Server_maybe_allocate_region_buf_ptr(pdcid_t obj_id ATTRIBUTE(unused), region_info_transfer_t region ATTRIBUTE(unused), size_t type_size ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(NULL); } void * PDC_Server_get_region_buf_ptr(pdcid_t obj_id ATTRIBUTE(unused), region_info_transfer_t region ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(NULL); } void * PDC_Server_get_region_obj_ptr(pdcid_t obj_id ATTRIBUTE(unused), region_info_transfer_t region ATTRIBUTE(unused)) { - return NULL; + FUNC_ENTER(NULL); + FUNC_LEAVE(NULL); } perr_t PDC_Server_find_container_by_name(const char *cont_name ATTRIBUTE(unused), pdc_cont_hash_table_entry_t **out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); }; hg_return_t PDC_Server_recv_data_query(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_recv_read_coords(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_recv_read_sel_obj_data(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_class_t *hg_class_g; @@ -1407,92 +1265,107 @@ hg_class_t *hg_class_g; hg_return_t PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } perr_t PDC_Server_read_check(data_server_read_check_in_t *in ATTRIBUTE(unused), server_read_check_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_write_check(data_server_write_check_in_t *in ATTRIBUTE(unused), data_server_write_check_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_Server_s2s_work_done_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } perr_t PDC_Server_container_add_objs(int n_obj ATTRIBUTE(unused), uint64_t *obj_ids ATTRIBUTE(unused), uint64_t cont_id ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_container_del_objs(int n_obj ATTRIBUTE(unused), uint64_t *obj_ids ATTRIBUTE(unused), uint64_t cont_id ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_Server_query_read_names_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t - PDC_Server_query_read_names_clinet_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); }; perr_t PDC_Server_proc_storage_meta_bulk(int task_id ATTRIBUTE(unused), int n_regions ATTRIBUTE(unused), region_list_t *region_list_head ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_add_client_shm_to_cache(int cnt ATTRIBUTE(unused), void *buf_cp ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_container_add_tags(uint64_t cont_id ATTRIBUTE(unused), char *tags ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_cache_region_to_bb_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_recv_data_query_region(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_recv_get_sel_data(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } perr_t PDC_Server_dart_get_server_info(dart_get_server_info_in_t *in ATTRIBUTE(unused), dart_get_server_info_out_t *out ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } perr_t PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in ATTRIBUTE(unused), @@ -1500,41 +1373,48 @@ PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in ATTRIBUTE( uint64_t *n_obj_ids_ptr ATTRIBUTE(unused), uint64_t **buf_ptrs ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } #else hg_return_t PDC_Client_work_done_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); }; hg_return_t PDC_Client_get_data_from_server_shm_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); }; perr_t PDC_Client_query_read_complete(char *shm_addrs ATTRIBUTE(unused), int size ATTRIBUTE(unused), int n_shm ATTRIBUTE(unused), int seq_id ATTRIBUTE(unused)) { - return SUCCEED; + FUNC_ENTER(NULL); + FUNC_LEAVE(SUCCEED); } hg_return_t PDC_Client_recv_bulk_storage_meta_cb(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } perr_t PDC_Client_recv_bulk_storage_meta(process_bulk_storage_meta_args_t *process_args ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_recv_read_coords_data(const struct hg_cb_info *callback_info ATTRIBUTE(unused)) { - return HG_SUCCESS; + FUNC_ENTER(NULL); + FUNC_LEAVE(HG_SUCCESS); } #endif @@ -1551,10 +1431,10 @@ PDC_recv_read_coords_data(const struct hg_cb_info *callback_info ATTRIBUTE(unuse /* gen_obj_id_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(gen_obj_id, handle) { - perr_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); + perr_t ret_value = HG_SUCCESS; + // Decode input gen_obj_id_in_t in; gen_obj_id_out_t out; @@ -1581,10 +1461,10 @@ HG_TEST_RPC_CB(gen_obj_id, handle) /* gen_cont_id_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(gen_cont_id, handle) { - perr_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); + perr_t ret_value = HG_SUCCESS; + // Decode input gen_cont_id_in_t in; gen_cont_id_out_t out; @@ -1594,14 +1474,13 @@ HG_TEST_RPC_CB(gen_cont_id, handle) // Insert to hash table ret_value = PDC_Server_create_container(&in, &out); if (ret_value != SUCCEED) - PGOTO_ERROR(ret_value, "==PDC_SERVER: error with container object creation"); + PGOTO_ERROR(ret_value, "Error with container object creation"); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -1610,12 +1489,12 @@ HG_TEST_RPC_CB(gen_cont_id, handle) /* server_lookup_client_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(server_lookup_client, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; server_lookup_client_in_t in; server_lookup_client_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); out.ret = in.server_id + 43210000; @@ -1632,12 +1511,12 @@ HG_TEST_RPC_CB(server_lookup_client, handle) /* server_lookup_remote_server_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(server_lookup_remote_server, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; server_lookup_remote_server_in_t in; server_lookup_remote_server_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); out.ret = in.server_id + 1024000; @@ -1654,13 +1533,14 @@ HG_TEST_RPC_CB(server_lookup_remote_server, handle) /* client_test_connect_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(client_test_connect, handle) { + FUNC_ENTER(NULL); + // SERVER EXEC hg_return_t ret_value = HG_SUCCESS; client_test_connect_in_t in; client_test_connect_out_t out; - client_test_connect_args *args = (client_test_connect_args *)calloc(1, sizeof(client_test_connect_args)); - - FUNC_ENTER(NULL); + client_test_connect_args *args = + (client_test_connect_args *)PDC_calloc(1, sizeof(client_test_connect_args)); // Decode input HG_Get_input(handle, &in); @@ -1689,13 +1569,13 @@ HG_TEST_RPC_CB(client_test_connect, handle) /* container_query_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(container_query, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; container_query_in_t in; container_query_out_t out; pdc_cont_hash_table_entry_t *cont_entry; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -1717,13 +1597,13 @@ HG_TEST_RPC_CB(container_query, handle) /* metadata_query_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(metadata_query, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; metadata_query_in_t in; metadata_query_out_t out; pdc_metadata_t * query_result = NULL; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -1758,19 +1638,19 @@ HG_TEST_RPC_CB(metadata_query, handle) /* obj_reset_dims_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(obj_reset_dims, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; obj_reset_dims_in_t in; obj_reset_dims_out_t out; pdc_metadata_t * query_result = NULL; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); if (!try_reset_dims()) { out.ret = 0; - goto done; + PGOTO_DONE(ret_value); } // Get the metdata_t struct. @@ -1806,14 +1686,13 @@ HG_TEST_RPC_CB(obj_reset_dims, handle) // metadata_delete_by_id_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_delete_by_id, handle) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; metadata_delete_by_id_in_t in; metadata_delete_by_id_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -1831,13 +1710,12 @@ HG_TEST_RPC_CB(metadata_delete_by_id, handle) // metadata_delete_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_delete, handle) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; metadata_delete_in_t in; metadata_delete_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -1855,14 +1733,14 @@ HG_TEST_RPC_CB(metadata_delete, handle) // send_rpc_cb(hg_handle_t handle) HG_TEST_RPC_CB(send_rpc, handle) { + FUNC_ENTER(NULL); + send_rpc_in_t in; send_rpc_out_t out; hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); - LOG_ERROR("==PDC_Server: received value from client %d\n", in.value); + LOG_ERROR("Received value from client %d\n", in.value); out.value = 1; HG_Respond(handle, NULL, NULL, &out); @@ -1877,10 +1755,10 @@ HG_TEST_RPC_CB(send_rpc, handle) // metadata_add_tag_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_add_tag, handle) { - hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; + // Decode input metadata_add_tag_in_t in; metadata_add_tag_out_t out; @@ -1901,12 +1779,12 @@ HG_TEST_RPC_CB(metadata_add_tag, handle) // metadata_get_kvtag_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_get_kvtag, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; metadata_get_kvtag_in_t in; metadata_get_kvtag_out_t out; - FUNC_ENTER(NULL); - memset(&out, 0, sizeof(metadata_get_kvtag_out_t)); memset(&out.kvtag, 0, sizeof(pdc_kvtag_t)); HG_Get_input(handle, &in); @@ -1923,12 +1801,12 @@ HG_TEST_RPC_CB(metadata_get_kvtag, handle) // metadata_del_kvtag_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_del_kvtag, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; metadata_get_kvtag_in_t in; metadata_add_tag_out_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); PDC_Server_del_kvtag(&in, &out); ret_value = HG_Respond(handle, NULL, NULL, &out); @@ -1943,18 +1821,18 @@ HG_TEST_RPC_CB(metadata_del_kvtag, handle) // metadata_add_kvtag_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_add_kvtag, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; metadata_add_kvtag_in_t in; metadata_add_tag_out_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); if (strcmp(in.kvtag.name, "PDC_NOOP") != 0) { PDC_Server_add_kvtag(&in, &out); } else { - LOG_INFO("==PDC_SERVER[]: received NOOP\n"); + LOG_INFO("Received NOOP\n"); out.ret = 1; } @@ -1970,17 +1848,17 @@ HG_TEST_RPC_CB(metadata_add_kvtag, handle) // notify_io_complete_cb(hg_handle_t handle) HG_TEST_RPC_CB(notify_io_complete, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; notify_io_complete_in_t in; notify_io_complete_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); pdc_access_t type = (pdc_access_t)in.io_type; - client_read_info_t *read_info = (client_read_info_t *)calloc(1, sizeof(client_read_info_t)); + client_read_info_t *read_info = (client_read_info_t *)PDC_calloc(1, sizeof(client_read_info_t)); read_info->obj_id = in.obj_id; strcpy(read_info->shm_addr, in.shm_addr); if (ret_value != HG_SUCCESS) @@ -1994,12 +1872,11 @@ HG_TEST_RPC_CB(notify_io_complete, handle) HG_Respond(handle, PDC_Client_work_done_cb, read_info, &out); } else { - LOG_ERROR("==PDC_CLIENT: notify_io_complete_cb() - error with io type!\n"); + LOG_ERROR("Error with io type\n"); HG_Respond(handle, NULL, NULL, &out); } done: - fflush(stdout); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -2010,12 +1887,12 @@ HG_TEST_RPC_CB(notify_io_complete, handle) // notify_region_update_cb(hg_handle_t handle) HG_TEST_RPC_CB(notify_region_update, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; notify_region_update_in_t in; notify_region_update_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); out.ret = 1; @@ -2030,12 +1907,12 @@ HG_TEST_RPC_CB(notify_region_update, handle) // metadata_update_cb(hg_handle_t handle) HG_TEST_RPC_CB(metadata_update, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; metadata_update_in_t in; metadata_update_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -2053,22 +1930,22 @@ HG_TEST_RPC_CB(metadata_update, handle) // flush_obj_all_cb(hg_handle_t handle) HG_TEST_RPC_CB(flush_obj_all, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; flush_obj_all_in_t in; flush_obj_all_out_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); if (in.tag != 44) { - PGOTO_ERROR(ret_value, "==PDC_SERVER[x]: Error with input tag"); + PGOTO_ERROR(ret_value, "Error with input tag"); } ret_value = HG_Free_input(handle, &in); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_SERVER[x]: Error with HG_Destroy"); + PGOTO_ERROR(ret_value, "Error with HG_Destroy"); out.ret = 1; HG_Respond(handle, NULL, NULL, &out); @@ -2079,7 +1956,6 @@ HG_TEST_RPC_CB(flush_obj_all, handle) #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2087,13 +1963,13 @@ HG_TEST_RPC_CB(flush_obj_all, handle) // flush_obj_cb(hg_handle_t handle) HG_TEST_RPC_CB(flush_obj, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; flush_obj_in_t in; flush_obj_out_t out; uint64_t obj_id; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); obj_id = in.obj_id; @@ -2101,7 +1977,7 @@ HG_TEST_RPC_CB(flush_obj, handle) ret_value = HG_Free_input(handle, &in); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_SERVER[x]: Error with HG_Destroy"); + PGOTO_ERROR(ret_value, "Error with HG_Destroy"); out.ret = 1; HG_Respond(handle, NULL, NULL, &out); @@ -2114,7 +1990,6 @@ HG_TEST_RPC_CB(flush_obj, handle) #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2122,12 +1997,12 @@ HG_TEST_RPC_CB(flush_obj, handle) // close_server_cb(hg_handle_t handle) HG_TEST_RPC_CB(close_server, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; close_server_in_t in; // close_server_out_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); HG_Free_input(handle, &in); @@ -2136,10 +2011,9 @@ HG_TEST_RPC_CB(close_server, handle) PDC_Server_set_close(); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_SERVER[x]: Error with HG_Destroy"); + PGOTO_ERROR(ret_value, "Error with HG_Destroy"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2147,31 +2021,31 @@ HG_TEST_RPC_CB(close_server, handle) static HG_THREAD_RETURN_TYPE pdc_region_write_out_progress(void *arg) { + FUNC_ENTER(NULL); + HG_THREAD_RETURN_TYPE ret_value = (HG_THREAD_RETURN_TYPE)0; struct buf_map_release_bulk_args *bulk_args = (struct buf_map_release_bulk_args *)arg; struct pdc_region_info * remote_reg_info = NULL; region_lock_out_t out; - FUNC_ENTER(NULL); - - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) { PGOTO_ERROR(ret_value, "pdc_region_write_out_progress: remote_reg_info memory allocation failed"); } remote_reg_info->ndim = (bulk_args->remote_region_nounit).ndim; - remote_reg_info->offset = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->offset = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (bulk_args->remote_region_nounit).start_0; - (remote_reg_info->size)[0] = (bulk_args->remote_region_nounit).count_0; + (remote_reg_info->offset)[0] = (bulk_args->remote_region_nounit).start[0]; + (remote_reg_info->size)[0] = (bulk_args->remote_region_nounit).count[0]; } if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (bulk_args->remote_region_nounit).start_1; - (remote_reg_info->size)[1] = (bulk_args->remote_region_nounit).count_1; + (remote_reg_info->offset)[1] = (bulk_args->remote_region_nounit).start[1]; + (remote_reg_info->size)[1] = (bulk_args->remote_region_nounit).count[1]; } if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (bulk_args->remote_region_nounit).start_2; - (remote_reg_info->size)[2] = (bulk_args->remote_region_nounit).count_2; + (remote_reg_info->offset)[2] = (bulk_args->remote_region_nounit).start[2]; + (remote_reg_info->size)[2] = (bulk_args->remote_region_nounit).count[2]; } PDC_Server_data_write_out(bulk_args->remote_obj_id, remote_reg_info, bulk_args->data_buf, @@ -2182,12 +2056,11 @@ pdc_region_write_out_progress(void *arg) PDC_Server_release_lock_request(bulk_args->remote_obj_id, remote_reg_info); - free(remote_reg_info->offset); - free(remote_reg_info->size); - free(remote_reg_info); + remote_reg_info->offset = (uint64_t *)PDC_free(remote_reg_info->offset); + remote_reg_info->size = (uint64_t *)PDC_free(remote_reg_info->size); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); done: - fflush(stdout); HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); @@ -2204,12 +2077,12 @@ pdc_region_write_out_progress(void *arg) static hg_return_t obj_map_region_release_bulk_transfer_thread_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; region_lock_out_t out; struct buf_map_release_bulk_args *bulk_args = NULL; - FUNC_ENTER(NULL); - bulk_args = (struct buf_map_release_bulk_args *)hg_cb_info->arg; if (hg_cb_info->ret == HG_CANCELED) { @@ -2227,10 +2100,9 @@ obj_map_region_release_bulk_transfer_thread_cb(const struct hg_cb_info *hg_cb_in PDC_Server_release_lock_request(bulk_args->remote_obj_id, bulk_args->remote_reg_info); done: - fflush(stdout); - free(bulk_args->remote_reg_info->offset); - free(bulk_args->remote_reg_info->size); - free(bulk_args->remote_reg_info); + bulk_args->remote_reg_info->offset = (uint64_t *)PDC_free(bulk_args->remote_reg_info->offset); + bulk_args->remote_reg_info->size = (uint64_t *)PDC_free(bulk_args->remote_reg_info->size); + bulk_args->remote_reg_info = (struct pdc_region_info *)PDC_free(bulk_args->remote_reg_info); HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); @@ -2247,6 +2119,8 @@ obj_map_region_release_bulk_transfer_thread_cb(const struct hg_cb_info *hg_cb_in static HG_THREAD_RETURN_TYPE pdc_region_read_from_progress(void *arg) { + FUNC_ENTER(NULL); + HG_THREAD_RETURN_TYPE ret_value = (HG_THREAD_RETURN_TYPE)0; struct buf_map_release_bulk_args *bulk_args = (struct buf_map_release_bulk_args *)arg; const struct hg_info * hg_info = NULL; @@ -2254,8 +2128,6 @@ pdc_region_read_from_progress(void *arg) size_t size; int error = 0; - FUNC_ENTER(NULL); - hg_info = HG_Get_info(bulk_args->handle); PDC_Server_data_read_from(bulk_args->remote_obj_id, bulk_args->remote_reg_info, bulk_args->data_buf, @@ -2265,8 +2137,7 @@ pdc_region_read_from_progress(void *arg) size = HG_Bulk_get_size(bulk_args->local_bulk_handle); if (size != HG_Bulk_get_size(bulk_args->remote_bulk_handle)) { error = 1; - PGOTO_ERROR(ret_value, - "===PDC SERVER: pdc_region_read_from_progress local and remote bulk size does not match"); + PGOTO_ERROR(ret_value, "pdc_region_read_from_progress local and remote bulk size does not match"); } hg_ret = HG_Bulk_transfer(hg_info->context, obj_map_region_release_bulk_transfer_thread_cb, bulk_args, @@ -2274,13 +2145,11 @@ pdc_region_read_from_progress(void *arg) bulk_args->remote_bulk_handle, 0, size, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(ret_value, "===PDC SERVER: pdc_region_read_from_progress push data failed"); + PGOTO_ERROR(ret_value, "pdc_region_read_from_progress push data failed"); } done: - fflush(stdout); if (error == 1) { - fflush(stdout); HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); @@ -2299,6 +2168,8 @@ pdc_region_read_from_progress(void *arg) static hg_return_t transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; region_lock_out_t out; struct buf_map_transform_and_release_bulk_args *bulk_args = NULL; @@ -2321,8 +2192,6 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf struct pdc_region_info *remote_reg_info = NULL; #endif - FUNC_ENTER(NULL); - bulk_args = (struct buf_map_transform_and_release_bulk_args *)hg_cb_info->arg; if (hg_cb_info->ret == HG_CANCELED) { @@ -2350,13 +2219,7 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf HG_Respond(bulk_args->handle, NULL, NULL, &out); ndim = bulk_args->remote_region.ndim; - expected_size = bulk_args->remote_region.count_0; - if (ndim > 1) - expected_size *= (bulk_args->remote_region.count_1 / type_extent); - if (ndim > 2) - expected_size *= (bulk_args->remote_region.count_2 / type_extent); - if (ndim > 3) - expected_size *= (bulk_args->remote_region.count_3 / type_extent); + expected_size = PDC_get_region_desc_size_bytes(bulk_args->remote_region.count, type_extent, ndim); /* There are some transforms, e.g. type_casting in which the transform size * will match the expected size. Other transforms such as compression @@ -2403,27 +2266,26 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf else { /* Prepare for the transform */ - dims = (uint64_t *)calloc(ndim, sizeof(uint64_t)); + dims = (uint64_t *)PDC_calloc(ndim, sizeof(uint64_t)); if (dims == NULL) PGOTO_ERROR(HG_OTHER_ERROR, "TRANSFORM memory allocation failed"); - dims[0] = bulk_args->remote_region.count_0 / type_extent; + dims[0] = bulk_args->remote_region.count[0] / type_extent; if (ndim > 1) - dims[1] = bulk_args->remote_region.count_1 / type_extent; + dims[1] = bulk_args->remote_region.count[1] / type_extent; if (ndim > 2) - dims[2] = bulk_args->remote_region.count_2 / type_extent; + dims[2] = bulk_args->remote_region.count[2] / type_extent; if (ndim > 3) - dims[3] = bulk_args->remote_region.count_3 / type_extent; + dims[3] = bulk_args->remote_region.count[3] / type_extent; } if ((registered_count >= transform_id) && (registry != NULL)) { size_t (*this_transform)(void *, pdc_var_type_t, int, uint64_t *, void **, pdc_var_type_t) = registry[transform_id]->ftnPtr; size_t result = this_transform(buf, bulk_args->in.data_type, ndim, dims, &data_buf, bulk_args->in.dest_type); - LOG_INFO("==PDC_SERVER: transform returned %ld\n", result); - puts("----------------"); + LOG_INFO("Transform returned %ld\n", result); - if ((use_transform_size == 0) && dims) - free(dims); + if (use_transform_size == 0 && dims) + dims = (uint64_t *)PDC_free(dims); use_transform_size = 0; } } @@ -2436,12 +2298,12 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf target_reg = PDC_Server_get_obj_region(bulk_args->remote_obj_id); DL_FOREACH(target_reg->region_buf_map_head, elt) { - if ((bulk_args->remote_region).start_0 == elt->remote_region_unit.start_0 && - (bulk_args->remote_region).count_0 == elt->remote_region_unit.count_0) { + if ((bulk_args->remote_region).start[0] == elt->remote_region_unit.start[0] && + (bulk_args->remote_region).count[0] == elt->remote_region_unit.count[0]) { // replace the count_0 value with the transform_size if (use_transform_size) { - (bulk_args->remote_region).count_0 = transform_size; - (bulk_args->remote_region).ndim = 1; + (bulk_args->remote_region).count[0] = transform_size; + (bulk_args->remote_region).ndim = 1; } elt->bulk_args = (struct buf_map_release_bulk_args *)bulk_args; } @@ -2449,18 +2311,18 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf hg_thread_pool_post(hg_test_thread_pool_fs_g, &(bulk_args->work)); #else - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed"); remote_reg_info->ndim = (bulk_args->remote_region).ndim; - remote_reg_info->offset = (uint64_t *)malloc(sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(sizeof(uint64_t)); - (remote_reg_info->offset)[0] = (bulk_args->remote_region).start_0; + remote_reg_info->offset = (uint64_t *)PDC_malloc(sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(sizeof(uint64_t)); + (remote_reg_info->offset)[0] = (bulk_args->remote_region).start[0]; if (use_transform_size) (remote_reg_info->size)[0] = transform_size; else - (remote_reg_info->size)[0] = (bulk_args->remote_region).count_0; + (remote_reg_info->size)[0] = (bulk_args->remote_region).count[0]; PDC_Server_data_write_out(bulk_args->remote_obj_id, remote_reg_info, bulk_args->data_buf, unit); PDC_Data_Server_region_release((region_lock_in_t *)&bulk_args->in, &out); @@ -2469,18 +2331,16 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf #endif done: - fflush(stdout); - #ifndef ENABLE_MULTITHREAD if (remote_reg_info) { - free(remote_reg_info->offset); - free(remote_reg_info->size); - free(remote_reg_info); + remote_reg_info->offset = (uint64_t *)PDC_free(remote_reg_info->offset); + remote_reg_info->size = (uint64_t *)PDC_free(remote_reg_info->size); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); } HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct buf_map_transform_and_release_bulk_args *)PDC_free(bulk_args); #endif FUNC_LEAVE(ret_value); @@ -2490,6 +2350,8 @@ transform_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_inf static hg_return_t analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; region_lock_out_t out; struct buf_map_analysis_and_release_bulk_args *bulk_args = NULL; @@ -2502,13 +2364,11 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info double start_t, end_t, analysis_t, io_t; double averages[4]; - FUNC_ENTER(NULL); - bulk_args = (struct buf_map_analysis_and_release_bulk_args *)hg_cb_info->arg; if (hg_cb_info->ret == HG_CANCELED) { out.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, "HG_Bulk_transfer() was successfully canceled\n"); + PGOTO_ERROR(HG_OTHER_ERROR, "HG_Bulk_transfer() was successfully canceled"); } else if (hg_cb_info->ret != HG_SUCCESS) { out.ret = 0; @@ -2517,18 +2377,18 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info /* Prepare for the transform */ ndim = bulk_args->remote_region.ndim; - dims = (uint64_t *)calloc(ndim, sizeof(uint64_t)); + dims = (uint64_t *)PDC_calloc(ndim, sizeof(uint64_t)); type_extent = bulk_args->in.type_extent; - /* Support ONLY up to 4 dimensions */ + /* FIXME: Support ONLY up to 4 dimensions */ if (dims) { if (ndim >= 1) - dims[0] = bulk_args->in.region.count_0 / type_extent; + dims[0] = bulk_args->in.region.count[0] / type_extent; if (ndim >= 2) - dims[1] = bulk_args->in.region.count_1 / type_extent; + dims[1] = bulk_args->in.region.count[1] / type_extent; if (ndim >= 3) - dims[2] = bulk_args->in.region.count_2 / type_extent; + dims[2] = bulk_args->in.region.count[2] / type_extent; if (ndim == 4) - dims[3] = bulk_args->in.region.count_3 / type_extent; + dims[3] = bulk_args->in.region.count[3] / type_extent; } out.ret = 1; @@ -2554,7 +2414,7 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info int (*analysis_ftn)(pdcid_t iterIn, pdcid_t iterOut, struct _pdc_iterator_cbs_t * _cbs) = registry[analysis_meta_index]->ftnPtr; int result = analysis_ftn(bulk_args->in.input_iter, bulk_args->in.output_iter, &iter_cbs); - LOG_INFO("==PDC_SERVER: Analysis returned %d\n", result); + LOG_INFO("Analysis returned %d\n", result); } } #ifdef ENABLE_MPI @@ -2562,7 +2422,7 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info analysis_t = end_t - start_t; start_t = end_t; #endif - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed"); @@ -2575,23 +2435,14 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info * adjustments. In this way, the PDC_Server_data_write_out function can simply * multiply all size argments to find the byte length of the data_buf... */ - remote_reg_info->ndim = (bulk_args->remote_region).ndim; - remote_reg_info->offset = (uint64_t *)calloc(remote_reg_info->ndim, sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)calloc(remote_reg_info->ndim, sizeof(uint64_t)); - (remote_reg_info->offset)[0] = (bulk_args->remote_region).start_0; - (remote_reg_info->size)[0] = (bulk_args->remote_region).count_0; - if (remote_reg_info->ndim > 1) { - (remote_reg_info->offset)[1] = bulk_args->remote_region.start_1; - (remote_reg_info->size)[1] = dims[1]; - } - if (remote_reg_info->ndim > 2) { - (remote_reg_info->offset)[2] = bulk_args->remote_region.start_2; - (remote_reg_info->size)[2] = dims[2]; - } - if (remote_reg_info->ndim > 3) { - (remote_reg_info->offset)[3] = bulk_args->remote_region.start_3; - (remote_reg_info->size)[3] = dims[3]; - } + remote_reg_info->ndim = (bulk_args->remote_region).ndim; + remote_reg_info->offset = (uint64_t *)PDC_calloc(remote_reg_info->ndim, sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_calloc(remote_reg_info->ndim, sizeof(uint64_t)); + + PDC_copy_region_desc((bulk_args->remote_region).start, remote_reg_info->offset, remote_reg_info->ndim, + remote_reg_info->ndim); + PDC_copy_region_desc((bulk_args->remote_region).count, remote_reg_info->size, remote_reg_info->ndim, + remote_reg_info->ndim); /* Write the analysis results... */ PDC_Server_data_write_out(bulk_args->remote_obj_id, remote_reg_info, data_buf, (size_t)type_extent); @@ -2600,27 +2451,19 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info io_t = end_t - start_t; #endif PDC_Data_Server_region_release((region_lock_in_t *)&bulk_args->in, &out); - local_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + local_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (local_reg_info == NULL) PGOTO_ERROR(HG_OTHER_ERROR, "local_reg_info memory allocation failed"); - local_reg_info->ndim = bulk_args->in.region.ndim; - local_reg_info->offset = (uint64_t *)calloc(local_reg_info->ndim, sizeof(uint64_t)); - local_reg_info->size = (uint64_t *)calloc(local_reg_info->ndim, sizeof(uint64_t)); - (local_reg_info->offset)[0] = bulk_args->in.region.start_0; - (local_reg_info->size)[0] = bulk_args->in.region.count_0; - if (local_reg_info->ndim > 1) { - (local_reg_info->offset)[1] = bulk_args->in.region.start_1; - (local_reg_info->size)[1] = bulk_args->in.region.count_1; - } - if (local_reg_info->ndim > 2) { - (local_reg_info->offset)[2] = bulk_args->in.region.start_2; - (local_reg_info->size)[2] = bulk_args->in.region.count_2; - } - if (local_reg_info->ndim > 3) { - (local_reg_info->offset)[3] = bulk_args->in.region.start_3; - (local_reg_info->size)[3] = bulk_args->in.region.count_3; - } + local_reg_info->ndim = bulk_args->in.region.ndim; + local_reg_info->offset = (uint64_t *)PDC_calloc(local_reg_info->ndim, sizeof(uint64_t)); + local_reg_info->size = (uint64_t *)PDC_calloc(local_reg_info->ndim, sizeof(uint64_t)); + + PDC_copy_region_desc(bulk_args->in.region.start, local_reg_info->offset, local_reg_info->ndim, + local_reg_info->ndim); + PDC_copy_region_desc(bulk_args->in.region.count, local_reg_info->size, local_reg_info->ndim, + local_reg_info->ndim); + PDC_Server_release_lock_request(bulk_args->in.obj_id, local_reg_info); averages[0] = analysis_t; @@ -2638,21 +2481,19 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info #endif done: - fflush(stdout); - #ifndef ENABLE_MULTITHREAD - free(remote_reg_info->offset); - free(remote_reg_info->size); - free(remote_reg_info); + remote_reg_info->offset = (uint64_t *)PDC_free(remote_reg_info->offset); + remote_reg_info->size = (uint64_t *)PDC_free(remote_reg_info->size); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); - free(local_reg_info->offset); - free(local_reg_info->size); - free(local_reg_info); + local_reg_info->offset = (uint64_t *)PDC_free(local_reg_info->offset); + local_reg_info->size = (uint64_t *)PDC_free(local_reg_info->size); + local_reg_info = (struct pdc_region_info *)PDC_free(local_reg_info); HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct buf_map_analysis_and_release_bulk_args *)PDC_free(bulk_args); #endif FUNC_LEAVE(ret_value); @@ -2662,6 +2503,8 @@ analysis_and_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info static hg_return_t buf_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; region_lock_out_t out; struct buf_map_release_bulk_args *bulk_args = NULL; @@ -2672,7 +2515,6 @@ buf_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) struct pdc_region_info *remote_reg_info = NULL; #endif - FUNC_ENTER(NULL); bulk_args = (struct buf_map_release_bulk_args *)hg_cb_info->arg; #ifdef PDC_TIMING double end, start; @@ -2703,54 +2545,27 @@ buf_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) target_reg = PDC_Server_get_obj_region(bulk_args->remote_obj_id); DL_FOREACH(target_reg->region_buf_map_head, elt) { - if ((bulk_args->remote_region_unit).ndim == 1) { - if ((bulk_args->remote_region_unit).start_0 == elt->remote_region_unit.start_0 && - (bulk_args->remote_region_unit).count_0 == elt->remote_region_unit.count_0) - elt->bulk_args = bulk_args; + if (PDC_region_info_transfer_t_is_equal(&(bulk_args->remote_region_unit), + &(elt->remote_region_unit))) { + elt->bulk_args = bulk_args; } - else if ((bulk_args->remote_region_unit).ndim == 2) { - if ((bulk_args->remote_region_unit).start_0 == elt->remote_region_unit.start_0 && - (bulk_args->remote_region_unit).count_0 == elt->remote_region_unit.count_0 && - (bulk_args->remote_region_unit).start_1 == elt->remote_region_unit.start_1 && - (bulk_args->remote_region_unit).count_1 == elt->remote_region_unit.count_1) - elt->bulk_args = bulk_args; - } - else if ((bulk_args->remote_region_unit).ndim == 3) - if ((bulk_args->remote_region_unit).start_0 == elt->remote_region_unit.start_0 && - (bulk_args->remote_region_unit).count_0 == elt->remote_region_unit.count_0 && - (bulk_args->remote_region_unit).start_1 == elt->remote_region_unit.start_1 && - (bulk_args->remote_region_unit).count_1 == elt->remote_region_unit.count_1 && - (bulk_args->remote_region_unit).start_2 == elt->remote_region_unit.start_2 && - (bulk_args->remote_region_unit).count_2 == elt->remote_region_unit.count_2) - elt->bulk_args = bulk_args; } hg_thread_pool_post(hg_test_thread_pool_fs_g, &(bulk_args->work)); #else - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) - PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed\n"); + PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed"); remote_reg_info->ndim = (bulk_args->remote_region_nounit).ndim; - remote_reg_info->offset = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (bulk_args->remote_region_nounit).start_0; - (remote_reg_info->size)[0] = (bulk_args->remote_region_nounit).count_0; - } - if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (bulk_args->remote_region_nounit).start_1; - (remote_reg_info->size)[1] = (bulk_args->remote_region_nounit).count_1; - } - if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (bulk_args->remote_region_nounit).start_2; - (remote_reg_info->size)[2] = (bulk_args->remote_region_nounit).count_2; - } -/* - PDC_Server_data_write_out(bulk_args->remote_obj_id, remote_reg_info, bulk_args->data_buf, - (bulk_args->in).data_unit); -*/ + remote_reg_info->offset = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + + PDC_copy_region_desc(bulk_args->remote_region_nounit.start, remote_reg_info->offset, + remote_reg_info->ndim, remote_reg_info->ndim); + PDC_copy_region_desc(bulk_args->remote_region_nounit.count, remote_reg_info->size, remote_reg_info->ndim, + remote_reg_info->ndim); #ifdef PDC_SERVER_CACHE PDC_transfer_request_data_write_out(bulk_args->remote_obj_id, 0, NULL, remote_reg_info, (void *)bulk_args->data_buf, (bulk_args->in).data_unit); @@ -2772,17 +2587,15 @@ buf_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) #endif done: - fflush(stdout); - #ifndef ENABLE_MULTITHREAD - free(remote_reg_info->offset); - free(remote_reg_info->size); - free(remote_reg_info); + remote_reg_info->offset = (uint64_t *)PDC_free(remote_reg_info->offset); + remote_reg_info->size = (uint64_t *)PDC_free(remote_reg_info->size); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); HG_Bulk_free(bulk_args->remote_bulk_handle); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct buf_map_release_bulk_args *)PDC_free(bulk_args); #endif FUNC_LEAVE(ret_value); @@ -2793,11 +2606,12 @@ buf_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) static hg_return_t obj_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; region_lock_out_t out; struct buf_map_release_bulk_args *bulk_args = NULL; - FUNC_ENTER(NULL); bulk_args = (struct buf_map_release_bulk_args *)hg_cb_info->arg; #ifdef PDC_TIMING @@ -2812,7 +2626,7 @@ obj_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) if (hg_cb_info->ret == HG_CANCELED) { out.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, "HG_Bulk_transfer() was successfully canceled\n"); + PGOTO_ERROR(HG_OTHER_ERROR, "HG_Bulk_transfer() was successfully canceled"); } else if (hg_cb_info->ret != HG_SUCCESS) { out.ret = 0; @@ -2830,11 +2644,10 @@ obj_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) #endif done: - fflush(stdout); - free(bulk_args->remote_reg_info); + bulk_args->remote_reg_info = (struct pdc_region_info *)PDC_free(bulk_args->remote_reg_info); HG_Free_input(bulk_args->handle, &(bulk_args->in)); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct buf_map_release_bulk_args *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -2843,13 +2656,13 @@ obj_map_region_release_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) static hg_return_t region_release_update_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t hg_ret = HG_SUCCESS; region_lock_out_t out; hg_handle_t handle; struct region_lock_update_bulk_args *bulk_args = NULL; - FUNC_ENTER(NULL); - bulk_args = (struct region_lock_update_bulk_args *)hg_cb_info->arg; handle = bulk_args->handle; @@ -2861,14 +2674,14 @@ region_release_update_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) PDC_Server_notify_region_update_to_client(bulk_args->remote_obj_id, bulk_args->remote_reg_id, bulk_args->remote_client_id); - free(bulk_args->server_region->size); - free(bulk_args->server_region->offset); - free(bulk_args->server_region); - free(bulk_args->data_buf); + bulk_args->server_region->size = (uint64_t *)PDC_free(bulk_args->server_region->size); + bulk_args->server_region->offset = (uint64_t *)PDC_free(bulk_args->server_region->offset); + bulk_args->server_region = (struct pdc_region_info *)PDC_free(bulk_args->server_region); + bulk_args->data_buf = (void *)PDC_free(bulk_args->data_buf); HG_Free_input(handle, &(bulk_args->in)); HG_Destroy(handle); - free(bulk_args); + bulk_args = (struct region_lock_update_bulk_args *)PDC_free(bulk_args); FUNC_LEAVE(hg_ret); } @@ -2876,6 +2689,8 @@ region_release_update_bulk_transfer_cb(const struct hg_cb_info *hg_cb_info) // region_release_cb() HG_TEST_RPC_CB(region_release, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t hg_ret; region_lock_in_t in; @@ -2903,7 +2718,6 @@ HG_TEST_RPC_CB(region_release, handle) double start, end; #endif - FUNC_ENTER(NULL); #ifdef PDC_TIMING start = MPI_Wtime(); #endif @@ -2914,7 +2728,7 @@ HG_TEST_RPC_CB(region_release, handle) if (in.access_type == PDC_READ) { // check region is dirty or not, if dirty transfer data - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.region, request_region); target_obj = PDC_Server_get_obj_region(in.obj_id); #ifdef ENABLE_MULTITHREAD @@ -2926,24 +2740,24 @@ HG_TEST_RPC_CB(region_release, handle) hg_atomic_get32(&(elt->buf_map_refcount)) == 0) { dirty_reg = 1; size = HG_Bulk_get_size(elt->bulk_handle); - data_buf = (void *)calloc(1, size); + data_buf = (void *)PDC_calloc(1, size); // data transfer - server_region = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); - server_region->ndim = 1; - server_region->size = (uint64_t *)malloc(sizeof(uint64_t)); - server_region->offset = (uint64_t *)malloc(sizeof(uint64_t)); + server_region = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); + server_region->ndim = 1; + server_region->size = (uint64_t *)PDC_malloc(sizeof(uint64_t)); + server_region->offset = (uint64_t *)PDC_malloc(sizeof(uint64_t)); (server_region->size)[0] = size; - (server_region->offset)[0] = in.region.start_0; + (server_region->offset)[0] = in.region.start[0]; ret_value = PDC_Server_data_read_direct(elt->from_obj_id, server_region, data_buf); if (ret_value != SUCCEED) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: PDC_Server_data_read_direct() failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "PDC_Server_data_read_direct failed"); hg_ret = HG_Bulk_create(hg_info->hg_class, 1, &data_buf, &size, HG_BULK_READWRITE, &lock_local_bulk_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "Could not create bulk data handle"); - lock_update_bulk_args = (struct region_lock_update_bulk_args *)malloc( + lock_update_bulk_args = (struct region_lock_update_bulk_args *)PDC_malloc( sizeof(struct region_lock_update_bulk_args)); lock_update_bulk_args->handle = handle; lock_update_bulk_args->in = in; @@ -2957,110 +2771,47 @@ HG_TEST_RPC_CB(region_release, handle) lock_update_bulk_args, HG_BULK_PUSH, elt->addr, elt->bulk_handle, 0, lock_local_bulk_handle, 0, size, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: HG_TEST_RPC_CB(region_release, handle) could " - "not write bulk data"); + PGOTO_ERROR(hg_ret, "Could not write bulk data"); } if (PDC_is_same_region_list(request_region, elt) == 1 && elt->reg_dirty_from_buf == 1 && hg_atomic_get32(&(elt->buf_map_refcount)) > 0) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH_SAFE(target_obj->region_buf_map_head, eltt2, eltt_tmp) { PDC_region_transfer_t_to_list_t(&(eltt2->remote_region_unit), tmp); if (PDC_is_same_region_list(tmp, request_region) == 1) { // get remote object memory addr data_buf = PDC_Server_get_region_buf_ptr(in.obj_id, in.region); - if (in.region.ndim == 1) { - remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); - *data_ptrs_to = data_buf; - *data_size_to = (eltt2->remote_region_unit).count_0; - } - if (in.region.ndim == 2) { - remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); - *data_ptrs_to = data_buf; - *data_size_to = (eltt2->remote_region_unit).count_0 * - (eltt2->remote_region_unit).count_1 / in.data_unit; - } - if (in.region.ndim == 3) { + if (in.region.ndim > 0) { remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs_to = data_buf; - *data_size_to = (eltt2->remote_region_unit).count_0 * - (eltt2->remote_region_unit).count_1 / in.data_unit * - (eltt2->remote_region_unit).count_2 / in.data_unit; + PDC_copy_region_desc_bytes_to_elements((eltt2->remote_region_unit).count, + data_size_to, in.region.ndim, + in.data_unit); } - /* else if (in.region.ndim == 2) { */ - /* dims[1] = (eltt->remote_region_nounit).count_1; */ - /* remote_count = (eltt->remote_region_nounit).count_0; */ - /* data_ptrs_to = (void **)malloc( remote_count * sizeof(void *) ); */ - /* data_size_to = (size_t *)malloc( remote_count * sizeof(size_t) ); */ - /* data_ptrs_to[0] = data_buf + type_size * - * (dims[1]*(eltt->remote_region_nounit).start_0 + - * (eltt->remote_region_nounit).start_1); */ - /* data_size_to[0] = (eltt->remote_region_unit).count_1; */ - /* for (k=1; kremote_region_nounit).count_1; */ - /* dims[2] = (eltt->remote_region_nounit).count_2; */ - /* remote_count = (eltt->remote_region_nounit).count_0 * - * (eltt->remote_region_nounit).count_1; */ - /* data_ptrs_to = (void **)malloc( remote_count * sizeof(void *) ); */ - /* data_size_to = (size_t *)malloc( remote_count * sizeof(size_t) ); */ - /* data_ptrs_to[0] = data_buf + - * type_size*(dims[2]*dims[1]*(eltt->remote_region_nounit).start_0 + - * dims[2]*(eltt->remote_region_nounit).start_1 + - * (eltt->remote_region_nounit).start_2); */ - /* data_size_to[0] = (eltt->remote_region_unit).count_2; */ - /* for (k=0; k<(eltt->remote_region_nounit).count_0-1; k++) { */ - /* for (m=0; m<(eltt->remote_region_nounit).count_1-1; m++) { */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m] + type_size*dims[2]; */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_size_to[0]; */ - /* } */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+(eltt->remote_region_nounit).count_1] - * = data_ptrs_to[k*(eltt->remote_region_nounit).count_1] + type_size*dims[2]*dims[1]; - */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+(eltt->remote_region_nounit).count_1] - * = data_size_to[0]; */ - /* } */ - /* k = (eltt->remote_region_nounit).count_0 - 1; */ - /* for (m=0; m<(eltt->remote_region_nounit).count_1-1; m++) { */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m] + type_size*dims[2]; */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+m+1] = data_size_to[0]; - */ - /* } */ - /* } */ hg_ret = HG_Bulk_create(hg_info->hg_class, remote_count, data_ptrs_to, (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "==PDC SERVER: obj map Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "obj map Could not create bulk data handle"); } - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = + (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) { error = 1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER:HG_TEST_RPC_CB(region_release, handle) " - "remote_reg_info memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed"); } - obj_map_bulk_args = (struct buf_map_release_bulk_args *)malloc( + obj_map_bulk_args = (struct buf_map_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_release_bulk_args)); memset(obj_map_bulk_args, 0, sizeof(struct buf_map_release_bulk_args)); obj_map_bulk_args->handle = handle; @@ -3081,21 +2832,16 @@ HG_TEST_RPC_CB(region_release, handle) #endif remote_reg_info->ndim = (obj_map_bulk_args->remote_region_unit).ndim; remote_reg_info->offset = - (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (obj_map_bulk_args->remote_region_nounit).start_0; - (remote_reg_info->size)[0] = (obj_map_bulk_args->remote_region_nounit).count_0; - } - if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (obj_map_bulk_args->remote_region_nounit).start_1; - (remote_reg_info->size)[1] = (obj_map_bulk_args->remote_region_nounit).count_1; - } - - if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (obj_map_bulk_args->remote_region_nounit).start_2; - (remote_reg_info->size)[2] = (obj_map_bulk_args->remote_region_nounit).count_2; - } + (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = + (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + + PDC_copy_region_desc(obj_map_bulk_args->remote_region_nounit.start, + remote_reg_info->offset, remote_reg_info->ndim, + remote_reg_info->ndim); + PDC_copy_region_desc(obj_map_bulk_args->remote_region_nounit.count, + remote_reg_info->size, remote_reg_info->ndim, + remote_reg_info->ndim); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_init(&(obj_map_bulk_args->work_mutex)); hg_thread_cond_init(&(obj_map_bulk_args->work_cond)); @@ -3120,9 +2866,8 @@ HG_TEST_RPC_CB(region_release, handle) size2 = HG_Bulk_get_size(remote_bulk_handle); if (size != size2) { error = 1; - LOG_INFO("==PDC_SERVER: local size %llu, remote %llu\n", size, size2); - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC SERVER: HG_TEST_RPC_CB(region_release, " - "handle) local and remote bulk size does not match"); + LOG_INFO("Local size %llu, remote %llu\n", size, size2); + PGOTO_ERROR(HG_OTHER_ERROR, "Local and remote bulk size does not match"); } hg_ret = HG_Bulk_transfer(hg_info->context, obj_map_region_release_bulk_transfer_cb, @@ -3131,20 +2876,19 @@ HG_TEST_RPC_CB(region_release, handle) HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) obj " - "map Could not write bulk data"); + PGOTO_ERROR(hg_ret, "Map Could not write bulk data"); } #endif break; } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -3157,7 +2901,7 @@ HG_TEST_RPC_CB(region_release, handle) // write lock release with mapping case // do data tranfer if it is write lock release with mapping. else { - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.region, request_region); target_obj = PDC_Server_get_obj_region(in.obj_id); #ifdef ENABLE_MULTITHREAD @@ -3168,7 +2912,7 @@ HG_TEST_RPC_CB(region_release, handle) if (PDC_is_same_region_list(request_region, elt) == 1 && elt->reg_dirty_from_buf == 1 && hg_atomic_get32(&(elt->buf_map_refcount)) > 0) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt) { PDC_region_transfer_t_to_list_t(&(eltt->remote_region_unit), tmp); @@ -3176,91 +2920,27 @@ HG_TEST_RPC_CB(region_release, handle) // type_size = eltt->remote_unit; // get remote object memory addr data_buf = PDC_Server_get_region_buf_ptr(in.obj_id, in.region); - if (in.region.ndim == 1) { - remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); - *data_ptrs_to = data_buf; - *data_size_to = (eltt->remote_region_unit).count_0; - } - if (in.region.ndim == 2) { - remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); - *data_ptrs_to = data_buf; - *data_size_to = (eltt->remote_region_unit).count_0 * - (eltt->remote_region_unit).count_1 / in.data_unit; - } - if (in.region.ndim == 3) { + if (in.region.ndim > 0) { remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs_to = data_buf; - *data_size_to = (eltt->remote_region_unit).count_0 * - (eltt->remote_region_unit).count_1 / in.data_unit * - (eltt->remote_region_unit).count_2 / in.data_unit; + PDC_copy_region_desc_bytes_to_elements((eltt2->remote_region_unit).count, + data_size_to, in.region.ndim, + in.data_unit); } - - /* else if (in.region.ndim == 2) { */ - /* dims[1] = (eltt->remote_region_nounit).count_1; */ - /* remote_count = (eltt->remote_region_nounit).count_0; */ - /* data_ptrs_to = (void **)malloc( remote_count * sizeof(void *) ); */ - /* data_size_to = (size_t *)malloc( remote_count * sizeof(size_t) ); */ - /* data_ptrs_to[0] = data_buf + type_size * - * (dims[1]*(eltt->remote_region_nounit).start_0 + - * (eltt->remote_region_nounit).start_1); */ - /* data_size_to[0] = (eltt->remote_region_unit).count_1; */ - /* for (k=1; kremote_region_nounit).count_1; */ - /* dims[2] = (eltt->remote_region_nounit).count_2; */ - /* remote_count = (eltt->remote_region_nounit).count_0 * - * (eltt->remote_region_nounit).count_1; */ - /* data_ptrs_to = (void **)malloc( remote_count * sizeof(void *) ); */ - /* data_size_to = (size_t *)malloc( remote_count * sizeof(size_t) ); */ - /* data_ptrs_to[0] = data_buf + - * type_size*(dims[2]*dims[1]*(eltt->remote_region_nounit).start_0 + - * dims[2]*(eltt->remote_region_nounit).start_1 + - - * (eltt->remote_region_nounit).start_2); */ - /* data_size_to[0] = (eltt->remote_region_unit).count_2; */ - /* for (k=0; k<(eltt->remote_region_nounit).count_0-1; k++) { */ - /* for (m=0; m<(eltt->remote_region_nounit).count_1-1; m++) { */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m] + type_size*dims[2]; */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_size_to[0]; */ - /* } */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+(eltt->remote_region_nounit).count_1] - * = data_ptrs_to[k*(eltt->remote_region_nounit).count_1] + type_size*dims[2]*dims[1]; - */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+(eltt->remote_region_nounit).count_1] - * = data_size_to[0]; */ - /* } */ - /* k = (eltt->remote_region_nounit).count_0 - 1; */ - /* for (m=0; m<(eltt->remote_region_nounit).count_1-1; m++) { */ - /* data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m+1] = - * data_ptrs_to[k*(eltt->remote_region_nounit).count_1+m] + type_size*dims[2]; */ - /* data_size_to[k*(eltt->remote_region_nounit).count_1+m+1] = data_size_to[0]; - */ - /* } */ - /* } */ /* Create a new block handle to read the data */ hg_ret = HG_Bulk_create(hg_info->hg_class, remote_count, data_ptrs_to, (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "Could not create bulk data handle"); } - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - buf_map_bulk_args = (struct buf_map_release_bulk_args *)malloc( + buf_map_bulk_args = (struct buf_map_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_release_bulk_args)); if (buf_map_bulk_args == NULL) { error = 1; @@ -3289,9 +2969,7 @@ HG_TEST_RPC_CB(region_release, handle) size2 = HG_Bulk_get_size(remote_bulk_handle); if (size != size2) { error = 1; - LOG_INFO("==PDC_SERVER: local size %llu, remote %llu\n", size, size2); - /* PGOTO_ERROR(HG_OTHER_ERROR, "===PDC SERVER: HG_TEST_RPC_CB(region_release, - * handle) local and remote bulk size does not match"); */ + LOG_INFO("Local size %llu, remote %llu\n", size, size2); } hg_ret = HG_Bulk_transfer(hg_info->context, buf_map_region_release_bulk_transfer_cb, buf_map_bulk_args, HG_BULK_PULL, eltt->local_addr, @@ -3299,20 +2977,19 @@ HG_TEST_RPC_CB(region_release, handle) HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) buf " - "map Could not read bulk data"); + PGOTO_ERROR(hg_ret, "buf map could not read bulk data"); } break; } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); break; } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -3358,12 +3035,14 @@ get_region_lock_in(region_transform_and_lock_in_t *in, region_lock_in_t *reg_loc reg_lock_in->data_type = in->data_type; reg_lock_in->lock_mode = in->lock_mode; - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } static hg_return_t region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t handle) { + FUNC_ENTER(NULL); + hg_return_t hg_ret, ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; hg_bulk_t remote_bulk_handle = HG_BULK_NULL; @@ -3382,9 +3061,7 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha struct buf_map_transform_and_release_bulk_args *transform_release_bulk_args = NULL; struct pdc_region_info * remote_reg_info = NULL; data_server_region_t * target_obj = NULL; - region_list_t *tmp, *elt, *request_region = (region_list_t *)malloc(sizeof(region_list_t)); - - FUNC_ENTER(NULL); + region_list_t *tmp, *elt, *request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); hg_info = HG_Get_info(handle); unit = PDC_get_var_type_size(in->data_type); @@ -3399,14 +3076,13 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha // check region is dirty or not, if dirty then transfer data if ((PDC_is_same_region_list(request_region, elt)) == 1 && (elt->reg_dirty_from_buf == 1) && (hg_atomic_get32(&(elt->buf_map_refcount)) == 0)) { - PGOTO_ERROR(HG_OTHER_ERROR, - "==PDC SERVER: release %" PRId64 " access_type==READ (dirty) NOT SUPPORTED YET!", + PGOTO_ERROR(HG_OTHER_ERROR, "Release %" PRId64 " access_type==READ (dirty) NOT SUPPORTED YET", in->obj_id); } if ((PDC_is_same_region_list(request_region, elt) == 1) && (elt->reg_dirty_from_buf == 1) && (hg_atomic_get32(&(elt->buf_map_refcount)) > 0)) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt2) { PDC_region_transfer_t_to_list_t(&(eltt2->remote_region_unit), tmp); @@ -3415,10 +3091,10 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha remote_count = 1; // get remote object memory addr data_buf = PDC_Server_get_region_buf_ptr(in->obj_id, in->region); - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); if ((data_ptrs_to == NULL) || (data_size_to == NULL)) { - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: Memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Memory allocation failed"); } data_ptrs_to[0] = data_buf; @@ -3429,22 +3105,23 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha unit = 1; } else - data_size_to[0] = (eltt2->remote_region_unit).count_0; + data_size_to[0] = (eltt2->remote_region_unit).count[0]; hg_ret = HG_Bulk_create(hg_info->hg_class, remote_count, data_ptrs_to, (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(hg_ret, "==PDC SERVER: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "Could not create bulk data handle"); - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); - transform_release_bulk_args = (struct buf_map_transform_and_release_bulk_args *)malloc( - sizeof(struct buf_map_transform_and_release_bulk_args)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); + transform_release_bulk_args = + (struct buf_map_transform_and_release_bulk_args *)PDC_malloc( + sizeof(struct buf_map_transform_and_release_bulk_args)); if ((remote_reg_info == NULL) || (transform_release_bulk_args == NULL)) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: Memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Memory allocation failed"); transform_release_bulk_args->handle = handle; transform_release_bulk_args->data_buf = data_buf; @@ -3458,21 +3135,21 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha transform_release_bulk_args->local_addr = eltt2->local_addr; transform_release_bulk_args->in = *in; - remote_reg_info->offset = (uint64_t *)malloc(sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(sizeof(uint64_t)); + remote_reg_info->offset = (uint64_t *)PDC_malloc(sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(sizeof(uint64_t)); if ((remote_reg_info->offset == NULL) || (remote_reg_info->size == NULL)) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: Memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Memory allocation failed"); if (in->transform_state && (in->transform_data_size > 0)) { remote_reg_info->ndim = 1; - (remote_reg_info->offset)[0] = (transform_release_bulk_args->remote_region).start_0; + (remote_reg_info->offset)[0] = (transform_release_bulk_args->remote_region).start[0]; (remote_reg_info->size)[0] = in->transform_data_size; - transform_release_bulk_args->remote_region.count_0 = in->transform_data_size; + transform_release_bulk_args->remote_region.count[0] = in->transform_data_size; } else { remote_reg_info->ndim = (transform_release_bulk_args->remote_region).ndim; - (remote_reg_info->offset)[0] = (transform_release_bulk_args->remote_region).start_0; - (remote_reg_info->size)[0] = (transform_release_bulk_args->remote_region).count_0; + (remote_reg_info->offset)[0] = (transform_release_bulk_args->remote_region).start[0]; + (remote_reg_info->size)[0] = (transform_release_bulk_args->remote_region).count[0]; } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_init(&(transform_release_bulk_args->work_mutex)); @@ -3493,19 +3170,18 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha else size = HG_Bulk_get_size(eltt2->local_bulk_handle); if (size != HG_Bulk_get_size(remote_bulk_handle)) - PGOTO_ERROR(HG_OTHER_ERROR, - "===PDC SERVER: local and remote bulk size does not match"); + PGOTO_ERROR(HG_OTHER_ERROR, "Local and remote bulk size does not match"); hg_ret = HG_Bulk_transfer(hg_info->context, obj_map_region_release_bulk_transfer_cb, transform_release_bulk_args, HG_BULK_PUSH, hg_info->addr, in->local_bulk_handle, 0, remote_bulk_handle, 0, size, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(hg_ret, "===PDC SERVER: obj map Could not write bulk data"); + PGOTO_ERROR(hg_ret, "obj map could not write bulk data"); #endif } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD @@ -3513,7 +3189,7 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha #endif done: - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function PDC_Data_Server_region_release((region_lock_in_t *)in, &out); @@ -3528,6 +3204,8 @@ region_read_transform_release(region_transform_and_lock_in_t *in, hg_handle_t ha /* transform_region_release_cb */ HG_TEST_RPC_CB(transform_region_release, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t hg_ret; region_transform_and_lock_in_t in; @@ -3547,8 +3225,6 @@ HG_TEST_RPC_CB(transform_region_release, handle) void ** data_ptrs_to = NULL; size_t * data_size_to = NULL; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); /* Get info from handle */ @@ -3561,7 +3237,7 @@ HG_TEST_RPC_CB(transform_region_release, handle) // write lock release with mapping case // do data transfer if it is write lock release with mapping. else { - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.region, request_region); target_obj = PDC_Server_get_obj_region(in.obj_id); #ifdef ENABLE_MULTITHREAD @@ -3572,17 +3248,17 @@ HG_TEST_RPC_CB(transform_region_release, handle) if (PDC_is_same_region_list(request_region, elt) == 1 && elt->reg_dirty_from_buf == 1 && hg_atomic_get32(&(elt->buf_map_refcount)) > 0) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt) { PDC_region_transfer_t_to_list_t(&(eltt->remote_region_unit), tmp); if (PDC_is_same_region_list(tmp, request_region) == 1) { - data_buf = malloc(in.transform_data_size); + data_buf = PDC_malloc(in.transform_data_size); remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); if ((data_buf == NULL) || (data_ptrs_to == NULL) || (data_size_to == NULL)) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: Memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Memory allocation failed"); *data_ptrs_to = data_buf; *data_size_to = in.transform_data_size; @@ -3593,14 +3269,13 @@ HG_TEST_RPC_CB(transform_region_release, handle) (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "Could not create bulk data handle"); } /* Args that get passed to the callback function */ - buf_map_bulk_args = (struct buf_map_transform_and_release_bulk_args *)malloc( + buf_map_bulk_args = (struct buf_map_transform_and_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_transform_and_release_bulk_args)); if (buf_map_bulk_args == NULL) { - PGOTO_ERROR(HG_OTHER_ERROR, "HG_TEST_RPC_CB(transform_region_release, handle): " - "buf_map_bulk_args memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "buf_map_bulk_args memory allocation failed"); } memset(buf_map_bulk_args, 0, sizeof(struct buf_map_transform_and_release_bulk_args)); buf_map_bulk_args->handle = handle; @@ -3616,8 +3291,8 @@ HG_TEST_RPC_CB(transform_region_release, handle) hg_thread_mutex_init(&(buf_map_bulk_args->work_mutex)); hg_thread_cond_init(&(buf_map_bulk_args->work_cond)); #endif - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); /* Pull bulk data */ size = in.transform_data_size; @@ -3633,19 +3308,18 @@ HG_TEST_RPC_CB(transform_region_release, handle) size, HG_OP_ID_IGNORE); /* */ if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC SERVER: HG_TEST_RPC_CB(region_release, " - "handle) buf map Could not read bulk data"); + PGOTO_ERROR(HG_OTHER_ERROR, "buf map could not read bulk data"); } } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -3657,7 +3331,6 @@ HG_TEST_RPC_CB(transform_region_release, handle) } done: - fflush(stdout); if (error == 1) { out.ret = 0; HG_Respond(handle, NULL, NULL, &out); @@ -3671,6 +3344,8 @@ HG_TEST_RPC_CB(transform_region_release, handle) /* region_transform_release_cb */ HG_TEST_RPC_CB(region_transform_release, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t hg_ret; region_lock_in_t in; @@ -3693,8 +3368,6 @@ HG_TEST_RPC_CB(region_transform_release, handle) ; size_t dims[4] = {0, 0, 0, 0}; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); /* Get info from handle */ @@ -3702,7 +3375,7 @@ HG_TEST_RPC_CB(region_transform_release, handle) hg_info = HG_Get_info(handle); if (in.access_type == PDC_READ) - PGOTO_ERROR(HG_OTHER_ERROR, "release %" PRId64 " access_type==READ NOT SUPPORTED YET!", in.obj_id); + PGOTO_ERROR(HG_OTHER_ERROR, "release %" PRId64 " access_type==READ NOT SUPPORTED YET", in.obj_id); // ************************************************************ // write lock release with mapping case @@ -3710,7 +3383,7 @@ HG_TEST_RPC_CB(region_transform_release, handle) // ************************************************************ else { LOG_INFO("region_release_cb: release obj_id=%" PRIu64 " access_type==WRITE\n", in.obj_id); - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.region, request_region); target_obj = PDC_Server_get_obj_region(in.obj_id); #ifdef ENABLE_MULTITHREAD @@ -3721,7 +3394,7 @@ HG_TEST_RPC_CB(region_transform_release, handle) if (PDC_is_same_region_list(request_region, elt) == 1 && elt->reg_dirty_from_buf == 1 && hg_atomic_get32(&(elt->buf_map_refcount)) > 0) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt) { PDC_region_transfer_t_to_list_t(&(eltt->remote_region_unit), tmp); @@ -3730,23 +3403,23 @@ HG_TEST_RPC_CB(region_transform_release, handle) type_size = eltt->remote_unit; data_buf = PDC_Server_get_region_buf_ptr(in.obj_id, in.region); if (in.region.ndim == 1) { - dims[0] = (eltt->remote_region_unit).count_0 / type_size; + dims[0] = (eltt->remote_region_unit).count[0] / type_size; remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs_to = data_buf; - *data_size_to = (eltt->remote_region_unit).count_0; + *data_size_to = (eltt->remote_region_unit).count[0]; } else if (in.region.ndim == 2) { - dims[1] = (eltt->remote_region_unit).count_1 / type_size; - remote_count = (eltt->remote_region_nounit).count_0; - data_ptrs_to = (void **)malloc(remote_count * sizeof(void *)); - data_size_to = (size_t *)malloc(remote_count * sizeof(size_t)); + dims[1] = (eltt->remote_region_unit).count[1] / type_size; + remote_count = (eltt->remote_region_nounit).count[0]; + data_ptrs_to = (void **)PDC_malloc(remote_count * sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(remote_count * sizeof(size_t)); data_ptrs_to[0] = data_buf + - type_size * dims[1] * (eltt->remote_region_nounit).start_0 + - (eltt->remote_region_nounit).start_1; - data_size_to[0] = (eltt->remote_region_unit).count_1; + type_size * dims[1] * (eltt->remote_region_nounit).start[0] + + (eltt->remote_region_nounit).start[0]; + data_size_to[0] = (eltt->remote_region_unit).count[0]; for (k = 1; k < remote_count; k++) { data_ptrs_to[k] = data_ptrs_to[k - 1] + eltt->remote_unit * dims[1]; data_size_to[k] = data_size_to[0]; @@ -3759,16 +3432,15 @@ HG_TEST_RPC_CB(region_transform_release, handle) (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(FAIL, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); } - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - buf_map_bulk_args = (struct buf_map_release_bulk_args *)malloc( + buf_map_bulk_args = (struct buf_map_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_release_bulk_args)); if (buf_map_bulk_args == NULL) { - PGOTO_ERROR(HG_OTHER_ERROR, "HG_TEST_RPC_CB(region_release, handle): " - "buf_map_bulk_args memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "buf_map_bulk_args memory allocation failed"); } memset(buf_map_bulk_args, 0, sizeof(struct buf_map_release_bulk_args)); buf_map_bulk_args->handle = handle; @@ -3796,18 +3468,17 @@ HG_TEST_RPC_CB(region_transform_release, handle) HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) buf " - "map Could not read bulk data"); + PGOTO_ERROR(hg_ret, "buf map could not read bulk data"); } } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -3819,7 +3490,6 @@ HG_TEST_RPC_CB(region_transform_release, handle) } done: - fflush(stdout); if (error == 1) { out.ret = 0; HG_Respond(handle, NULL, NULL, &out); @@ -3833,6 +3503,8 @@ HG_TEST_RPC_CB(region_transform_release, handle) /* region_analysis_release_cb */ HG_TEST_RPC_CB(region_analysis_release, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; union { region_analysis_and_lock_in_t analysis; @@ -3863,8 +3535,6 @@ HG_TEST_RPC_CB(region_analysis_release, handle) size_t type_size = 0; size_t dims[4] = {0, 0, 0, 0}; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in.lock_release); /* Get info from handle */ @@ -3872,7 +3542,7 @@ HG_TEST_RPC_CB(region_analysis_release, handle) if (in.lock_release.access_type == PDC_READ) { // check region is dirty or not, if dirty transfer data - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.lock_release.region, request_region); target_obj = PDC_Server_get_obj_region(in.lock_release.obj_id); #ifdef ENABLE_MULTITHREAD @@ -3884,23 +3554,23 @@ HG_TEST_RPC_CB(region_analysis_release, handle) hg_atomic_get32(&(elt->buf_map_refcount)) == 0) { dirty_reg = 1; size = HG_Bulk_get_size(elt->bulk_handle); - data_buf = (void *)calloc(1, size); + data_buf = (void *)PDC_calloc(1, size); // data transfer - server_region = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); - server_region->ndim = 1; - server_region->size = (uint64_t *)malloc(sizeof(uint64_t)); - server_region->offset = (uint64_t *)malloc(sizeof(uint64_t)); + server_region = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); + server_region->ndim = 1; + server_region->size = (uint64_t *)PDC_malloc(sizeof(uint64_t)); + server_region->offset = (uint64_t *)PDC_malloc(sizeof(uint64_t)); (server_region->size)[0] = size; - (server_region->offset)[0] = in.lock_release.region.start_0; + (server_region->offset)[0] = in.lock_release.region.start[0]; ret_value = PDC_Server_data_read_direct(elt->from_obj_id, server_region, data_buf); if (ret_value != SUCCEED) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER: PDC_Server_data_read_direct() failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with PDC_Server_data_read_direct"); hg_ret = HG_Bulk_create(hg_info->hg_class, 1, &data_buf, &size, HG_BULK_READWRITE, &lock_local_bulk_handle); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "Could not create bulk data handle"); - lock_update_bulk_args = (struct region_lock_update_bulk_args *)malloc( + lock_update_bulk_args = (struct region_lock_update_bulk_args *)PDC_malloc( sizeof(struct region_lock_update_bulk_args)); lock_update_bulk_args->handle = handle; lock_update_bulk_args->in = in.lock_release; @@ -3914,15 +3584,13 @@ HG_TEST_RPC_CB(region_analysis_release, handle) lock_update_bulk_args, HG_BULK_PUSH, elt->addr, elt->bulk_handle, 0, lock_local_bulk_handle, 0, size, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) - PGOTO_ERROR( - hg_ret, - "==PDC SERVER ERROR: region_release_bulk_transfer_cb() could not write bulk data"); + PGOTO_ERROR(hg_ret, "Could not write bulk data"); } if (PDC_is_same_region_list(request_region, elt) == 1 && elt->reg_dirty_from_buf == 1 && hg_atomic_get32(&(elt->buf_map_refcount)) > 0) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt2) { PDC_region_transfer_t_to_list_t(&(eltt2->remote_region_unit), tmp); @@ -3934,10 +3602,10 @@ HG_TEST_RPC_CB(region_analysis_release, handle) PDC_Server_get_region_buf_ptr(in.lock_release.obj_id, in.lock_release.region); if (in.lock_release.region.ndim == 1) { remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs_to = data_buf; - *data_size_to = (eltt2->remote_region_unit).count_0; + *data_size_to = (eltt2->remote_region_unit).count[0]; } hg_ret = @@ -3945,19 +3613,19 @@ HG_TEST_RPC_CB(region_analysis_release, handle) (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "==PDC SERVER: obj map Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "obj map could not create bulk data handle"); } - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = + (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); if (remote_reg_info == NULL) { error = 1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC SERVER:HG_TEST_RPC_CB(region_release, handle) " - "remote_reg_info memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "remote_reg_info memory allocation failed"); } - obj_map_bulk_args = (struct buf_map_analysis_and_release_bulk_args *)malloc( + obj_map_bulk_args = (struct buf_map_analysis_and_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_analysis_and_release_bulk_args)); // memset(obj_map_bulk_args, 0, sizeof(struct buf_map_release_bulk_args)); memset(obj_map_bulk_args, 0, sizeof(struct buf_map_analysis_and_release_bulk_args)); @@ -3975,20 +3643,15 @@ HG_TEST_RPC_CB(region_analysis_release, handle) remote_reg_info->ndim = (obj_map_bulk_args->remote_region).ndim; remote_reg_info->offset = - (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (obj_map_bulk_args->remote_region).start_0; - (remote_reg_info->size)[0] = (obj_map_bulk_args->remote_region).count_0; - } - if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (obj_map_bulk_args->remote_region).start_1; - (remote_reg_info->size)[1] = (obj_map_bulk_args->remote_region).count_1; - } - if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (obj_map_bulk_args->remote_region).start_2; - (remote_reg_info->size)[2] = (obj_map_bulk_args->remote_region).count_2; - } + (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = + (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + + PDC_copy_region_desc((obj_map_bulk_args->remote_region).start, + remote_reg_info->offset, remote_reg_info->ndim, + remote_reg_info->ndim); + PDC_copy_region_desc((obj_map_bulk_args->remote_region).count, remote_reg_info->size, + remote_reg_info->ndim, remote_reg_info->ndim); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_init(&(obj_map_bulk_args->work_mutex)); hg_thread_cond_init(&(obj_map_bulk_args->work_cond)); @@ -4009,9 +3672,7 @@ HG_TEST_RPC_CB(region_analysis_release, handle) size = HG_Bulk_get_size(eltt2->local_bulk_handle); if (size != HG_Bulk_get_size(remote_bulk_handle)) { error = 1; - PGOTO_ERROR(HG_OTHER_ERROR, - "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) local and " - "remote bulk size does not match\n"); + PGOTO_ERROR(HG_OTHER_ERROR, "remote bulk size does not match\n"); } hg_ret = HG_Bulk_transfer(hg_info->context, obj_map_region_release_bulk_transfer_cb, @@ -4020,19 +3681,18 @@ HG_TEST_RPC_CB(region_analysis_release, handle) HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) obj " - "map Could not write bulk data"); + PGOTO_ERROR(hg_ret, "obj map could not write bulk data"); } #endif } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -4045,7 +3705,7 @@ HG_TEST_RPC_CB(region_analysis_release, handle) // write lock release with mapping case // do data transfer if it is write lock release with mapping. else { - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.lock_release.region, request_region); lock_obj = PDC_Server_get_obj_region(in.lock_release.obj_id); target_obj = PDC_Server_get_obj_region(in.analysis.output_obj_id); @@ -4056,7 +3716,7 @@ HG_TEST_RPC_CB(region_analysis_release, handle) { if (PDC_is_same_region_list(request_region, elt) == 1 && elt->obj_id == in.analysis.obj_id) { dirty_reg = 1; - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(target_obj->region_buf_map_head, eltt) { PDC_region_transfer_t_to_list_t(&(eltt->remote_region_unit), tmp); @@ -4075,25 +3735,25 @@ HG_TEST_RPC_CB(region_analysis_release, handle) data_buf = PDC_Server_maybe_allocate_region_buf_ptr( in.lock_release.obj_id, in.lock_release.region, type_size); if (in.lock_release.region.ndim == 1) { - dims[0] = in.analysis.region.count_0 / type_size; + dims[0] = in.analysis.region.count[0] / type_size; remote_count = 1; - data_ptrs_to = (void **)malloc(sizeof(void *)); - data_size_to = (size_t *)malloc(sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(sizeof(size_t)); *data_ptrs_to = data_buf; - *data_size_to = eltt->local_region.count_0; + *data_size_to = eltt->local_region.count[0]; } else if (in.lock_release.region.ndim == 2) { /* dims can be set directly from local_region_nunit!! */ - dims[0] = in.analysis.region.count_0 / type_size; - dims[1] = in.analysis.region.count_1 / type_size; + dims[0] = in.analysis.region.count[0] / type_size; + dims[1] = in.analysis.region.count[1] / type_size; remote_count = dims[0]; - data_ptrs_to = (void **)malloc(remote_count * sizeof(void *)); - data_size_to = (size_t *)malloc(remote_count * sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(remote_count * sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(remote_count * sizeof(size_t)); data_ptrs_to[0] = data_buf + type_size * dims[1] * - ((eltt->local_region.start_0 / type_size) + - (eltt->local_region.start_1 / type_size)); - data_size_to[0] = eltt->local_region.count_1; + ((eltt->local_region.start[0] / type_size) + + (eltt->local_region.start[1] / type_size)); + data_size_to[0] = eltt->local_region.count[0]; for (k = 1; k < remote_count; k++) { data_ptrs_to[k] = data_ptrs_to[k - 1] + data_size_to[0]; data_size_to[k] = data_size_to[0]; @@ -4101,17 +3761,17 @@ HG_TEST_RPC_CB(region_analysis_release, handle) } else if (in.lock_release.region.ndim == 3) { /* dims can be set directly from local_region_nunit!! */ - dims[0] = in.analysis.region.count_0 / type_size; - dims[1] = in.analysis.region.count_1 / type_size; - dims[2] = in.analysis.region.count_2 / type_size; + dims[0] = in.analysis.region.count[0] / type_size; + dims[1] = in.analysis.region.count[1] / type_size; + dims[2] = in.analysis.region.count[2] / type_size; remote_count = dims[0]; - data_ptrs_to = (void **)malloc(remote_count * sizeof(void *)); - data_size_to = (size_t *)malloc(remote_count * sizeof(size_t)); + data_ptrs_to = (void **)PDC_malloc(remote_count * sizeof(void *)); + data_size_to = (size_t *)PDC_malloc(remote_count * sizeof(size_t)); data_ptrs_to[0] = data_buf + type_size * dims[1] * - ((eltt->local_region.start_0 / type_size) + - (eltt->local_region.start_1 / type_size)); + ((eltt->local_region.start[0] / type_size) + + (eltt->local_region.start[1] / type_size)); data_size_to[0] = - eltt->local_region.count_2 * (eltt->local_region.count_1 / type_size); + eltt->local_region.count[2] * (eltt->local_region.count[1] / type_size); for (k = 1; k < remote_count; k++) { data_ptrs_to[k] = data_ptrs_to[k - 1] + data_size_to[0]; data_size_to[k] = data_size_to[0]; @@ -4124,16 +3784,15 @@ HG_TEST_RPC_CB(region_analysis_release, handle) (hg_size_t *)data_size_to, HG_BULK_READWRITE, &remote_bulk_handle); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "==PDC SERVER ERROR: Could not create bulk data handle"); + PGOTO_ERROR(hg_ret, "=Could not create bulk data handle"); } - free(data_ptrs_to); - free(data_size_to); + data_ptrs_to = (void **)PDC_free(data_ptrs_to); + data_size_to = (size_t *)PDC_free(data_size_to); - buf_map_bulk_args = (struct buf_map_analysis_and_release_bulk_args *)malloc( + buf_map_bulk_args = (struct buf_map_analysis_and_release_bulk_args *)PDC_malloc( sizeof(struct buf_map_analysis_and_release_bulk_args)); if (buf_map_bulk_args == NULL) - PGOTO_ERROR(HG_OTHER_ERROR, "HG_TEST_RPC_CB(region_release, handle): " - "buf_map_bulk_args memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "buf_map_bulk_args memory allocation failed"); // memset(buf_map_bulk_args, 0, sizeof(struct buf_map_release_bulk_args)); memset(buf_map_bulk_args, 0, sizeof(struct buf_map_analysis_and_release_bulk_args)); @@ -4153,8 +3812,7 @@ HG_TEST_RPC_CB(region_analysis_release, handle) size = HG_Bulk_get_size(eltt->local_bulk_handle); if (size != HG_Bulk_get_size(remote_bulk_handle)) { error = 1; - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC SERVER: HG_TEST_RPC_CB(region_release, " - "handle) local and remote bulk size does not match"); + PGOTO_ERROR(HG_OTHER_ERROR, "Local and remote bulk size does not match"); } hg_ret = HG_Bulk_transfer( @@ -4164,18 +3822,17 @@ HG_TEST_RPC_CB(region_analysis_release, handle) if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR(hg_ret, "===PDC SERVER: HG_TEST_RPC_CB(region_release, handle) buf " - "map Could not read bulk data"); + PGOTO_ERROR(hg_ret, "buf map Could not read bulk data"); } } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_list_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); if (dirty_reg == 0) { // Perform lock release function @@ -4188,7 +3845,6 @@ HG_TEST_RPC_CB(region_analysis_release, handle) } done: - fflush(stdout); if (error == 1) { out.ret = 0; HG_Respond(handle, NULL, NULL, &out); @@ -4202,6 +3858,8 @@ HG_TEST_RPC_CB(region_analysis_release, handle) // region_lock_cb HG_TEST_RPC_CB(region_lock, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; perr_t ret = SUCCEED; region_lock_in_t in; @@ -4210,7 +3868,6 @@ HG_TEST_RPC_CB(region_lock, handle) double start, end; #endif - FUNC_ENTER(NULL); #ifdef PDC_TIMING start = MPI_Wtime(); #endif @@ -4243,6 +3900,8 @@ HG_TEST_RPC_CB(region_lock, handle) // buf_unmap_cb(hg_handle_t handle) HG_TEST_RPC_CB(buf_unmap, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; perr_t ret; buf_unmap_in_t in; @@ -4252,7 +3911,6 @@ HG_TEST_RPC_CB(buf_unmap, handle) double start, end; #endif - FUNC_ENTER(NULL); #ifdef PDC_TIMING start = MPI_Wtime(); #endif @@ -4264,10 +3922,7 @@ HG_TEST_RPC_CB(buf_unmap, handle) ret = PDC_Data_Server_buf_unmap(info, &in); if (ret != SUCCEED) { out.ret = 0; - PGOTO_ERROR( - HG_OTHER_ERROR, - "===PDC_DATA_SERVER: HG_TEST_RPC_CB(buf_unmap, handle) - PDC_Data_Server_buf_unmap() failed"); - fflush(stdout); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with PDC_Data_Server_buf_unmap"); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4278,12 +3933,9 @@ HG_TEST_RPC_CB(buf_unmap, handle) } ret = PDC_Meta_Server_buf_unmap(&in, &handle); if (ret != SUCCEED) - PGOTO_ERROR( - HG_OTHER_ERROR, - "===PDC_DATA_SERVER: HG_TEST_RPC_CB(buf_unmap, handle) - PDC_Meta_Server_buf_unmap() failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with PDC_Meta_Server_buf_unmap"); done: - fflush(stdout); #ifdef PDC_TIMING end = MPI_Wtime(); pdc_server_timings->PDCbuf_obj_unmap_rpc += end - start; @@ -4296,13 +3948,13 @@ HG_TEST_RPC_CB(buf_unmap, handle) // get_remote_metadata_cb(hg_handle_t handle) HG_TEST_RPC_CB(get_remote_metadata, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; get_remote_metadata_in_t in; get_remote_metadata_out_t out; pdc_metadata_t * meta; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -4331,23 +3983,21 @@ HG_TEST_RPC_CB(get_remote_metadata, handle) // buf_unmap_server_cb(hg_handle_t handle) HG_TEST_RPC_CB(buf_unmap_server, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; buf_unmap_in_t in; buf_unmap_out_t out; pdc_metadata_t * target_obj; region_buf_map_t *tmp, *elt; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); target_obj = PDC_Server_get_obj_metadata(in.remote_obj_id); if (target_obj == NULL) { out.ret = 0; - PGOTO_ERROR( - HG_OTHER_ERROR, - "==PDC_SERVER: HG_TEST_RPC_CB(buf_unmap_server, handle) - requested object does not exist"); + PGOTO_ERROR(HG_OTHER_ERROR, "Requested object does not exist"); } out.ret = 1; #ifdef ENABLE_MULTITHREAD @@ -4357,9 +4007,9 @@ HG_TEST_RPC_CB(buf_unmap_server, handle) DL_FOREACH_SAFE(target_obj->region_buf_map_head, elt, tmp) { if (in.remote_obj_id == elt->remote_obj_id && - PDC_region_is_identical(in.remote_region, elt->remote_region_unit)) { + PDC_region_info_transfer_t_is_equal(&(in.remote_region), &(elt->remote_region_unit))) { DL_DELETE(target_obj->region_buf_map_head, elt); - free(elt); + elt = (region_buf_map_t *)PDC_free(elt); out.ret = 1; } } @@ -4368,7 +4018,6 @@ HG_TEST_RPC_CB(buf_unmap_server, handle) #endif done: - fflush(stdout); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4380,6 +4029,8 @@ HG_TEST_RPC_CB(buf_unmap_server, handle) // buf_map_server_cb(hg_handle_t handle) HG_TEST_RPC_CB(buf_map_server, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; buf_map_in_t in; buf_map_out_t out; @@ -4387,20 +4038,15 @@ HG_TEST_RPC_CB(buf_map_server, handle) region_list_t * elt, *request_region; region_buf_map_t *buf_map_ptr; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); target_obj = PDC_Server_get_obj_metadata(in.remote_obj_id); if (target_obj == NULL) { out.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, - "==PDC_SERVER: HG_TEST_RPC_CB(buf_map_server, handle) - requested object (id=%" PRIu64 - ") does not exist\n", - in.remote_obj_id); + PGOTO_ERROR(HG_OTHER_ERROR, "Requested object (id=%" PRIu64 ") does not exist", in.remote_obj_id); } - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.remote_region_unit, request_region); DL_FOREACH(target_obj->region_lock_head, elt) { @@ -4408,7 +4054,7 @@ HG_TEST_RPC_CB(buf_map_server, handle) hg_atomic_incr32(&(elt->buf_map_refcount)); } } - buf_map_ptr = (region_buf_map_t *)malloc(sizeof(region_buf_map_t)); + buf_map_ptr = (region_buf_map_t *)PDC_malloc(sizeof(region_buf_map_t)); buf_map_ptr->local_reg_id = in.local_reg_id; buf_map_ptr->local_region = in.local_region; buf_map_ptr->local_ndim = in.ndim; @@ -4428,11 +4074,10 @@ HG_TEST_RPC_CB(buf_map_server, handle) hg_thread_mutex_unlock(&meta_buf_map_mutex_g); #endif - out.ret = 1; - free(request_region); + out.ret = 1; + request_region = (region_list_t *)PDC_free(request_region); done: - fflush(stdout); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4443,6 +4088,8 @@ HG_TEST_RPC_CB(buf_map_server, handle) // buf_map_cb(hg_handle_t handle) HG_TEST_RPC_CB(buf_map, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; perr_t ret; buf_map_in_t in; @@ -4456,48 +4103,32 @@ HG_TEST_RPC_CB(buf_map, handle) double start, end; #endif - FUNC_ENTER(NULL); - #ifdef PDC_TIMING start = MPI_Wtime(); #endif // Decode input HG_Get_input(handle, &in); - // int flag = 0; // Use region dimension to allocate memory, rather than object dimension (different from client side) ndim = in.remote_region_unit.ndim; - // allocate memory for the object by region size - if (ndim == 1) - data_ptr = (void *)malloc(in.remote_region_nounit.count_0 * in.remote_unit); - else if (ndim == 2) - data_ptr = (void *)malloc(in.remote_region_nounit.count_0 * in.remote_region_nounit.count_1 * - in.remote_unit); - else if (ndim == 3) - data_ptr = (void *)malloc(in.remote_region_nounit.count_0 * in.remote_region_nounit.count_1 * - in.remote_region_nounit.count_2 * in.remote_unit); - else if (ndim == 4) - data_ptr = (void *)malloc(in.remote_region_nounit.count_0 * in.remote_region_nounit.count_1 * - in.remote_region_nounit.count_2 * in.remote_region_nounit.count_3 * - in.remote_unit); - else { - out.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC Data Server: object dim is not supported"); - } + // allocate memory for the object by region size + data_ptr = (void *)PDC_malloc( + PDC_get_region_desc_size_bytes(in.remote_region_nounit.count, in.remote_unit, ndim)); + if (data_ptr == NULL) { out.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC Data Server: object memory allocation failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Object memory allocation failed"); } - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.remote_region_unit, request_region); info = HG_Get_info(handle); new_buf_map_ptr = PDC_Data_Server_buf_map(info, &in, request_region, data_ptr); if (new_buf_map_ptr == NULL) { - out.ret = 1; - free(data_ptr); + out.ret = 1; + data_ptr = (void *)PDC_free(data_ptr); HG_Respond(handle, NULL, NULL, &out); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4507,7 +4138,7 @@ HG_TEST_RPC_CB(buf_map, handle) HG_Respond(handle, NULL, NULL, &out); ret = PDC_Meta_Server_buf_map(&in, new_buf_map_ptr, &handle); if (ret != SUCCEED) - PGOTO_ERROR(HG_OTHER_ERROR, "===PDC Data Server: PDC_Meta_Server_buf_map() failed"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with PDC_Meta_Server_buf_map"); } #ifdef PDC_TIMING end = MPI_Wtime(); @@ -4515,7 +4146,6 @@ HG_TEST_RPC_CB(buf_map, handle) pdc_timestamp_register(pdc_buf_obj_map_timestamps, start, end); #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -4525,6 +4155,8 @@ HG_TEST_RPC_CB(buf_map, handle) // Server execute HG_TEST_RPC_CB(query_partial, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t hg_ret; hg_bulk_t bulk_handle = HG_BULK_NULL; @@ -4535,14 +4167,12 @@ HG_TEST_RPC_CB(query_partial, handle) metadata_query_transfer_in_t in; metadata_query_transfer_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); out.ret = -1; - n_meta_ptr = (uint32_t *)malloc(sizeof(uint32_t)); + n_meta_ptr = (uint32_t *)PDC_malloc(sizeof(uint32_t)); stopwatch_t server_timer; timer_start(&server_timer); @@ -4563,7 +4193,7 @@ HG_TEST_RPC_CB(query_partial, handle) n_buf = *n_meta_ptr; - buf_sizes = (size_t *)malloc((n_buf + 1) * sizeof(size_t)); + buf_sizes = (size_t *)PDC_malloc((n_buf + 1) * sizeof(size_t)); for (i = 0; i < *n_meta_ptr; i++) { buf_sizes[i] = sizeof(pdc_metadata_t); } @@ -4576,7 +4206,7 @@ HG_TEST_RPC_CB(query_partial, handle) /* size_t padding_size; */ /* /1* padding_size = (10 - *n_meta_ptr) * sizeof(pdc_metadata_t); *1/ */ /* padding_size = 5000 * sizeof(pdc_metadata_t); */ - /* padding = malloc(padding_size); */ + /* padding = PDC_malloc(padding_size); */ /* memcpy(padding, buf_ptrs[0], sizeof(pdc_metadata_t)); */ /* buf_ptrs[*n_meta_ptr] = padding; */ /* buf_sizes[*n_meta_ptr] = padding_size; */ @@ -4587,7 +4217,7 @@ HG_TEST_RPC_CB(query_partial, handle) // hg_set_output(): Output size exceeds NA expected message size pdc_metadata_t *large_serial_meta_buf; if (*n_meta_ptr > 80) { - large_serial_meta_buf = (pdc_metadata_t *)malloc(sizeof(pdc_metadata_t) * (*n_meta_ptr)); + large_serial_meta_buf = (pdc_metadata_t *)PDC_malloc(sizeof(pdc_metadata_t) * (*n_meta_ptr)); for (i = 0; i < *n_meta_ptr; i++) { memcpy(&large_serial_meta_buf[i], buf_ptrs[i], sizeof(pdc_metadata_t)); } @@ -4610,7 +4240,6 @@ HG_TEST_RPC_CB(query_partial, handle) ret_value = HG_Respond(handle, NULL, NULL, &out); done: - fflush(stdout); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4621,6 +4250,8 @@ HG_TEST_RPC_CB(query_partial, handle) // Server execute HG_TEST_RPC_CB(query_kvtag, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value; hg_return_t hg_ret; hg_bulk_t bulk_handle = HG_BULK_NULL; @@ -4630,8 +4261,6 @@ HG_TEST_RPC_CB(query_kvtag, handle) pdc_kvtag_t in; metadata_query_transfer_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -4666,7 +4295,6 @@ HG_TEST_RPC_CB(query_kvtag, handle) ret_value = HG_Respond(handle, NULL, NULL, &out); done: - fflush(stdout); HG_Free_input(handle, &in); HG_Destroy(handle); @@ -4678,9 +4306,10 @@ HG_TEST_RPC_CB(query_kvtag, handle) */ static hg_return_t - update_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct bulk_args_t *bulk_args = (struct bulk_args_t *)hg_cb_info->arg; hg_bulk_t local_bulk_handle = hg_cb_info->info.bulk.local_handle; @@ -4690,15 +4319,13 @@ update_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) void ** buf; void * buf_1d; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error in callback"); else { cnt = bulk_args->cnt; - buf = (void **)calloc(sizeof(void *), cnt); + buf = (void **)PDC_calloc(sizeof(void *), cnt); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, &buf_1d, NULL, NULL); @@ -4713,24 +4340,21 @@ update_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) // First elem is the obj id, following by cnt region infos obj_id_ptr = (uint64_t *)buf[0]; if (*obj_id_ptr <= 0) - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_SERVER[ ]: error with bulk access, obj id invalid!"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error with bulk access, obj id invalid"); if (PDC_Server_update_region_storage_meta_bulk_local((update_region_storage_meta_bulk_t **)buf, cnt) == SUCCEED) { - free(buf); - // Should not free buf_1d here - /* free(buf_1d); */ + buf = (void **)PDC_free(buf); out_struct.ret = 9999; } } // end of else done: - fflush(stdout); HG_Bulk_free(local_bulk_handle); HG_Respond(bulk_args->handle, NULL, NULL, &out_struct); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -4739,6 +4363,7 @@ update_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) // Server execute after receives the bulk_rpc from another server HG_TEST_RPC_CB(bulk_rpc, handle) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; @@ -4748,9 +4373,7 @@ HG_TEST_RPC_CB(bulk_rpc, handle) bulk_rpc_in_t in_struct; int cnt; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ bulk_args->handle = handle; @@ -4772,7 +4395,7 @@ HG_TEST_RPC_CB(bulk_rpc, handle) bulk_args->nbytes = HG_Bulk_get_size(origin_bulk_handle); bulk_args->cnt = cnt; - LOG_INFO("==PDC_SERVER: bulk_rpc_cb, nbytes %lu\n", bulk_args->nbytes); + LOG_INFO("bulk_rpc_cb, nbytes %lu\n", bulk_args->nbytes); /* Create a new block handle to read the data */ HG_Bulk_create(hg_info->hg_class, 1, NULL, (hg_size_t *)&bulk_args->nbytes, HG_BULK_READWRITE, @@ -4788,7 +4411,6 @@ HG_TEST_RPC_CB(bulk_rpc, handle) HG_Free_input(handle, &in_struct); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -4797,16 +4419,16 @@ HG_TEST_RPC_CB(bulk_rpc, handle) // data_server_read_cb(hg_handle_t handle) HG_TEST_RPC_CB(data_server_read, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value; data_server_read_in_t in; data_server_read_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); - data_server_io_info_t *io_info = (data_server_io_info_t *)malloc(sizeof(data_server_io_info_t)); + data_server_io_info_t *io_info = (data_server_io_info_t *)PDC_malloc(sizeof(data_server_io_info_t)); io_info->io_type = PDC_READ; io_info->client_id = in.client_id; @@ -4832,10 +4454,9 @@ HG_TEST_RPC_CB(data_server_read, handle) HG_Free_input(handle, &in); ret_value = HG_Destroy(handle); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_SERVER: data_server_read_cb - Error with HG_Destroy"); + PGOTO_ERROR(ret_value, "Error with HG_Destroy"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -4843,15 +4464,15 @@ HG_TEST_RPC_CB(data_server_read, handle) // data_server_write_cb(hg_handle_t handle) HG_TEST_RPC_CB(data_server_write, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value; data_server_write_in_t in; data_server_write_out_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); - data_server_io_info_t *io_info = (data_server_io_info_t *)malloc(sizeof(data_server_io_info_t)); + data_server_io_info_t *io_info = (data_server_io_info_t *)PDC_malloc(sizeof(data_server_io_info_t)); io_info->io_type = PDC_WRITE; io_info->client_id = in.client_id; @@ -4877,10 +4498,9 @@ HG_TEST_RPC_CB(data_server_write, handle) HG_Free_input(handle, &in); ret_value = HG_Destroy(handle); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_SERVER: data_server_write_cb - Error with HG_Destroy"); + PGOTO_ERROR(ret_value, "Error with HG_Destroy"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -4888,13 +4508,13 @@ HG_TEST_RPC_CB(data_server_write, handle) // data_server_read_check(hg_handle_t handle) HG_TEST_RPC_CB(data_server_read_check, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; // Decode input data_server_read_check_in_t in; data_server_read_check_out_t out; - server_read_check_out_t * read_out = calloc(1, sizeof(server_read_check_out_t)); - - FUNC_ENTER(NULL); + server_read_check_out_t * read_out = PDC_calloc(1, sizeof(server_read_check_out_t)); ret_value = HG_Get_input(handle, &in); @@ -4921,13 +4541,13 @@ HG_TEST_RPC_CB(data_server_read_check, handle) // data_server_write_check_cb(hg_handle_t handle) HG_TEST_RPC_CB(data_server_write_check, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; // Decode input data_server_write_check_in_t in; data_server_write_check_out_t *out = - (data_server_write_check_out_t *)calloc(sizeof(data_server_write_check_out_t), 1); - - FUNC_ENTER(NULL); + (data_server_write_check_out_t *)PDC_calloc(sizeof(data_server_write_check_out_t), 1); ret_value = HG_Get_input(handle, &in); @@ -4945,23 +4565,23 @@ HG_TEST_RPC_CB(data_server_write_check, handle) /* update_region_loc_cb */ HG_TEST_RPC_CB(update_region_loc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; update_region_loc_in_t in; update_region_loc_out_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); - region_list_t *input_region = (region_list_t *)malloc(sizeof(region_list_t)); + region_list_t *input_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&in.region, input_region); strcpy(input_region->storage_location, in.storage_location); input_region->offset = in.offset; if (in.has_hist == 1) { - input_region->region_hist = (pdc_histogram_t *)calloc(1, sizeof(pdc_histogram_t)); + input_region->region_hist = (pdc_histogram_t *)PDC_calloc(1, sizeof(pdc_histogram_t)); PDC_copy_hist(input_region->region_hist, &in.hist); } @@ -4970,8 +4590,7 @@ HG_TEST_RPC_CB(update_region_loc, handle) ret_value = PDC_Server_update_local_region_storage_loc(input_region, in.obj_id, in.type); if (ret_value != SUCCEED) { out.ret = -1; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_SERVER: FAILED to update region location: obj_id=%" PRIu64 "", - in.obj_id); + PGOTO_ERROR(HG_OTHER_ERROR, "Failed to update region location: obj_id=%" PRIu64 "", in.obj_id); } /* HG_Respond(handle, NULL, NULL, &out); */ @@ -4980,24 +4599,22 @@ HG_TEST_RPC_CB(update_region_loc, handle) HG_Free_input(handle, &in); HG_Destroy(handle); - free(input_region); + input_region = (region_list_t *)PDC_free(input_region); done: - fflush(stdout); FUNC_LEAVE(ret_value); } /* get_metadata_by_id_cb */ HG_TEST_RPC_CB(get_metadata_by_id, handle) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; get_metadata_by_id_in_t in; get_metadata_by_id_out_t out; pdc_metadata_t * target = NULL; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); @@ -5006,7 +4623,7 @@ HG_TEST_RPC_CB(get_metadata_by_id, handle) if (target != NULL) PDC_metadata_t_to_transfer_t(target, &out.res_meta); else { - LOG_INFO("==PDC_SERVER: no matching metadata of obj_id=%" PRIu64 "\n", in.obj_id); + LOG_INFO("No matching metadata of obj_id=%" PRIu64 "\n", in.obj_id); out.res_meta.user_id = -1; out.res_meta.obj_id = 0; out.res_meta.cont_id = 0; @@ -5029,13 +4646,13 @@ HG_TEST_RPC_CB(get_metadata_by_id, handle) /* aggregate_write_cb */ HG_TEST_RPC_CB(aggregate_write, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_aggregated_io_to_server_t in; pdc_int_ret_t out; region_list_t request_region; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); PDC_init_region_list(&request_region); @@ -5069,14 +4686,13 @@ HG_TEST_RPC_CB(aggregate_write, handle) char * remove_relative_dirs(char *workingDir, char *application) { + FUNC_ENTER(NULL); + char *ret_value = NULL; int k, levels_up = 0; char *appName = application; - char *dotdot; - FUNC_ENTER(NULL); - while ((dotdot = strstr(appName, "../")) != NULL) { levels_up++; appName = dotdot + 3; @@ -5099,6 +4715,8 @@ remove_relative_dirs(char *workingDir, char *application) char * PDC_find_in_path(char *workingDir, char *application) { + FUNC_ENTER(NULL); + struct stat fileStat; char * ret_value = NULL; char * pathVar = getenv("PATH"); @@ -5108,8 +4726,6 @@ PDC_find_in_path(char *workingDir, char *application) char *next = strchr(pathVar, colon); int offset; - FUNC_ENTER(NULL); - while (next) { *next++ = 0; sprintf(checkPath, "%s/%s", pathVar, application); @@ -5146,7 +4762,6 @@ PDC_find_in_path(char *workingDir, char *application) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5154,6 +4769,8 @@ PDC_find_in_path(char *workingDir, char *application) static hg_return_t cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; // Server executes after received request from client struct bulk_args_t * bulk_args = (struct bulk_args_t *)hg_cb_info->arg; @@ -5162,8 +4779,6 @@ cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) cont_add_del_objs_rpc_out_t out_struct; uint64_t * obj_ids, cont_id; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) @@ -5173,7 +4788,7 @@ cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) op = bulk_args->op; cont_id = bulk_args->cont_id; - obj_ids = (uint64_t *)calloc(sizeof(uint64_t), cnt); + obj_ids = (uint64_t *)PDC_calloc(sizeof(uint64_t), cnt); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&obj_ids, NULL, NULL); @@ -5182,17 +4797,17 @@ cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) if (PDC_Server_container_add_objs(cnt, obj_ids, cont_id) == SUCCEED) out_struct.ret = 1; else - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_SERVER[ ]: error updating objects to container"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error updating objects to container"); } else if (op == DEL_OBJ) { if (PDC_Server_container_del_objs(cnt, obj_ids, cont_id) == SUCCEED) out_struct.ret = 1; else - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_SERVER[ ]: error updating objects to container"); + PGOTO_ERROR(HG_OTHER_ERROR, "Error updating objects to container"); } else { out_struct.ret = 0; - PGOTO_ERROR(HG_OTHER_ERROR, "==PDC_SERVER[ ]: unsupported container operation type"); + PGOTO_ERROR(HG_OTHER_ERROR, "Unsupported container operation type"); } } // end of else @@ -5201,8 +4816,7 @@ cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) HG_Bulk_free(local_bulk_handle); HG_Respond(bulk_args->handle, NULL, NULL, &out_struct); HG_Destroy(bulk_args->handle); - free(bulk_args); - fflush(stdout); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -5210,6 +4824,8 @@ cont_add_del_objs_bulk_cb(const struct hg_cb_info *hg_cb_info) /* cont_add_del_objs_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(cont_add_del_objs_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info * hg_info = NULL; struct bulk_args_t * bulk_args = NULL; @@ -5217,9 +4833,7 @@ HG_TEST_RPC_CB(cont_add_del_objs_rpc, handle) hg_bulk_t local_bulk_handle = HG_BULK_NULL; cont_add_del_objs_rpc_in_t in_struct; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ bulk_args->handle = handle; @@ -5257,19 +4871,18 @@ HG_TEST_RPC_CB(cont_add_del_objs_rpc, handle) HG_Free_input(handle, &in_struct); done: - fflush(stdout); FUNC_LEAVE(ret_value); } /* cont_add_tags_rpc_cb*/ HG_TEST_RPC_CB(cont_add_tags_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; cont_add_tags_rpc_in_t in; pdc_int_ret_t out; - FUNC_ENTER(NULL); - // Decode input HG_Get_input(handle, &in); if (PDC_Server_container_add_tags(in.cont_id, in.tags) != SUCCEED) @@ -5289,6 +4902,8 @@ HG_TEST_RPC_CB(cont_add_tags_rpc, handle) static hg_return_t query_read_obj_name_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t ret = HG_SUCCESS; // Server executes after received request from client @@ -5300,8 +4915,6 @@ query_read_obj_name_bulk_cb(const struct hg_cb_info *hg_cb_info) query_read_obj_name_out_t out_struct; query_read_names_args_t * query_read_names_args; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) { @@ -5309,13 +4922,13 @@ query_read_obj_name_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error in callback"); } else { - query_read_names_args = (query_read_names_args_t *)calloc(1, sizeof(query_read_names_args_t)); - query_read_names_args->cnt = bulk_args->cnt; + query_read_names_args = (query_read_names_args_t *)PDC_calloc(1, sizeof(query_read_names_args_t)); + query_read_names_args->cnt = bulk_args->cnt; query_read_names_args->client_seq_id = bulk_args->client_seq_id; query_read_names_args->client_id = bulk_args->origin; query_read_names_args->is_select_all = 1; - query_read_names_args->obj_names = (char **)calloc(sizeof(char *), bulk_args->cnt); - query_read_names_args->obj_names_1d = (char *)calloc(sizeof(char), bulk_args->nbytes); + query_read_names_args->obj_names = (char **)PDC_calloc(sizeof(char *), bulk_args->cnt); + query_read_names_args->obj_names_1d = (char *)PDC_calloc(sizeof(char), bulk_args->nbytes); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&tmp_buf, NULL, NULL); @@ -5342,9 +4955,8 @@ query_read_obj_name_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(ret, "Could not free HG bulk handle"); done: - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -5352,6 +4964,8 @@ query_read_obj_name_bulk_cb(const struct hg_cb_info *hg_cb_info) /* query_read_obj_name_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(query_read_obj_name_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_return_t ret = HG_SUCCESS; const struct hg_info * hg_info = NULL; @@ -5360,9 +4974,7 @@ HG_TEST_RPC_CB(query_read_obj_name_rpc, handle) hg_bulk_t local_bulk_handle = HG_BULK_NULL; query_read_obj_name_in_t in_struct; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ bulk_args->handle = handle; @@ -5396,7 +5008,6 @@ HG_TEST_RPC_CB(query_read_obj_name_rpc, handle) HG_Free_input(handle, &in_struct); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5405,17 +5016,17 @@ HG_TEST_RPC_CB(query_read_obj_name_rpc, handle) /* storage_meta_name_query_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(storage_meta_name_query_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; pdc_int_ret_t out; storage_meta_name_query_in_t in; storage_meta_name_query_in_t *args; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); // Duplicate the structure so we can continue to use it after leaving this function - args = (storage_meta_name_query_in_t *)calloc(1, sizeof(storage_meta_name_query_in_t)); + args = (storage_meta_name_query_in_t *)PDC_calloc(1, sizeof(storage_meta_name_query_in_t)); args->obj_name = strdup(in.obj_name); args->task_id = in.task_id; args->origin_id = in.origin_id; @@ -5433,22 +5044,21 @@ HG_TEST_RPC_CB(storage_meta_name_query_rpc, handle) hg_return_t PDC_check_int_ret_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_int_ret_t output; - FUNC_ENTER(NULL); - hg_handle_t handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "== Error with HG_Get_output"); + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); if (output.ret != 1) - PGOTO_ERROR(ret_value, "== Return value [%d] is NOT expected", output.ret); + PGOTO_ERROR(ret_value, "Return value [%d] is NOT expected", output.ret); done: - fflush(stdout); HG_Free_output(handle, &output); FUNC_LEAVE(ret_value); @@ -5457,6 +5067,7 @@ PDC_check_int_ret_cb(const struct hg_cb_info *callback_info) static hg_return_t get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); hg_return_t ret_value = HG_SUCCESS; // Server executes after received request from client @@ -5472,8 +5083,6 @@ get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) region_list_t * region_list, *region_list_head = NULL; pdc_int_ret_t out_struct; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) { @@ -5482,7 +5091,7 @@ get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) } else { n_regions = bulk_args->cnt; - buf = (void *)calloc(1, bulk_args->nbytes); + buf = (void *)PDC_calloc(1, bulk_args->nbytes); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, &buf, NULL, NULL); @@ -5500,7 +5109,7 @@ get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) offset = *uint64_ptr; uint64_ptr++; region_info_ptr = (region_info_transfer_t *)uint64_ptr; - region_list = (region_list_t *)calloc(1, sizeof(region_list_t)); + region_list = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_init_region_list(region_list); PDC_region_transfer_t_to_list_t(region_info_ptr, region_list); strcpy(region_list->storage_location, file_path); @@ -5527,9 +5136,8 @@ get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(ret_value, "Could not free HG bulk handle"); done: - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -5537,6 +5145,8 @@ get_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) /* get_storage_meta_name_query_bulk_result_rpc_cb */ HG_TEST_RPC_CB(get_storage_meta_name_query_bulk_result_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; struct bulk_args_t * bulk_args = NULL; @@ -5544,9 +5154,7 @@ HG_TEST_RPC_CB(get_storage_meta_name_query_bulk_result_rpc, handle) hg_bulk_t local_bulk_handle = HG_BULK_NULL; bulk_rpc_in_t in_struct; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ @@ -5580,13 +5188,14 @@ HG_TEST_RPC_CB(get_storage_meta_name_query_bulk_result_rpc, handle) HG_Free_input(handle, &in_struct); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t notify_client_multi_io_complete_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; // Client executes after received request from server struct bulk_args_t *bulk_args = (struct bulk_args_t *)hg_cb_info->arg; @@ -5596,8 +5205,6 @@ notify_client_multi_io_complete_bulk_cb(const struct hg_cb_info *hg_cb_info) char * buf_cp; pdc_int_ret_t out_struct; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) { HG_Respond(bulk_args->handle, NULL, NULL, &out_struct); @@ -5606,7 +5213,7 @@ notify_client_multi_io_complete_bulk_cb(const struct hg_cb_info *hg_cb_info) else { n_shm = bulk_args->cnt; HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, &buf, NULL, NULL); - buf_cp = (char *)malloc(bulk_args->nbytes); + buf_cp = (char *)PDC_malloc(bulk_args->nbytes); memcpy(buf_cp, buf, bulk_args->nbytes); } @@ -5624,9 +5231,8 @@ notify_client_multi_io_complete_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(ret_value, "Could not free HG bulk handle"); done: - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -5634,6 +5240,8 @@ notify_client_multi_io_complete_bulk_cb(const struct hg_cb_info *hg_cb_info) /* notify_client_multi_io_complete_rpc_cb*/ HG_TEST_RPC_CB(notify_client_multi_io_complete_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; struct bulk_args_t * bulk_args = NULL; @@ -5641,9 +5249,7 @@ HG_TEST_RPC_CB(notify_client_multi_io_complete_rpc, handle) hg_bulk_t local_bulk_handle = HG_BULK_NULL; bulk_rpc_in_t in_struct; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); bulk_args->handle = handle; ret_value = HG_Get_input(handle, &in_struct); @@ -5668,7 +5274,6 @@ HG_TEST_RPC_CB(notify_client_multi_io_complete_rpc, handle) PGOTO_ERROR(ret_value, "Could not read bulk data"); done: - fflush(stdout); HG_Free_input(handle, &in_struct); FUNC_LEAVE(ret_value); @@ -5682,6 +5287,8 @@ PDC_add_task_to_list(pdc_task_list_t **target_list, perr_t (*cb)(), void *cb_arg void *_mutex ATTRIBUTE(unused)) #endif { + FUNC_ENTER(NULL); + int ret_value = 0; pdc_task_list_t *new_task; @@ -5690,12 +5297,10 @@ PDC_add_task_to_list(pdc_task_list_t **target_list, perr_t (*cb)(), void *cb_arg #endif - FUNC_ENTER(NULL); - if (target_list == NULL) - PGOTO_ERROR(-1, "== NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); - new_task = (pdc_task_list_t *)calloc(1, sizeof(pdc_task_list_t)); + new_task = (pdc_task_list_t *)PDC_calloc(1, sizeof(pdc_task_list_t)); new_task->cb = cb; new_task->cb_args = cb_args; @@ -5714,7 +5319,6 @@ PDC_add_task_to_list(pdc_task_list_t **target_list, perr_t (*cb)(), void *cb_arg ret_value = new_task->task_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5726,16 +5330,16 @@ PDC_del_task_from_list(pdc_task_list_t **target_list, pdc_task_list_t *del, void *_mutex ATTRIBUTE(unused)) #endif { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_task_list_t *tmp; #ifdef ENABLE_MULTITHREAD hg_thread_mutex_t *mutex = _mutex; #endif - FUNC_ENTER(NULL); - if (target_list == NULL || del == NULL) - PGOTO_ERROR(FAIL, "== NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(mutex); @@ -5747,27 +5351,22 @@ PDC_del_task_from_list(pdc_task_list_t **target_list, pdc_task_list_t *del, #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(mutex); #endif - free(tmp); + tmp = (pdc_task_list_t *)PDC_free(tmp); done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_is_valid_task_id(int id) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = SUCCEED; if (id < PDC_SERVER_TASK_INIT_VALUE || id > 10000) - PGOTO_ERROR(-1, "== id %d is invalid!", id); - - ret_value = 1; + PGOTO_ERROR(FAIL, "id %d is invalid", id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5779,16 +5378,16 @@ PDC_find_task_from_list(pdc_task_list_t **target_list, int id, void *_mutex ATTRIBUTE(unused)) #endif { + FUNC_ENTER(NULL); + pdc_task_list_t *ret_value = NULL; pdc_task_list_t *tmp; #ifdef ENABLE_MULTITHREAD hg_thread_mutex_t *mutex = _mutex; #endif - FUNC_ENTER(NULL); - if (PDC_is_valid_task_id(id) != 1) - PGOTO_ERROR(NULL, "== NULL input!"); + PGOTO_ERROR(NULL, "NULL input"); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(mutex); @@ -5806,20 +5405,19 @@ PDC_find_task_from_list(pdc_task_list_t **target_list, int id, #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_del_task_from_list_id(pdc_task_list_t **target_list, int id, hg_thread_mutex_t *mutex) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_task_list_t *tmp; - FUNC_ENTER(NULL); - if (target_list == NULL || PDC_is_valid_task_id(id) != 1) - PGOTO_ERROR(FAIL, "== NULL input!"); + PGOTO_ERROR(FAIL, "NULL input"); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(mutex); @@ -5832,39 +5430,34 @@ PDC_del_task_from_list_id(pdc_task_list_t **target_list, int id, hg_thread_mutex hg_thread_mutex_unlock(mutex); #endif - free(tmp); + tmp = (pdc_task_list_t *)PDC_free(tmp); done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_is_valid_obj_id(uint64_t id) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = SUCCEED; if (id < PDC_SERVER_ID_INTERVEL) - PGOTO_ERROR(-1, "== id %" PRIu64 " is invalid!", id); - - ret_value = 1; + PGOTO_ERROR(FAIL, "id %" PRIu64 " is invalid", id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } /* server_checkpoint_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(server_checkpoint_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_int_send_t in; pdc_int_ret_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); out.ret = 1; @@ -5879,16 +5472,16 @@ HG_TEST_RPC_CB(server_checkpoint_rpc, handle) /* send_shm_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_shm, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; send_shm_in_t in; pdc_int_ret_t out; pdc_shm_info_t *shm_info; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); - shm_info = (pdc_shm_info_t *)calloc(sizeof(pdc_shm_info_t), 1); + shm_info = (pdc_shm_info_t *)PDC_calloc(sizeof(pdc_shm_info_t), 1); shm_info->client_id = in.client_id; shm_info->size = in.size; strcpy(shm_info->shm_addr, in.shm_addr); @@ -5905,6 +5498,8 @@ HG_TEST_RPC_CB(send_shm, handle) static hg_return_t query_read_obj_name_client_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; // Server executes after received request from client struct bulk_args_t * bulk_args = (struct bulk_args_t *)hg_cb_info->arg; @@ -5915,8 +5510,6 @@ query_read_obj_name_client_bulk_cb(const struct hg_cb_info *hg_cb_info) query_read_obj_name_out_t out_struct; query_read_names_args_t * query_read_names_args; - FUNC_ENTER(NULL); - out_struct.ret = 0; if (hg_cb_info->ret != HG_SUCCESS) { @@ -5924,13 +5517,13 @@ query_read_obj_name_client_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error in callback"); } else { - query_read_names_args = (query_read_names_args_t *)calloc(1, sizeof(query_read_names_args_t)); - query_read_names_args->cnt = bulk_args->cnt; + query_read_names_args = (query_read_names_args_t *)PDC_calloc(1, sizeof(query_read_names_args_t)); + query_read_names_args->cnt = bulk_args->cnt; query_read_names_args->client_seq_id = bulk_args->client_seq_id; query_read_names_args->client_id = bulk_args->origin; query_read_names_args->is_select_all = 1; - query_read_names_args->obj_names = (char **)calloc(sizeof(char *), bulk_args->cnt); - query_read_names_args->obj_names_1d = (char *)calloc(sizeof(char), bulk_args->nbytes); + query_read_names_args->obj_names = (char **)PDC_calloc(sizeof(char *), bulk_args->cnt); + query_read_names_args->obj_names_1d = (char *)PDC_calloc(sizeof(char), bulk_args->nbytes); HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&tmp_buf, NULL, NULL); @@ -5958,9 +5551,8 @@ query_read_obj_name_client_bulk_cb(const struct hg_cb_info *hg_cb_info) PGOTO_ERROR(ret_value, "Could not free HG bulk handle"); done: - fflush(stdout); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -5968,6 +5560,8 @@ query_read_obj_name_client_bulk_cb(const struct hg_cb_info *hg_cb_info) /* query_read_obj_name_client_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(query_read_obj_name_client_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info * hg_info = NULL; struct bulk_args_t * bulk_args = NULL; @@ -5975,9 +5569,7 @@ HG_TEST_RPC_CB(query_read_obj_name_client_rpc, handle) hg_bulk_t local_bulk_handle = HG_BULK_NULL; query_read_obj_name_in_t in_struct; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ bulk_args->handle = handle; @@ -6010,7 +5602,6 @@ HG_TEST_RPC_CB(query_read_obj_name_client_rpc, handle) HG_Free_input(handle, &in_struct); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -6019,27 +5610,27 @@ HG_TEST_RPC_CB(query_read_obj_name_client_rpc, handle) static hg_return_t send_client_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct bulk_args_t * bulk_args = (struct bulk_args_t *)hg_cb_info->arg; hg_bulk_t local_bulk_handle = hg_cb_info->info.bulk.local_handle; void * buf = NULL, *buf_cp = NULL; process_bulk_storage_meta_args_t *process_args = NULL; - FUNC_ENTER(NULL); - if (hg_cb_info->ret != HG_SUCCESS) PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error in callback"); else { ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READ_ONLY, 1, &buf, NULL, NULL); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[x]: Error with bulk access"); + PGOTO_ERROR(ret_value, "Error with bulk access"); - buf_cp = malloc(bulk_args->nbytes); + buf_cp = PDC_malloc(bulk_args->nbytes); memcpy(buf_cp, buf, bulk_args->nbytes); process_args = - (process_bulk_storage_meta_args_t *)calloc(sizeof(process_bulk_storage_meta_args_t), 1); + (process_bulk_storage_meta_args_t *)PDC_calloc(sizeof(process_bulk_storage_meta_args_t), 1); process_args->origin_id = bulk_args->origin; process_args->n_storage_meta = bulk_args->cnt; process_args->seq_id = *((int *)buf_cp); @@ -6050,11 +5641,10 @@ send_client_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) PDC_Client_recv_bulk_storage_meta(process_args); done: - fflush(stdout); /* Free bulk handle */ HG_Bulk_free(local_bulk_handle); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -6063,6 +5653,8 @@ send_client_storage_meta_bulk_cb(const struct hg_cb_info *hg_cb_info) /* send_client_storage_meta_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_client_storage_meta_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; hg_bulk_t origin_bulk_handle = HG_BULK_NULL; @@ -6072,15 +5664,10 @@ HG_TEST_RPC_CB(send_client_storage_meta_rpc, handle) pdc_int_ret_t out_struct; int cnt; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); - - /* Keep handle to pass to callback */ + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); bulk_args->handle = handle; /* Get info from handle */ - hg_info = HG_Get_info(handle); /* Get input parameters and data */ @@ -6117,29 +5704,28 @@ HG_TEST_RPC_CB(send_client_storage_meta_rpc, handle) PGOTO_ERROR(ret_value, "Could not respond"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t server_recv_shm_bulk_cb(const struct hg_cb_info *hg_cb_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; struct bulk_args_t *bulk_args = (struct bulk_args_t *)hg_cb_info->arg; hg_bulk_t local_bulk_handle = hg_cb_info->info.bulk.local_handle; void * buf = NULL, *buf_cp = NULL; - FUNC_ENTER(NULL); - if (hg_cb_info->ret != HG_SUCCESS) PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error in callback"); else { ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READ_ONLY, 1, &buf, NULL, NULL); if (ret_value != HG_SUCCESS) - PGOTO_ERROR(ret_value, "==PDC_CLIENT[x]: Error with bulk access"); + PGOTO_ERROR(ret_value, "Error with bulk access"); - buf_cp = malloc(bulk_args->nbytes); + buf_cp = PDC_malloc(bulk_args->nbytes); memcpy(buf_cp, buf, bulk_args->nbytes); // TODO now we have all storage info (region, shm_addr, offset, etc.) of data read by client @@ -6148,11 +5734,10 @@ server_recv_shm_bulk_cb(const struct hg_cb_info *hg_cb_info) } // end else done: - fflush(stdout); /* Free bulk handle */ HG_Bulk_free(local_bulk_handle); HG_Destroy(bulk_args->handle); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); FUNC_LEAVE(ret_value); } @@ -6160,6 +5745,8 @@ server_recv_shm_bulk_cb(const struct hg_cb_info *hg_cb_info) /* send_shm_bulk_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_shm_bulk_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; hg_bulk_t origin_bulk_handle = HG_BULK_NULL; @@ -6169,9 +5756,7 @@ HG_TEST_RPC_CB(send_shm_bulk_rpc, handle) pdc_int_ret_t out_struct; int cnt; - FUNC_ENTER(NULL); - - bulk_args = (struct bulk_args_t *)malloc(sizeof(struct bulk_args_t)); + bulk_args = (struct bulk_args_t *)PDC_malloc(sizeof(struct bulk_args_t)); /* Keep handle to pass to callback */ bulk_args->handle = handle; @@ -6192,7 +5777,7 @@ HG_TEST_RPC_CB(send_shm_bulk_rpc, handle) bulk_args->nbytes = HG_Bulk_get_size(origin_bulk_handle); bulk_args->cnt = cnt; - LOG_ERROR("==PDC_SERVER: send_bulk_rpc_cb, nbytes %lu\n", bulk_args->nbytes); + LOG_ERROR("send_bulk_rpc_cb, nbytes %lu\n", bulk_args->nbytes); /* Create a new bulk handle to read the data */ HG_Bulk_create(hg_info->hg_class, 1, NULL, (hg_size_t *)&bulk_args->nbytes, HG_BULK_READWRITE, @@ -6214,33 +5799,32 @@ HG_TEST_RPC_CB(send_shm_bulk_rpc, handle) PGOTO_ERROR(ret_value, "Could not respond"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } /* send_data_query_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_data_query_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_query_xfer_t in, *query_xfer; pdc_int_ret_t out; size_t size; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); // Copy the received data size = sizeof(pdc_query_xfer_t); - query_xfer = (pdc_query_xfer_t *)malloc(size); + query_xfer = (pdc_query_xfer_t *)PDC_malloc(size); memcpy(query_xfer, &in, size); size = sizeof(int) * query_xfer->n_combine_ops; - query_xfer->combine_ops = (int *)malloc(size); + query_xfer->combine_ops = (int *)PDC_malloc(size); memcpy(query_xfer->combine_ops, in.combine_ops, size); size = sizeof(pdc_query_constraint_t) * query_xfer->n_constraints; - query_xfer->constraints = (pdc_query_constraint_t *)malloc(size); + query_xfer->constraints = (pdc_query_constraint_t *)PDC_malloc(size); memcpy(query_xfer->constraints, in.constraints, size); out.ret = 1; @@ -6255,13 +5839,13 @@ HG_TEST_RPC_CB(send_data_query_rpc, handle) /* send_nhits_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_nhits, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; send_nhits_t in, *in_cp; pdc_int_ret_t out; - FUNC_ENTER(NULL); - - in_cp = (send_nhits_t *)malloc(sizeof(send_nhits_t)); + in_cp = (send_nhits_t *)PDC_malloc(sizeof(send_nhits_t)); HG_Get_input(handle, &in); @@ -6280,15 +5864,15 @@ HG_TEST_RPC_CB(send_nhits, handle) /* send_read_sel_obj_id_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_read_sel_obj_id_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; get_sel_data_rpc_in_t in, *in_cp; pdc_int_ret_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); - in_cp = (get_sel_data_rpc_in_t *)malloc(sizeof(get_sel_data_rpc_in_t)); + in_cp = (get_sel_data_rpc_in_t *)PDC_malloc(sizeof(get_sel_data_rpc_in_t)); memcpy(in_cp, &in, sizeof(get_sel_data_rpc_in_t)); out.ret = 1; @@ -6303,15 +5887,15 @@ HG_TEST_RPC_CB(send_read_sel_obj_id_rpc, handle) /* get_sel_data_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(get_sel_data_rpc, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; get_sel_data_rpc_in_t in, *in_cp; pdc_int_ret_t out; - FUNC_ENTER(NULL); - HG_Get_input(handle, &in); - in_cp = (get_sel_data_rpc_in_t *)malloc(sizeof(get_sel_data_rpc_in_t)); + in_cp = (get_sel_data_rpc_in_t *)PDC_malloc(sizeof(get_sel_data_rpc_in_t)); memcpy(in_cp, &in, sizeof(get_sel_data_rpc_in_t)); out.ret = 1; @@ -6326,8 +5910,9 @@ HG_TEST_RPC_CB(get_sel_data_rpc, handle) // Generic bulk transfer /* send_bulk_rpc_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(send_bulk_rpc, handle) - { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; const struct hg_info *hg_info = NULL; hg_bulk_t origin_bulk_handle = HG_BULK_NULL; @@ -6337,13 +5922,11 @@ HG_TEST_RPC_CB(send_bulk_rpc, handle) hg_return_t (*func_ptr)(const struct hg_cb_info *hg_cb_info); struct hg_cb_info callback_info; - FUNC_ENTER(NULL); - ret_value = HG_Get_input(handle, &in_struct); if (ret_value != HG_SUCCESS) PGOTO_ERROR(ret_value, "Could not get input"); - bulk_arg = (struct bulk_args_t *)calloc(1, sizeof(struct bulk_args_t)); + bulk_arg = (struct bulk_args_t *)PDC_calloc(1, sizeof(struct bulk_args_t)); bulk_arg->cnt = in_struct.cnt; bulk_arg->total = in_struct.total; bulk_arg->origin = in_struct.origin; @@ -6370,7 +5953,7 @@ HG_TEST_RPC_CB(send_bulk_rpc, handle) func_ptr = &PDC_recv_query_metadata_bulk; } else - PGOTO_ERROR(HG_OTHER_ERROR, "== Invalid bulk op ID!"); + PGOTO_ERROR(HG_OTHER_ERROR, "Invalid bulk op ID"); if (in_struct.cnt > 0) { bulk_arg->nbytes = HG_Bulk_get_size(origin_bulk_handle); @@ -6391,7 +5974,6 @@ HG_TEST_RPC_CB(send_bulk_rpc, handle) } done: - fflush(stdout); HG_Free_input(handle, &in_struct); FUNC_LEAVE(ret_value); @@ -6401,11 +5983,12 @@ HG_TEST_RPC_CB(send_bulk_rpc, handle) /* dart_get_server_info_cb(hg_handle_t handle) */ HG_TEST_RPC_CB(dart_get_server_info, handle) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; dart_get_server_info_in_t in; dart_get_server_info_out_t out; - FUNC_ENTER(NULL); // Extract input from handle HG_Get_input(handle, &in); // retrieve server info from desigated server @@ -6425,8 +6008,10 @@ HG_TEST_RPC_CB(dart_get_server_info, handle) // dart_perform_one_server_cb(hg_handle_t handle) HG_TEST_RPC_CB(dart_perform_one_server, handle) { - hg_return_t ret = HG_SUCCESS; - hg_return_t hg_ret = HG_SUCCESS; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; + hg_return_t hg_ret = HG_SUCCESS; dart_perform_one_server_in_t in; dart_perform_one_server_out_t out; @@ -6437,12 +6022,11 @@ HG_TEST_RPC_CB(dart_perform_one_server, handle) size_t * buf_sizes; uint32_t i; - FUNC_ENTER(NULL); // Extract input from handle HG_Get_input(handle, &in); - n_obj_ids_ptr = (uint64_t *)calloc(1, sizeof(uint64_t)); - buf_ptrs = (uint64_t **)calloc(1, sizeof(uint64_t *)); + n_obj_ids_ptr = (uint64_t *)PDC_calloc(1, sizeof(uint64_t)); + buf_ptrs = (uint64_t **)PDC_calloc(1, sizeof(uint64_t *)); stopwatch_t server_timer; timer_start(&server_timer); @@ -6458,12 +6042,11 @@ HG_TEST_RPC_CB(dart_perform_one_server, handle) if (*n_obj_ids_ptr == 0) { out.bulk_handle = HG_BULK_NULL; out.ret = 0; - ret = HG_Respond(handle, NULL, NULL, &out); - goto done; + PGOTO_DONE(HG_Respond(handle, NULL, NULL, &out)); } n_buf = 1; - buf_sizes = (size_t *)calloc(n_buf, sizeof(size_t)); + buf_sizes = (size_t *)PDC_calloc(n_buf, sizeof(size_t)); buf_sizes[0] = sizeof(uint64_t) * (*n_obj_ids_ptr); // Create bulk handle @@ -6482,7 +6065,7 @@ HG_TEST_RPC_CB(dart_perform_one_server, handle) // TODO: To confirm how we can know the bulk data has been sent to client completely // Send bulk handle to client - ret = HG_Respond(handle, NULL, NULL, &out); + ret_value = HG_Respond(handle, NULL, NULL, &out); done: // Free input @@ -6490,7 +6073,7 @@ HG_TEST_RPC_CB(dart_perform_one_server, handle) // Free handle HG_Destroy(handle); - FUNC_LEAVE(ret); + FUNC_LEAVE(ret_value); } HG_TEST_THREAD_CB(server_lookup_client) @@ -6646,10 +6229,10 @@ PDC_FUNC_DECLARE_REGISTER(dart_perform_one_server) static int is_overlap_1D(uint64_t xmin1, uint64_t xmax1, uint64_t xmin2, uint64_t xmax2) { - int ret_value = -1; - FUNC_ENTER(NULL); + int ret_value = -1; + if (xmax1 >= xmin2 && xmax2 >= xmin1) { ret_value = 1; } @@ -6675,10 +6258,10 @@ static int is_overlap_2D(uint64_t xmin1, uint64_t xmax1, uint64_t ymin1, uint64_t ymax1, uint64_t xmin2, uint64_t xmax2, uint64_t ymin2, uint64_t ymax2) { - int ret_value = -1; - FUNC_ENTER(NULL); + int ret_value = -1; + /* if (is_overlap_1D(box1.x, box2.x) == 1 && is_overlap_1D(box1.y, box2.y) == 1) { */ if (is_overlap_1D(xmin1, xmax1, xmin2, xmax2) == 1 && is_overlap_1D(ymin1, ymax1, ymin2, ymax2) == 1) { ret_value = 1; @@ -6710,10 +6293,9 @@ static int is_overlap_3D(uint64_t xmin1, uint64_t xmax1, uint64_t ymin1, uint64_t ymax1, uint64_t zmin1, uint64_t zmax1, uint64_t xmin2, uint64_t xmax2, uint64_t ymin2, uint64_t ymax2, uint64_t zmin2, uint64_t zmax2) { - int ret_value = -1; - FUNC_ENTER(NULL); + int ret_value = -1; /* if (is_overlap_1D(box1.x, box2.x) == 1 && is_overlap_1D(box1.y, box2.y) == 1) { */ if (is_overlap_1D(xmin1, xmax1, xmin2, xmax2) == 1 && is_overlap_1D(ymin1, ymax1, ymin2, ymax2) == 1 && is_overlap_1D(zmin1, zmax1, zmin2, zmax2) == 1) { @@ -6726,18 +6308,18 @@ is_overlap_3D(uint64_t xmin1, uint64_t xmax1, uint64_t ymin1, uint64_t ymax1, ui int PDC_is_contiguous_region_overlap(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + int ret_value = 1; uint64_t xmin1 = 0, xmin2 = 0, xmax1 = 0, xmax2 = 0; uint64_t ymin1 = 0, ymin2 = 0, ymax1 = 0, ymax2 = 0; uint64_t zmin1 = 0, zmin2 = 0, zmax1 = 0, zmax2 = 0; - FUNC_ENTER(NULL); - if (a == NULL || b == NULL) - PGOTO_ERROR(-1, "==PDC_SERVER: PDC_is_contiguous_region_overlap() - passed NULL value!"); + PGOTO_ERROR(-1, "Passed NULL value"); if (a->ndim != b->ndim || a->ndim <= 0 || b->ndim <= 0) - PGOTO_ERROR(-1, "==PDC_SERVER: PDC_is_contiguous_region_overlap() - dimension does not match"); + PGOTO_ERROR(-1, "Dimension does not match"); if (a->ndim >= 1) { xmin1 = a->start[0]; @@ -6767,7 +6349,6 @@ PDC_is_contiguous_region_overlap(region_list_t *a, region_list_t *b) is_overlap_3D(xmin1, xmax1, ymin1, ymax1, zmin1, zmax1, xmin2, xmax2, ymin2, ymax2, zmin2, zmax2); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -6775,12 +6356,12 @@ int PDC_is_contiguous_start_count_overlap(uint32_t ndim, uint64_t *a_start, uint64_t *a_count, uint64_t *b_start, uint64_t *b_count) { - int ret_value = 1; - FUNC_ENTER(NULL); + int ret_value = 1; + if (ndim > DIM_MAX || NULL == a_start || NULL == a_count || NULL == b_start || NULL == b_count) - PGOTO_ERROR(-1, "PDC_is_contiguous_start_count_overlap: invalid input!"); + PGOTO_ERROR(-1, "Invalid input"); uint64_t xmin1 = 0, xmin2 = 0, xmax1 = 0, xmax2 = 0; uint64_t ymin1 = 0, ymin2 = 0, ymax1 = 0, ymax2 = 0; @@ -6815,7 +6396,6 @@ PDC_is_contiguous_start_count_overlap(uint32_t ndim, uint64_t *a_start, uint64_t is_overlap_3D(xmin1, xmax1, ymin1, ymax1, zmin1, zmax1, xmin2, xmax2, ymin2, ymax2, zmin2, zmax2); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -6826,18 +6406,18 @@ PDC_get_overlap_start_count(uint32_t ndim, uint64_t *start_a, uint64_t *count_a, uint64_t *start_b, uint64_t *count_b, uint64_t *overlap_start, uint64_t *overlap_count) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t i; - FUNC_ENTER(NULL); - if (NULL == start_a || NULL == count_a || NULL == start_b || NULL == count_b || NULL == overlap_start || NULL == overlap_count) - PGOTO_ERROR(FAIL, "get_overlap NULL input!"); + PGOTO_ERROR(FAIL, "get_overlap NULL input"); // Check if they are truly overlapping regions if (PDC_is_contiguous_start_count_overlap(ndim, start_a, count_a, start_b, count_b) != 1) { - LOG_INFO("non-overlap regions!\n"); + LOG_INFO("non-overlap regions\n"); for (i = 0; i < ndim; i++) { LOG_INFO("\t\tdim%" PRIu64 " - start_a: %" PRIu64 " count_a: %" PRIu64 ", " "\t\tstart_b:%" PRIu64 " count_b:%" PRIu64 "\n", @@ -6864,14 +6444,14 @@ PDC_get_overlap_start_count(uint32_t ndim, uint64_t *start_a, uint64_t *count_a, perr_t PDC_create_shm_segment_ind(uint64_t size, char *shm_addr, void **buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int retry; int shm_fd = -1; - FUNC_ENTER(NULL); - if (shm_addr == NULL) - PGOTO_ERROR(FAIL, "== Shared memory addr is NULL!"); + PGOTO_ERROR(FAIL, "Shared memory addr is NULL"); /* create the shared memory segment as if it was a file */ retry = 0; @@ -6885,35 +6465,34 @@ PDC_create_shm_segment_ind(uint64_t size, char *shm_addr, void **buf) } if (shm_fd == -1) - PGOTO_ERROR(FAIL, "== Shared memory create failed"); + PGOTO_ERROR(FAIL, "Shared memory create failed"); /* configure the size of the shared memory segment */ if (ftruncate(shm_fd, size) != 0) { - PGOTO_ERROR(FAIL, "== Truncate memory failed"); + PGOTO_ERROR(FAIL, "Truncate memory failed"); } /* map the shared memory segment to the address space of the process */ *buf = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); if (*buf == MAP_FAILED) - PGOTO_ERROR(FAIL, "== Shared memory mmap failed [%s]\n", shm_addr); + PGOTO_ERROR(FAIL, "Shared memory mmap failed [%s]", shm_addr); // close and shm_unlink? done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_create_shm_segment(region_list_t *region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t i = 0; int retry; - FUNC_ENTER(NULL); - if (region->shm_addr[0] == 0) - PGOTO_ERROR(FAIL, "== Shared memory addr is NULL!"); + PGOTO_ERROR(FAIL, "Shared memory addr is NULL"); /* create the shared memory segment as if it was a file */ retry = 0; @@ -6925,7 +6504,7 @@ PDC_create_shm_segment(region_list_t *region) } if (region->shm_fd == -1) - PGOTO_ERROR(FAIL, "== Shared memory create failed"); + PGOTO_ERROR(FAIL, "Shared memory create failed"); // Calculate the actual size for reading the data if needed if (region->data_size == 0) { @@ -6936,27 +6515,26 @@ PDC_create_shm_segment(region_list_t *region) /* configure the size of the shared memory segment */ if (ftruncate(region->shm_fd, region->data_size) != 0) { - PGOTO_ERROR(FAIL, "== Truncate memory failed"); + PGOTO_ERROR(FAIL, "Truncate memory failed"); } /* map the shared memory segment to the address space of the process */ region->buf = mmap(0, region->data_size, PROT_READ | PROT_WRITE, MAP_SHARED, region->shm_fd, 0); if (region->buf == MAP_FAILED) - PGOTO_ERROR(FAIL, "== Shared memory mmap failed"); + PGOTO_ERROR(FAIL, "Shared memory mmap failed"); // close and shm_unlink? done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_kvtag_dup(pdc_kvtag_t *from, pdc_kvtag_t **to) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (from == NULL || to == NULL) PGOTO_DONE(FAIL); @@ -6975,14 +6553,14 @@ PDC_kvtag_dup(pdc_kvtag_t *from, pdc_kvtag_t **to) perr_t PDC_free_kvtag(pdc_kvtag_t **kvtag) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - free((void *)(*kvtag)->name); - free((void *)(*kvtag)->value); - free((void *)*kvtag); - *kvtag = NULL; + perr_t ret_value = SUCCEED; + + (*kvtag)->name = (char *)PDC_free((*kvtag)->name); + (*kvtag)->value = (void *)PDC_free((*kvtag)->value); + *kvtag = (pdc_kvtag_t *)PDC_free(*kvtag); + *kvtag = NULL; FUNC_LEAVE(ret_value); } @@ -6992,10 +6570,10 @@ PDC_free_kvtag(pdc_kvtag_t **kvtag) int PDC_query_get_nnode(pdc_query_t *query) { - int ret_value = 0; - FUNC_ENTER(NULL); + int ret_value = 0; + if (NULL == query) ret_value = 0; else @@ -7020,7 +6598,7 @@ PDC_query_get_nleaf(pdc_query_t *query, int *n) PDC_query_get_nleaf(query->right, n); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void @@ -7046,14 +6624,13 @@ serialize(pdc_query_t *root, int *combine_ops, int *cnt, pdc_query_constraint_t serialize(root->right, combine_ops, cnt, constraints, constraint_cnt); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void deSerialize(pdc_query_t **root, pdc_query_constraint_t *constraints, int *constraint_idx, int *combine_ops, int *order_idx) { - FUNC_ENTER(NULL); if (combine_ops[*order_idx] == -1) { @@ -7061,12 +6638,12 @@ deSerialize(pdc_query_t **root, pdc_query_constraint_t *constraints, int *constr PGOTO_DONE_VOID; } - *root = (pdc_query_t *)calloc(1, sizeof(pdc_query_t)); + *root = (pdc_query_t *)PDC_calloc(1, sizeof(pdc_query_t)); (*root)->combine_op = combine_ops[*order_idx]; if (combine_ops[*order_idx] == 0) { // Current node is leaf - (*root)->constraint = (pdc_query_constraint_t *)calloc(1, sizeof(pdc_query_constraint_t)); + (*root)->constraint = (pdc_query_constraint_t *)PDC_calloc(1, sizeof(pdc_query_constraint_t)); memcpy((*root)->constraint, &constraints[*constraint_idx], sizeof(pdc_query_constraint_t)); (*constraint_idx)++; } @@ -7077,7 +6654,7 @@ deSerialize(pdc_query_t **root, pdc_query_constraint_t *constraints, int *constr deSerialize(&(*root)->right, constraints, constraint_idx, combine_ops, order_idx); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } char pdcquery_combine_op_char_g[3][5] = {"NONE", "AND", "OR"}; @@ -7144,16 +6721,16 @@ print_query(pdc_query_t *query) LOG_JUST_PRINT(")"); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDCquery_print(pdc_query_t *query) { - uint32_t i; - FUNC_ENTER(NULL); + uint32_t i; + LOG_JUST_PRINT("Value selection: \n"); print_query(query); LOG_JUST_PRINT("\n"); @@ -7168,33 +6745,32 @@ PDCquery_print(pdc_query_t *query) } LOG_JUST_PRINT("\n"); - fflush(stdout); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } pdc_query_xfer_t * PDC_serialize_query(pdc_query_t *query) { + FUNC_ENTER(NULL); + pdc_query_xfer_t *ret_value = NULL; int nnode, nleaf, ops_cnt, constraint_cnt; pdc_query_xfer_t *query_xfer; - FUNC_ENTER(NULL); - if (NULL == query) PGOTO_ERROR(NULL, "NULL input"); - query_xfer = (pdc_query_xfer_t *)calloc(1, sizeof(pdc_query_xfer_t)); + query_xfer = (pdc_query_xfer_t *)PDC_calloc(1, sizeof(pdc_query_xfer_t)); nnode = PDC_query_get_nnode(query); nleaf = 0; PDC_query_get_nleaf(query, &nleaf); query_xfer->n_constraints = nleaf; - query_xfer->constraints = (pdc_query_constraint_t *)calloc(nleaf, sizeof(pdc_query_constraint_t)); + query_xfer->constraints = (pdc_query_constraint_t *)PDC_calloc(nleaf, sizeof(pdc_query_constraint_t)); query_xfer->n_combine_ops = nnode * 2 + 1; - query_xfer->combine_ops = (int *)calloc(nnode * 2 + 1, sizeof(int)); + query_xfer->combine_ops = (int *)PDC_calloc(nnode * 2 + 1, sizeof(int)); ops_cnt = constraint_cnt = 0; serialize(query, query_xfer->combine_ops, &ops_cnt, query_xfer->constraints, &constraint_cnt); @@ -7203,33 +6779,29 @@ PDC_serialize_query(pdc_query_t *query) PDC_region_info_t_to_transfer(query->region, &query_xfer->region); ret_value = query_xfer; - done: - - fflush(stdout); FUNC_LEAVE(ret_value); } pdc_query_t * PDC_deserialize_query(pdc_query_xfer_t *query_xfer) { + FUNC_ENTER(NULL); + pdc_query_t *ret_value = NULL; int constraint_idx = 0, order_idx = 0; pdc_query_t *new_root; - FUNC_ENTER(NULL); - if (NULL == query_xfer) PGOTO_ERROR(NULL, "NULL input"); deSerialize(&new_root, query_xfer->constraints, &constraint_idx, query_xfer->combine_ops, &order_idx); - new_root->region_constraint = (region_list_t *)malloc(sizeof(region_list_t)); + new_root->region_constraint = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&query_xfer->region, new_root->region_constraint); ret_value = new_root; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -7241,11 +6813,11 @@ PDCquery_free(pdc_query_t *query) if (NULL == query) PGOTO_DONE_VOID; if (query->constraint) - free(query->constraint); - free(query); + query->constraint = (pdc_query_constraint_t *)PDC_free(query->constraint); + query = (pdc_query_t *)PDC_free(query); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void @@ -7257,14 +6829,14 @@ PDCquery_free_all(pdc_query_t *root) PGOTO_DONE_VOID; if (root->sel && root->sel->coords_alloc > 0 && root->sel->coords != NULL) { - free(root->sel->coords); + root->sel->coords = (uint64_t *)PDC_free(root->sel->coords); root->sel->coords_alloc = 0; root->sel->coords = NULL; } if (root->left == NULL && root->right == NULL) { if (root->constraint) { - free(root->constraint); + root->constraint = (pdc_query_constraint_t *)PDC_free(root->constraint); root->constraint = NULL; } } @@ -7272,25 +6844,24 @@ PDCquery_free_all(pdc_query_t *root) PDCquery_free_all(root->left); PDCquery_free_all(root->right); - free(root); + root = (pdc_query_t *)PDC_free(root); done: - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDC_query_xfer_free(pdc_query_xfer_t *query_xfer) { - FUNC_ENTER(NULL); if (NULL != query_xfer) { - free(query_xfer->combine_ops); - free(query_xfer->constraints); - free(query_xfer); + query_xfer->combine_ops = (int *)PDC_free(query_xfer->combine_ops); + query_xfer->constraints = (pdc_query_constraint_t *)PDC_free(query_xfer->constraints); + query_xfer = (pdc_query_xfer_t *)PDC_free(query_xfer); } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void @@ -7300,24 +6871,23 @@ PDCregion_free(struct pdc_region_info *region) if (region) { if (region->offset) - free(region->offset); + region->offset = (uint64_t *)PDC_free(region->offset); if (region->size) - free(region->size); + region->size = (uint64_t *)PDC_free(region->size); } - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDCselection_print(pdc_selection_t *sel) { - uint64_t i; - FUNC_ENTER(NULL); - LOG_JUST_PRINT("== %" PRIu64 " hits, allocated %" PRIu64 " coordinates!\n", sel->nhits, - sel->coords_alloc); - LOG_JUST_PRINT("== Coordinates:\n"); + uint64_t i; + + LOG_JUST_PRINT("%" PRIu64 " hits, allocated %" PRIu64 " coordinates\n", sel->nhits, sel->coords_alloc); + LOG_JUST_PRINT("Coordinates:\n"); if (sel->nhits > 10) { for (i = 0; i < 10; i++) @@ -7332,24 +6902,23 @@ PDCselection_print(pdc_selection_t *sel) } LOG_JUST_PRINT("\n\n"); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } void PDCselection_print_all(pdc_selection_t *sel) { - uint64_t i; - FUNC_ENTER(NULL); - LOG_JUST_PRINT("== %" PRIu64 " hits, allocated %" PRIu64 " coordinates!\n", sel->nhits, - sel->coords_alloc); - LOG_JUST_PRINT("== Coordinates:\n"); + uint64_t i; + + LOG_JUST_PRINT("%" PRIu64 " hits, allocated %" PRIu64 " coordinates\n", sel->nhits, sel->coords_alloc); + LOG_JUST_PRINT("Coordinates:\n"); for (i = 0; i < sel->nhits; i++) LOG_JUST_PRINT(" ,%" PRIu64 "", sel->coords[i]); LOG_JUST_PRINT("\n\n"); - FUNC_LEAVE_VOID; + FUNC_LEAVE_VOID(); } diff --git a/src/server/pdc_server.c b/src/server/pdc_server.c index 9247005f4..ffb967dbd 100644 --- a/src/server/pdc_server.c +++ b/src/server/pdc_server.c @@ -58,6 +58,7 @@ #include "pdc_server_region_cache.h" #include "pdc_server_region_transfer_metadata_query.h" #include "pdc_logger.h" +#include "pdc_malloc.h" #ifdef PDC_HAS_CRAY_DRC #include @@ -179,15 +180,11 @@ extern data_server_region_t *dataserver_region_g; perr_t PDC_Server_remote_server_info_init(pdc_remote_server_info_t *info) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - if (info == NULL) { - ret_value = FAIL; - LOG_ERROR("==PDC_SERVER: NULL info, unable to init pdc_remote_server_info_t!\n"); - goto done; - } + if (info == NULL) + PGOTO_ERROR(FAIL, "info was NULL, unable to init pdc_remote_server_info_t"); info->addr_string = NULL; info->addr_valid = 0; @@ -207,27 +204,24 @@ PDC_Server_remote_server_info_init(pdc_remote_server_info_t *info) static perr_t PDC_Server_destroy_client_info(pdc_client_info_t *info) { + FUNC_ENTER(NULL); + int i; perr_t ret_value = SUCCEED; hg_return_t hg_ret; - FUNC_ENTER(NULL); - // Destroy addr and handle for (i = 0; i < pdc_client_num_g; i++) { if (info[i].addr_valid == 1) { hg_ret = HG_Addr_free(hg_class_g, info[i].addr); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER: PDC_Server_destroy_client_info() error with HG_Addr_free\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Addr_free"); info[i].addr_valid = 0; } } // end of for - free(info); + info = (pdc_client_info_t *)PDC_free(info); done: FUNC_LEAVE(ret_value); } @@ -240,19 +234,18 @@ PDC_Server_destroy_client_info(pdc_client_info_t *info) * \return Non-negative on success/Negative on failure */ perr_t -PDC_client_info_init(pdc_client_info_t *a) +PDC_client_info_init(pdc_client_info_t *pdc_client_info) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - if (a == NULL) { - LOG_ERROR("==PDC_SERVER: PDC_client_info_init() NULL input!\n"); - ret_value = FAIL; - goto done; - } + if (pdc_client_info == NULL) + PGOTO_ERROR(FAIL, "pdc_client_info was NULL"); + + memset(pdc_client_info->addr_string, 0, ADDR_MAX); + pdc_client_info->addr_valid = 0; - memset(a->addr_string, 0, ADDR_MAX); - a->addr_valid = 0; done: FUNC_LEAVE(ret_value); } @@ -269,22 +262,19 @@ PDC_client_info_init(pdc_client_info_t *a) hg_return_t PDC_Server_get_client_addr(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + int i; hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); - client_test_connect_args *in = (client_test_connect_args *)callback_info->arg; #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&pdc_client_addr_mutex_g); #endif if (pdc_client_info_g && in->is_init == 1) { - if (is_debug_g && pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[%d]: new application run detected, create new client info\n", - pdc_server_rank_g); - fflush(stdout); - } + if (is_debug_g && pdc_server_rank_g == 0) + LOG_INFO("New application run detected, create new client info\n"); PDC_Server_destroy_client_info(pdc_client_info_g); pdc_client_info_g = NULL; @@ -295,12 +285,9 @@ PDC_Server_get_client_addr(const struct hg_cb_info *callback_info) #endif if (pdc_client_info_g == NULL) { pdc_client_num_g = in->nclient; - pdc_client_info_g = (pdc_client_info_t *)calloc(sizeof(pdc_client_info_t), in->nclient); - if (pdc_client_info_g == NULL) { - LOG_ERROR("==PDC_SERVER: PDC_Server_get_client_addr - unable to allocate space\n"); - ret_value = FAIL; - goto done; - } + pdc_client_info_g = (pdc_client_info_t *)PDC_calloc(sizeof(pdc_client_info_t), in->nclient); + if (pdc_client_info_g == NULL) + PGOTO_ERROR(FAIL, "PDC_Calloc failed"); for (i = 0; i < in->nclient; i++) PDC_client_info_init(&pdc_client_info_g[i]); @@ -329,13 +316,14 @@ PDC_Server_get_client_addr(const struct hg_cb_info *callback_info) void PDC_Server_print_version() { - unsigned major, minor, patch; - FUNC_ENTER(NULL); + unsigned major, minor, patch; + HG_Version_get(&major, &minor, &patch); LOG_INFO("Server running mercury version %u.%u-%u\n", major, minor, patch); - return; + + FUNC_LEAVE_VOID(); } /* @@ -349,19 +337,17 @@ PDC_Server_print_version() perr_t PDC_Server_write_addr_to_file(char **addr_strings, int n) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; char config_fname[ADDR_MAX]; int i; - FUNC_ENTER(NULL); - // write to file snprintf(config_fname, ADDR_MAX, "%s%s", pdc_server_tmp_dir_g, pdc_server_cfg_name_g); FILE *na_config = fopen(config_fname, "w+"); - if (!na_config) { - LOG_ERROR("Could not open config file from: %s\n", config_fname); - goto done; - } + if (!na_config) + PGOTO_ERROR(FAIL, "Could not open config file from: %s", config_fname); fprintf(na_config, "%d\n", n); for (i = 0; i < n; i++) { @@ -374,11 +360,13 @@ PDC_Server_write_addr_to_file(char **addr_strings, int n) FUNC_LEAVE(ret_value); } -static int +static perr_t remove_directory(const char *dir) { - int ret = 0; - FTS * ftsp = NULL; + FUNC_ENTER(NULL); + + int ret_value = 0; + FTS * ftsp = NULL; FTSENT *curr; // Cast needed (in C) because fts_open() takes a "char * const *", instead @@ -392,11 +380,8 @@ remove_directory(const char *dir) // of the specified directory // FTS_XDEV - Don't cross filesystem boundaries ftsp = fts_open(files, FTS_NOCHDIR | FTS_PHYSICAL | FTS_XDEV, NULL); - if (!ftsp) { - LOG_ERROR("PDC_SERVER: %s: fts_open failed: %s\n", dir, strerror(curr->fts_errno)); - ret = -1; - goto done; - } + if (!ftsp) + PGOTO_ERROR(FAIL, "Error with fts_open [%s], errno: [%s]", dir, strerror(curr->fts_errno)); while ((curr = fts_read(ftsp))) { switch (curr->fts_info) { @@ -404,39 +389,34 @@ remove_directory(const char *dir) case FTS_DNR: case FTS_ERR: break; - case FTS_DC: case FTS_DOT: case FTS_NSOK: // Not reached unless FTS_LOGICAL, FTS_SEEDOT, or FTS_NOSTAT were // passed to fts_open() break; - case FTS_D: // Do nothing. Need depth-first search, so directories are deleted // in FTS_DP break; - case FTS_DP: case FTS_F: case FTS_SL: case FTS_SLNONE: case FTS_DEFAULT: if (remove(curr->fts_accpath) < 0) { - LOG_ERROR("PDC_SERVER: %s: Failed to remove: %s\n", curr->fts_path, - strerror(curr->fts_errno)); - ret = -1; + PGOTO_ERROR(FAIL, "Error with remove: %s: errno: %s\n", curr->fts_path, + strerror(curr->fts_errno)); } break; } } done: - if (ftsp) { + if (ftsp) fts_close(ftsp); - } - return ret; + FUNC_LEAVE(ret_value); } /* @@ -447,18 +427,15 @@ remove_directory(const char *dir) perr_t PDC_Server_rm_config_file() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; char config_fname[ADDR_MAX]; - FUNC_ENTER(NULL); - snprintf(config_fname, ADDR_MAX, "%s%s", pdc_server_tmp_dir_g, pdc_server_cfg_name_g); - if (remove(config_fname) != 0) { - LOG_ERROR("==PDC_SERVER[%d]: Unable to delete the config file[%s]", pdc_server_rank_g, config_fname); - ret_value = FAIL; - goto done; - } + if (remove(config_fname) != 0) + PGOTO_ERROR(FAIL, "Unable to delete the config file[%s]", config_fname); #ifdef ENABLE_ROCKSDB if (use_rocksdb_g) { @@ -488,12 +465,12 @@ PDC_Server_rm_config_file() static hg_return_t lookup_remote_server_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint32_t server_id; server_lookup_args_t *lookup_args; - FUNC_ENTER(NULL); - lookup_args = (server_lookup_args_t *)callback_info->arg; server_id = lookup_args->server_id; @@ -506,16 +483,13 @@ lookup_remote_server_cb(const struct hg_cb_info *callback_info) hg_thread_mutex_unlock(&update_remote_server_addr_mutex_g); #endif - if (pdc_remote_server_info_g[server_id].addr == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: remote server addr is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (pdc_remote_server_info_g[server_id].addr == NULL) + PGOTO_ERROR(FAIL, "Remote server addr is NULL"); lookup_args->ret_int = 1; done: - free(lookup_args); + lookup_args = (server_lookup_args_t *)PDC_free(lookup_args); FUNC_LEAVE(ret_value); } @@ -528,31 +502,27 @@ lookup_remote_server_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_lookup_server_id(int remote_server_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; server_lookup_args_t *lookup_args; unsigned actual_count; - FUNC_ENTER(NULL); - if (remote_server_id == pdc_server_rank_g || pdc_remote_server_info_g[remote_server_id].addr_valid == 1) return SUCCEED; - lookup_args = (server_lookup_args_t *)calloc(1, sizeof(server_lookup_args_t)); + lookup_args = (server_lookup_args_t *)PDC_calloc(1, sizeof(server_lookup_args_t)); lookup_args->server_id = remote_server_id; hg_ret = HG_Addr_lookup(hg_context_g, lookup_remote_server_cb, lookup_args, pdc_remote_server_info_g[remote_server_id].addr_string, HG_OP_ID_IGNORE); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER: Connection to remote server FAILED!\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Connection to remote server FAILED"); hg_ret = HG_Trigger(hg_context_g, 0 /* timeout */, 1 /* max count */, &actual_count); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -564,11 +534,11 @@ PDC_Server_lookup_server_id(int remote_server_id) perr_t PDC_Server_lookup_all_servers() { + FUNC_ENTER(NULL); + int i, j; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - // Lookup and fill the remote server info for (j = 0; j < pdc_server_size_g; j++) { @@ -583,20 +553,14 @@ PDC_Server_lookup_all_servers() continue; if (PDC_Server_lookup_server_id(i) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error when lookup remote server %d!\n", pdc_server_rank_g, - i); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error when lookup remote server %d", i); } } } } - if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[%d]: Successfully established connection to %d other PDC servers\n", - pdc_server_rank_g, pdc_server_size_g - 1); - fflush(stdout); - } + if (pdc_server_rank_g == 0) + LOG_INFO("Successfully established connection to %d other PDC servers\n", pdc_server_size_g - 1); done: FUNC_LEAVE(ret_value); @@ -613,24 +577,22 @@ PDC_Server_lookup_all_servers() static hg_return_t PDC_Server_lookup_client_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint32_t client_id; server_lookup_args_t *server_lookup_args; - FUNC_ENTER(NULL); - server_lookup_args = (server_lookup_args_t *)callback_info->arg; client_id = server_lookup_args->client_id; - if (client_id >= (uint32_t)pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: invalid input client id %d\n", pdc_server_rank_g, client_id); - goto done; - } + if (client_id >= (uint32_t)pdc_client_num_g) + PGOTO_ERROR(HG_OTHER_ERROR, "Invalid input client id %d", client_id); + pdc_client_info_g[client_id].addr = callback_info->info.lookup.addr; pdc_client_info_g[client_id].addr_valid = 1; done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -645,20 +607,16 @@ PDC_Server_lookup_client_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_lookup_client(uint32_t client_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; unsigned actual_count; - FUNC_ENTER(NULL); - - if (pdc_client_num_g <= 0) { - LOG_ERROR("==PDC_SERVER[%d]: number of client <= 0!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - + if (pdc_client_num_g <= 0) + PGOTO_ERROR(FAIL, "Number of client <= 0"); if (pdc_client_info_g[client_id].addr_valid == 1) - goto done; + PGOTO_DONE(SUCCEED); // Lookup and fill the client info server_lookup_args_t lookup_args; @@ -671,41 +629,38 @@ PDC_Server_lookup_client(uint32_t client_id) hg_ret = HG_Addr_lookup(hg_context_g, PDC_Server_lookup_client_cb, &lookup_args, target_addr_string, HG_OP_ID_IGNORE); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: Connection to client %d FAILED!\n", pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Connection to client %d failed", client_id); hg_ret = HG_Trigger(hg_context_g, 0 /* timeout */, 1 /* max count */, &actual_count); done: - fflush(stdout); FUNC_LEAVE(ret_value); } static hg_return_t PDC_hg_handle_create_cb(hg_handle_t handle, void *arg) { - struct hg_thread_work *hg_thread_work = malloc(sizeof(struct hg_thread_work)); - hg_return_t ret = HG_SUCCESS; + FUNC_ENTER(NULL); - if (!hg_thread_work) { - // HG_LOG_ERROR("Could not allocate hg_thread_work"); - ret = HG_NOMEM_ERROR; - goto done; - } + struct hg_thread_work *hg_thread_work = PDC_malloc(sizeof(struct hg_thread_work)); + hg_return_t ret_value = HG_SUCCESS; + + if (hg_thread_work == NULL) + PGOTO_ERROR(HG_NOMEM_ERROR, "Failed to PDC_malloc hg_thread_work"); (void)arg; HG_Set_data(handle, hg_thread_work, free); done: - return ret; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_set_close(void) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; close_server_out_t close_out; #ifdef PDC_TIMING @@ -738,6 +693,7 @@ PDC_Server_set_close(void) #endif hg_atomic_set32(&close_server_g, 1); } + FUNC_LEAVE(ret_value); } @@ -750,6 +706,8 @@ PDC_Server_set_close(void) static const char * drc_strerror(int errnum) { + FUNC_ENTER(NULL); + const char *errstring = "UNDEFINED"; DRC_ERROR_STRING_MACRO(DRC_SUCCESS, errnum, errstring); @@ -763,7 +721,7 @@ drc_strerror(int errnum) DRC_ERROR_STRING_MACRO(DRC_CRED_EXTERNAL_FAILURE, errnum, errstring); DRC_ERROR_STRING_MACRO(DRC_BAD_TOKEN, errnum, errstring); - return errstring; + FUNC_LEAVE(errstring); } #endif @@ -779,12 +737,15 @@ drc_strerror(int errnum) perr_t PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i = 0; char self_addr_string[ADDR_MAX]; char na_info_string[NA_STRING_INFO_LEN]; - char hostname[HOSTNAME_LEN]; - struct hg_init_info init_info = {0}; + char * hostname; + pbool_t free_hostname = false; + struct hg_init_info init_info = {0}; /* Set the default mercury transport * but enable overriding that to any of: @@ -802,26 +763,37 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) int rc; #endif - FUNC_ENTER(NULL); - // set server id start pdc_id_seq_g = pdc_id_seq_g * (pdc_server_rank_g + 1); // Create server tmp dir PDC_mkdir(pdc_server_tmp_dir_g); - all_addr_strings_1d_g = (char *)calloc(sizeof(char), pdc_server_size_g * ADDR_MAX); - all_addr_strings_g = (char **)calloc(sizeof(char *), pdc_server_size_g); + all_addr_strings_1d_g = (char *)PDC_calloc(sizeof(char), pdc_server_size_g * ADDR_MAX); + all_addr_strings_g = (char **)PDC_calloc(sizeof(char *), pdc_server_size_g); total_mem_usage_g += (sizeof(char) + sizeof(char *)); if ((hg_transport = getenv("HG_TRANSPORT")) == NULL) { + LOG_INFO("Environment variable HG_TRANSPORT was NOT set\n"); hg_transport = default_hg_transport; } - memset(hostname, 0, HOSTNAME_LEN); - gethostname(hostname, HOSTNAME_LEN - 1); + else + LOG_INFO("Environment variable HG_TRANSPORT was set\n"); + if ((hostname = getenv("HG_HOST")) == NULL) { + LOG_INFO("Environment variable HG_HOST was NOT set\n"); + hostname = PDC_malloc(HOSTNAME_LEN); + memset(hostname, 0, HOSTNAME_LEN); + gethostname(hostname, HOSTNAME_LEN - 1); + free_hostname = true; + } + else + LOG_INFO("Environment variable HG_HOST was set\n"); snprintf(na_info_string, NA_STRING_INFO_LEN, "%s://%s:%d", hg_transport, hostname, port); + if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: using %.7s\n", pdc_server_rank_g, na_info_string); + LOG_INFO("Connection string: %s\n", na_info_string); + if (free_hostname) + hostname = PDC_free(hostname); // Clean up all the tmp files etc HG_Cleanup(); @@ -840,24 +812,19 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) sleep(1); goto drc_access_again; } - LOG_ERROR("server drc_access() failed (%d, %s)", rc, drc_strerror(-rc)); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "drc_access failed (%d, %s)", rc, drc_strerror(-rc)); } cookie = drc_get_first_cookie(credential_info); if (pdc_server_rank_g == 0) { LOG_INFO("# Credential is %u\n", credential); LOG_INFO("# Cookie is %u\n", cookie); - fflush(stdout); } sprintf(pdc_auth_key, "%u", cookie); init_info.na_init_info.auth_key = strdup(pdc_auth_key); #endif // end of gni - // Init server -// *hg_class = HG_Init(na_info_string, NA_TRUE); #ifndef ENABLE_MULTITHREAD init_info.na_init_info.progress_mode = NA_NO_BLOCK; // busy mode #endif @@ -868,7 +835,7 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) *hg_class = HG_Init_opt(na_info_string, HG_TRUE, &init_info); if (*hg_class == NULL) { LOG_ERROR("Error with HG_Init()\n"); - return FAIL; + FUNC_LEAVE(FAIL); } /* Attach handle created for worker thread */ @@ -878,7 +845,7 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) *hg_context = HG_Context_create(*hg_class); if (*hg_context == NULL) { LOG_ERROR("Error with HG_Context_create()\n"); - return FAIL; + FUNC_LEAVE(FAIL); } // Get server address @@ -886,14 +853,12 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) // Init server to server communication. pdc_remote_server_info_g = - (pdc_remote_server_info_t *)calloc(sizeof(pdc_remote_server_info_t), pdc_server_size_g); + (pdc_remote_server_info_t *)PDC_calloc(sizeof(pdc_remote_server_info_t), pdc_server_size_g); for (i = 0; i < pdc_server_size_g; i++) { ret_value = PDC_Server_remote_server_info_init(&pdc_remote_server_info_g[i]); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_remote_server_info_init\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_remote_server_info_init"); } // Gather addresses @@ -922,7 +887,7 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) hg_thread_pool_init(n_thread, &hg_test_thread_pool_g); hg_thread_pool_init(1, &hg_test_thread_pool_fs_g); if (pdc_server_rank_g == 0) - LOG_INFO("\n==PDC_SERVER[%d]: Starting server with %d threads...\n", pdc_server_rank_g, n_thread); + LOG_INFO("\nStarting server with %d threads...\n", n_thread); hg_thread_mutex_init(&hash_table_new_mutex_g); hg_thread_mutex_init(&pdc_client_info_mutex_g); hg_thread_mutex_init(&pdc_metadata_hash_table_mutex_g); @@ -949,14 +914,17 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) hg_thread_mutex_init(&update_remote_server_addr_mutex_g); #else if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: without multi-thread!\n", pdc_server_rank_g); + LOG_INFO("Without multi-thread\n"); #endif #ifdef PDC_SERVER_CACHE if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: Read cache enabled!\n", pdc_server_rank_g); + LOG_INFO("Read cache enabled\n"); #endif + // Initialize IDIOMS + PDC_Server_metadata_index_init(pdc_server_size_g, pdc_server_rank_g); + // TODO: support restart with different number of servers than previous run char checkpoint_file[ADDR_MAX + sizeof(int) + 1]; if (is_restart_g == 1) { @@ -964,22 +932,17 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) pdc_server_rank_g, pdc_server_rank_g); ret_value = PDC_Server_restart(checkpoint_file); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_restart\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_restart"); metadata_index_recover(pdc_server_tmp_dir_g, pdc_server_size_g, pdc_server_rank_g); } else { // We are starting a brand new server transfer_request_metadata_query_init(pdc_server_size_g, NULL); if (is_hash_table_init_g != 1) { - // Hash table init ret_value = PDC_Server_init_hash_table(); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_init_hash_table\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_init_hash_table"); } } @@ -995,9 +958,6 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) n_metadata_g = 0; - // Initialize IDIOMS - PDC_Server_metadata_index_init(pdc_server_size_g, pdc_server_rank_g); - // PDC transfer_request infrastructures PDC_server_transfer_request_init(); #ifdef PDC_SERVER_CACHE @@ -1018,21 +978,20 @@ PDC_Server_init(int port, hg_class_t **hg_class, hg_context_t **hg_context) perr_t PDC_Server_destroy_remote_server_info() { + FUNC_ENTER(NULL); + int i; hg_return_t hg_ret; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - // Destroy addr and handle for (i = 0; i < pdc_server_size_g; i++) { + if (pdc_remote_server_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_remote_server_info_g was NULL"); if (pdc_remote_server_info_g[i].addr_valid == 1) { hg_ret = HG_Addr_free(hg_class_g, pdc_remote_server_info_g[i].addr); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER: PDC_Server_destroy_remote_server_info() error with HG_Addr_free\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error when calling HG_Addr_free err_code: %d", hg_ret); pdc_remote_server_info_g[i].addr_valid = 0; } } @@ -1049,20 +1008,18 @@ PDC_Server_destroy_remote_server_info() perr_t PDC_Server_finalize() { + FUNC_ENTER(NULL); + pdc_data_server_io_list_t *io_elt = NULL; region_list_t * region_elt = NULL, *region_tmp = NULL; perr_t ret_value = SUCCEED; hg_return_t hg_ret; - FUNC_ENTER(NULL); - transfer_request_metadata_query_finalize(); // Debug: check duplicates - if (is_debug_g == 1) { + if (is_debug_g == 1) PDC_Server_metadata_duplicate_check(); - fflush(stdout); - } // Remove the opened shm DL_FOREACH(pdc_data_server_read_list_head_g, io_elt) @@ -1073,7 +1030,7 @@ PDC_Server_finalize() if (region_elt->shm_fd > 0) ret_value = PDC_Server_close_shm(region_elt, 1); DL_DELETE(io_elt->region_list_head, region_elt); - free(region_elt); + region_elt = (region_list_t *)PDC_free(region_elt); } io_elt->region_list_head = NULL; } @@ -1082,16 +1039,12 @@ PDC_Server_finalize() hash_table_free(metadata_hash_table_g); ret_value = PDC_Server_destroy_client_info(pdc_client_info_g); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER: Error with PDC_Server_destroy_client_info\n"); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_destroy_client_info"); ret_value = PDC_Server_destroy_remote_server_info(); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_destroy_client_info\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_destroy_client_info"); PDC_Close_cache_file(); @@ -1117,7 +1070,6 @@ PDC_Server_finalize() MPI_COMM_WORLD); MPI_Reduce(&server_hash_insert_time_g, &all_server_hash_insert_time_min, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD); - #else all_bloom_check_time_min = server_bloom_check_time_g; all_bloom_check_time_max = server_bloom_check_time_g; @@ -1168,18 +1120,16 @@ PDC_Server_finalize() PDC_Server_rm_config_file(); hg_ret = HG_Context_destroy(hg_context_g); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: Error with HG_Context_destroy\n", pdc_server_rank_g); - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Context_destroy"); hg_ret = HG_Finalize(hg_class_g); if (hg_ret != HG_SUCCESS) - LOG_ERROR("==PDC_SERVER[%d]: Error with HG_Finalize\n", pdc_server_rank_g); + LOG_WARNING("Error with HG_Finalize\n"); done: - free(all_addr_strings_g); - free(all_addr_strings_1d_g); + all_addr_strings_g = (char **)PDC_free(all_addr_strings_g); + all_addr_strings_1d_g = (char *)PDC_free(all_addr_strings_1d_g); FUNC_LEAVE(ret_value); } @@ -1187,22 +1137,27 @@ PDC_Server_finalize() hg_return_t PDC_Server_recv_shm_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + pdc_shm_info_t *shm_info; shm_info = (pdc_shm_info_t *)callback_info->arg; - LOG_INFO("==PDC_SERVER[%d]: recv shm from %d: [%s], %" PRIu64 "\n", pdc_server_rank_g, - shm_info->client_id, shm_info->shm_addr, shm_info->size); + LOG_INFO("recv shm from %d: [%s], %" PRIu64 "\n", shm_info->client_id, shm_info->shm_addr, + shm_info->size); - return HG_SUCCESS; + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_checkpoint_cb() { + FUNC_ENTER(NULL); + if (pdc_disable_checkpoint_g == 0) PDC_Server_checkpoint(); - return HG_SUCCESS; + + FUNC_LEAVE(HG_SUCCESS); } /* @@ -1215,6 +1170,8 @@ PDC_Server_checkpoint_cb() perr_t PDC_Server_checkpoint() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t * elt; region_list_t * region_elt; @@ -1232,8 +1189,6 @@ PDC_Server_checkpoint() bool use_tmpfs = false; FILE * file; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING // Timing struct timeval pdc_timer_start; @@ -1257,21 +1212,16 @@ PDC_Server_checkpoint() snprintf(checkpoint_file, ADDR_MAX, "%s/%d/metadata_checkpoint.%d", pdc_server_tmp_dir_g, pdc_server_rank_g, pdc_server_rank_g); snprintf(checkpoint_file_local, ADDR_MAX, "/tmp/metadata_checkpoint.%d", pdc_server_rank_g); - if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[%4d]: Checkpoint file [%s]\n", pdc_server_rank_g, checkpoint_file); - fflush(stdout); - } + if (pdc_server_rank_g == 0) + LOG_INFO("Checkpoint file [%s]\n", checkpoint_file); if (use_tmpfs) file = fopen(checkpoint_file_local, "w+"); else file = fopen(checkpoint_file, "w+"); - if (file == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file open error", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (file == NULL) + PGOTO_ERROR(FAIL, "Checkpoint file open error"); // Checkpoint containers n_entry = hash_table_num_entries(container_hash_table_g); @@ -1346,7 +1296,7 @@ PDC_Server_checkpoint() } if (n_write_region != n_region) - LOG_ERROR("==PDC_SERVER[%d]: ERROR with number of regions", pdc_server_rank_g); + LOG_ERROR("Error with number of regions\n"); } metadata_size++; region_count += n_region; @@ -1378,7 +1328,7 @@ PDC_Server_checkpoint() #ifdef PDC_TIMING gettimeofday(&pdc_timer_end_rank, 0); checkpoint_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end_rank); - LOG_INFO("==PDC_SERVER[%4d]: write to tmpfs took %7.2fs\n", pdc_server_rank_g, checkpoint_time); + LOG_INFO("Write to tmpfs took %7.2fs\n", checkpoint_time); #endif // Copy from /tmp to target under $PDC_TMPDIR snprintf(cmd, 4096, "mv %s %s", checkpoint_file_local, checkpoint_file); @@ -1400,35 +1350,34 @@ PDC_Server_checkpoint() #endif #ifdef PDC_TIMING - LOG_INFO("==PDC_SERVER[%4d]: checkpointed %10d objects, with %10d regions, took %7.2fs\n", - pdc_server_rank_g, metadata_size, region_count, checkpoint_time_rank); + LOG_INFO("Checkpointed %10d objects, with %10d regions, took %7.2fs\n", metadata_size, region_count, + checkpoint_time_rank); gettimeofday(&pdc_timer_end, 0); checkpoint_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - fflush(stdout); if (pdc_server_rank_g == 0) - LOG_ERROR("==PDC_SERVER[ ALL]: total checkpoint time = %.6f\n", checkpoint_time); + LOG_ERROR("Rank[ ALL]: Total checkpoint time = %.6f\n", checkpoint_time); #endif if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[ ALL]: checkpointed %10d objects, with %10d regions \n", all_metadata_size, - all_region_count); - fflush(stdout); + LOG_INFO("Checkpointed %10d objects, with %10d regions \n", all_metadata_size, all_region_count); } metadata_index_dump(pdc_server_tmp_dir_g, pdc_server_rank_g); done: - fflush(stdout); FUNC_LEAVE(ret_value); } // End Checkpoint int region_cmp(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + int unit_size = a->ndim * sizeof(uint64_t); - return memcmp(a->start, b->start, unit_size); + + FUNC_LEAVE(memcmp(a->start, b->start, unit_size)); } /* @@ -1441,6 +1390,8 @@ region_cmp(region_list_t *a, region_list_t *b) perr_t PDC_Server_restart(char *filename) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int n_entry, count, i, j, nobj = 0, all_nobj = 0, all_n_region, n_region, n_objs, total_region = 0, n_kvtag, key_len; @@ -1457,26 +1408,18 @@ PDC_Server_restart(char *filename) double start = MPI_Wtime(); #endif - FUNC_ENTER(NULL); - // init hash table ret_value = PDC_Server_init_hash_table(); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_init_hash_table FAILED!", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error wtih PDC_Server_init_hash_table"); FILE *file = fopen(filename, "r"); - if (file == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file open FAILED [%s]!", pdc_server_rank_g, filename); - ret_value = FAIL; - goto done; - } + if (file == NULL) + PGOTO_ERROR(FAIL, "Error with fopen, filename: [%s]", filename); char *slurm_jobid = getenv("SLURM_JOB_ID"); if (slurm_jobid == NULL) { - LOG_ERROR("Error getting slurm job id from SLURM_JOB_ID!\n"); + LOG_ERROR("Error getting slurm job id from SLURM_JOB_ID\n"); } if (fread(&n_cont, sizeof(int), 1, file) != 1) { @@ -1484,14 +1427,14 @@ PDC_Server_restart(char *filename) } all_cont = n_cont; while (n_cont > 0) { - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); if (fread(hash_key, sizeof(uint32_t), 1, file) != 1) { LOG_ERROR("Read failed for hash_key\n"); } total_mem_usage_g += sizeof(uint32_t); // Reconstruct hash table - cont_entry = (pdc_cont_hash_table_entry_t *)malloc(sizeof(pdc_cont_hash_table_entry_t)); + cont_entry = (pdc_cont_hash_table_entry_t *)PDC_malloc(sizeof(pdc_cont_hash_table_entry_t)); total_mem_usage_g += sizeof(pdc_cont_hash_table_entry_t); if (fread(cont_entry, sizeof(pdc_cont_hash_table_entry_t), 1, file) != 1) { LOG_ERROR("Read failed for cont_entry\n"); @@ -1501,7 +1444,7 @@ PDC_Server_restart(char *filename) hg_thread_mutex_lock(&pdc_container_hash_table_mutex_g); #endif if (hash_table_insert(container_hash_table_g, hash_key, cont_entry) != 1) { - LOG_ERROR("==PDC_SERVER[%d]: hash table insert failed\n", pdc_server_rank_g); + LOG_ERROR("Hash table insert failed\n"); ret_value = FAIL; } #ifdef ENABLE_MULTITHREAD @@ -1519,21 +1462,21 @@ PDC_Server_restart(char *filename) LOG_ERROR("Read failed for count\n"); } - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); if (fread(hash_key, sizeof(uint32_t), 1, file) != 1) { LOG_ERROR("Read failed for hash_key\n"); } total_mem_usage_g += sizeof(uint32_t); // Reconstruct hash table - entry = (pdc_hash_table_entry_head *)malloc(sizeof(pdc_hash_table_entry_head)); + entry = (pdc_hash_table_entry_head *)PDC_malloc(sizeof(pdc_hash_table_entry_head)); entry->n_obj = 0; entry->bloom = NULL; entry->metadata = NULL; // Init hash table metadata (w/ bloom) with first obj PDC_Server_hash_table_list_init(entry, hash_key); - metadata = (pdc_metadata_t *)calloc(sizeof(pdc_metadata_t), count); + metadata = (pdc_metadata_t *)PDC_calloc(sizeof(pdc_metadata_t), count); for (i = 0; i < count; i++) { if (fread(metadata + i, sizeof(pdc_metadata_t), 1, file) != 1) { LOG_ERROR("Read failed for metadata\n"); @@ -1554,12 +1497,12 @@ PDC_Server_restart(char *filename) LOG_ERROR("Read failed for n_kvtag\n"); } for (j = 0; j < n_kvtag; j++) { - pdc_kvtag_list_t *kvtag_list = (pdc_kvtag_list_t *)calloc(1, sizeof(pdc_kvtag_list_t)); - kvtag_list->kvtag = (pdc_kvtag_t *)malloc(sizeof(pdc_kvtag_t)); + pdc_kvtag_list_t *kvtag_list = (pdc_kvtag_list_t *)PDC_calloc(1, sizeof(pdc_kvtag_list_t)); + kvtag_list->kvtag = (pdc_kvtag_t *)PDC_malloc(sizeof(pdc_kvtag_t)); if (fread(&key_len, sizeof(int), 1, file) != 1) { LOG_ERROR("Read failed for key_len\n"); } - kvtag_list->kvtag->name = malloc(key_len); + kvtag_list->kvtag->name = PDC_malloc(key_len); if (fread((void *)(kvtag_list->kvtag->name), key_len, 1, file) != 1) { LOG_ERROR("Read failed for kvtag_list->kvtag->name\n"); } @@ -1569,7 +1512,7 @@ PDC_Server_restart(char *filename) if (fread(&kvtag_list->kvtag->type, sizeof(int8_t), 1, file) != 1) { LOG_ERROR("Read failed for kvtag_list->kvtag->type\n"); } - kvtag_list->kvtag->value = malloc(kvtag_list->kvtag->size); + kvtag_list->kvtag->value = PDC_malloc(kvtag_list->kvtag->size); if (fread(kvtag_list->kvtag->value, kvtag_list->kvtag->size, 1, file) != 1) { LOG_ERROR("Read failed for kvtag_list->kvtag->value\n"); } @@ -1579,11 +1522,8 @@ PDC_Server_restart(char *filename) if (fread(&n_region, sizeof(int), 1, file) != 1) { LOG_ERROR("Read failed for n_region\n"); } - if (n_region < 0) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file region number ERROR!", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (n_region < 0) + PGOTO_ERROR(FAIL, "Checkpoint file region was less than 0"); /* if (n_region == 0) */ /* continue; */ @@ -1591,7 +1531,7 @@ PDC_Server_restart(char *filename) total_region += n_region; for (j = 0; j < n_region; j++) { - region_list = (region_list_t *)malloc(sizeof(region_list_t)); + region_list = (region_list_t *)PDC_malloc(sizeof(region_list_t)); if (fread(region_list, sizeof(region_list_t), 1, file) != 1) { LOG_ERROR("Read failed for region_list\n"); } @@ -1601,7 +1541,7 @@ PDC_Server_restart(char *filename) LOG_ERROR("Read failed for has_list\n"); } if (has_hist == 1) { - region_list->region_hist = (pdc_histogram_t *)malloc(sizeof(pdc_histogram_t)); + region_list->region_hist = (pdc_histogram_t *)PDC_malloc(sizeof(pdc_histogram_t)); if (fread(®ion_list->region_hist->dtype, sizeof(int), 1, file) != 1) { LOG_ERROR("Read failed for region_list->region_hist->dtype\n"); } @@ -1609,14 +1549,13 @@ PDC_Server_restart(char *filename) LOG_ERROR("Read failed for region_list->region_hist->nbin\n"); } if (region_list->region_hist->nbin == 0) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file histogram size is 0!", - pdc_server_rank_g); + LOG_ERROR("Checkpoint file histogram size is 0\n"); } region_list->region_hist->range = - (double *)malloc(sizeof(double) * region_list->region_hist->nbin * 2); + (double *)PDC_malloc(sizeof(double) * region_list->region_hist->nbin * 2); region_list->region_hist->bin = - (uint64_t *)malloc(sizeof(uint64_t) * region_list->region_hist->nbin); + (uint64_t *)PDC_malloc(sizeof(uint64_t) * region_list->region_hist->nbin); if (fread(region_list->region_hist->range, sizeof(double), region_list->region_hist->nbin * 2, file) != 1) { @@ -1683,10 +1622,8 @@ PDC_Server_restart(char *filename) elt = metadata + i; // Add to hash list and bloom filter ret_value = PDC_Server_hash_table_list_insert(entry, elt); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER: error with hash table recovering from checkpoint file\n"); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with hash table recovering from checkpoint file"); } n_entry--; } @@ -1697,9 +1634,9 @@ PDC_Server_restart(char *filename) for (i = 0; i < n_objs; ++i) { data_server_region_t *new_obj_reg = - (data_server_region_t *)calloc(1, sizeof(struct data_server_region_t)); + (data_server_region_t *)PDC_calloc(1, sizeof(struct data_server_region_t)); new_obj_reg->fd = -1; - new_obj_reg->storage_location = (char *)malloc(sizeof(char) * ADDR_MAX); + new_obj_reg->storage_location = (char *)PDC_malloc(sizeof(char) * ADDR_MAX); if (fread(&new_obj_reg->obj_id, sizeof(uint64_t), 1, file) != 1) { LOG_ERROR("Read failed for obj_id\n"); } @@ -1708,7 +1645,7 @@ PDC_Server_restart(char *filename) } DL_APPEND(dataserver_region_g, new_obj_reg); for (j = 0; j < n_region; j++) { - region_list_t *new_region_list = (region_list_t *)malloc(sizeof(region_list_t)); + region_list_t *new_region_list = (region_list_t *)PDC_malloc(sizeof(region_list_t)); if (fread(new_region_list, sizeof(region_list_t), 1, file) != 1) { LOG_ERROR("Read failed for new_region_list\n"); } @@ -1719,12 +1656,12 @@ PDC_Server_restart(char *filename) if (fread(&checkpoint_size, sizeof(uint64_t), 1, file) != 1) { LOG_ERROR("Read failed for checkpoint size\n"); } - checkpoint_buf = (char *)malloc(checkpoint_size); + checkpoint_buf = (char *)PDC_malloc(checkpoint_size); if (fread(checkpoint_buf, checkpoint_size, 1, file) != 1) { LOG_ERROR("Read failed for checkpoint buf\n"); } transfer_request_metadata_query_init(pdc_server_size_g, checkpoint_buf); - free(checkpoint_buf); + checkpoint_buf = (char *)PDC_free(checkpoint_buf); fclose(file); file = NULL; @@ -1738,7 +1675,7 @@ PDC_Server_restart(char *filename) #endif if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[0]: Server restarted from saved session, " + LOG_INFO("Server restarted from saved session, " "successfully loaded %d containers, %d objects, %d regions...\n", all_cont, all_nobj, all_n_region); } @@ -1748,8 +1685,6 @@ PDC_Server_restart(char *filename) pdc_server_timings->PDCserver_restart += MPI_Wtime() - start; #endif - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -1762,12 +1697,12 @@ PDC_Server_restart(char *filename) static HG_THREAD_RETURN_TYPE hg_progress_thread(void *arg) { + FUNC_ENTER(NULL); + hg_context_t * context = (hg_context_t *)arg; HG_THREAD_RETURN_TYPE tret = (HG_THREAD_RETURN_TYPE)0; hg_return_t ret = HG_SUCCESS; - FUNC_ENTER(NULL); - do { if (hg_atomic_cas32(&close_server_g, 1, 1)) break; @@ -1780,7 +1715,7 @@ hg_progress_thread(void *arg) hg_thread_exit(tret); - return tret; + FUNC_LEAVE(tret); } /* @@ -1791,12 +1726,12 @@ hg_progress_thread(void *arg) static perr_t PDC_Server_multithread_loop(hg_context_t *context) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_thread_t progress_thread; hg_return_t ret = HG_SUCCESS; - FUNC_ENTER(NULL); - hg_thread_create(&progress_thread, hg_progress_thread, context); do { @@ -1824,6 +1759,8 @@ PDC_Server_multithread_loop(hg_context_t *context) static perr_t PDC_Server_loop(hg_context_t *hg_context) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; unsigned int actual_count; @@ -1831,7 +1768,6 @@ PDC_Server_loop(hg_context_t *hg_context) int checkpoint_interval = 1; clock_t last_checkpoint_time = 0, cur_time; #endif - FUNC_ENTER(NULL); /* Poke progress engine and check for events */ do { @@ -1875,6 +1811,8 @@ PDC_Server_loop(hg_context_t *hg_context) static void PDC_print_IO_stats() { + FUNC_ENTER(NULL); + // Debug print double write_time_max, write_time_min, write_time_avg; double read_time_max, read_time_min, read_time_avg; @@ -1945,7 +1883,7 @@ PDC_print_IO_stats() #endif if (pdc_server_rank_g == 0) { - LOG_JUST_PRINT("==PDC_SERVER[0]: IO STATS (MIN, AVG, MAX)\n" + LOG_JUST_PRINT("IO STATS (MIN, AVG, MAX)\n" " #fwrite %4d, Tfwrite (%6.2f, %6.2f, %6.2f), %.0f MB\n" " #fread %4d, Tfread (%6.2f, %6.2f, %6.2f), %.0f MB\n" " #fopen %4d, Tfopen (%6.2f, %6.2f, %6.2f)\n" @@ -1963,12 +1901,16 @@ PDC_print_IO_stats() get_info_time_min, get_info_time_avg, get_info_time_max, n_read_from_bb_g, read_from_bb_size_g); } + + FUNC_LEAVE_VOID(); } #endif static void PDC_Server_mercury_register() { + FUNC_ENTER(NULL); + // Register RPC, metadata related PDC_client_test_connect_register(hg_class_g); PDC_gen_obj_id_register(hg_class_g); @@ -2056,11 +1998,15 @@ PDC_Server_mercury_register() send_shm_register_id_g = PDC_send_shm_register(hg_class_g); send_client_storage_meta_rpc_register_id_g = PDC_send_client_storage_meta_rpc_register(hg_class_g); send_read_sel_obj_id_rpc_register_id_g = PDC_send_read_sel_obj_id_rpc_register(hg_class_g); + + FUNC_LEAVE_VOID(); } static void PDC_Server_get_env() { + FUNC_ENTER(NULL); + char *tmp_env_char; int default_nclient_per_node = 31; @@ -2129,7 +2075,7 @@ PDC_Server_get_env() if (is_debug_env != NULL) { is_debug_g = atoi(is_debug_env); if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: PDC_DEBUG set to %d!\n", pdc_server_rank_g, is_debug_g); + LOG_INFO("PDC_DEBUG set to %d\n", is_debug_g); } tmp_env_char = getenv("PDC_GEN_HIST"); @@ -2143,42 +2089,45 @@ PDC_Server_get_env() tmp_env_char = getenv("PDC_USE_FASTBIT_IDX"); if (tmp_env_char != NULL) { use_fastbit_idx_g = 1; - LOG_INFO("==PDC_SERVER[%d]: using FastBit for data indexing and querying\n"); + LOG_INFO("Using FastBit for data indexing and querying\n"); } tmp_env_char = getenv("PDC_USE_ROCKSDB"); if (tmp_env_char != NULL && strcmp(tmp_env_char, "1") == 0) { use_rocksdb_g = 1; if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: using RocksDB for kvtag\n"); + LOG_INFO("Using RocksDB for kvtag\n"); } tmp_env_char = getenv("PDC_USE_SQLITE3"); if (tmp_env_char != NULL && strcmp(tmp_env_char, "1") == 0) { use_sqlite3_g = 1; if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: using SQLite3 for kvtag\n", pdc_server_rank_g); + LOG_INFO("Using SQLite3 for kvtag\n"); } tmp_env_char = getenv("PDC_DISABLE_CHECKPOINT"); if (tmp_env_char != NULL && strcmp(tmp_env_char, "TRUE") == 0) { pdc_disable_checkpoint_g = 1; if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[0]: checkpoint disabled!\n"); + LOG_INFO("Checkpoint disabled\n"); } if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER[%d]: using [%s] as tmp dir, %d OSTs, %d OSTs per data file, %d%% to BB\n", - pdc_server_rank_g, pdc_server_tmp_dir_g, lustre_total_ost_g, pdc_nost_per_file_g, - write_to_bb_percentage_g); + LOG_INFO("Using [%s] as tmp dir, %d OSTs, %d OSTs per data file, %d%% to BB\n", pdc_server_tmp_dir_g, + lustre_total_ost_g, pdc_nost_per_file_g, write_to_bb_percentage_g); } + + FUNC_LEAVE_VOID(); } int server_run(int argc, char *argv[]) { + FUNC_ENTER(NULL); + int port; - perr_t ret; + perr_t ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -2200,9 +2149,8 @@ server_run(int argc, char *argv[]) PDC_server_timing_init(); #endif #endif - if (argc > 1) - if (strcmp(argv[1], "restart") == 0) - is_restart_g = 1; + if (argc > 1 && strcmp(argv[1], "restart") == 0) + is_restart_g = 1; // Init rand seed srand(time(NULL)); @@ -2210,12 +2158,10 @@ server_run(int argc, char *argv[]) // Get environmental variables PDC_Server_get_env(); - port = pdc_server_rank_g % 32 + 7000; - ret = PDC_Server_init(port, &hg_class_g, &hg_context_g); - if (ret != SUCCEED || hg_class_g == NULL || hg_context_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error with Mercury init\n", pdc_server_rank_g); - goto done; - } + port = pdc_server_rank_g % 32 + 7000; + ret_value = PDC_Server_init(port, &hg_class_g, &hg_context_g); + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_init"); // Register Mercury RPC/bulk PDC_Server_mercury_register(); @@ -2226,17 +2172,16 @@ server_run(int argc, char *argv[]) // Lookup and get addresses of other servers char *lookup_on_demand = getenv("PDC_LOOKUP_ON_DEMAND"); - if (lookup_on_demand != NULL) { - if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[0]: will lookup other PDC servers on demand\n"); - } + if (lookup_on_demand != NULL && pdc_server_rank_g == 0) + LOG_INFO("Rank 0 will lookup other PDC servers on demand\n"); else PDC_Server_lookup_all_servers(); // Write server addrs to the config file for client to read from - if (pdc_server_rank_g == 0) - if (PDC_Server_write_addr_to_file(all_addr_strings_g, pdc_server_size_g) != SUCCEED) - LOG_ERROR("==PDC_SERVER[%d]: Error with write config file\n", pdc_server_rank_g); + if (pdc_server_rank_g == 0 && + PDC_Server_write_addr_to_file(all_addr_strings_g, pdc_server_size_g) != SUCCEED) { + LOG_ERROR("Error with write config file\n"); + } #ifdef ENABLE_ROCKSDB if (use_rocksdb_g) { @@ -2265,7 +2210,7 @@ server_run(int argc, char *argv[]) rocksdb_g = rocksdb_open(options, rocksdb_path, &err); assert(!err); if (pdc_server_rank_g == 0) - LOG_INFO("==PDC_SERVER[%d]: RocksDB initialized\n", pdc_server_rank_g); + LOG_INFO("RocksDB initialized\n"); } #endif @@ -2282,27 +2227,27 @@ server_run(int argc, char *argv[]) "value_int INTEGER, value_float REAL, value_double REAL, value_blob BLOB);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); // Create indexes sqlite3_exec(sqlite3_db_g, "CREATE INDEX index_name ON objects(name);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); sqlite3_exec(sqlite3_db_g, "CREATE INDEX index_value_int ON objects(value_int);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); sqlite3_exec(sqlite3_db_g, "CREATE INDEX index_value_text ON objects(value_text);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); sqlite3_exec(sqlite3_db_g, "CREATE INDEX index_value_float ON objects(value_float);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); sqlite3_exec(sqlite3_db_g, "CREATE INDEX index_value_double ON objects(value_double);", 0, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); } #endif @@ -2317,15 +2262,14 @@ server_run(int argc, char *argv[]) if (pdc_server_rank_g == 0) { #ifdef PDC_TIMING - LOG_INFO("==PDC_SERVER[%d]: total startup time = %.6f\n", pdc_server_rank_g, server_init_time); + LOG_INFO("Total startup time = %.6f\n", server_init_time); #endif #ifdef ENABLE_MPI - LOG_INFO("==PDC_SERVER[%d]: Server ready!\n\n\n", pdc_server_rank_g); + LOG_INFO("Server ready!\n\n\n"); #else - LOG_INFO("==PDC_SERVER[%d]: Server ready (no MPI)!\n\n\n", pdc_server_rank_g); + LOG_INFO("Server ready (MPI disabled)\n\n\n"); #endif } - fflush(stdout); // Main loop to handle Mercury RPC/Bulk requests #ifdef ENABLE_MULTITHREAD @@ -2345,7 +2289,7 @@ server_run(int argc, char *argv[]) struct stat st; snprintf(rocksdb_fname, ADDR_MAX, "/tmp/PDC_rocksdb_%d", pdc_server_rank_g); stat(rocksdb_fname, &st); - LOG_INFO("==PDC_SERVER[%d]: RocksDB file size %lu\n", pdc_server_rank_g, st.st_size); + LOG_INFO("RocksDB file size %lu\n", st.st_size); rocksdb_close(rocksdb_g); } @@ -2357,8 +2301,8 @@ server_run(int argc, char *argv[]) struct stat st; snprintf(sqlite3_fname, ADDR_MAX, "/tmp/PDC_sqlite3_%d", pdc_server_rank_g); stat(sqlite3_fname, &st); - LOG_INFO("==PDC_SERVER[%d]: SQLite3 max memory usage: %llu, DB file size %lu\n", pdc_server_rank_g, - sqlite3_memory_highwater(0), st.st_size); + LOG_INFO("SQLite3 max memory usage: %llu, DB file size %lu\n", sqlite3_memory_highwater(0), + st.st_size); sqlite3_close(sqlite3_db_g); } #endif @@ -2370,5 +2314,6 @@ server_run(int argc, char *argv[]) #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + + FUNC_LEAVE(ret_value); } diff --git a/src/server/pdc_server_analysis/pdc_server_analysis.c b/src/server/pdc_server_analysis/pdc_server_analysis.c index 773db7c1e..ae6a98632 100644 --- a/src/server/pdc_server_analysis/pdc_server_analysis.c +++ b/src/server/pdc_server_analysis/pdc_server_analysis.c @@ -59,6 +59,7 @@ #include "pdc_analysis_pkg.h" #include "pdc_analysis.h" #include "pdc_logger.h" +#include "pdc_timing.h" #ifdef PDC_HAS_CRAY_DRC #include @@ -87,12 +88,12 @@ hg_thread_mutex_t insert_iterator_mutex_g = HG_THREAD_MUTEX_INITIALIZER; perr_t PDC_Server_instantiate_data_iterator(obj_data_iterator_in_t *in, obj_data_iterator_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; data_server_region_t * region_reference = NULL; struct _pdc_iterator_info *thisIter; - FUNC_ENTER(NULL); - #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&insert_iterator_mutex_g); #endif @@ -119,7 +120,7 @@ PDC_Server_instantiate_data_iterator(obj_data_iterator_in_t *in, obj_data_iterat thisIter->storage_order = (_pdc_major_type_t)((in->storageinfo >> 8) & 0xFF); region_reference = PDC_Server_get_obj_region(in->object_id); if (region_reference == NULL) { - LOG_ERROR("==PDC_ANALYSIS_SERVER: Unable to locate object region (id=%" PRIu64 ")\n", in->object_id); + LOG_ERROR("Unable to locate object region (id=%" PRIu64 ")\n", in->object_id); /* The most likely cause of this condition is that the client never * created an object mapping which would move the client data to the data-server. * We now have the option to either fail, or to create a new temporary region. @@ -129,7 +130,7 @@ PDC_Server_instantiate_data_iterator(obj_data_iterator_in_t *in, obj_data_iterat out->server_region_id = -1; } else { - LOG_INFO("==PDC_ANALYSIS_SERVER: Found object region for id=%" PRIu64 "\n", in->object_id); + LOG_INFO("Found object region for id=%" PRIu64 "\n", in->object_id); out->server_region_id = in->object_id; } @@ -152,6 +153,8 @@ PDC_Server_instantiate_data_iterator(obj_data_iterator_in_t *in, obj_data_iterat void * PDC_Server_get_region_data_ptr(pdcid_t object_id) { + FUNC_ENTER(NULL); + data_server_region_t *region_reference = NULL; region_reference = PDC_Server_get_obj_region(object_id); if (region_reference) { @@ -162,12 +165,15 @@ PDC_Server_get_region_data_ptr(pdcid_t object_id) else return region_reference->obj_data_ptr; } - return NULL; + + FUNC_LEAVE(NULL); } void * PDC_Server_get_ftn_reference(char *ftn) { + FUNC_ENTER(NULL); + static void *appHandle = NULL; void * ftnHandle = NULL; if (appHandle == NULL) { @@ -175,34 +181,40 @@ PDC_Server_get_ftn_reference(char *ftn) if ((appHandle = dlopen(0, RTLD_NOW)) == NULL) { char *this_error = dlerror(); LOG_ERROR("dlopen failed: %s\n", this_error); - fflush(stderr); - return NULL; + FUNC_LEAVE(NULL); } } ftnHandle = dlsym(appHandle, ftn); - return ftnHandle; + + FUNC_LEAVE(ftnHandle); } size_t PDCobj_data_getSliceCount(pdcid_t iter) { + FUNC_ENTER(NULL); + struct _pdc_iterator_info *thisIter = NULL; /* Special case to handle a NULL iterator */ if (iter == 0) - return 0; + FUNC_LEAVE(0); /* FIXME: Should add another check to see that the input * iter id is in the range of cached values... */ if ((PDC_Block_iterator_cache != NULL) && (iter > 0)) { thisIter = &PDC_Block_iterator_cache[iter]; - return thisIter->sliceCount; + FUNC_LEAVE(thisIter->sliceCount); } - return 0; + + FUNC_LEAVE(0); } size_t PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) { + FUNC_ENTER(NULL); + int ret_value = SUCCEED; + struct _pdc_iterator_info *thisIter = NULL; /* Special case to handle a NULL iterator */ if (iter == 0) { @@ -210,7 +222,8 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) *nextBlock = NULL; if (dims != NULL) *dims = 0; - return 0; + + FUNC_LEAVE(0); } if ((PDC_Block_iterator_cache != NULL) && (iter > 0)) { @@ -218,10 +231,10 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) if (thisIter->srcStart == NULL) { if (execution_locus == SERVER_MEMORY) { if ((thisIter->srcNext = PDC_Server_get_region_data_ptr(thisIter->objectId)) == NULL) - thisIter->srcNext = malloc(thisIter->totalElements * thisIter->element_size); + thisIter->srcNext = PDC_malloc(thisIter->totalElements * thisIter->element_size); if ((thisIter->srcStart = thisIter->srcNext) == NULL) { - LOG_ERROR("==PDC_ANALYSIS_SERVER: Unable to allocate iterator storage\n"); - return 0; + LOG_ERROR("Unable to allocate iterator storage\n"); + FUNC_LEAVE(0); } thisIter->srcNext += thisIter->startOffset + thisIter->skipCount; } @@ -239,7 +252,7 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) *nextBlock = NULL; thisIter->sliceNext = 0; thisIter->srcNext = NULL; - goto done; + PGOTO_DONE(ret_value); } if (nextBlock) *nextBlock = thisIter->srcNext; @@ -273,7 +286,7 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) if (thisIter->ndim > 3) dims[2] = thisIter->dims[3]; } - return thisIter->elementsPerBlock; + FUNC_LEAVE(thisIter->elementsPerBlock); } } @@ -282,15 +295,19 @@ PDCobj_data_getNextBlock(pdcid_t iter, void **nextBlock, size_t *dims) dims[0] = dims[1] = 0; if (nextBlock) *nextBlock = NULL; - return 0; + + FUNC_LEAVE(ret_value); } int PDC_get_analysis_registry(struct _pdc_region_analysis_ftn_info ***registry) { + FUNC_ENTER(NULL); + if (registry) { *registry = pdc_region_analysis_registry; - return hg_atomic_get32(®istered_analysis_ftn_count_g); + FUNC_LEAVE(hg_atomic_get32(®istered_analysis_ftn_count_g)); } - return 0; + + FUNC_LEAVE(0); } diff --git a/src/server/pdc_server_main.c b/src/server/pdc_server_main.c index 1cda39457..3f62277b0 100644 --- a/src/server/pdc_server_main.c +++ b/src/server/pdc_server_main.c @@ -1,7 +1,9 @@ #include "pdc_server.h" +#include "pdc_timing.h" int main(int argc, char *argv[]) { - return server_run(argc, argv); + FUNC_ENTER(NULL); + FUNC_LEAVE(server_run(argc, argv)); } \ No newline at end of file diff --git a/src/server/pdc_server_metadata.c b/src/server/pdc_server_metadata.c index 04c3df74e..efec78ff5 100644 --- a/src/server/pdc_server_metadata.c +++ b/src/server/pdc_server_metadata.c @@ -76,36 +76,6 @@ double server_hash_insert_time_g = 0.0; double server_bloom_init_time_g = 0.0; uint32_t n_metadata_g = 0; -pbool_t -PDC_region_is_identical(region_info_transfer_t reg1, region_info_transfer_t reg2) -{ - pbool_t ret_value = 0; - - FUNC_ENTER(NULL); - - if (reg1.ndim != reg2.ndim) - PGOTO_DONE(ret_value); - if (reg1.ndim >= 1) { - if (reg1.count_0 != reg2.count_0 || reg1.start_0 != reg2.start_0) - PGOTO_DONE(ret_value); - } - if (reg1.ndim >= 2) { - if (reg1.count_1 != reg2.count_1 || reg1.start_1 != reg2.start_1) - PGOTO_DONE(ret_value); - } - if (reg1.ndim >= 3) { - if (reg1.count_2 != reg2.count_2 || reg1.start_2 != reg2.start_2) - PGOTO_DONE(ret_value); - } - if (reg1.ndim >= 4) { - if (reg1.count_3 != reg2.count_3 || reg1.start_3 != reg2.start_3) - PGOTO_DONE(ret_value); - } - ret_value = 1; -done: - FUNC_LEAVE(ret_value); -} - /* * Check if two hash keys are equal * @@ -117,7 +87,8 @@ PDC_region_is_identical(region_info_transfer_t reg1, region_info_transfer_t reg2 static int PDC_Server_metadata_int_equal(void *vlocation1, void *vlocation2) { - return *((uint32_t *)vlocation1) == *((uint32_t *)vlocation2); + FUNC_ENTER(NULL); + FUNC_LEAVE(*((uint32_t *)vlocation1) == *((uint32_t *)vlocation2)); } /* @@ -130,7 +101,8 @@ PDC_Server_metadata_int_equal(void *vlocation1, void *vlocation2) static unsigned int PDC_Server_metadata_int_hash(void *vlocation) { - return *((uint32_t *)vlocation); + FUNC_ENTER(NULL); + FUNC_LEAVE(*((uint32_t *)vlocation)); } /* @@ -143,7 +115,11 @@ PDC_Server_metadata_int_hash(void *vlocation) static void PDC_Server_metadata_int_hash_key_free(void *key) { - free((uint32_t *)key); + FUNC_ENTER(NULL); + + key = (void *)PDC_free((uint32_t *)key); + + FUNC_LEAVE_VOID(); } /* @@ -156,11 +132,11 @@ PDC_Server_metadata_int_hash_key_free(void *key) static void PDC_Server_metadata_hash_value_free(void *value) { + FUNC_ENTER(NULL); + pdc_metadata_t * elt, *tmp; pdc_hash_table_entry_head *head; - FUNC_ENTER(NULL); - head = (pdc_hash_table_entry_head *)value; // Free bloom filter @@ -172,9 +148,11 @@ PDC_Server_metadata_hash_value_free(void *value) if (is_restart_g == 0) { DL_FOREACH_SAFE(head->metadata, elt, tmp) { - free(elt); + elt = (pdc_metadata_t *)PDC_free(elt); } } + + FUNC_LEAVE_VOID(); } /* @@ -187,9 +165,13 @@ PDC_Server_metadata_hash_value_free(void *value) static void PDC_Server_container_hash_value_free(void *value) { + FUNC_ENTER(NULL); + pdc_cont_hash_table_entry_t *head = (pdc_cont_hash_table_entry_t *)value; if (head->obj_ids != NULL) - free(head->obj_ids); + head->obj_ids = (uint64_t *)PDC_free(head->obj_ids); + + FUNC_LEAVE_VOID(); } /* @@ -202,10 +184,10 @@ PDC_Server_container_hash_value_free(void *value) void PDC_Server_metadata_init(pdc_metadata_t *a) { - int i; - FUNC_ENTER(NULL); + int i; + a->user_id = 0; a->time_step = 0; a->app_name[0] = 0; @@ -229,6 +211,8 @@ PDC_Server_metadata_init(pdc_metadata_t *a) a->next = NULL; a->transform_state = 0; memset(&a->current_state, 0, sizeof(struct _pdc_transform_state)); + + FUNC_LEAVE_VOID(); } // ^ hash table @@ -244,7 +228,10 @@ static inline void combine_obj_info_to_string(pdc_metadata_t *metadata, char *output) { FUNC_ENTER(NULL); + snprintf(output, TAG_LEN_MAX, "%s%d", metadata->obj_name, metadata->time_step); + + FUNC_LEAVE_VOID(); } /* @@ -258,22 +245,18 @@ combine_obj_info_to_string(pdc_metadata_t *metadata, char *output) static pdc_metadata_t * find_metadata_by_id_from_list(pdc_metadata_t *mlist, uint64_t obj_id) { - pdc_metadata_t *ret_value, *elt; - FUNC_ENTER(NULL); + pdc_metadata_t *ret_value, *elt; + ret_value = NULL; - if (mlist == NULL) { - ret_value = NULL; - goto done; - } + if (mlist == NULL) + PGOTO_DONE(NULL); DL_FOREACH(mlist, elt) { - if (elt->obj_id == obj_id) { - ret_value = elt; - goto done; - } + if (elt->obj_id == obj_id) + PGOTO_DONE(elt); } done: @@ -283,6 +266,8 @@ find_metadata_by_id_from_list(pdc_metadata_t *mlist, uint64_t obj_id) pdc_metadata_t * find_metadata_by_id(uint64_t obj_id) { + FUNC_ENTER(NULL); + pdc_metadata_t * ret_value = NULL; pdc_hash_table_entry_head *head; pdc_metadata_t * elt; @@ -290,8 +275,6 @@ find_metadata_by_id(uint64_t obj_id) HashTablePair pair; int n_entry; - FUNC_ENTER(NULL); - if (metadata_hash_table_g != NULL) { // Since we only have the obj id, need to iterate the entire hash table n_entry = hash_table_num_entries(metadata_hash_table_g); @@ -309,10 +292,10 @@ find_metadata_by_id(uint64_t obj_id) } } } - } // if (metadata_hash_table_g != NULL) + } else { - LOG_INFO("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - goto done; + LOG_WARNING("metadata_hash_table_g not initialized\n"); + PGOTO_DONE(ret_value); } done: @@ -322,10 +305,10 @@ find_metadata_by_id(uint64_t obj_id) pdc_metadata_t * PDC_Server_get_obj_metadata(pdcid_t obj_id) { - pdc_metadata_t *ret_value = NULL; - FUNC_ENTER(NULL); + pdc_metadata_t *ret_value = NULL; + ret_value = find_metadata_by_id(obj_id); FUNC_LEAVE(ret_value); @@ -334,9 +317,12 @@ PDC_Server_get_obj_metadata(pdcid_t obj_id) int PDC_Server_has_metadata(pdcid_t obj_id) { + FUNC_ENTER(NULL); + if (obj_id / PDC_SERVER_ID_INTERVEL == (pdcid_t)pdc_server_rank_g + 1) - return 1; - return 0; + FUNC_LEAVE(1); + + FUNC_LEAVE(0); } /* @@ -350,14 +336,14 @@ PDC_Server_has_metadata(pdcid_t obj_id) static pdc_metadata_t * find_identical_metadata(pdc_hash_table_entry_head *entry, pdc_metadata_t *a) { + FUNC_ENTER(NULL); + pdc_metadata_t *ret_value = NULL; BLOOM_TYPE_T * bloom; int bloom_check; char combined_string[TAG_LEN_MAX]; pdc_metadata_t *elt; - FUNC_ENTER(NULL); - // Use bloom filter to quick check if current metadata is in the list if (entry->bloom != NULL && a->user_id != 0 && a->app_name[0] != 0) { bloom = entry->bloom; @@ -391,19 +377,15 @@ find_identical_metadata(pdc_hash_table_entry_head *entry, pdc_metadata_t *a) #endif n_bloom_total_g++; - if (bloom_check == 0) { - ret_value = NULL; - goto done; - } + if (bloom_check == 0) + PGOTO_DONE(NULL); else { // bloom filter says maybe, so need to check entire list n_bloom_maybe_g++; DL_FOREACH(entry->metadata, elt) { - if (PDC_metadata_cmp(elt, a) == 0) { - ret_value = elt; - goto done; - } + if (PDC_metadata_cmp(elt, a) == 0) + PGOTO_DONE(elt); } } } @@ -411,12 +393,10 @@ find_identical_metadata(pdc_hash_table_entry_head *entry, pdc_metadata_t *a) // Bloom has not been created DL_FOREACH(entry->metadata, elt) { - if (PDC_metadata_cmp(elt, a) == 0) { - ret_value = elt; - goto done; - } + if (PDC_metadata_cmp(elt, a) == 0) + PGOTO_DONE(elt); } - } // if bloom==NULL + } done: FUNC_LEAVE(ret_value); @@ -430,10 +410,10 @@ find_identical_metadata(pdc_hash_table_entry_head *entry, pdc_metadata_t *a) static uint64_t PDC_Server_gen_obj_id() { - uint64_t ret_value; - FUNC_ENTER(NULL); + uint64_t ret_value; + #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&gen_obj_id_mutex_g); #endif @@ -450,25 +430,21 @@ PDC_Server_gen_obj_id() perr_t PDC_Server_init_hash_table() { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + // Metadata hash table metadata_hash_table_g = hash_table_new(PDC_Server_metadata_int_hash, PDC_Server_metadata_int_equal); - if (metadata_hash_table_g == NULL) { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g init error! Exit...\n"); - goto done; - } + if (metadata_hash_table_g == NULL) + PGOTO_ERROR(FAIL, "metadata_hash_table_g init error, exit..."); hash_table_register_free_functions(metadata_hash_table_g, PDC_Server_metadata_int_hash_key_free, PDC_Server_metadata_hash_value_free); // Container hash table container_hash_table_g = hash_table_new(PDC_Server_metadata_int_hash, PDC_Server_metadata_int_equal); - if (container_hash_table_g == NULL) { - LOG_ERROR("==PDC_SERVER: container_hash_table_g init error! Exit...\n"); - goto done; - } + if (container_hash_table_g == NULL) + PGOTO_ERROR(FAIL, "metadata_hash_table_g init error, exit..."); hash_table_register_free_functions(container_hash_table_g, PDC_Server_metadata_int_hash_key_free, PDC_Server_container_hash_value_free); @@ -489,24 +465,19 @@ PDC_Server_init_hash_table() static perr_t PDC_Server_remove_from_bloom(pdc_metadata_t *metadata, BLOOM_TYPE_T *bloom) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - if (bloom == NULL) { - LOG_ERROR("==PDC_SERVER: PDC_Server_remove_from_bloom(): bloom pointer is NULL\n"); - ret_value = FAIL; - goto done; - } + perr_t ret_value = SUCCEED; + + if (bloom == NULL) + PGOTO_ERROR(FAIL, "PDC_Server_remove_from_bloom pointer is NULL\n"); char combined_string[TAG_LEN_MAX]; combine_obj_info_to_string(metadata, combined_string); ret_value = BLOOM_REMOVE(bloom, combined_string, strlen(combined_string)); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_remove_from_bloom() - error\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Rank [%d]: PDC_Server_remove_from_bloom() - error\n", pdc_server_rank_g); done: FUNC_LEAVE(ret_value); @@ -523,22 +494,19 @@ PDC_Server_remove_from_bloom(pdc_metadata_t *metadata, BLOOM_TYPE_T *bloom) static perr_t PDC_Server_add_to_bloom(pdc_metadata_t *metadata, BLOOM_TYPE_T *bloom) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; char combined_string[TAG_LEN_MAX]; - FUNC_ENTER(NULL); - - if (bloom == NULL) { - goto done; - } + if (bloom == NULL) + PGOTO_ERROR(FAIL, "bloom was NULL"); combine_obj_info_to_string(metadata, combined_string); ret_value = BLOOM_ADD(bloom, combined_string, strlen(combined_string)); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_add_to_bloom() - error \n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with BLOOM_ADD"); done: FUNC_LEAVE(ret_value); @@ -554,12 +522,12 @@ PDC_Server_add_to_bloom(pdc_metadata_t *metadata, BLOOM_TYPE_T *bloom) static perr_t PDC_Server_bloom_init(pdc_hash_table_entry_head *entry) { - perr_t ret_value = 0; + FUNC_ENTER(NULL); + + perr_t ret_value = SUCCEED; int capacity = 500000; double error_rate = 0.05; - FUNC_ENTER(NULL); - // Init bloom filter n_bloom_maybe_g = 0; n_bloom_total_g = 0; @@ -574,11 +542,8 @@ PDC_Server_bloom_init(pdc_hash_table_entry_head *entry) #endif entry->bloom = (BLOOM_TYPE_T *)BLOOM_NEW(capacity, error_rate); - if (!entry->bloom) { - LOG_ERROR("ERROR: Could not create bloom filter\n"); - ret_value = -1; - goto done; - } + if (entry->bloom == NULL) + PGOTO_ERROR(FAIL, "Could not create bloom filter"); #ifdef ENABLE_TIMING // Timing @@ -595,11 +560,11 @@ PDC_Server_bloom_init(pdc_hash_table_entry_head *entry) perr_t PDC_Server_hash_table_list_insert(pdc_hash_table_entry_head *head, pdc_metadata_t *new) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *elt; - FUNC_ENTER(NULL); - // add to bloom filter if (head->n_obj == CREATE_BLOOM_THRESHOLD) { PDC_Server_bloom_init(head); @@ -608,19 +573,13 @@ PDC_Server_hash_table_list_insert(pdc_hash_table_entry_head *head, pdc_metadata_ PDC_Server_add_to_bloom(elt, head->bloom); } ret_value = PDC_Server_add_to_bloom(new, head->bloom); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_hash_table_list_insert() - error add to bloom\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error add to bloom"); } else if (head->n_obj >= CREATE_BLOOM_THRESHOLD || head->bloom != NULL) { ret_value = PDC_Server_add_to_bloom(new, head->bloom); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_hash_table_list_insert() - error add to bloom\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error add to bloom\n"); } #ifdef ENABLE_MULTITHREAD @@ -635,19 +594,17 @@ PDC_Server_hash_table_list_insert(pdc_hash_table_entry_head *head, pdc_metadata_ #endif done: - FUNC_LEAVE(ret_value); } perr_t PDC_Server_hash_table_list_init(pdc_hash_table_entry_head *entry, uint32_t *hash_key) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; hg_return_t ret; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING // Timing struct timeval pdc_timer_start; @@ -659,11 +616,8 @@ PDC_Server_hash_table_list_init(pdc_hash_table_entry_head *entry, uint32_t *hash // Insert to hash table ret = hash_table_insert(metadata_hash_table_g, hash_key, entry); - if (ret != 1) { - LOG_ERROR("PDC_Server_hash_table_list_init(): Error with hash table insert!\n"); - ret_value = FAIL; - goto done; - } + if (ret != 1) + PGOTO_ERROR(FAIL, "PDC_Server_hash_table_list_init error with hash table insert"); #ifdef ENABLE_TIMING // Timing @@ -680,6 +634,7 @@ PDC_Server_hash_table_list_init(pdc_hash_table_entry_head *entry, uint32_t *hash perr_t PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; uint32_t *hash_key = NULL; @@ -687,8 +642,6 @@ PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in, metadata_add_tag_out_t *o int unlocked = 0; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING // Timing struct timeval pdc_timer_start; @@ -698,11 +651,9 @@ PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in, metadata_add_tag_out_t *o gettimeofday(&pdc_timer_start, 0); #endif - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); - if (hash_key == NULL) { - LOG_ERROR("==PDC_SERVER: Cannot allocate hash_key!\n"); - goto done; - } + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); + if (hash_key == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate hash_key"); total_mem_usage_g += sizeof(uint32_t); *hash_key = in->hash_value; uint64_t obj_id = in->obj_id; @@ -741,28 +692,24 @@ PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in, metadata_add_tag_out_t *o } // end if (target != NULL) else { // Object not found for deletion request - LOG_ERROR("==PDC_SERVER: add tag target not found 1!\n"); + LOG_ERROR("Add tag target not found \n"); out->ret = -1; } } // end if lookup_value != NULL else { - LOG_ERROR("==PDC_SERVER: add tag target not found 2!\n"); + LOG_ERROR("Add tag target not found 2\n"); out->ret = -1; } } // if (metadata_hash_table_g != NULL) else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initilized!\n"); - ret_value = FAIL; - out->ret = -1; - goto done; + out->ret = -1; + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initilized"); } - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: error \n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_DONE(FAIL); #ifdef ENABLE_MULTITHREAD // ^ Release hash table lock @@ -793,22 +740,20 @@ PDC_Server_add_tag_metadata(metadata_add_tag_in_t *in, metadata_add_tag_out_t *o if (unlocked == 0) hg_thread_mutex_unlock(&pdc_metadata_hash_table_mutex_g); #endif - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_update_metadata(metadata_update_in_t *in, metadata_update_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t obj_id; pdc_hash_table_entry_head *lookup_value; uint32_t * hash_key = NULL; pdc_metadata_t * target; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING // Timing struct timeval pdc_timer_start; @@ -818,11 +763,9 @@ PDC_Server_update_metadata(metadata_update_in_t *in, metadata_update_out_t *out) gettimeofday(&pdc_timer_start, 0); #endif - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); - if (hash_key == NULL) { - LOG_ERROR("==PDC_SERVER: Cannot allocate hash_key!\n"); - goto done; - } + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); + if (hash_key == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate hash_key"); total_mem_usage_g += sizeof(uint32_t); *hash_key = in->hash_value; obj_id = in->obj_id; @@ -886,10 +829,8 @@ PDC_Server_update_metadata(metadata_update_in_t *in, metadata_update_out_t *out) } // if (metadata_hash_table_g != NULL) else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - ret_value = -1; - out->ret = -1; - goto done; + out->ret = -1; + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); } #ifdef ENABLE_MULTITHREAD @@ -921,13 +862,14 @@ PDC_Server_update_metadata(metadata_update_in_t *in, metadata_update_out_t *out) if (unlocked == 0) hg_thread_mutex_unlock(&pdc_metadata_hash_table_mutex_g); #endif - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in, metadata_delete_by_id_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = FAIL; pdc_metadata_t * elt; HashTableIterator hash_table_iter; @@ -935,8 +877,6 @@ PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in, metadata_delete uint64_t target_obj_id; int n_entry; - FUNC_ENTER(NULL); - out->ret = -1; #ifdef ENABLE_TIMING @@ -971,14 +911,12 @@ PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in, metadata_delete if (cont_entry->cont_id == target_obj_id) { hash_table_remove(container_hash_table_g, pair.key); - out->ret = 1; - ret_value = SUCCEED; - goto done; + out->ret = 1; + PGOTO_DONE(SUCCEED); } } } if (out->ret == -1 && metadata_hash_table_g != NULL) { - // Since we only have the obj id, need to iterate the entire hash table pdc_hash_table_entry_head *head; @@ -1018,10 +956,8 @@ PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in, metadata_delete } // while } // if (metadata_hash_table_g != NULL) else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - ret_value = FAIL; - out->ret = -1; - goto done; + out->ret = -1; + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); } done: @@ -1069,12 +1005,12 @@ PDC_Server_delete_metadata_by_id(metadata_delete_by_id_in_t *in, metadata_delete perr_t PDC_delete_metadata_from_hash_table(metadata_delete_in_t *in, metadata_delete_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t * hash_key = NULL; pdc_metadata_t *target; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING // Timing struct timeval pdc_timer_start; @@ -1084,11 +1020,9 @@ PDC_delete_metadata_from_hash_table(metadata_delete_in_t *in, metadata_delete_ou gettimeofday(&pdc_timer_start, 0); #endif - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); - if (hash_key == NULL) { - LOG_ERROR("==PDC_SERVER: Cannot allocate hash_key!\n"); - goto done; - } + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); + if (hash_key == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate hash_key"); total_mem_usage_g += sizeof(uint32_t); *hash_key = in->hash_value; @@ -1134,24 +1068,22 @@ PDC_delete_metadata_from_hash_table(metadata_delete_in_t *in, metadata_delete_ou } // if (lookup_value != NULL) else { // Object not found for deletion request - LOG_ERROR("==PDC_SERVER: delete target not found!\n"); + LOG_ERROR("Delete target not found\n"); ret_value = -1; out->ret = -1; } } // if lookup_value != NULL else { - LOG_ERROR("==PDC_SERVER: delete target not found!\n"); + LOG_ERROR("Delete target not found\n"); ret_value = -1; out->ret = -1; } } // if (metadata_hash_table_g != NULL) else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - ret_value = -1; - out->ret = -1; - goto done; + out->ret = -1; + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); } #ifdef ENABLE_MULTITHREAD @@ -1198,6 +1130,8 @@ PDC_delete_metadata_from_hash_table(metadata_delete_in_t *in, metadata_delete_ou perr_t PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *metadata; uint32_t * hash_key, i; @@ -1206,8 +1140,6 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) // DEBUG int debug_flag = 0; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING // Timing struct timeval pdc_timer_start; @@ -1218,10 +1150,8 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) #endif metadata = (pdc_metadata_t *)PDC_malloc(sizeof(pdc_metadata_t)); - if (metadata == NULL) { - LOG_ERROR("Cannot allocate pdc_metadata_t!\n"); - goto done; - } + if (metadata == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate pdc_metadata_t"); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&total_mem_usage_mutex_g); @@ -1253,10 +1183,8 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) strcpy(metadata->data_location, in->data.data_location); hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); - if (hash_key == NULL) { - LOG_ERROR("Cannot allocate hash_key!\n"); - goto done; - } + if (hash_key == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate hash_key"); total_mem_usage_g += sizeof(uint32_t); *hash_key = in->hash_value; @@ -1277,15 +1205,14 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) // Is this hash value exist in the Hash table? if (lookup_value != NULL) { if (debug_flag == 1) - LOG_DEBUG("lookup_value not NULL!\n"); + LOG_DEBUG("lookup_value not NULL\n"); // Check if there exist metadata identical to current one found_identical = find_identical_metadata(lookup_value, metadata); if (found_identical != NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Found identical metadata with name %s!\n", pdc_server_rank_g, - metadata->obj_name); out->obj_id = 0; - free(metadata); - goto done; + metadata = (pdc_metadata_t *)PDC_free(metadata); + PGOTO_ERROR(FAIL, "Found identical metadata with name %s", pdc_server_rank_g, + metadata->obj_name); } else { PDC_Server_hash_table_list_insert(lookup_value, metadata); @@ -1293,10 +1220,8 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) } else { // First entry for current hasy_key, init linked list, and insert to hash table - if (debug_flag == 1) { + if (debug_flag == 1) LOG_DEBUG("lookup_value is NULL! Init linked list\n"); - } - fflush(stdout); pdc_hash_table_entry_head *entry = (pdc_hash_table_entry_head *)PDC_malloc(sizeof(pdc_hash_table_entry_head)); @@ -1309,10 +1234,8 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) PDC_Server_hash_table_list_insert(entry, metadata); } } - else { - LOG_ERROR("metadata_hash_table_g not initialized!\n"); - goto done; - } + else + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); // Generate object id (uint64_t) metadata->obj_id = PDC_Server_gen_obj_id(); @@ -1364,14 +1287,14 @@ PDC_insert_metadata_to_hash_table(gen_obj_id_in_t *in, gen_obj_id_out_t *out) perr_t PDC_Server_print_all_metadata() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; HashTableIterator hash_table_iter; pdc_metadata_t * elt; pdc_hash_table_entry_head *head; HashTablePair pair; - FUNC_ENTER(NULL); - hash_table_iterate(metadata_hash_table_g, &hash_table_iter); while (hash_table_iter_has_more(&hash_table_iter)) { pair = hash_table_iter_next(&hash_table_iter); @@ -1381,20 +1304,21 @@ PDC_Server_print_all_metadata() PDC_print_metadata(elt); } } + FUNC_LEAVE(ret_value); } perr_t PDC_Server_print_all_containers() { + FUNC_ENTER(NULL); + int i; perr_t ret_value = SUCCEED; HashTableIterator hash_table_iter; pdc_cont_hash_table_entry_t *cont_entry = NULL; HashTablePair pair; - FUNC_ENTER(NULL); - hash_table_iterate(container_hash_table_g, &hash_table_iter); while (hash_table_iter_has_more(&hash_table_iter)) { pair = hash_table_iter_next(&hash_table_iter); @@ -1414,6 +1338,8 @@ PDC_Server_print_all_containers() perr_t PDC_Server_metadata_duplicate_check() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; HashTableIterator hash_table_iter; HashTablePair pair; @@ -1424,8 +1350,6 @@ PDC_Server_metadata_duplicate_check() pdc_metadata_t * elt, *elt_next; pdc_hash_table_entry_head *head; - FUNC_ENTER(NULL); - n_entry = hash_table_num_entries(metadata_hash_table_g); #ifdef ENABLE_MPI @@ -1439,12 +1363,10 @@ PDC_Server_metadata_duplicate_check() #endif if (pdc_server_rank_g == 0) { - LOG_INFO("==PDC_SERVER: Bloom filter says maybe %d times out of %d\n", all_maybe, all_total); - LOG_INFO("==PDC_SERVER: Metadata duplicate check with %d hash entries ", all_entry); + LOG_INFO("Bloom filter says maybe %d times out of %d\n", all_maybe, all_total); + LOG_INFO("Metadata duplicate check with %d hash entries\n", all_entry); } - fflush(stdout); - hash_table_iterate(metadata_hash_table_g, &hash_table_iter); while (n_entry != 0 && hash_table_iter_has_more(&hash_table_iter)) { @@ -1458,16 +1380,13 @@ PDC_Server_metadata_duplicate_check() if (elt_next != NULL) { if (PDC_metadata_cmp(elt, elt_next) == 0) { has_dup_obj = 1; - ret_value = FAIL; - goto done; + PGOTO_DONE(FAIL); } } } count++; } - fflush(stdout); - done: #ifdef ENABLE_MPI MPI_Reduce(&has_dup_obj, &all_dup_obj, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); @@ -1476,10 +1395,10 @@ PDC_Server_metadata_duplicate_check() #endif if (pdc_server_rank_g == 0) { if (all_dup_obj > 0) { - LOG_INFO(" ...Found duplicates!\n"); + LOG_INFO(" ...Found duplicates\n"); } else { - LOG_INFO(" ...No duplicates found!\n"); + LOG_INFO(" ...No duplicates found\n"); } } @@ -1497,38 +1416,26 @@ PDC_Server_metadata_duplicate_check() static int is_metadata_satisfy_constraint(pdc_metadata_t *metadata, metadata_query_transfer_in_t *constraints) { - int ret_value = 1; - FUNC_ENTER(NULL); - if (constraints->user_id > 0 && constraints->user_id != metadata->user_id) { - ret_value = -1; - goto done; - } - if (strcmp(constraints->app_name, " ") != 0 && strcmp(metadata->app_name, constraints->app_name) != 0) { - ret_value = -1; - goto done; - } - if (strcmp(constraints->obj_name, " ") != 0 && strcmp(metadata->obj_name, constraints->obj_name) != 0) { - ret_value = -1; - goto done; - } + int ret_value = 1; + + if (constraints->user_id > 0 && constraints->user_id != metadata->user_id) + PGOTO_DONE(-1); + if (strcmp(constraints->app_name, " ") != 0 && strcmp(metadata->app_name, constraints->app_name) != 0) + PGOTO_DONE(-1); + if (strcmp(constraints->obj_name, " ") != 0 && strcmp(metadata->obj_name, constraints->obj_name) != 0) + PGOTO_DONE(-1); if (constraints->time_step_from > 0 && constraints->time_step_to > 0 && (metadata->time_step < constraints->time_step_from || metadata->time_step > constraints->time_step_to)) { - ret_value = -1; - goto done; - } - if (constraints->ndim > 0 && metadata->ndim != constraints->ndim) { - ret_value = -1; - goto done; + PGOTO_DONE(-1); } + if (constraints->ndim > 0 && metadata->ndim != constraints->ndim) + PGOTO_DONE(-1); // TODO: Currently only supports searching with one tag - if (strcmp(constraints->tags, " ") != 0 && strstr(metadata->tags, constraints->tags) == NULL) { - - ret_value = -1; - goto done; - } + if (strcmp(constraints->tags, " ") != 0 && strstr(metadata->tags, constraints->tags) == NULL) + PGOTO_DONE(-1); done: FUNC_LEAVE(ret_value); @@ -1537,7 +1444,9 @@ is_metadata_satisfy_constraint(pdc_metadata_t *metadata, metadata_query_transfer perr_t PDC_Server_get_partial_query_result(metadata_query_transfer_in_t *in, uint32_t *n_meta, void ***buf_ptrs) { - perr_t ret_value = FAIL; + FUNC_ENTER(NULL); + + perr_t ret_value = SUCCEED; uint32_t i; uint32_t n_buf, iter = 0; pdc_hash_table_entry_head *head; @@ -1546,17 +1455,14 @@ PDC_Server_get_partial_query_result(metadata_query_transfer_in_t *in, uint32_t * int n_entry; HashTablePair pair; - FUNC_ENTER(NULL); - // n_buf = n_metadata_g + 1 for potential padding array n_buf = n_metadata_g + 1; - *buf_ptrs = (void **)calloc(n_buf, sizeof(void *)); + *buf_ptrs = (void **)PDC_calloc(n_buf, sizeof(void *)); for (i = 0; i < n_buf; i++) { - (*buf_ptrs)[i] = (void *)calloc(1, sizeof(void *)); + (*buf_ptrs)[i] = (void *)PDC_calloc(1, sizeof(void *)); } // TODO: free buf_ptrs if (metadata_hash_table_g != NULL) { - n_entry = hash_table_num_entries(metadata_hash_table_g); hash_table_iterate(metadata_hash_table_g, &hash_table_iter); @@ -1577,13 +1483,8 @@ PDC_Server_get_partial_query_result(metadata_query_transfer_in_t *in, uint32_t * } *n_meta = iter; } // if (metadata_hash_table_g != NULL) - else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - ret_value = FAIL; - goto done; - } - - ret_value = SUCCEED; + else + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); done: FUNC_LEAVE(ret_value); @@ -1593,11 +1494,13 @@ void num_query_action_someta(void *cond_exact, void *cond_lo, void *cond_hi, int lo_inclusive, int hi_inclusive, pdc_c_var_type_t num_type, void *input, void **out, uint64_t *out_len) { + FUNC_ENTER(NULL); + void * input_val = ((pdc_kvtag_t *)input)->value; size_t input_size = ((pdc_kvtag_t *)input)->size; libhl_cmp_callback_t cmp_func = LIBHL_CMP_CB(num_type); *out_len = 1; - *out = calloc(1, sizeof(uint64_t)); + *out = PDC_calloc(1, sizeof(uint64_t)); pbool_t ret_value = FALSE; if (cond_exact != NULL) { // Exact ret_value = cmp_func(input_val, input_size, cond_exact, get_size_by_dtype(num_type)) == 0; @@ -1624,6 +1527,8 @@ num_query_action_someta(void *cond_exact, void *cond_lo, void *cond_hi, int lo_i else { } *((uint64_t *)(*out)) = (uint64_t)ret_value; + + FUNC_LEAVE_VOID(); } num_query_action_collection_t soMetaNumQueryActions = {num_query_action_someta, num_query_action_someta, @@ -1632,21 +1537,22 @@ num_query_action_collection_t soMetaNumQueryActions = {num_query_action_someta, pbool_t _is_matching_kvtag(pdc_kvtag_t *in, pdc_kvtag_t *kvtag) { - pbool_t ret_value = TRUE; FUNC_ENTER(NULL); + + pbool_t ret_value = TRUE; // match attribute name if (!simple_matches(kvtag->name, in->name)) { - return FALSE; + FUNC_LEAVE(FALSE); } // test attribute type if (in->type != kvtag->type) { - return FALSE; + FUNC_LEAVE(FALSE); } if (in->type == (int8_t)PDC_STRING) { char *pattern = (char *)in->value; if (!simple_matches(kvtag->value, pattern)) { - return FALSE; + FUNC_LEAVE(FALSE); } } else { // FIXME: for all numeric types, we use memcmp to compare, for exact value query, but we also @@ -1667,29 +1573,33 @@ _is_matching_kvtag(pdc_kvtag_t *in, pdc_kvtag_t *kvtag) static int sqlite_query_kvtag_callback(void *data, int argc, char **argv, char **colName) { + FUNC_ENTER(NULL); + pdc_sqlite3_query_t *query_data = (pdc_sqlite3_query_t *)data; if (NULL != argv[0]) { pdcid_t id = strtoull(argv[0], NULL, 10); if (query_data->nobj >= query_data->nalloc) { query_data->nalloc *= 2; - *query_data->obj_ids = realloc(*query_data->obj_ids, query_data->nalloc * sizeof(uint64_t)); + *query_data->obj_ids = PDC_realloc(*query_data->obj_ids, query_data->nalloc * sizeof(uint64_t)); } (*query_data->obj_ids)[query_data->nobj] = id; query_data->nobj += 1; } else { LOG_INFO("SQLite3 found nothing\n"); - return 0; + FUNC_LEAVE(0); } - return 0; + FUNC_LEAVE(0); } #endif static perr_t PDC_Server_query_kvtag_rocksdb(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ids, uint64_t alloc_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_ROCKSDB const char *rocksdb_key; @@ -1716,7 +1626,7 @@ PDC_Server_query_kvtag_rocksdb(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj if (_is_matching_kvtag(in, &tmp) == TRUE) { if (iter >= alloc_size) { alloc_size *= 2; - *obj_ids = (void *)realloc(*obj_ids, alloc_size * sizeof(uint64_t)); + *obj_ids = (void *)PDC_realloc(*obj_ids, alloc_size * sizeof(uint64_t)); } (*obj_ids)[iter++] = obj_id; } @@ -1730,16 +1640,18 @@ PDC_Server_query_kvtag_rocksdb(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj if (rocksdb_iter) rocksdb_iter_destroy(rocksdb_iter); #else - LOG_ERROR("==PDC_SERVER[%d]: enabled rocksdb but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled rocksdb but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_query_kvtag_sqlite(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ids, uint64_t alloc_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_SQLITE3 char sql[TAG_LEN_MAX]; @@ -1770,7 +1682,7 @@ PDC_Server_query_kvtag_sqlite(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ sprintf(sql, "SELECT objid FROM objects WHERE name = \'%s\' AND value_text LIKE \'%s\';", in->name, tmp_value); if (tmp_value) - free(tmp_value); + tmp_value = (char *)PDC_free(tmp_value); } } else { @@ -1809,7 +1721,7 @@ PDC_Server_query_kvtag_sqlite(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ sprintf(sql, "SELECT objid FROM objects WHERE name LIKE \'%s\' AND value_text LIKE \'%s\';", tmp_name, tmp_value); if (tmp_value) - free(tmp_value); + tmp_value = (char *)PDC_free(tmp_value); } } else { @@ -1818,7 +1730,7 @@ PDC_Server_query_kvtag_sqlite(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ } if (tmp_name) - free(tmp_name); + tmp_name = (char *)PDC_free(tmp_name); } query_data.nobj = 0; @@ -1828,20 +1740,22 @@ PDC_Server_query_kvtag_sqlite(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ // Construct a SQL query sqlite3_exec(sqlite3_db_g, sql, sqlite_query_kvtag_callback, &query_data, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); *n_meta = query_data.nobj; #else - LOG_ERROR("==PDC_SERVER[%d]: enabled SQLite3 but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled SQLite3 but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_query_kvtag_someta(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ids, uint64_t alloc_size) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t iter = 0; pdc_hash_table_entry_head *head; @@ -1862,7 +1776,7 @@ PDC_Server_query_kvtag_someta(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ DL_FOREACH(head->metadata, elt) { #ifdef PDC_DEBUG_OUTPUT - LOG_DEBUG("==PDC_SERVER: Matching kvtag [\"%s\":\"%s\"] of object %s on condition in->key: " + LOG_DEBUG("Matching kvtag [\"%s\":\"%s\"] of object %s on condition in->key: " "%s, in->value: %s ", (char *)kvtag_list_elt->kvtag->name, (char *)kvtag_list_elt->kvtag->value, elt->obj_name, in->name, in->value); @@ -1871,18 +1785,18 @@ PDC_Server_query_kvtag_someta(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ { if (_is_matching_kvtag(in, kvtag_list_elt->kvtag) == TRUE) { #ifdef PDC_DEBUG_OUTPUT - println("[Found]"); + LOG_JUST_PRINT("[Found]\n"); #endif if (iter >= alloc_size) { alloc_size *= 2; - *obj_ids = (void *)realloc(*obj_ids, alloc_size * sizeof(uint64_t)); + *obj_ids = (void *)PDC_realloc(*obj_ids, alloc_size * sizeof(uint64_t)); } (*obj_ids)[iter++] = elt->obj_id; // break; // FIXME: shall we break here? or continue to check other kvtags? } else { #ifdef PDC_DEBUG_OUTPUT - println("[NOT FOUND]"); + LOG_JUST_PRINT("[NOT FOUND]\n"); #endif } } // End for each kvtag in list @@ -1890,67 +1804,56 @@ PDC_Server_query_kvtag_someta(pdc_kvtag_t *in, uint32_t *n_meta, uint64_t **obj_ } // End looping metadata hash table *n_meta = iter; #ifdef PDC_DEBUG_OUTPUT - LOG_DEBUG("==PDC_SERVER[%d]: found %d objids \n", pdc_server_rank_g, iter); + LOG_DEBUG("Found %d objids\n", iter); #endif - } // if (metadata_hash_table_g != NULL) + } else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); + LOG_ERROR("metadata_hash_table_g not initialized\n"); ret_value = FAIL; } - return ret_value; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_get_kvtag_query_result(pdc_kvtag_t *in /*FIXME: query input should be string-based*/, uint32_t *n_meta, uint64_t **obj_ids) { - perr_t ret_value = SUCCEED; + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t alloc_size = 128; - FUNC_ENTER(NULL); - *n_meta = 0; - *obj_ids = (void *)calloc(alloc_size, sizeof(uint64_t)); + *obj_ids = (void *)PDC_calloc(alloc_size, sizeof(uint64_t)); char *v_query = (char *)in->value; - LOG_INFO("==PDC_SERVER[%d] before stripQuotes: Querying kvtag with key [%s], value [%s]\n", - pdc_server_rank_g, in->name, (char *)in->value); + LOG_INFO("Before stripQuotes: Querying kvtag with key [%s], value [%s]\n", in->name, (char *)in->value); if (is_string_query(v_query)) { in->value = stripQuotes(v_query); in->type = PDC_STRING; } - LOG_INFO("==PDC_SERVER[%d] after stripQuotes: Querying kvtag with key [%s], value [%s]\n", - pdc_server_rank_g, in->name, (char *)in->value); + LOG_INFO("After stripQuotes: Querying kvtag with key [%s], value [%s]\n", in->name, (char *)in->value); if (use_rocksdb_g == 1) { ret_value = PDC_Server_query_kvtag_rocksdb(in, n_meta, obj_ids, alloc_size); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_query_kvtag_rocksdb!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_query_kvtag_rocksdb"); } else if (use_sqlite3_g) { ret_value = PDC_Server_query_kvtag_sqlite(in, n_meta, obj_ids, alloc_size); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_query_kvtag_sqlite!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_query_kvtag_sqlite"); } // End if SQLite3 else { // SoMeta backend ret_value = PDC_Server_query_kvtag_someta(in, n_meta, obj_ids, alloc_size); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_query_kvtag_someta!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_query_kvtag_someta"); } done: - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -1958,13 +1861,13 @@ perr_t PDC_Server_search_with_name_timestep(const char *obj_name, uint32_t hash_key, uint32_t ts, pdc_metadata_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_hash_table_entry_head *lookup_value; pdc_metadata_t metadata; const char * name; - FUNC_ENTER(NULL); - *out = NULL; // Set up a metadata struct to query @@ -1982,40 +1885,33 @@ PDC_Server_search_with_name_timestep(const char *obj_name, uint32_t hash_key, ui // Is this hash value exist in the Hash table? if (lookup_value != NULL) { *out = find_identical_metadata(lookup_value, &metadata); - - if (*out == NULL) { - ret_value = FAIL; - goto done; - } + if (*out == NULL) + PGOTO_DONE(FAIL); } else { *out = NULL; } } - else { - LOG_ERROR("metadata_hash_table_g not initialized!\n"); - ret_value = -1; - goto done; - } + else + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); if (*out == NULL) - LOG_ERROR("==PDC_SERVER[%d]: Queried object with name [%s] not found! \n", pdc_server_rank_g, name); + PGOTO_ERROR(FAIL, "Queried object with name [%s] not found", name); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_search_with_name_hash(const char *obj_name, uint32_t hash_key, pdc_metadata_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_hash_table_entry_head *lookup_value; pdc_metadata_t metadata; const char * name; - FUNC_ENTER(NULL); - *out = NULL; // Set up a metadata struct to query @@ -2034,33 +1930,28 @@ PDC_Server_search_with_name_hash(const char *obj_name, uint32_t hash_key, pdc_me // Is this hash value exist in the Hash table? if (lookup_value != NULL) { *out = find_identical_metadata(lookup_value, &metadata); - - if (*out == NULL) { - ret_value = FAIL; - goto done; - } + if (*out == NULL) + PGOTO_DONE(FAIL); } else { *out = NULL; } } - else { - LOG_ERROR("metadata_hash_table_g not initialized!\n"); - ret_value = -1; - goto done; - } + else + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); if (*out == NULL) - LOG_ERROR("==PDC_SERVER[%d]: Queried object with name [%s] not found! \n", pdc_server_rank_g, name); + PGOTO_ERROR(FAIL, "Queried object with name [%s] not found", name); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_get_local_metadata_by_id(uint64_t obj_id, pdc_metadata_t **res_meta_ptr) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_hash_table_entry_head *head; @@ -2069,8 +1960,6 @@ PDC_Server_get_local_metadata_by_id(uint64_t obj_id, pdc_metadata_t **res_meta_p int n_entry; HashTablePair pair; - FUNC_ENTER(NULL); - *res_meta_ptr = NULL; if (metadata_hash_table_g != NULL) { @@ -2086,16 +1975,14 @@ PDC_Server_get_local_metadata_by_id(uint64_t obj_id, pdc_metadata_t **res_meta_p { if (elt->obj_id == obj_id) { *res_meta_ptr = elt; - goto done; + PGOTO_DONE(ret_value); } } } } else { - LOG_ERROR("==PDC_SERVER: metadata_hash_table_g not initialized!\n"); - ret_value = FAIL; *res_meta_ptr = NULL; - goto done; + PGOTO_ERROR(FAIL, "metadata_hash_table_g not initialized"); } done: @@ -2112,47 +1999,40 @@ PDC_Server_get_local_metadata_by_id(uint64_t obj_id, pdc_metadata_t **res_meta_p static hg_return_t PDC_Server_get_metadata_by_id_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; hg_handle_t handle; pdc_metadata_t * meta = NULL; get_metadata_by_id_args_t *cb_args; get_metadata_by_id_out_t output; - FUNC_ENTER(NULL); - cb_args = (get_metadata_by_id_args_t *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); - if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_get_metadata_by_id_cb - error HG_Get_output\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Error HG_Get_output"); if (output.res_meta.obj_id != 0) { // TODO free metdata - meta = (pdc_metadata_t *)malloc(sizeof(pdc_metadata_t)); + meta = (pdc_metadata_t *)PDC_malloc(sizeof(pdc_metadata_t)); PDC_transfer_t_to_metadata_t(&output.res_meta, meta); } - else { - LOG_ERROR("==PDC_SERVER[%d]: no valid metadata is retrieved\n", pdc_server_rank_g); - goto done; - } + else + PGOTO_ERROR(ret_value, "No valid metadata is retrieved"); // Execute the callback function if (NULL != cb_args->cb) { ((region_list_t *)(cb_args->args))->meta = meta; cb_args->cb(cb_args->args, PDC_POSIX); } - else { - LOG_ERROR("==PDC_SERVER[%d]: NULL callback ptr\n", pdc_server_rank_g); - goto done; - } + else + PGOTO_ERROR(ret_value, "NULL callback ptr"); done: HG_Free_output(handle, &output); - free(cb_args); + cb_args = (get_metadata_by_id_args_t *)PDC_free(cb_args); HG_Destroy(handle); FUNC_LEAVE(ret_value); @@ -2161,6 +2041,8 @@ PDC_Server_get_metadata_by_id_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_get_metadata_by_id_with_cb(uint64_t obj_id, perr_t (*cb)(), void *args) { + FUNC_ENTER(NULL); + pdc_metadata_t * res_meta_ptr = NULL; hg_return_t hg_ret; perr_t ret_value = SUCCEED; @@ -2169,16 +2051,12 @@ PDC_Server_get_metadata_by_id_with_cb(uint64_t obj_id, perr_t (*cb)(), void *arg get_metadata_by_id_args_t *cb_args; get_metadata_by_id_in_t in; - FUNC_ENTER(NULL); - server_id = PDC_get_server_by_obj_id(obj_id, pdc_server_size_g); if (server_id == (uint32_t)pdc_server_rank_g) { // Metadata object is local, no need to send update RPC ret_value = PDC_Server_get_local_metadata_by_id(obj_id, &res_meta_ptr); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_get_local_metadata_by_id FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_get_local_metadata_by_id"); ((region_list_t *)args)->meta = res_meta_ptr; // Call the callback function directly and pass in the result metadata ptr @@ -2186,16 +2064,13 @@ PDC_Server_get_metadata_by_id_with_cb(uint64_t obj_id, perr_t (*cb)(), void *arg } else { if (PDC_Server_lookup_server_id(server_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting remote server %d addr via lookup\n", pdc_server_rank_g, - server_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting remote server %d addr via lookup", server_id); } HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, get_metadata_by_id_register_id_g, &get_metadata_by_id_handle); - cb_args = (get_metadata_by_id_args_t *)malloc(sizeof(get_metadata_by_id_args_t)); + cb_args = (get_metadata_by_id_args_t *)PDC_malloc(sizeof(get_metadata_by_id_args_t)); in.obj_id = obj_id; cb_args->cb = cb; cb_args->args = args; @@ -2204,27 +2079,24 @@ PDC_Server_get_metadata_by_id_with_cb(uint64_t obj_id, perr_t (*cb)(), void *arg hg_ret = HG_Forward(get_metadata_by_id_handle, PDC_Server_get_metadata_by_id_cb, &cb_args, &in); if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: Could not forward\n", pdc_server_rank_g); res_meta_ptr = NULL; HG_Destroy(get_metadata_by_id_handle); - return FAIL; + PGOTO_ERROR(FAIL, "Could not forward"); } } done: - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_create_container(gen_cont_id_in_t *in, gen_cont_id_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t *hash_key; - FUNC_ENTER(NULL); - out->cont_id = 0; #ifdef ENABLE_TIMING @@ -2260,16 +2132,13 @@ PDC_Server_create_container(gen_cont_id_in_t *in, gen_cont_id_out_t *out) out->cont_id = lookup_value->cont_id; } else { - hash_key = (uint32_t *)malloc(sizeof(uint32_t)); - if (hash_key == NULL) { - LOG_ERROR("Cannot allocate hash_key!\n"); - ret_value = FAIL; - goto done; - } + hash_key = (uint32_t *)PDC_malloc(sizeof(uint32_t)); + if (hash_key == NULL) + PGOTO_ERROR(FAIL, "Cannot allocate hash_key"); *hash_key = in->hash_value; pdc_cont_hash_table_entry_t *entry = - (pdc_cont_hash_table_entry_t *)calloc(1, sizeof(pdc_cont_hash_table_entry_t)); + (pdc_cont_hash_table_entry_t *)PDC_calloc(1, sizeof(pdc_cont_hash_table_entry_t)); strcpy(entry->cont_name, in->cont_name); entry->n_obj = 0; entry->n_allocated = 0; @@ -2283,18 +2152,14 @@ PDC_Server_create_container(gen_cont_id_in_t *in, gen_cont_id_out_t *out) hg_thread_mutex_unlock(&total_mem_usage_mutex_g); #endif // Insert to hash table - if (hash_table_insert(container_hash_table_g, hash_key, entry) != 1) { - LOG_ERROR("==PDC_SERVER[%d]: hash table insert failed\n", pdc_server_rank_g); - ret_value = FAIL; - } + if (hash_table_insert(container_hash_table_g, hash_key, entry) != 1) + PGOTO_ERROR(FAIL, "Hash table insert failed"); else out->cont_id = entry->cont_id; } } - else { - LOG_ERROR("==PDC_SERVER[%d]: container_hash_table_g not initialized!\n", pdc_server_rank_g); - goto done; - } + else + PGOTO_ERROR(FAIL, "container_hash_table_g not initialized"); #ifdef ENABLE_MULTITHREAD // ^ Release hash table lock @@ -2328,11 +2193,11 @@ PDC_Server_create_container(gen_cont_id_in_t *in, gen_cont_id_out_t *out) perr_t PDC_Server_delete_container_by_name(gen_cont_id_in_t *in, gen_cont_id_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t hash_key; - FUNC_ENTER(NULL); - out->cont_id = 0; hash_key = in->hash_value; @@ -2349,24 +2214,19 @@ PDC_Server_delete_container_by_name(gen_cont_id_in_t *in, gen_cont_id_out_t *out // Is this hash value exist in the Hash table? if (lookup_value != NULL) { - // Check if there exist metadata identical to current one - LOG_INFO("==PDC_SERVER[%d]: Found existing container with same hash value, name=%s!\n", - pdc_server_rank_g, lookup_value->cont_name); + LOG_INFO("Found existing container with same hash value, name=%s\n", lookup_value->cont_name); out->cont_id = 0; - goto done; + PGOTO_DONE(ret_value); } else { // Check if there exist metadata identical to current one - LOG_ERROR("==PDC_SERVER[%d]: Did not found existing container with same hash value, name=%s!\n", - pdc_server_rank_g, lookup_value->cont_name); - ret_value = FAIL; + PGOTO_ERROR(FAIL, "Did not found existing container with same hash value, name=%s", + lookup_value->cont_name); } } - else { - LOG_ERROR("==PDC_SERVER[%d]: container_hash_table_g not initialized!\n", pdc_server_rank_g); - goto done; - } + else + PGOTO_ERROR(FAIL, "container_hash_table_g not initialized"); #ifdef ENABLE_MULTITHREAD // ^ Release hash table lock @@ -2380,14 +2240,13 @@ PDC_Server_delete_container_by_name(gen_cont_id_in_t *in, gen_cont_id_out_t *out perr_t PDC_Server_find_container_by_name(const char *cont_name, pdc_cont_hash_table_entry_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t hash_key; - FUNC_ENTER(NULL); - if (NULL == cont_name || NULL == out) { - LOG_ERROR("==PDC_SERVER[%d]: input is NULL! \n", pdc_server_rank_g); - goto done; - } + if (NULL == cont_name || NULL == out) + PGOTO_ERROR(FAIL, "Input is NULL"); if (container_hash_table_g != NULL) { // lookup @@ -2400,17 +2259,13 @@ PDC_Server_find_container_by_name(const char *cont_name, pdc_cont_hash_table_ent } } } - else { - LOG_ERROR("container_hash_table_g not initialized!\n"); - ret_value = -1; - goto done; - } + else + PGOTO_ERROR(FAIL, "container_hash_table_g not initialized"); if (*out == NULL) - LOG_ERROR("==PDC_SERVER[%d]: container [%s] not found! \n", pdc_server_rank_g, cont_name); + PGOTO_ERROR(FAIL, "Container [%s] not found", cont_name); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2426,18 +2281,16 @@ PDC_Server_find_container_by_name(const char *cont_name, pdc_cont_hash_table_ent static perr_t PDC_Server_find_container_by_id(uint64_t cont_id, pdc_cont_hash_table_entry_t **out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_cont_hash_table_entry_t *cont_entry; HashTableIterator hash_table_iter; int n_entry; HashTablePair pair; - FUNC_ENTER(NULL); - - if (NULL == out) { - LOG_ERROR("==PDC_SERVER[%d]: input is NULL! \n", pdc_server_rank_g); - goto done; - } + if (NULL == out) + PGOTO_ERROR(FAIL, "Input is NULL"); if (container_hash_table_g != NULL) { // Since we only have the obj id, need to iterate the entire hash table @@ -2452,31 +2305,28 @@ PDC_Server_find_container_by_id(uint64_t cont_id, pdc_cont_hash_table_entry_t ** if (cont_entry->cont_id == cont_id) { *out = cont_entry; - goto done; + PGOTO_DONE(ret_value); } } } else { - LOG_ERROR("==PDC_SERVER[%d]: container_hash_table_g not initialized!\n", pdc_server_rank_g); - ret_value = FAIL; - out = NULL; - goto done; + out = NULL; + PGOTO_ERROR(FAIL, "container_hash_table_g not initialized"); } done: - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_container_add_objs(int n_obj, uint64_t *obj_ids, uint64_t cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_cont_hash_table_entry_t *cont_entry = NULL; int realloc_size = 0; - FUNC_ENTER(NULL); ret_value = PDC_Server_find_container_by_id(cont_id, &cont_entry); if (cont_entry != NULL) { @@ -2493,16 +2343,13 @@ PDC_Server_container_add_objs(int n_obj, uint64_t *obj_ids, uint64_t cont_id) realloc_size *= (sizeof(uint64_t) * 2); if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: realloc from %d to %ld!\n", pdc_server_rank_g, - cont_entry->n_allocated, realloc_size / sizeof(uint64_t)); + LOG_DEBUG("RRealloc from %d to %ld\n", cont_entry->n_allocated, + realloc_size / sizeof(uint64_t)); } cont_entry->obj_ids = (uint64_t *)PDC_realloc(cont_entry->obj_ids, realloc_size); - if (NULL == cont_entry->obj_ids) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with realloc!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (NULL == cont_entry->obj_ids) + PGOTO_ERROR(FAIL, "PDC_realloc failed"); total_mem_usage_g -= sizeof(uint64_t) * cont_entry->n_allocated; cont_entry->n_allocated = realloc_size / sizeof(uint64_t); @@ -2515,32 +2362,27 @@ PDC_Server_container_add_objs(int n_obj, uint64_t *obj_ids, uint64_t cont_id) // Debug prints if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: add %d objects to container %" PRIu64 ", total %d !\n", - pdc_server_rank_g, n_obj, cont_id, cont_entry->n_obj - cont_entry->n_deleted); + LOG_DEBUG("Add %d objects to container %" PRIu64 ", total %d\n", n_obj, cont_id, + cont_entry->n_obj - cont_entry->n_deleted); } - - // TODO: find duplicates - } - else { - LOG_ERROR("==PDC_SERVER[%d]: container %" PRIu64 " not found!\n", pdc_server_rank_g, cont_id); - ret_value = FAIL; - goto done; } + else + PGOTO_ERROR(FAIL, "Container %" PRIu64 " not found", cont_id); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_container_del_objs(int n_obj, uint64_t *obj_ids, uint64_t cont_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_cont_hash_table_entry_t *cont_entry = NULL; int i, j; int n_deletes = 0; - FUNC_ENTER(NULL); ret_value = PDC_Server_find_container_by_id(cont_id, &cont_entry); if (cont_entry != NULL) { @@ -2554,71 +2396,56 @@ PDC_Server_container_del_objs(int n_obj, uint64_t *obj_ids, uint64_t cont_id) } } } - // Debug print - LOG_DEBUG("==PDC_SERVER[%d]: successfully deleted %d objects!\n", pdc_server_rank_g, n_deletes); + LOG_DEBUG("Successfully deleted %d objects\n", n_deletes); if (n_deletes != n_obj) { - LOG_INFO("==PDC_SERVER[%d]: %d objects are not found to be deleted!\n", pdc_server_rank_g, - n_obj - n_deletes); + LOG_INFO("%d objects are not found to be deleted\n", n_obj - n_deletes); } } - else { - LOG_ERROR("==PDC_SERVER[%d]: container %" PRIu64 " not found!\n", pdc_server_rank_g, cont_id); - ret_value = FAIL; - goto done; - } + else + PGOTO_ERROR(FAIL, "Container %" PRIu64 " not found", cont_id); done: - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_container_add_tags(uint64_t cont_id, char *tags) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_cont_hash_table_entry_t *cont_entry = NULL; - FUNC_ENTER(NULL); ret_value = PDC_Server_find_container_by_id(cont_id, &cont_entry); - if (cont_entry != NULL) { - - if (tags != NULL) { - strcat(cont_entry->tags, tags); - } - } - else { - LOG_ERROR("==PDC_SERVER[%d]: container %" PRIu64 " not found!\n", pdc_server_rank_g, cont_id); - ret_value = FAIL; - goto done; - } + if (cont_entry != NULL && tags != NULL) + strcat(cont_entry->tags, tags); + else + PGOTO_ERROR(FAIL, "Container %" PRIu64 " not found", cont_id); done: - fflush(stdout); - FUNC_LEAVE(ret_value); } static perr_t PDC_copy_all_storage_meta(pdc_metadata_t *meta, region_storage_meta_t **storage_meta, int *n_region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t *region_elt = NULL, *region_head = NULL; int i, region_cnt; - FUNC_ENTER(NULL); - - if (NULL == meta || NULL == storage_meta) { - ret_value = FAIL; - goto done; - } + if (meta == NULL) + PGOTO_ERROR(FAIL, "meta was NULL"); + if (storage_meta == NULL) + PGOTO_ERROR(FAIL, "storage_meta was NULL"); region_head = meta->storage_region_list_head; DL_COUNT(region_head, region_elt, region_cnt); *n_region = region_cnt; - *storage_meta = (region_storage_meta_t *)calloc(sizeof(region_storage_meta_t), region_cnt); + *storage_meta = (region_storage_meta_t *)PDC_calloc(sizeof(region_storage_meta_t), region_cnt); i = 0; DL_FOREACH(region_head, region_elt) @@ -2647,6 +2474,8 @@ PDC_copy_all_storage_meta(pdc_metadata_t *meta, region_storage_meta_t **storage_ static perr_t PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) { + FUNC_ENTER(NULL); + hg_return_t hg_ret = HG_SUCCESS; perr_t ret_value; hg_handle_t rpc_handle; @@ -2660,11 +2489,10 @@ PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) int i = 0, j = 0; region_storage_meta_t **all_storage_meta; int * all_nregion, total_region; - FUNC_ENTER(NULL); // Get the storage meta for each queried object name - all_storage_meta = (region_storage_meta_t **)calloc(sizeof(region_storage_meta_t *), args->cnt); - all_nregion = (int *)calloc(sizeof(int), args->cnt); + all_storage_meta = (region_storage_meta_t **)PDC_calloc(sizeof(region_storage_meta_t *), args->cnt); + all_nregion = (int *)PDC_calloc(sizeof(int), args->cnt); total_region = 0; for (i = 0; i < args->cnt; i++) { @@ -2673,44 +2501,36 @@ PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) // FIXME: currently assumes timestep 0 PDC_Server_search_with_name_timestep(obj_name, PDC_get_hash_by_name(obj_name), 0, &meta); if (meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: No metadata with name [%s] found!\n", pdc_server_rank_g, obj_name); + LOG_ERROR("No metadata with name [%s] found\n", obj_name); continue; } ret_value = PDC_copy_all_storage_meta(meta, &(all_storage_meta[i]), &(all_nregion[i])); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error when getting storage meta for [%s]!\n", pdc_server_rank_g, - obj_name); + LOG_ERROR("Error when getting storage meta for [%s]\n", obj_name); continue; } total_region += all_nregion[i]; - if (all_storage_meta[i]->storage_location[1] != 'g') { - LOG_ERROR("==PDC_SERVER[%d]: Error with storage meta for [%s], obj_id %" PRIu64 - ", loc [%s], offset " + if (all_storage_meta[i]->storage_location[1] != 'g') + LOG_ERROR("Error with storage meta for [%s], obj_id %" PRIu64 ", loc [%s], offset " "%" PRIu64 "\n", - pdc_server_rank_g, obj_name, all_storage_meta[i]->obj_id, - all_storage_meta[i]->storage_location, all_storage_meta[i]->offset); - fflush(stdout); - } - + obj_name, all_storage_meta[i]->obj_id, all_storage_meta[i]->storage_location, + all_storage_meta[i]->offset); } // End for cnt // Now the storage meta is stored in all_storage_meta; client_id = args->client_id; if (PDC_Server_lookup_client(client_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting client %d addr via lookup\n", pdc_server_rank_g, - client_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting client %d addr via lookup", client_id); } // Now we have all the storage metadata of the queried objects, send them back to client with // bulk transfer to args->origin_id // Prepare bulk ptrs, buf_ptrs[0] is task_id int nbuf = total_region + 1; - buf_sizes = (hg_size_t *)calloc(nbuf, sizeof(hg_size_t)); - buf_ptrs = (void **)calloc(nbuf, sizeof(void *)); + buf_sizes = (hg_size_t *)PDC_calloc(nbuf, sizeof(hg_size_t)); + buf_ptrs = (void **)PDC_calloc(nbuf, sizeof(void *)); buf_ptrs[0] = &(args->client_seq_id); buf_sizes[0] = sizeof(int); @@ -2726,24 +2546,14 @@ PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) /* Register memory */ hg_ret = HG_Bulk_create(hg_class_g, nbuf, buf_ptrs, buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } - - if (pdc_client_info_g[client_id].addr == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error with client %d addr\n", pdc_server_rank_g, client_id); - goto done; - } - + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); + if (pdc_client_info_g[client_id].addr == NULL) + PGOTO_ERROR(FAIL, "Error with client %d addr", client_id); hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, send_client_storage_meta_rpc_register_id_g, &rpc_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create handle"); /* Fill input structure */ bulk_rpc_in.cnt = total_region; @@ -2752,17 +2562,12 @@ PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) bulk_rpc_in.bulk_handle = bulk_handle; hg_ret = HG_Forward(rpc_handle, PDC_check_int_ret_cb, NULL, &bulk_rpc_in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not forward call\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not forward call"); HG_Destroy(rpc_handle); done: - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -2776,17 +2581,22 @@ PDC_Server_get_storage_meta_by_names(query_read_names_args_t *args) hg_return_t PDC_Server_query_read_names_clinet_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + PDC_Server_get_storage_meta_by_names((query_read_names_args_t *)callback_info->arg); - return HG_SUCCESS; + FUNC_LEAVE(HG_SUCCESS); } perr_t PDC_free_cont_hash_table() { + FUNC_ENTER(NULL); + if (container_hash_table_g != NULL) hash_table_free(container_hash_table_g); - return SUCCEED; + + FUNC_LEAVE(SUCCEED); } /* @@ -2800,23 +2610,25 @@ PDC_free_cont_hash_table() static perr_t PDC_add_kvtag_to_list(pdc_kvtag_list_t **list_head, pdc_kvtag_t *tag) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_list_t *new_list_item; pdc_kvtag_t * newtag; - FUNC_ENTER(NULL); PDC_kvtag_dup(tag, &newtag); new_list_item = (pdc_kvtag_list_t *)PDC_calloc(1, sizeof(pdc_kvtag_list_t)); new_list_item->kvtag = newtag; DL_APPEND(*list_head, new_list_item); - fflush(stdout); FUNC_LEAVE(ret_value); } static perr_t PDC_Server_add_kvtag_rocksdb(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_ROCKSDB rocksdb_writeoptions_t *writeoptions = rocksdb_writeoptions_create(); @@ -2827,23 +2639,24 @@ PDC_Server_add_kvtag_rocksdb(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t rocksdb_put(rocksdb_g, writeoptions, rocksdb_key, strlen(rocksdb_key) + 1, in->kvtag.value, in->kvtag.size, &err); if (err != NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error with rocksdb_put %s, [%s]!\n", pdc_server_rank_g, in->kvtag.name, - err); + LOG_ERROR("Error with rocksdb_put %s, [%s]\n", in->kvtag.name, err); ret_value = FAIL; } else out->ret = 1; #else - LOG_ERROR("==PDC_SERVER[%d]: enabled rocksdb but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled rocksdb but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_add_kvtag_sqlite3(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_SQLITE3 char sql[TAG_LEN_MAX] = {0}; @@ -2865,31 +2678,30 @@ PDC_Server_add_kvtag_sqlite3(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t sprintf(sql, "INSERT INTO objects (objid, name, value_double) VALUES (%llu, '%s', '%lf');", in->obj_id, in->kvtag.name, *((double *)in->kvtag.value)); } - else { - LOG_ERROR("==PDC_SERVER[%d]: datatype not supported %d!\n", pdc_server_rank_g, in->kvtag.type); - ret_value = FAIL; - goto done; - } + else + PGOTO_ERROR(FAIL, "Datatype not supported %d", in->kvtag.type); sqlite3_exec(sqlite3_db_g, sql, NULL, 0, &errMessage); if (errMessage) - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); else out->ret = 1; done: #else - LOG_ERROR("==PDC_SERVER[%d]: enabled SQLite3 but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled SQLite3 but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_add_kvtag_someta(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_hash_table_entry_head * lookup_value; pdc_cont_hash_table_entry_t *cont_lookup_value; @@ -2918,24 +2730,24 @@ PDC_Server_add_kvtag_someta(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t out->ret = 1; } else { - LOG_ERROR("==PDC_SERVER[%d]: add tag target %" PRIu64 " not found!\n", pdc_server_rank_g, - in->obj_id); + LOG_ERROR("Add tag target %" PRIu64 " not found\n", in->obj_id); ret_value = FAIL; out->ret = -1; } } - return ret_value; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_add_kvtag(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_MULTITHREAD int unlocked; #endif - FUNC_ENTER(NULL); #ifdef ENABLE_TIMING struct timeval pdc_timer_start; @@ -2954,24 +2766,18 @@ PDC_Server_add_kvtag(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) if (use_rocksdb_g == 1) { ret_value = PDC_Server_add_kvtag_rocksdb(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_add_kvtag_rocksdb!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_add_kvtag_rocksdb"); } // End if rocksdb else if (use_sqlite3_g == 1) { ret_value = PDC_Server_add_kvtag_sqlite3(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_add_kvtag_sqlite3!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_add_kvtag_sqlite3"); } // End if sqlite3 else { ret_value = PDC_Server_add_kvtag_someta(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_add_kvtag_someta!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_add_kvtag_someta"); } done: @@ -3003,31 +2809,28 @@ PDC_Server_add_kvtag(metadata_add_kvtag_in_t *in, metadata_add_tag_out_t *out) if (unlocked == 0) hg_thread_mutex_unlock(&pdc_metadata_hash_table_mutex_g); #endif - fflush(stdout); - FUNC_LEAVE(ret_value); } static perr_t PDC_get_kvtag_value_from_list(pdc_kvtag_list_t **list_head, char *key, metadata_get_kvtag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_list_t *elt; - FUNC_ENTER(NULL); - DL_FOREACH(*list_head, elt) { if (strcmp(elt->kvtag->name, key) == 0) { out->kvtag.name = elt->kvtag->name; out->kvtag.size = elt->kvtag->size; out->kvtag.value = elt->kvtag->value; + out->kvtag.type = elt->kvtag->type; break; } } - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -3035,26 +2838,28 @@ PDC_get_kvtag_value_from_list(pdc_kvtag_list_t **list_head, char *key, metadata_ static int sqlite_get_kvtag_callback(void *data, int argc, char **argv, char **colName) { + FUNC_ENTER(NULL); + pdc_kvtag_t *out = (pdc_kvtag_t *)data; for (int i = 0; i < argc; i++) { if (NULL != argv[i]) { if (0 == strcmp(colName[i], "value_int")) { - int *int_tmp = (int *)malloc(sizeof(int)); + int *int_tmp = (int *)PDC_malloc(sizeof(int)); *int_tmp = atoi(argv[i]); out->value = (void *)int_tmp; out->size = sizeof(int); break; } else if (0 == strcmp(colName[i], "value_real")) { - float *float_tmp = (float *)malloc(sizeof(float)); + float *float_tmp = (float *)PDC_malloc(sizeof(float)); *float_tmp = (float)atof(argv[i]); out->value = (void *)float_tmp; out->size = sizeof(float); break; } else if (0 == strcmp(colName[i], "value_double")) { - double *double_tmp = (double *)malloc(sizeof(double)); + double *double_tmp = (double *)PDC_malloc(sizeof(double)); *double_tmp = atof(argv[i]); out->value = (void *)double_tmp; out->size = sizeof(double); @@ -3067,18 +2872,20 @@ sqlite_get_kvtag_callback(void *data, int argc, char **argv, char **colName) } else { out->value = NULL; - return 0; + FUNC_LEAVE(0); } } } - return 0; + FUNC_LEAVE(0); } #endif static perr_t PDC_Server_get_kvtag_rocksdb(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_ROCKSDB @@ -3089,7 +2896,7 @@ PDC_Server_get_kvtag_rocksdb(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out size_t len; char * value = rocksdb_get(rocksdb_g, readoptions, rocksdb_key, strlen(rocksdb_key) + 1, &len, &err); if (value == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error with rocksdb_get %s, [%s]!\n", pdc_server_rank_g, in->key, err); + LOG_ERROR("Error with rocksdb_get %s, [%s]\n", in->key, err); ret_value = FAIL; } out->kvtag.name = in->key; @@ -3097,16 +2904,18 @@ PDC_Server_get_kvtag_rocksdb(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out out->kvtag.value = value; out->ret = 1; #else - LOG_ERROR("==PDC_SERVER[%d]: enabled rocksdb but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled rocksdb but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_get_kvtag_sqlite3(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_SQLITE3 char sql[TAG_LEN_MAX]; @@ -3118,7 +2927,7 @@ PDC_Server_get_kvtag_sqlite3(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out sqlite3_exec(sqlite3_db_g, sql, sqlite_get_kvtag_callback, &out->kvtag, &errMessage); if (errMessage) { - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); } else { // size and value is filled in sqlite_get_kvtag_callback @@ -3126,16 +2935,18 @@ PDC_Server_get_kvtag_sqlite3(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out out->ret = 1; } #else - LOG_ERROR("==PDC_SERVER[%d]: enabled SQLite3 but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled SQLite3 but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_get_kvtag_someta(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t hash_key; uint64_t obj_id; @@ -3171,19 +2982,19 @@ PDC_Server_get_kvtag_someta(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_ } } - return ret_value; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_get_kvtag(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_MULTITHREAD int unlocked; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING struct timeval pdc_timer_start; struct timeval pdc_timer_end; @@ -3201,25 +3012,19 @@ PDC_Server_get_kvtag(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) if (use_rocksdb_g == 1) { ret_value = PDC_Server_get_kvtag_rocksdb(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_get_kvtag_rocksdb!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_get_kvtag_rocksdb"); } else if (use_sqlite3_g == 1) { ret_value = PDC_Server_get_kvtag_sqlite3(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_get_kvtag_sqlite3!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_get_kvtag_sqlite3"); } else { // Someta ret_value = PDC_Server_get_kvtag_someta(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_get_kvtag_someta!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_get_kvtag_someta"); } done: @@ -3251,39 +3056,37 @@ PDC_Server_get_kvtag(metadata_get_kvtag_in_t *in, metadata_get_kvtag_out_t *out) if (unlocked == 0) hg_thread_mutex_unlock(&pdc_metadata_hash_table_mutex_g); #endif - fflush(stdout); - FUNC_LEAVE(ret_value); } static perr_t PDC_del_kvtag_value_from_list(pdc_kvtag_list_t **list_head, char *key) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_kvtag_list_t *elt; - FUNC_ENTER(NULL); - DL_FOREACH(*list_head, elt) { if (strcmp(elt->kvtag->name, key) == 0) { - free(elt->kvtag->name); - free(elt->kvtag->value); - free(elt->kvtag); + elt->kvtag->name = (char *)PDC_free(elt->kvtag->name); + elt->kvtag->value = (void *)PDC_free(elt->kvtag->value); + elt->kvtag = (pdc_kvtag_t *)PDC_free(elt->kvtag); DL_DELETE(*list_head, elt); - free(elt); + elt = (pdc_kvtag_list_t *)PDC_free(elt); break; } } - fflush(stdout); - FUNC_LEAVE(ret_value); } static perr_t PDC_Server_del_kvtag_rocksdb(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_ROCKSDB char * err = NULL; @@ -3293,23 +3096,24 @@ PDC_Server_del_kvtag_rocksdb(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t sprintf(rocksdb_key, "%lu`%s", in->obj_id, in->key); rocksdb_delete(rocksdb_g, writeoptions, rocksdb_key, strlen(rocksdb_key) + 1, &err); if (err != NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error with rocksdb_delete [%s], [%s]!\n", pdc_server_rank_g, in->key, - err); + LOG_ERROR("Error with rocksdb_delete [%s], [%s]\n", in->key, err); ret_value = FAIL; } else out->ret = 1; #else - LOG_ERROR("==PDC_SERVER[%d]: enabled rocksdb but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled rocksdb but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_del_kvtag_sqlite3(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_SQLITE3 char sql[TAG_LEN_MAX]; @@ -3319,22 +3123,24 @@ PDC_Server_del_kvtag_sqlite3(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t sqlite3_exec(sqlite3_db_g, sql, NULL, 0, &errMessage); if (errMessage) { - LOG_ERROR("==PDC_SERVER[%d]: Error from SQLite %s!\n", pdc_server_rank_g, errMessage); + LOG_ERROR("Error from SQLite %s\n", errMessage); ret_value = FAIL; } else out->ret = 1; #else - LOG_ERROR("==PDC_SERVER[%d]: enabled SQLite3 but PDC is not compiled with it!\n", pdc_server_rank_g); + LOG_ERROR("Enabled SQLite3 but PDC is not compiled with it\n"); ret_value = FAIL; #endif - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_del_kvtag_someta(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t hash_key; uint64_t obj_id; @@ -3356,7 +3162,7 @@ PDC_Server_del_kvtag_someta(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t else { ret_value = FAIL; out->ret = -1; - LOG_ERROR("==PDC_SERVER[%d]: failed to find requested kvtag [%s]\n", pdc_server_rank_g, in->key); + LOG_ERROR("Failed to find requested kvtag [%s]\n", in->key); } } else { @@ -3368,23 +3174,23 @@ PDC_Server_del_kvtag_someta(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t else { ret_value = FAIL; out->ret = -1; - LOG_ERROR("==PDC_SERVER[%d]: failed to find requested kvtag [%s]\n", pdc_server_rank_g, in->key); + LOG_ERROR("Failed to find requested kvtag [%s]\n", in->key); } } - return ret_value; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_del_kvtag(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_MULTITHREAD int unlocked; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING struct timeval pdc_timer_start; struct timeval pdc_timer_end; @@ -3401,24 +3207,18 @@ PDC_Server_del_kvtag(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) if (use_rocksdb_g) { ret_value = PDC_Server_del_kvtag_rocksdb(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_del_kvtag_rocksdb!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_del_kvtag_rocksdb"); } else if (use_sqlite3_g) { ret_value = PDC_Server_del_kvtag_sqlite3(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_del_kvtag_sqlite3!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_del_kvtag_sqlite3"); } else { ret_value = PDC_Server_del_kvtag_someta(in, out); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_del_kvtag_someta!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_del_kvtag_someta"); } done: @@ -3442,8 +3242,5 @@ PDC_Server_del_kvtag(metadata_get_kvtag_in_t *in, metadata_add_tag_out_t *out) #endif #endif // End ENABLE_TIMING - - fflush(stdout); - FUNC_LEAVE(ret_value); } diff --git a/src/server/pdc_server_metadata_index.c b/src/server/pdc_server_metadata_index.c index 102c9d50d..462c59df6 100644 --- a/src/server/pdc_server_metadata_index.c +++ b/src/server/pdc_server_metadata_index.c @@ -19,9 +19,13 @@ IDIOMS_t *idioms_g = NULL; void PDC_Server_metadata_index_init(uint32_t num_server, uint32_t server_id) { + FUNC_ENTER(NULL); + midx_num_server_g = num_server; midx_server_id_g = server_id; idioms_g = IDIOMS_init(server_id, num_server); + + FUNC_LEAVE_VOID(); } /****************************/ @@ -31,9 +35,10 @@ PDC_Server_metadata_index_init(uint32_t num_server, uint32_t server_id) perr_t PDC_Server_dart_get_server_info(dart_get_server_info_in_t *in, dart_get_server_info_out_t *out) { - perr_t ret_value = SUCCEED; FUNC_ENTER(NULL); - uint32_t serverId = in->serverId; + + perr_t ret_value = SUCCEED; + uint32_t serverId = in->serverId; out->indexed_word_count = idioms_g->index_record_count_g; out->request_count = idioms_g->search_request_count_g; @@ -45,6 +50,8 @@ perr_t PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in, dart_perform_one_server_out_t *out, uint64_t *n_obj_ids_ptr, uint64_t **buf_ptrs) { + FUNC_ENTER(NULL); + perr_t result = SUCCEED; dart_op_type_t op_type = in->op_type; dart_hash_algo_t hash_algo = in->hash_algo; @@ -54,13 +61,14 @@ PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in, dart_perfor pdc_c_var_type_t attr_dtype = in->attr_vtype; dart_object_ref_type_t ref_type = in->obj_ref_type; - IDIOMS_md_idx_record_t *idx_record = (IDIOMS_md_idx_record_t *)calloc(1, sizeof(IDIOMS_md_idx_record_t)); - idx_record->key = attr_key; - idx_record->value = attr_val; - idx_record->virtual_node_id = in->vnode_id; - idx_record->type = in->attr_vtype; - idx_record->value_len = in->attr_vsize; - idx_record->src_client_id = in->src_client_id; + IDIOMS_md_idx_record_t *idx_record = + (IDIOMS_md_idx_record_t *)PDC_calloc(1, sizeof(IDIOMS_md_idx_record_t)); + idx_record->key = attr_key; + idx_record->value = attr_val; + idx_record->virtual_node_id = in->vnode_id; + idx_record->type = in->attr_vtype; + idx_record->value_len = in->attr_vsize; + idx_record->src_client_id = in->src_client_id; uint64_t obj_locator = in->obj_primary_ref; if (ref_type == REF_PRIMARY_ID) { @@ -73,7 +81,7 @@ PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in, dart_perfor obj_locator = in->obj_server_ref; } - idx_record->obj_ids = (uint64_t *)calloc(1, sizeof(uint64_t)); + idx_record->obj_ids = (uint64_t *)PDC_calloc(1, sizeof(uint64_t)); idx_record->obj_ids[0] = obj_locator; idx_record->num_obj_ids = 1; @@ -107,7 +115,8 @@ PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in, dart_perfor out->has_bulk = 1; } } - return result; + + FUNC_LEAVE(result); } // ********************* Index Dump ********************* @@ -115,9 +124,12 @@ PDC_Server_dart_perform_one_server(dart_perform_one_server_in_t *in, dart_perfor perr_t metadata_index_dump(char *checkpiont_dir, uint32_t serverID) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; ret_value = idioms_metadata_index_dump(idioms_g, checkpiont_dir, serverID); - return ret_value; + + FUNC_LEAVE(ret_value); } // ********************* Index Recover ********************* @@ -125,7 +137,10 @@ metadata_index_dump(char *checkpiont_dir, uint32_t serverID) perr_t metadata_index_recover(char *checkpiont_dir, int num_server, uint32_t serverID) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; ret_value = idioms_metadata_index_recover(idioms_g, checkpiont_dir, num_server, serverID); - return ret_value; + + FUNC_LEAVE(ret_value); } \ No newline at end of file diff --git a/src/server/pdc_server_metadata_index_test.c b/src/server/pdc_server_metadata_index_test.c index d7b2bfb08..d1e664aa2 100644 --- a/src/server/pdc_server_metadata_index_test.c +++ b/src/server/pdc_server_metadata_index_test.c @@ -5,10 +5,13 @@ #include "idioms_local_index.h" #include "pdc_logger.h" #include "dart_core.h" +#include "pdc_timing.h" void delete_kv_from_index(char *kv, uint64_t obj_id) { + FUNC_ENTER(NULL); + char * key = NULL; char * value = NULL; int8_t kv_dtype = PDC_STRING; @@ -35,7 +38,7 @@ delete_kv_from_index(char *kv, uint64_t obj_id) } } else { - LOG_ERROR("Invalid Key Value Pair!\n"); + LOG_ERROR("Invalid Key Value Pair\n"); return; } @@ -69,11 +72,14 @@ delete_kv_from_index(char *kv, uint64_t obj_id) } #endif + + FUNC_LEAVE_VOID(); } void insert_kv_to_index(char *kv, uint64_t obj_id) { + FUNC_ENTER(NULL); char * key = NULL; void * value = NULL; @@ -102,8 +108,8 @@ insert_kv_to_index(char *kv, uint64_t obj_id) } } else { - LOG_ERROR("Invalid Key Value Pair!\n"); - return; + LOG_ERROR("Invalid Key Value Pair\n"); + FUNC_LEAVE_VOID(); } input.obj_ref_type = REF_PRIMARY_ID; @@ -138,15 +144,19 @@ insert_kv_to_index(char *kv, uint64_t obj_id) } #endif + + FUNC_LEAVE_VOID(); } void query_result_from_kvtag(char *key_value_query, int8_t op_type) { + FUNC_ENTER(NULL); + dart_perform_one_server_in_t *input = - (dart_perform_one_server_in_t *)calloc(1, sizeof(dart_perform_one_server_in_t)); + (dart_perform_one_server_in_t *)PDC_calloc(1, sizeof(dart_perform_one_server_in_t)); dart_perform_one_server_out_t *output = - (dart_perform_one_server_out_t *)calloc(1, sizeof(dart_perform_one_server_out_t)); + (dart_perform_one_server_out_t *)PDC_calloc(1, sizeof(dart_perform_one_server_out_t)); uint64_t n_obj_ids = 0; uint64_t *buf_ptr = NULL; input->op_type = op_type; @@ -157,16 +167,19 @@ query_result_from_kvtag(char *key_value_query, int8_t op_type) LOG_JUST_PRINT("%llu, ", buf_ptr[i]); } LOG_JUST_PRINT("\n\n"); + + FUNC_LEAVE_VOID(); } void test_PDC_Server_dart_perform_one_server() { + FUNC_ENTER(NULL); PDC_Server_metadata_index_init(1, 0); - char *kv = (char *)calloc(20, sizeof(char)); - char *numkv = (char *)calloc(20, sizeof(char)); + char *kv = (char *)PDC_calloc(20, sizeof(char)); + char *numkv = (char *)PDC_calloc(20, sizeof(char)); for (int i = 0; i < 1000; i++) { sprintf(kv, "key%03dkey=\"val%03dval\"", i, i); @@ -202,7 +215,7 @@ test_PDC_Server_dart_perform_one_server() insert_kv_to_index("num000num=0", 30000); insert_kv_to_index("num433num=433", 30000); - LOG_INFO("Index Insertion Successful!\n"); + LOG_INFO("Index Insertion Successful\n"); // key000key val000val query_result_from_kvtag("key000key=\"val000val\"", OP_EXACT_QUERY); @@ -256,7 +269,7 @@ test_PDC_Server_dart_perform_one_server() delete_kv_from_index("num000num=0", 30000); delete_kv_from_index("num433num=433", 30000); - LOG_INFO("Index Deletion Successful!\n"); + LOG_INFO("Index Deletion Successful\n"); query_result_from_kvtag("key000key=\"val000val\"", OP_EXACT_QUERY); query_result_from_kvtag("0key=\"0val\"", OP_EXACT_QUERY); @@ -273,7 +286,7 @@ test_PDC_Server_dart_perform_one_server() metadata_index_recover("/workspaces/pdc/build/bin", 1, 0); - LOG_INFO("Index Recovery Done!\n"); + LOG_INFO("Index Recovery Done\n"); // key000key val000val query_result_from_kvtag("key000key=\"val000val\"", OP_EXACT_QUERY); @@ -288,22 +301,31 @@ test_PDC_Server_dart_perform_one_server() query_result_from_kvtag("0num=0", OP_EXACT_QUERY); query_result_from_kvtag("num01*=5~9", OP_RANGE_QUERY); query_result_from_kvtag("num01*=5|~|9", OP_RANGE_QUERY); + + FUNC_LEAVE_VOID(); } + int init_default_logger() { + FUNC_ENTER(NULL); + setLogFile(LOG_LEVEL_ERROR, "stderr"); setLogFile(LOG_LEVEL_WARNING, "stdout"); setLogFile(LOG_LEVEL_INFO, "stdout"); setLogFile(LOG_LEVEL_DEBUG, "stdout"); setLogLevel(LOG_LEVEL_DEBUG); - return 0; + + FUNC_LEAVE(0); } int main() { + FUNC_ENTER(NULL); + init_default_logger(); test_PDC_Server_dart_perform_one_server(); - return 0; + + FUNC_LEAVE(0); } \ No newline at end of file diff --git a/src/server/pdc_server_region/include/pdc_server_region_transfer.h b/src/server/pdc_server_region/include/pdc_server_region_transfer.h index 7b210e8e3..76e965671 100644 --- a/src/server/pdc_server_region/include/pdc_server_region_transfer.h +++ b/src/server/pdc_server_region/include/pdc_server_region_transfer.h @@ -1,3 +1,6 @@ +#ifndef PDC_SERVER_REGION_TRANSFER_H +#define PDC_SERVER_REGION_TRANSFER_H + #include "pdc_region.h" typedef struct transfer_request_all_data { @@ -71,7 +74,6 @@ pdc_transfer_status_t PDC_try_finish_request(uint64_t transfer_request_id, hg_ha * TODO: Scan the entire transfer list and search for repetitive nodes. * Not a thread-safe function, need protection from pthread_mutex_lock(&transfer_request_id_mutex); */ - pdcid_t PDC_transfer_request_id_register(); perr_t PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, @@ -81,3 +83,5 @@ perr_t PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint6 int clean_write_bulk_data(transfer_request_all_data *request_data); int parse_bulk_data(void *buf, transfer_request_all_data *request_data, pdc_access_t access_type); + +#endif \ No newline at end of file diff --git a/src/server/pdc_server_region/include/pdc_server_region_transfer_metadata_query.h b/src/server/pdc_server_region/include/pdc_server_region_transfer_metadata_query.h index e127d4634..fc2ec3a7a 100644 --- a/src/server/pdc_server_region/include/pdc_server_region_transfer_metadata_query.h +++ b/src/server/pdc_server_region/include/pdc_server_region_transfer_metadata_query.h @@ -1,6 +1,11 @@ +#ifndef PDC_SERVER_REGION_TRANSFER_METADATA_QUERY_H +#define PDC_SERVER_REGION_TRANSFER_METADATA_QUERY_H + perr_t transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint); perr_t transfer_request_metadata_query_finalize(); perr_t transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoint_size); perr_t transfer_request_metadata_query_lookup_query_buf(uint64_t query_id, char **buf_ptr); uint64_t transfer_request_metadata_query_parse(int32_t n_objs, char *buf, uint8_t partition_type, uint64_t *total_buf_size_ptr); + +#endif diff --git a/src/server/pdc_server_region/pdc_server_data.c b/src/server/pdc_server_region/pdc_server_data.c index a9e0d1fc4..53fdf1e84 100644 --- a/src/server/pdc_server_region/pdc_server_data.c +++ b/src/server/pdc_server_region/pdc_server_data.c @@ -88,6 +88,8 @@ cache_storage_region_t *cache_storage_region_head_g = NULL; static int fill_storage_path(char *storage_location, pdcid_t obj_id) { + FUNC_ENTER(NULL); + #ifdef ENABLE_LUSTRE int stripe_count, stripe_size; #endif @@ -119,27 +121,64 @@ fill_storage_path(char *storage_location, pdcid_t obj_id) LOG_DEBUG("storage_location is %s\n", storage_location); } #endif - return 0; + + FUNC_LEAVE(0); } static int server_open_storage(char *storage_location, pdcid_t obj_id) { + FUNC_ENTER(NULL); + fill_storage_path(storage_location, obj_id); - return open(storage_location, O_RDWR | O_CREAT, 0666); + + FUNC_LEAVE(open(storage_location, O_RDWR | O_CREAT, 0666)); +} + +/* + * Check if two regions are the same + * + * \param a[IN] Pointer to the first region + * \param b[IN] Pointer to the second region + * + * \return 1 if they are the same/-1 otherwise + */ +static int +region_list_t_is_equal(region_list_t *reg1, region_list_t *reg2) +{ + FUNC_ENTER(NULL); + + int ret_value = -1; + uint32_t i; + + if (reg1 == NULL) + PGOTO_ERROR(FAIL, "reg1 was NULL"); + if (reg2 == NULL) + PGOTO_ERROR(FAIL, "reg2 was NULL"); + + if (reg1->ndim != reg2->ndim) + PGOTO_DONE(-1); + + for (i = 0; i < reg1->ndim; i++) { + if (reg1->start[i] != reg2->start[i] || reg1->count[i] != reg2->count[i]) + PGOTO_DONE(-1); + } + +done: + FUNC_LEAVE(ret_value); } perr_t PDC_Server_set_lustre_stripe(const char *path, int stripe_count, int stripe_size_MB) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t len; int i, index; char tmp[TMP_DIR_STRING_LEN]; char cmd[TAG_LEN_MAX]; - FUNC_ENTER(NULL); - // Make sure stripe count is sane if (stripe_count > lustre_total_ost_g / pdc_server_size_g) stripe_count = lustre_total_ost_g / pdc_server_size_g; @@ -167,14 +206,10 @@ PDC_Server_set_lustre_stripe(const char *path, int stripe_count, int stripe_size snprintf(cmd, TAG_LEN_MAX, "lfs setstripe -S %dM -c %d -i %d %s", stripe_size_MB, stripe_count, index, tmp); - if (system(cmd) < 0) { - LOG_ERROR("==PDC_SERVER: Fail to set Lustre stripe parameters [%s]\n", tmp); - ret_value = FAIL; - goto done; - } + if (system(cmd) < 0) + PGOTO_ERROR(FAIL, "Failed to set Lustre stripe parameters [%s]\n", tmp); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -187,33 +222,26 @@ PDC_Server_set_lustre_stripe(const char *path, int stripe_count, int stripe_size * \return 1 if they are the same/-1 otherwise */ static int -is_region_identical(region_list_t *a, region_list_t *b) +is_region_identical(region_list_t *reg1, region_list_t *reg2) { + FUNC_ENTER(NULL); + int ret_value = -1; uint32_t i; - FUNC_ENTER(NULL); - - if (a == NULL || b == NULL) { - LOG_ERROR("==PDC_SERVER: is_region_identical() - passed NULL value!\n"); - ret_value = -1; - goto done; - } + if (reg1 == NULL) + PGOTO_ERROR(FAIL, "reg1 was NULL"); + if (reg2 == NULL) + PGOTO_ERROR(FAIL, "reg2 was NULL"); - if (a->ndim != b->ndim) { - ret_value = -1; - goto done; - } + if (reg1->ndim != reg2->ndim) + PGOTO_DONE(-1); - for (i = 0; i < a->ndim; i++) { - if (a->start[i] != b->start[i] || a->count[i] != b->count[i]) { - ret_value = -1; - goto done; - } + for (i = 0; i < reg1->ndim; i++) { + if (reg1->start[i] != reg2->start[i] || reg1->count[i] != reg2->count[i]) + PGOTO_DONE(-1); } - ret_value = 1; - done: FUNC_LEAVE(ret_value); } @@ -221,29 +249,24 @@ is_region_identical(region_list_t *a, region_list_t *b) perr_t PDC_Server_local_region_lock_status(PDC_mapping_info_t *mapped_region, int *lock_status) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *res_meta; region_list_t * elt, *request_region; - FUNC_ENTER(NULL); - // Check if the region lock info is on current server *lock_status = 0; - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&(mapped_region->remote_region), request_region); res_meta = find_metadata_by_id(mapped_region->remote_obj_id); - if (res_meta == NULL || res_meta->region_lock_head == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_region_lock_status - metadata/region_lock is NULL!\n", - pdc_server_rank_g); - fflush(stdout); - ret_value = FAIL; - goto done; - } + if (res_meta == NULL || res_meta->region_lock_head == NULL) + PGOTO_ERROR(FAIL, "Metadata/region_lock was NULL"); // iterate the target metadata's region_lock_head (linked list) to search for queried region DL_FOREACH(res_meta->region_lock_head, elt) { - if (is_region_identical(request_region, elt) == 1) { + if (region_list_t_is_equal(request_region, elt) == 1) { *lock_status = 1; elt->reg_dirty_from_buf = 1; @@ -255,7 +278,7 @@ PDC_Server_local_region_lock_status(PDC_mapping_info_t *mapped_region, int *lock elt->client_id = mapped_region->remote_client_id; } } - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); done: FUNC_LEAVE(ret_value); @@ -264,22 +287,21 @@ PDC_Server_local_region_lock_status(PDC_mapping_info_t *mapped_region, int *lock perr_t PDC_Server_region_lock_status(PDC_mapping_info_t *mapped_region, int *lock_status) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t *request_region; uint32_t server_id = 0; *lock_status = 0; - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&(mapped_region->remote_region), request_region); server_id = PDC_get_server_by_obj_id(mapped_region->remote_obj_id, pdc_server_size_g); - if (server_id == (uint32_t)pdc_server_rank_g) { + if (server_id == (uint32_t)pdc_server_rank_g) PDC_Server_local_region_lock_status(mapped_region, lock_status); - } - else { - LOG_INFO("lock is located in a different server, work not finished yet\n"); - fflush(stdout); - } + else + LOG_INFO("Lock is located in a different server, work not finished yet\n"); FUNC_LEAVE(ret_value); } @@ -287,9 +309,11 @@ PDC_Server_region_lock_status(PDC_mapping_info_t *mapped_region, int *lock_statu data_server_region_t * PDC_Server_get_obj_region(pdcid_t obj_id) { + FUNC_ENTER(NULL); + data_server_region_t *ret_value = NULL; data_server_region_t *elt = NULL; - FUNC_ENTER(NULL); + if (dataserver_region_g != NULL) { DL_FOREACH(dataserver_region_g, elt) { @@ -303,11 +327,11 @@ PDC_Server_get_obj_region(pdcid_t obj_id) pdc_data_server_io_list_t * PDC_Server_get_obj_region_query(pdcid_t obj_id) { + FUNC_ENTER(NULL); + pdc_data_server_io_list_t *ret_value = NULL; pdc_data_server_io_list_t *elt = NULL; - FUNC_ENTER(NULL); - if (pdc_data_server_write_list_head_g != NULL) { DL_FOREACH(pdc_data_server_write_list_head_g, elt) { @@ -322,23 +346,24 @@ PDC_Server_get_obj_region_query(pdcid_t obj_id) perr_t PDC_Server_clear_obj_region() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; data_server_region_t *elt, *tmp; region_list_t * elt2, *tmp2; - FUNC_ENTER(NULL); if (dataserver_region_g != NULL) { DL_FOREACH_SAFE(dataserver_region_g, elt, tmp) { DL_FOREACH_SAFE(elt->region_storage_head, elt2, tmp2) { - // DL_DELETE(elt->region_storage_head, elt2); - free(elt2); + elt2 = (region_list_t *)PDC_free(elt2); } - free(elt->storage_location); - free(elt); + elt->storage_location = (char *)PDC_free(elt->storage_location); + elt = (data_server_region_t *)PDC_free(elt); } } + FUNC_LEAVE(ret_value); } @@ -346,13 +371,13 @@ perr_t PDC_Server_register_obj_region_by_pointer(data_server_region_t **new_obj_reg_ptr, pdcid_t obj_id, int close_flag) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; data_server_region_t *new_obj_reg = *new_obj_reg_ptr; - FUNC_ENTER(NULL); - if (new_obj_reg == NULL) { - new_obj_reg = (data_server_region_t *)malloc(sizeof(struct data_server_region_t)); + new_obj_reg = (data_server_region_t *)PDC_malloc(sizeof(struct data_server_region_t)); if (new_obj_reg == NULL) { ret_value = FAIL; } @@ -362,12 +387,11 @@ PDC_Server_register_obj_region_by_pointer(data_server_region_t **new_obj_reg_ptr new_obj_reg->region_lock_request_head = NULL; new_obj_reg->region_storage_head = NULL; new_obj_reg->close_flag = close_flag; - new_obj_reg->storage_location = (char *)malloc(sizeof(char) * ADDR_MAX); + new_obj_reg->storage_location = (char *)PDC_malloc(sizeof(char) * ADDR_MAX); new_obj_reg->fd = server_open_storage(new_obj_reg->storage_location, obj_id); - if (new_obj_reg->fd < 0) { - goto done; - } + if (new_obj_reg->fd < 0) + PGOTO_DONE(ret_value); DL_APPEND(dataserver_region_g, new_obj_reg); } else { @@ -377,23 +401,23 @@ PDC_Server_register_obj_region_by_pointer(data_server_region_t **new_obj_reg_ptr if (new_obj_reg->fd < 0) { new_obj_reg->close_flag = close_flag; new_obj_reg->fd = open(new_obj_reg->storage_location, O_RDWR | O_CREAT, 0666); - if (new_obj_reg->fd < 0) { - goto done; - } + if (new_obj_reg->fd < 0) + PGOTO_DONE(ret_value); } } *new_obj_reg_ptr = new_obj_reg; done: FUNC_LEAVE(ret_value); -} // End PDC_Server_register_obj_region +} perr_t PDC_Server_unregister_obj_region_by_pointer(data_server_region_t *new_obj_reg, int close_flag) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); if (new_obj_reg->close_flag == close_flag && new_obj_reg != NULL) { close(new_obj_reg->fd); new_obj_reg->fd = -2; @@ -405,10 +429,11 @@ PDC_Server_unregister_obj_region_by_pointer(data_server_region_t *new_obj_reg, i perr_t PDC_Server_register_obj_region(pdcid_t obj_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; data_server_region_t *new_obj_reg; - FUNC_ENTER(NULL); new_obj_reg = PDC_Server_get_obj_region(obj_id); PDC_Server_register_obj_region_by_pointer(&new_obj_reg, obj_id, 1); @@ -418,10 +443,11 @@ PDC_Server_register_obj_region(pdcid_t obj_id) perr_t PDC_Server_unregister_obj_region(pdcid_t obj_id) { + FUNC_ENTER(NULL); + data_server_region_t *new_obj_reg; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); new_obj_reg = PDC_Server_get_obj_region(obj_id); PDC_Server_unregister_obj_region_by_pointer(new_obj_reg, 1); @@ -431,6 +457,8 @@ PDC_Server_unregister_obj_region(pdcid_t obj_id) perr_t PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_handle_t *handle) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int ndim; region_list_t * request_region; @@ -442,38 +470,22 @@ PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_han // time_t t; // struct tm tm; - FUNC_ENTER(NULL); - ndim = in->region.ndim; // Convert transferred lock region to structure - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_init_region_list(request_region); request_region->ndim = ndim; - if (ndim >= 1) { - request_region->start[0] = in->region.start_0; - request_region->count[0] = in->region.count_0; - } - if (ndim >= 2) { - request_region->start[1] = in->region.start_1; - request_region->count[1] = in->region.count_1; - } - if (ndim >= 3) { - request_region->start[2] = in->region.start_2; - request_region->count[2] = in->region.count_2; - } - if (ndim >= 4) { - request_region->start[3] = in->region.start_3; - request_region->count[3] = in->region.count_3; - } + PDC_copy_region_desc(in->region.start, request_region->start, ndim, ndim); + PDC_copy_region_desc(in->region.count, request_region->count, ndim, ndim); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(®ion_struct_mutex_g); #endif new_obj_reg = PDC_Server_get_obj_region(in->obj_id); if (new_obj_reg == NULL) { - new_obj_reg = (data_server_region_t *)malloc(sizeof(struct data_server_region_t)); + new_obj_reg = (data_server_region_t *)PDC_malloc(sizeof(struct data_server_region_t)); if (new_obj_reg == NULL) { error = 1; PGOTO_ERROR(FAIL, "PDC_SERVER: PDC_Server_region_lock() allocates new object failed"); @@ -512,7 +524,7 @@ PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_han if (found_lock == 0) { // check if the lock region is used in buf map function - tmp = (region_list_t *)malloc(sizeof(region_list_t)); + tmp = (region_list_t *)PDC_malloc(sizeof(region_list_t)); DL_FOREACH(new_obj_reg->region_buf_map_head, eltt) { PDC_region_transfer_t_to_list_t(&(eltt->remote_region_unit), tmp); @@ -521,7 +533,7 @@ PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_han hg_atomic_incr32(&(request_region->buf_map_refcount)); } } - free(tmp); + tmp = (region_list_t *)PDC_free(tmp); #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&lock_list_mutex_g); @@ -536,10 +548,6 @@ PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_han out->ret = 1; done: - /* t = time(NULL); */ - /* tm = *localtime(&t); */ - - /* fflush(stdout); */ if (error == 1) { out->ret = 0; } @@ -550,48 +558,49 @@ PDC_Data_Server_region_lock(region_lock_in_t *in, region_lock_out_t *out, hg_han perr_t PDC_Server_release_lock_request(uint64_t obj_id, struct pdc_region_info *region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t * request_region; region_list_t * elt, *tmp; data_server_region_t *new_obj_reg; region_lock_out_t out; - FUNC_ENTER(NULL); - - request_region = (region_list_t *)malloc(sizeof(region_list_t)); + request_region = (region_list_t *)PDC_malloc(sizeof(region_list_t)); PDC_init_region_list(request_region); PDC_region_info_to_list_t(region, request_region); new_obj_reg = PDC_Server_get_obj_region(obj_id); if (new_obj_reg == NULL) { - PGOTO_ERROR(FAIL, "===PDC Server: cannot locate data_server_region_t strcut for object ID"); + PGOTO_ERROR(FAIL, "Cannot locate data_server_region_t strcut for object ID"); } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&lock_request_mutex_g); #endif DL_FOREACH_SAFE(new_obj_reg->region_lock_request_head, elt, tmp) { - if (is_region_identical(request_region, elt) == 1) { + if (region_list_t_is_equal(request_region, elt) == 1) { out.ret = 1; HG_Respond(elt->lock_handle, NULL, NULL, &out); HG_Destroy(elt->lock_handle); DL_DELETE(new_obj_reg->region_lock_request_head, elt); - free(elt); + elt = (region_list_t *)PDC_free(elt); } } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&lock_request_mutex_g); #endif - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Data_Server_region_release(region_lock_in_t *in, region_lock_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int ndim; region_list_t * tmp1, *tmp2; @@ -599,8 +608,6 @@ PDC_Data_Server_region_release(region_lock_in_t *in, region_lock_out_t *out) int found = 0; data_server_region_t *obj_reg = NULL; - FUNC_ENTER(NULL); - /* time_t t; */ /* struct tm tm; */ /* t = time(NULL); */ @@ -612,40 +619,23 @@ PDC_Data_Server_region_release(region_lock_in_t *in, region_lock_out_t *out) PDC_init_region_list(&request_region); request_region.ndim = ndim; - if (ndim >= 1) { - request_region.start[0] = in->region.start_0; - request_region.count[0] = in->region.count_0; - } - if (ndim >= 2) { - request_region.start[1] = in->region.start_1; - request_region.count[1] = in->region.count_1; - } - if (ndim >= 3) { - request_region.start[2] = in->region.start_2; - request_region.count[2] = in->region.count_2; - } - if (ndim >= 4) { - request_region.start[3] = in->region.start_3; - request_region.count[3] = in->region.count_3; - } + PDC_copy_region_desc(in->region.start, request_region.start, ndim, ndim); + PDC_copy_region_desc(in->region.count, request_region.count, ndim, ndim); obj_reg = PDC_Server_get_obj_region(in->obj_id); - if (obj_reg == NULL) { - ret_value = FAIL; - LOG_ERROR("==PDC_SERVER[%d]: requested release object does not exist\n", pdc_server_rank_g); - goto done; - } - // Find the lock region in the list and remove it + if (obj_reg == NULL) + PGOTO_ERROR(FAIL, "Requested release object does not exist"); + // Find the lock region in the list and remove it #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&lock_list_mutex_g); #endif DL_FOREACH_SAFE(obj_reg->region_lock_head, tmp1, tmp2) { - if (is_region_identical(&request_region, tmp1) == 1) { + if (region_list_t_is_equal(&request_region, tmp1) == 1) { // Found the requested region lock, remove from the linked list found = 1; DL_DELETE(obj_reg->region_lock_head, tmp1); - free(tmp1); + tmp1 = (region_list_t *)PDC_free(tmp1); tmp1 = NULL; break; } @@ -654,19 +644,11 @@ PDC_Data_Server_region_release(region_lock_in_t *in, region_lock_out_t *out) hg_thread_mutex_unlock(&lock_list_mutex_g); #endif // Request release lock region not found - if (found == 0) { - ret_value = FAIL; - LOG_ERROR("==PDC_SERVER[%d]: requested release region/object does not exist\n", pdc_server_rank_g); - goto done; - } + if (found == 0) + PGOTO_ERROR(FAIL, "Requested release region/object does not exist"); out->ret = 1; done: - /* t = time(NULL); */ - /* tm = *localtime(&t); */ - - /* fflush(stdout); */ - FUNC_LEAVE(ret_value); } @@ -685,9 +667,11 @@ PDC_Data_Server_region_release(region_lock_in_t *in, region_lock_out_t *out) static int region_list_cmp(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + if (a->ndim != b->ndim) { LOG_ERROR(" region_list_cmp(): not equal ndim! \n"); - return -1; + FUNC_LEAVE(-1); } uint32_t i; @@ -695,9 +679,10 @@ region_list_cmp(region_list_t *a, region_list_t *b) for (i = 0; i < a->ndim; i++) { tmp = a->start[i] - b->start[i]; if (tmp != 0) - return tmp; + FUNC_LEAVE(tmp); } - return 0; + + FUNC_LEAVE(0); } /* * Check if two region are the same @@ -710,17 +695,19 @@ region_list_cmp(region_list_t *a, region_list_t *b) static int region_list_path_offset_cmp(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + int ret_value; if (NULL == a || NULL == b) { - LOG_ERROR("NULL input!\n"); - return -1; + LOG_ERROR("NULL input\n"); + FUNC_LEAVE(-1); } ret_value = strcmp(a->storage_location, b->storage_location); if (0 == ret_value) ret_value = a->offset > b->offset ? 1 : -1; - return ret_value; + FUNC_LEAVE(ret_value); } /* @@ -734,28 +721,29 @@ region_list_path_offset_cmp(region_list_t *a, region_list_t *b) static int region_list_cmp_by_client_id(region_list_t *a, region_list_t *b) { + FUNC_ENTER(NULL); + if (a->ndim != b->ndim) { LOG_ERROR(" region_list_cmp_by_client_id(): not equal ndim! \n"); - return -1; + FUNC_LEAVE(-1); } - return (a->client_ids[0] - b->client_ids[0]); + FUNC_LEAVE(a->client_ids[0] - b->client_ids[0]); } perr_t PDC_Data_Server_buf_unmap(const struct hg_info *info, buf_unmap_in_t *in) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int ret = HG_UTIL_SUCCESS; region_buf_map_t * tmp, *elt; data_server_region_t *target_obj; - FUNC_ENTER(NULL); - target_obj = PDC_Server_get_obj_region(in->remote_obj_id); if (target_obj == NULL) { - PGOTO_ERROR(FAIL, - "===PDC_DATA_SERVER: PDC_Data_Server_buf_unmap() - requested object does not exist"); + PGOTO_ERROR(FAIL, "Requested object does not exist"); } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&data_buf_map_mutex_g); @@ -763,7 +751,7 @@ PDC_Data_Server_buf_unmap(const struct hg_info *info, buf_unmap_in_t *in) DL_FOREACH_SAFE(target_obj->region_buf_map_head, elt, tmp) { if (in->remote_obj_id == elt->remote_obj_id && - PDC_region_is_identical(in->remote_region, elt->remote_region_unit)) { + PDC_region_info_transfer_t_is_equal(&(in->remote_region), &(elt->remote_region_unit))) { #ifdef ENABLE_MULTITHREAD // wait for work to be done, then free hg_thread_mutex_lock(&(elt->bulk_args->work_mutex)); @@ -784,7 +772,7 @@ PDC_Data_Server_buf_unmap(const struct hg_info *info, buf_unmap_in_t *in) #endif if (ret == HG_UTIL_SUCCESS) { if (elt->remote_data_ptr) { - free(elt->remote_data_ptr); + elt->remote_data_ptr = (void *)PDC_free(elt->remote_data_ptr); elt->remote_data_ptr = NULL; } HG_Addr_free(info->hg_class, elt->local_addr); @@ -792,20 +780,19 @@ PDC_Data_Server_buf_unmap(const struct hg_info *info, buf_unmap_in_t *in) #ifdef ENABLE_MULTITHREAD hg_thread_mutex_destroy(&(elt->bulk_args->work_mutex)); hg_thread_cond_destroy(&(elt->bulk_args->work_cond)); - free(elt->bulk_args); + elt->bulk_args = (struct buf_map_release_bulk_args *)PDC_free(elt->bulk_args); #endif DL_DELETE(target_obj->region_buf_map_head, elt); - free(elt); + elt = (region_buf_map_t *)PDC_free(elt); } #ifndef ENABLE_WAIT_DATA // timeout, append the global list for unmap else { data_server_region_unmap_t *region = NULL; - region = (data_server_region_unmap_t *)malloc(sizeof(struct data_server_region_unmap_t)); + region = (data_server_region_unmap_t *)PDC_malloc(sizeof(struct data_server_region_unmap_t)); if (region == NULL) - PGOTO_ERROR(FAIL, - "===PDC_DATA_SERVER: PDC_Data_Server_buf_unmap() - cannot allocate region"); + PGOTO_ERROR(FAIL, "Cannot allocate region"); region->obj_id = in->remote_obj_id; region->unmap_region = in->remote_region; region->info = info; @@ -838,6 +825,8 @@ PDC_Data_Server_buf_unmap(const struct hg_info *info, buf_unmap_in_t *in) perr_t PDC_Data_Server_check_unmap() { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int ret = HG_UTIL_SUCCESS; pdcid_t remote_obj_id; @@ -846,22 +835,19 @@ PDC_Data_Server_check_unmap() data_server_region_t * target_obj; int completed = 0; - FUNC_ENTER(NULL); - DL_FOREACH_SAFE(dataserver_region_unmap, elt1, tmp1) { remote_obj_id = elt1->obj_id; target_obj = PDC_Server_get_obj_region(remote_obj_id); if (target_obj == NULL) { - PGOTO_ERROR( - FAIL, "===PDC_DATA_SERVER: PDC_Data_Server_check_unmap() - requested object does not exist"); + PGOTO_ERROR(FAIL, "Requested object does not exist"); } completed = 0; hg_thread_mutex_lock(&data_buf_map_mutex_g); DL_FOREACH_SAFE(target_obj->region_buf_map_head, elt, tmp) { if (remote_obj_id == elt->remote_obj_id && - PDC_region_is_identical(elt1->unmap_region, elt->remote_region_unit)) { + PDC_region_info_transfer_t_is_equal(&(elt1->unmap_region), &(elt->remote_region_unit))) { hg_thread_mutex_lock(&(elt->bulk_args->work_mutex)); if (!elt->bulk_args->work_completed) // wait for 100ms for work completed @@ -873,17 +859,17 @@ PDC_Data_Server_check_unmap() completed = 1; elt->bulk_args->work_completed = 0; if (elt->remote_data_ptr) { - free(elt->remote_data_ptr); + elt->remote_data_ptr = (void *)PDC_free(elt->remote_data_ptr); elt->remote_data_ptr = NULL; } HG_Addr_free(elt1->info->hg_class, elt->local_addr); HG_Bulk_free(elt->local_bulk_handle); hg_thread_mutex_destroy(&(elt->bulk_args->work_mutex)); hg_thread_cond_destroy(&(elt->bulk_args->work_cond)); - free(elt->bulk_args); + elt->bulk_args = (struct buf_map_release_bulk_args *)PDC_free(elt->bulk_args); DL_DELETE(target_obj->region_buf_map_head, elt); - free(elt); + elt = (region_buf_map_t *)PDC_free(elt); } } } @@ -894,7 +880,7 @@ PDC_Data_Server_check_unmap() hg_thread_mutex_unlock(&data_buf_map_mutex_g); if (completed == 1) { DL_DELETE(dataserver_region_unmap, elt1); - free(elt1); + elt1 = (data_server_region_unmap_t *)PDC_free(elt1); } } @@ -906,21 +892,19 @@ PDC_Data_Server_check_unmap() static hg_return_t server_send_buf_unmap_addr_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; buf_map_out_t out; struct transfer_buf_unmap *tranx_args; - FUNC_ENTER(NULL); - tranx_args = (struct transfer_buf_unmap *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &out); if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: server_send_buf_unmap_addr_rpc_cb - error with HG_Get_output\n", - pdc_server_rank_g); - goto done; + PGOTO_ERROR(ret_value, "server_send_buf_unmap_addr_rpc_cb - error with HG_Get_output"); } done: @@ -929,7 +913,7 @@ server_send_buf_unmap_addr_rpc_cb(const struct hg_cb_info *callback_info) HG_Destroy(tranx_args->handle); HG_Free_output(handle, &out); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_unmap *)PDC_free(tranx_args); FUNC_LEAVE(ret_value); } @@ -937,6 +921,8 @@ server_send_buf_unmap_addr_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t buf_unmap_lookup_remote_server_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint32_t server_id; struct buf_unmap_server_lookup_args_t *lookup_args; @@ -945,8 +931,6 @@ buf_unmap_lookup_remote_server_cb(const struct hg_cb_info *callback_info) struct transfer_buf_unmap * tranx_args; int error = 0; - FUNC_ENTER(NULL); - #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&addr_valid_mutex_g); #endif @@ -959,9 +943,8 @@ buf_unmap_lookup_remote_server_cb(const struct hg_cb_info *callback_info) pdc_remote_server_info_g[server_id].addr_valid = 1; if (pdc_remote_server_info_g[server_id].addr == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: remote server addr is NULL\n", pdc_server_rank_g); error = 1; - goto done; + PGOTO_ERROR(FAIL, "Remote server addr is NULL\n"); } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&addr_valid_mutex_g); @@ -975,16 +958,16 @@ buf_unmap_lookup_remote_server_cb(const struct hg_cb_info *callback_info) if (ret_value != HG_SUCCESS) { error = 1; HG_Destroy(server_send_buf_unmap_handle); - PGOTO_ERROR(ret_value, - "===PDC SERVER: buf_unmap_lookup_remote_server_cb() - Could not start HG_Forward()"); + PGOTO_ERROR(ret_value, "Could not start HG_Forward()"); } done: if (error == 1) { HG_Free_input(handle, &(lookup_args->buf_unmap_args->in)); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_unmap *)PDC_free(tranx_args); } - free(lookup_args); + lookup_args = (struct buf_unmap_server_lookup_args_t *)PDC_free(lookup_args); + FUNC_LEAVE(ret_value); } @@ -992,34 +975,31 @@ buf_unmap_lookup_remote_server_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_buf_unmap_lookup_server_id(int remote_server_id, struct transfer_buf_unmap *transfer_args) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; struct buf_unmap_server_lookup_args_t *lookup_args; hg_handle_t handle; int error = 0; - FUNC_ENTER(NULL); - handle = transfer_args->handle; lookup_args = - (struct buf_unmap_server_lookup_args_t *)malloc(sizeof(struct buf_unmap_server_lookup_args_t)); + (struct buf_unmap_server_lookup_args_t *)PDC_malloc(sizeof(struct buf_unmap_server_lookup_args_t)); lookup_args->server_id = remote_server_id; lookup_args->buf_unmap_args = transfer_args; hg_ret = HG_Addr_lookup(hg_context_g, buf_unmap_lookup_remote_server_cb, lookup_args, pdc_remote_server_info_g[remote_server_id].addr_string, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR( - FAIL, - "==PDC_SERVER: PDC_Server_buf_unmap_lookup_server_id() Connection to remote server FAILED!"); + PGOTO_ERROR(FAIL, "Connection to remote server failed"); } done: - fflush(stdout); if (error == 1) { HG_Free_input(handle, &(transfer_args->in)); HG_Destroy(handle); - free(transfer_args); + transfer_args = (struct transfer_buf_unmap *)PDC_free(transfer_args); } FUNC_LEAVE(ret_value); @@ -1028,22 +1008,20 @@ PDC_Server_buf_unmap_lookup_server_id(int remote_server_id, struct transfer_buf_ static hg_return_t server_send_buf_unmap_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; buf_unmap_out_t output; struct transfer_buf_unmap_args *tranx_args; - FUNC_ENTER(NULL); - tranx_args = (struct transfer_buf_unmap_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: server_send_buf_unmap_rpc_cb() - error with HG_Get_output\n", - pdc_server_rank_g); tranx_args->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Get_output"); } tranx_args->ret = output.ret; @@ -1054,7 +1032,7 @@ server_send_buf_unmap_rpc_cb(const struct hg_cb_info *callback_info) HG_Destroy(tranx_args->handle); HG_Free_output(handle, &output); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_unmap_args *)PDC_free(tranx_args); FUNC_LEAVE(ret_value); } @@ -1062,6 +1040,8 @@ server_send_buf_unmap_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t server_send_buf_unmap_handle; @@ -1071,13 +1051,11 @@ PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle) region_buf_map_t * tmp, *elt; int error = 0; - FUNC_ENTER(NULL); - if ((uint32_t)pdc_server_rank_g == in->meta_server_id) { target_meta = find_metadata_by_id(in->remote_obj_id); if (target_meta == NULL) { error = 1; - PGOTO_ERROR(FAIL, "===PDC META SERVER: cannot retrieve object metadata"); + PGOTO_ERROR(FAIL, "Cannot retrieve object metadata"); } #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&meta_buf_map_mutex_g); @@ -1086,9 +1064,9 @@ PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle) { if (in->remote_obj_id == elt->remote_obj_id && - PDC_region_is_identical(in->remote_region, elt->remote_region_unit)) { + PDC_region_info_transfer_t_is_equal(&(in->remote_region), &(elt->remote_region_unit))) { DL_DELETE(target_meta->region_buf_map_head, elt); - free(elt); + elt = (region_buf_map_t *)PDC_free(elt); } } #ifdef ENABLE_MULTITHREAD @@ -1102,7 +1080,7 @@ PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle) hg_thread_mutex_lock(&addr_valid_mutex_g); #endif if (pdc_remote_server_info_g[in->meta_server_id].addr_valid != 1) { - addr_args = (struct transfer_buf_unmap *)malloc(sizeof(struct transfer_buf_unmap)); + addr_args = (struct transfer_buf_unmap *)PDC_malloc(sizeof(struct transfer_buf_unmap)); addr_args->handle = *handle; addr_args->in = *in; @@ -1112,15 +1090,16 @@ PDC_Meta_Server_buf_unmap(buf_unmap_in_t *in, hg_handle_t *handle) HG_Create(hg_context_g, pdc_remote_server_info_g[in->meta_server_id].addr, buf_unmap_server_register_id_g, &server_send_buf_unmap_handle); - buf_unmap_args = (struct transfer_buf_unmap_args *)malloc(sizeof(struct transfer_buf_unmap_args)); + buf_unmap_args = + (struct transfer_buf_unmap_args *)PDC_malloc(sizeof(struct transfer_buf_unmap_args)); buf_unmap_args->handle = *handle; buf_unmap_args->in = *in; hg_ret = HG_Forward(server_send_buf_unmap_handle, server_send_buf_unmap_rpc_cb, buf_unmap_args, in); if (hg_ret != HG_SUCCESS) { HG_Destroy(server_send_buf_unmap_handle); - free(buf_unmap_args); - error = 1; + buf_unmap_args = (struct transfer_buf_unmap_args *)PDC_free(buf_unmap_args); + error = 1; PGOTO_ERROR(FAIL, "PDC_Meta_Server_buf_unmap(): Could not start HG_Forward()"); } } @@ -1142,6 +1121,8 @@ region_buf_map_t * PDC_Data_Server_buf_map(const struct hg_info *info, buf_map_in_t *in, region_list_t *request_region, void *data_ptr) { + FUNC_ENTER(NULL); + region_buf_map_t * ret_value = NULL; data_server_region_t *new_obj_reg = NULL; region_list_t * elt_reg; @@ -1155,14 +1136,12 @@ PDC_Data_Server_buf_map(const struct hg_info *info, buf_map_in_t *in, region_lis int stripe_count, stripe_size; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(®ion_struct_mutex_g); #endif new_obj_reg = PDC_Server_get_obj_region(in->remote_obj_id); if (new_obj_reg == NULL) { - new_obj_reg = (data_server_region_t *)malloc(sizeof(struct data_server_region_t)); + new_obj_reg = (data_server_region_t *)PDC_malloc(sizeof(struct data_server_region_t)); if (new_obj_reg == NULL) PGOTO_ERROR(NULL, "PDC_SERVER: PDC_Server_insert_buf_map_region() allocates new object failed"); new_obj_reg->obj_id = in->remote_obj_id; @@ -1196,14 +1175,12 @@ PDC_Data_Server_buf_map(const struct hg_info *info, buf_map_in_t *in, region_lis PDC_Server_set_lustre_stripe(storage_location, stripe_count, stripe_size); if (is_debug_g == 1 && pdc_server_rank_g == 0) { - LOG_INFO("storage_location is %s\n", storage_location); + LOG_INFO("Storage_location is %s\n", storage_location); } #endif new_obj_reg->fd = open(storage_location, O_RDWR | O_CREAT, 0666); - if (new_obj_reg->fd == -1) { - LOG_ERROR("==PDC_SERVER[%d]: open %s failed\n", pdc_server_rank_g, storage_location); - goto done; - } + if (new_obj_reg->fd == -1) + PGOTO_ERROR(NULL, "open %s failed\n", storage_location); new_obj_reg->storage_location = strdup(storage_location); DL_APPEND(dataserver_region_g, new_obj_reg); } @@ -1216,45 +1193,13 @@ PDC_Data_Server_buf_map(const struct hg_info *info, buf_map_in_t *in, region_lis #endif DL_FOREACH(new_obj_reg->region_buf_map_head, tmp) { - if (in->ndim == 1) { - if (tmp->remote_obj_id == in->remote_obj_id && - in->remote_region_unit.start_0 == tmp->remote_region_unit.start_0 && - in->remote_region_unit.count_0 == tmp->remote_region_unit.count_0 && - in->local_region.start_0 == tmp->local_region.start_0 && - in->local_region.count_0 == tmp->local_region.count_0) - dup = 1; - } - else if (in->ndim == 2) { - if (tmp->remote_obj_id == in->remote_obj_id && - in->remote_region_unit.start_0 == tmp->remote_region_unit.start_0 && - in->remote_region_unit.start_1 == tmp->remote_region_unit.start_1 && - in->remote_region_unit.count_0 == tmp->remote_region_unit.count_0 && - in->remote_region_unit.count_1 == tmp->remote_region_unit.count_1 && - in->local_region.start_0 == tmp->local_region.start_0 && - in->local_region.start_1 == tmp->local_region.start_1 && - in->local_region.count_0 == tmp->local_region.count_0 && - in->local_region.count_1 == tmp->local_region.count_1) - dup = 1; - } - else if (in->ndim == 3) { - if (tmp->remote_obj_id == in->remote_obj_id && - in->remote_region_unit.start_0 == tmp->remote_region_unit.start_0 && - in->remote_region_unit.start_1 == tmp->remote_region_unit.start_1 && - in->remote_region_unit.start_2 == tmp->remote_region_unit.start_2 && - in->remote_region_unit.count_0 == tmp->remote_region_unit.count_0 && - in->remote_region_unit.count_1 == tmp->remote_region_unit.count_1 && - in->remote_region_unit.count_2 == tmp->remote_region_unit.count_2 && - in->local_region.start_0 == tmp->local_region.start_0 && - in->local_region.start_1 == tmp->local_region.start_1 && - in->local_region.start_2 == tmp->local_region.start_2 && - in->local_region.count_0 == tmp->local_region.count_0 && - in->local_region.count_1 == tmp->local_region.count_1 && - in->local_region.count_2 == tmp->local_region.count_2) - dup = 1; + if (tmp->remote_obj_id == in->remote_obj_id && + PDC_region_info_transfer_t_is_equal(&(in->remote_region_unit), &(tmp->remote_region_unit))) { + dup = 1; } } if (dup == 0) { - buf_map_ptr = (region_buf_map_t *)malloc(sizeof(region_buf_map_t)); + buf_map_ptr = (region_buf_map_t *)PDC_malloc(sizeof(region_buf_map_t)); if (buf_map_ptr == NULL) PGOTO_ERROR(NULL, "PDC_SERVER: PDC_Server_insert_buf_map_region() allocates region pointer failed"); @@ -1288,44 +1233,7 @@ PDC_Data_Server_buf_map(const struct hg_info *info, buf_map_in_t *in, region_lis } ret_value = buf_map_ptr; - free(request_region); - -done: - FUNC_LEAVE(ret_value); -} - -static int -is_region_transfer_t_identical(region_info_transfer_t *a, region_info_transfer_t *b) -{ - int ret_value = -1; - - FUNC_ENTER(NULL); - - if (a == NULL || b == NULL) { - PGOTO_DONE(ret_value); - } - - if (a->ndim != b->ndim) { - PGOTO_DONE(ret_value); - } - - if (a->ndim >= 1) { - if (a->start_0 != b->start_0 || a->count_0 != b->count_0) - PGOTO_DONE(ret_value); - } - if (a->ndim >= 2) { - if (a->start_1 != b->start_1 || a->count_1 != b->count_1) - PGOTO_DONE(ret_value); - } - if (a->ndim >= 3) { - if (a->start_2 != b->start_2 || a->count_2 != b->count_2) - PGOTO_DONE(ret_value); - } - if (a->ndim >= 4) { - if (a->start_3 != b->start_3 || a->count_3 != b->count_3) - PGOTO_DONE(ret_value); - } - ret_value = 1; + request_region = (region_list_t *)PDC_free(request_region); done: FUNC_LEAVE(ret_value); @@ -1334,25 +1242,25 @@ is_region_transfer_t_identical(region_info_transfer_t *a, region_info_transfer_t void * PDC_Server_maybe_allocate_region_buf_ptr(pdcid_t obj_id, region_info_transfer_t region, size_t type_size) { + FUNC_ENTER(NULL); + void * ret_value = NULL; data_server_region_t *target_obj = NULL, *elt = NULL; region_buf_map_t * tmp; - FUNC_ENTER(NULL); - if (dataserver_region_g == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - object list is NULL"); + PGOTO_ERROR(NULL, "Object list is NULL"); DL_FOREACH(dataserver_region_g, elt) { if (obj_id == elt->obj_id) target_obj = elt; } if (target_obj == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - cannot locate object"); + PGOTO_ERROR(NULL, "Cannot locate object"); DL_FOREACH(target_obj->region_buf_map_head, tmp) { - if (is_region_transfer_t_identical(®ion, &(tmp->remote_region_unit)) == 1) { + if (PDC_region_info_transfer_t_is_equal(®ion, &(tmp->remote_region_unit)) == 1) { ret_value = tmp->remote_data_ptr; break; } @@ -1361,32 +1269,25 @@ PDC_Server_maybe_allocate_region_buf_ptr(pdcid_t obj_id, region_info_transfer_t if (ret_value == NULL) { size_t i; - size_t region_size = region.count_0; + size_t region_size = + PDC_get_region_desc_size_bytes((uint64_t *)&(region.count), type_size, region.ndim) / type_size; region_buf_map_t *buf_map_ptr = NULL; - for (i = 1; i < region.ndim; i++) { - if (i == 1) - region_size *= (region.count_1 / type_size); - else if (i == 2) - region_size *= (region.count_2 / type_size); - else if (i == 3) - region_size *= (region.count_3 / type_size); - } - ret_value = malloc(region_size); - buf_map_ptr = (region_buf_map_t *)malloc(sizeof(region_buf_map_t)); + ret_value = PDC_malloc(region_size); + + buf_map_ptr = (region_buf_map_t *)PDC_malloc(sizeof(region_buf_map_t)); buf_map_ptr->remote_obj_id = obj_id; buf_map_ptr->remote_ndim = region.ndim; buf_map_ptr->remote_data_ptr = ret_value; buf_map_ptr->remote_region_unit = region; buf_map_ptr->remote_region_nounit = region; - buf_map_ptr->remote_region_nounit.count_0 /= type_size; - buf_map_ptr->remote_region_nounit.count_1 /= type_size; - buf_map_ptr->remote_region_nounit.count_2 /= type_size; - buf_map_ptr->remote_region_nounit.count_3 /= type_size; + for (int j = 0; j < buf_map_ptr->remote_ndim; j++) { + buf_map_ptr->remote_region_nounit.count[j] /= type_size; + } DL_APPEND(target_obj->region_buf_map_head, buf_map_ptr); } if (ret_value == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - region data pointer is NULL"); + PGOTO_ERROR(NULL, "Region data pointer is NULL"); done: FUNC_LEAVE(ret_value); @@ -1395,31 +1296,31 @@ PDC_Server_maybe_allocate_region_buf_ptr(pdcid_t obj_id, region_info_transfer_t void * PDC_Server_get_region_buf_ptr(pdcid_t obj_id, region_info_transfer_t region) { + FUNC_ENTER(NULL); + void * ret_value = NULL; data_server_region_t *target_obj = NULL, *elt = NULL; region_buf_map_t * tmp; - FUNC_ENTER(NULL); - if (dataserver_region_g == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - object list is NULL"); + PGOTO_ERROR(NULL, "Object list is NULL"); DL_FOREACH(dataserver_region_g, elt) { if (obj_id == elt->obj_id) target_obj = elt; } if (target_obj == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - cannot locate object"); + PGOTO_ERROR(NULL, "Cannot locate object"); DL_FOREACH(target_obj->region_buf_map_head, tmp) { - if (is_region_transfer_t_identical(®ion, &(tmp->remote_region_unit)) == 1) { + if (PDC_region_info_transfer_t_is_equal(®ion, &(tmp->remote_region_unit)) == 1) { ret_value = tmp->remote_data_ptr; break; } } if (ret_value == NULL) - PGOTO_ERROR(NULL, "===PDC SERVER: PDC_Server_get_region_buf_ptr() - region data pointer is NULL"); + PGOTO_ERROR(NULL, "Region data pointer is NULL"); done: FUNC_LEAVE(ret_value); @@ -1428,29 +1329,26 @@ PDC_Server_get_region_buf_ptr(pdcid_t obj_id, region_info_transfer_t region) static hg_return_t server_send_buf_map_addr_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; buf_map_out_t out; struct transfer_buf_map *tranx_args; - FUNC_ENTER(NULL); - tranx_args = (struct transfer_buf_map *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &out); - if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: server_send_buf_map_addr_rpc_cb - error with HG_Get_output\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); done: HG_Free_input(tranx_args->handle, &(tranx_args->in)); HG_Destroy(tranx_args->handle); HG_Free_output(handle, &out); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_map *)PDC_free(tranx_args); FUNC_LEAVE(ret_value); } @@ -1458,6 +1356,8 @@ server_send_buf_map_addr_rpc_cb(const struct hg_cb_info *callback_info) static hg_return_t buf_map_lookup_remote_server_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint32_t server_id; struct buf_map_server_lookup_args_t *lookup_args; @@ -1466,8 +1366,6 @@ buf_map_lookup_remote_server_cb(const struct hg_cb_info *callback_info) struct transfer_buf_map * tranx_args; int error = 0; - FUNC_ENTER(NULL); - #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&addr_valid_mutex_g); #endif @@ -1480,10 +1378,10 @@ buf_map_lookup_remote_server_cb(const struct hg_cb_info *callback_info) pdc_remote_server_info_g[server_id].addr_valid = 1; if (pdc_remote_server_info_g[server_id].addr == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: remote server addr is NULL\n", pdc_server_rank_g); error = 1; - goto done; + PGOTO_ERROR(FAIL, "Remote server address was NULL"); } + #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&addr_valid_mutex_g); #endif @@ -1496,17 +1394,16 @@ buf_map_lookup_remote_server_cb(const struct hg_cb_info *callback_info) if (ret_value != HG_SUCCESS) { error = 1; HG_Destroy(server_send_buf_map_handle); - PGOTO_ERROR(ret_value, - "===PDC SERVER: buf_map_lookup_remote_server_cb() - Could not start HG_Forward()"); + PGOTO_ERROR(ret_value, "Could not start HG_Forward()"); } done: if (error == 1) { HG_Free_input(handle, &(lookup_args->buf_map_args->in)); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_map *)PDC_free(tranx_args); } - free(lookup_args); + lookup_args = (struct buf_map_server_lookup_args_t *)PDC_free(lookup_args); FUNC_LEAVE(ret_value); } @@ -1514,32 +1411,31 @@ buf_map_lookup_remote_server_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_buf_map_lookup_server_id(int remote_server_id, struct transfer_buf_map *transfer_args) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; struct buf_map_server_lookup_args_t *lookup_args; hg_handle_t handle; int error = 0; - FUNC_ENTER(NULL); - - handle = transfer_args->handle; - lookup_args = (struct buf_map_server_lookup_args_t *)malloc(sizeof(struct buf_map_server_lookup_args_t)); + handle = transfer_args->handle; + lookup_args = + (struct buf_map_server_lookup_args_t *)PDC_malloc(sizeof(struct buf_map_server_lookup_args_t)); lookup_args->server_id = remote_server_id; lookup_args->buf_map_args = transfer_args; hg_ret = HG_Addr_lookup(hg_context_g, buf_map_lookup_remote_server_cb, lookup_args, pdc_remote_server_info_g[remote_server_id].addr_string, HG_OP_ID_IGNORE); if (hg_ret != HG_SUCCESS) { error = 1; - PGOTO_ERROR( - FAIL, "==PDC_SERVER: PDC_Server_buf_map_lookup_server_id() Connection to remote server FAILED!"); + PGOTO_ERROR(FAIL, "Connection to remote server FAILED"); } done: - fflush(stdout); if (error == 1) { HG_Free_input(handle, &(transfer_args->in)); HG_Destroy(handle); - free(transfer_args); + transfer_args = (struct transfer_buf_map *)PDC_free(transfer_args); } FUNC_LEAVE(ret_value); @@ -1548,22 +1444,20 @@ PDC_Server_buf_map_lookup_server_id(int remote_server_id, struct transfer_buf_ma static hg_return_t server_send_buf_map_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; buf_map_out_t out; struct transfer_buf_map_args *tranx_args; - FUNC_ENTER(NULL); - tranx_args = (struct transfer_buf_map_args *)callback_info->arg; handle = callback_info->info.forward.handle; ret_value = HG_Get_output(handle, &out); if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: server_send_buf_map_rpc_cb - error with HG_Get_output\n", - pdc_server_rank_g); tranx_args->ret = -1; - goto done; + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } done: @@ -1571,7 +1465,7 @@ server_send_buf_map_rpc_cb(const struct hg_cb_info *callback_info) HG_Destroy(tranx_args->handle); HG_Free_output(handle, &out); HG_Destroy(handle); - free(tranx_args); + tranx_args = (struct transfer_buf_map_args *)PDC_free(tranx_args); FUNC_LEAVE(ret_value); } @@ -1579,6 +1473,8 @@ server_send_buf_map_rpc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_handle_t *handle) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t server_send_buf_map_handle; @@ -1588,17 +1484,15 @@ PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_ region_buf_map_t * buf_map_ptr; int error = 0; - FUNC_ENTER(NULL); - // dataserver and metadata server is on the same node if ((uint32_t)pdc_server_rank_g == in->meta_server_id) { target_meta = find_metadata_by_id(in->remote_obj_id); if (target_meta == NULL) { error = 1; - PGOTO_ERROR(FAIL, "PDC_SERVER: PDC_Meta_Server_buf_map() find_metadata_by_id FAILED!"); + PGOTO_ERROR(FAIL, "PDC_SERVER: PDC_Meta_Server_buf_map() find_metadata_by_id FAILED"); } - buf_map_ptr = (region_buf_map_t *)malloc(sizeof(region_buf_map_t)); + buf_map_ptr = (region_buf_map_t *)PDC_malloc(sizeof(region_buf_map_t)); if (buf_map_ptr == NULL) { error = 1; PGOTO_ERROR(FAIL, @@ -1634,7 +1528,7 @@ PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_ hg_thread_mutex_lock(&addr_valid_mutex_g); #endif if (pdc_remote_server_info_g[in->meta_server_id].addr_valid != 1) { - addr_args = (struct transfer_buf_map *)malloc(sizeof(struct transfer_buf_map)); + addr_args = (struct transfer_buf_map *)PDC_malloc(sizeof(struct transfer_buf_map)); addr_args->handle = *handle; addr_args->in = *in; @@ -1644,15 +1538,14 @@ PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_ HG_Create(hg_context_g, pdc_remote_server_info_g[in->meta_server_id].addr, buf_map_server_register_id_g, &server_send_buf_map_handle); - tranx_args = (struct transfer_buf_map_args *)malloc(sizeof(struct transfer_buf_map_args)); + tranx_args = (struct transfer_buf_map_args *)PDC_malloc(sizeof(struct transfer_buf_map_args)); tranx_args->handle = *handle; tranx_args->in = *in; hg_ret = HG_Forward(server_send_buf_map_handle, server_send_buf_map_rpc_cb, tranx_args, in); if (hg_ret != HG_SUCCESS) { error = 1; HG_Destroy(server_send_buf_map_handle); - free(tranx_args); - tranx_args = NULL; + tranx_args = (struct transfer_buf_map_args *)PDC_free(tranx_args); PGOTO_ERROR(FAIL, "PDC_Server_transfer_region_info(): Could not start HG_Forward()"); } } @@ -1666,7 +1559,7 @@ PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_ HG_Free_input(*handle, in); HG_Destroy(*handle); if ((uint32_t)pdc_server_rank_g != in->meta_server_id && tranx_args != NULL) - free(tranx_args); + tranx_args = (struct transfer_buf_map_args *)PDC_free(tranx_args); } FUNC_LEAVE(ret_value); } @@ -1681,23 +1574,21 @@ PDC_Meta_Server_buf_map(buf_map_in_t *in, region_buf_map_t *new_buf_map_ptr, hg_ static hg_return_t PDC_Server_notify_region_update_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; hg_handle_t handle; notify_region_update_out_t output; struct server_region_update_args *update_args; - FUNC_ENTER(NULL); - update_args = (struct server_region_update_args *)callback_info->arg; handle = callback_info->info.forward.handle; /* Get output from client */ ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_notify_region_update_cb - error with HG_Get_output\n", - pdc_server_rank_g); update_args->ret = -1; - goto done; + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } update_args->ret = output.ret; @@ -1709,42 +1600,33 @@ PDC_Server_notify_region_update_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_notify_region_update_to_client(uint64_t obj_id, uint64_t reg_id, int32_t client_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; struct server_region_update_args update_args; hg_handle_t notify_region_update_handle; - FUNC_ENTER(NULL); - if (client_id >= pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_SERVER_notify_region_update_to_client() - " - "client_id %d invalid)\n", - pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Client_id %d is invalid", client_id); + } + + if (pdc_client_info_g == NULL) { + LOG_ERROR("pdc_client_info_g is NULL\n"); + FUNC_LEAVE(FAIL); } - if (pdc_client_info_g || pdc_client_info_g[client_id].addr_valid == 0) { + if (pdc_client_info_g[client_id].addr_valid == 0) { ret_value = PDC_Server_lookup_client(client_id); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER: PDC_Server_notify_region_update_to_client() - \ - PDC_Server_lookup_client failed)\n"); - return FAIL; + PGOTO_ERROR(FAIL, "Error with PDC_Server_lookup_client"); } } - if (pdc_client_info_g == NULL) { - LOG_ERROR("==PDC_SERVER: pdc_client_info_g is NULL\n"); - return FAIL; - } - hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, notify_region_update_register_id_g, ¬ify_region_update_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("PDC_Server_notify_region_update_to_client(): Could not HG_Create()\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); // Fill input structure notify_region_update_in_t in; @@ -1752,11 +1634,8 @@ PDC_Server_notify_region_update_to_client(uint64_t obj_id, uint64_t reg_id, int3 in.reg_id = reg_id; hg_ret = HG_Forward(notify_region_update_handle, PDC_Server_notify_region_update_cb, &update_args, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("PDC_Server_notify_region_update_to_client(): Could not start HG_Forward()\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not start HG_Forward"); done: HG_Destroy(notify_region_update_handle); @@ -1767,42 +1646,30 @@ PDC_Server_notify_region_update_to_client(uint64_t obj_id, uint64_t reg_id, int3 perr_t PDC_Server_close_shm(region_list_t *region, int is_remove) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + if (region->is_shm_closed == 1) { - goto done; + PGOTO_DONE(ret_value); } - if (region == NULL || region->buf == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region == NULL) + PGOTO_ERROR(FAIL, "Region was NULL"); + if (region->buf == NULL) + PGOTO_ERROR(FAIL, "region->buf was NULL"); /* remove the mapped memory segment from the address space of the process */ - if (munmap(region->buf, region->data_size) == -1) { - LOG_ERROR("==PDC_SERVER[%d]: unmap failed\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (munmap(region->buf, region->data_size) == -1) + PGOTO_ERROR(FAIL, "unmap failed\n"); /* close the shared memory segment as if it was a file */ - if (close(region->shm_fd) == -1) { - LOG_ERROR("==PDC_SERVER[%d]: close shm_fd failed\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (close(region->shm_fd) == -1) + PGOTO_ERROR(FAIL, "Cose shm_fd failed"); - if (is_remove == 1) { - /* remove the shared memory segment from the file system */ - if (shm_unlink(region->shm_addr) == -1) { - ret_value = FAIL; - goto done; - LOG_ERROR("==PDC_SERVER[%d]: Error removing %s\n", pdc_server_rank_g, region->shm_addr); - } - } + /* remove the shared memory segment from the file system */ + if (is_remove == 1 && shm_unlink(region->shm_addr) == -1) + PGOTO_ERROR(FAIL, "Error removing %s", region->shm_addr); region->buf = NULL; region->shm_fd = -1; @@ -1811,7 +1678,6 @@ PDC_Server_close_shm(region_list_t *region, int is_remove) total_mem_cache_size_mb_g -= (region->data_size / 1048576); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -1819,31 +1685,26 @@ PDC_Server_close_shm(region_list_t *region, int is_remove) hg_return_t PDC_Server_notify_client_multi_io_complete_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_int_ret_t output; notify_multi_io_args_t *args = NULL; - FUNC_ENTER(NULL); hg_handle_t handle = callback_info->info.forward.handle; args = (notify_multi_io_args_t *)callback_info->arg; ret_value = HG_Get_output(handle, &output); - if (ret_value != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: Error with HG_Get_output\n", pdc_server_rank_g); - goto done; - } - - if (output.ret != 1) { - LOG_ERROR("==PDC_SERVER[%d]: Return value [%d] is NOT expected\n", pdc_server_rank_g, output.ret); - } - - // TODO: Cache to BB if needed + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); + if (output.ret != 1) + PGOTO_ERROR(HG_OTHER_ERROR, "Return value [%d] is NOT expected", output.ret); done: if (args) { - free(args->buf_sizes); - free(args->buf_ptrs); - free(args); + args->buf_sizes = (void *)PDC_free(args->buf_sizes); + args->buf_ptrs = (void *)PDC_free(args->buf_ptrs); + args = (notify_multi_io_args_t *)PDC_free(args); } HG_Free_output(handle, &output); @@ -1854,6 +1715,8 @@ perr_t PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id, int n_completed, region_list_t *completed_region_list) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret = HG_SUCCESS; hg_handle_t rpc_handle; @@ -1865,33 +1728,23 @@ PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id region_list_t * region_elt; notify_multi_io_args_t *bulk_args; - FUNC_ENTER(NULL); - - if (client_id >= (uint32_t)pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: client_id %d invalid\n", pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; - } + if (client_id >= (uint32_t)pdc_client_num_g) + PGOTO_ERROR(FAIL, "client_id %d invalid", client_id); while (pdc_client_info_g[client_id].addr_valid != 1) { ret_value = PDC_Server_lookup_client(client_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: lookup client failed!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(ret_value, "Lookup client failed\n"); } hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, notify_client_multi_io_complete_rpc_register_id_g, &rpc_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create handle"); // Send the shm_addr + total data size to client - buf_sizes = (hg_size_t *)calloc(sizeof(hg_size_t), n_completed * 2); - buf_ptrs = (void **)calloc(sizeof(void *), n_completed * 2); + buf_sizes = (hg_size_t *)PDC_calloc(sizeof(hg_size_t), n_completed * 2); + buf_ptrs = (void **)PDC_calloc(sizeof(void *), n_completed * 2); i = 0; DL_FOREACH(completed_region_list, region_elt) @@ -1906,11 +1759,8 @@ PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id /* Register memory */ hg_ret = HG_Bulk_create(hg_class_g, n_completed * 2, buf_ptrs, buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); /* Fill input structure */ bulk_rpc_in.cnt = n_completed; @@ -1918,7 +1768,7 @@ PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id bulk_rpc_in.seq_id = client_seq_id; bulk_rpc_in.bulk_handle = bulk_handle; - bulk_args = (notify_multi_io_args_t *)calloc(1, sizeof(notify_multi_io_args_t)); + bulk_args = (notify_multi_io_args_t *)PDC_calloc(1, sizeof(notify_multi_io_args_t)); bulk_args->bulk_handle = bulk_handle; bulk_args->buf_sizes = buf_sizes; bulk_args->buf_ptrs = buf_ptrs; @@ -1926,14 +1776,10 @@ PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id /* Forward call to remote addr */ hg_ret = HG_Forward(rpc_handle, PDC_Server_notify_client_multi_io_complete_cb, bulk_args, &bulk_rpc_in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not forward call\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not forward call"); done: - fflush(stdout); HG_Destroy(rpc_handle); FUNC_LEAVE(ret_value); @@ -1942,9 +1788,12 @@ PDC_Server_notify_client_multi_io_complete(uint32_t client_id, int client_seq_id perr_t PDC_Close_cache_file() { + FUNC_ENTER(NULL); + if (pdc_cache_file_ptr_g != NULL) fclose(pdc_cache_file_ptr_g); - return SUCCEED; + + FUNC_LEAVE(SUCCEED); } /* * Cache a region to BB, write and update @@ -1956,10 +1805,11 @@ PDC_Close_cache_file() static perr_t PDC_Server_cache_region_to_BB(region_list_t *region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t write_bytes, offset; - FUNC_ENTER(NULL); // Write to BB #ifdef ENABLE_TIMING @@ -1983,16 +1833,12 @@ PDC_Server_cache_region_to_BB(region_list_t *region) bb_data_path = "."; } sprintf(pdc_cache_file_path_g, "%s/PDCcacheBB.%d", bb_data_path, pdc_server_rank_g); - LOG_ERROR("==PDC_SERVER[%d]: No PDC_BB_LOC specified, use [%s]!\n", pdc_server_rank_g, - bb_data_path); + LOG_ERROR("No PDC_BB_LOC specified, use [%s]\n", bb_data_path); } pdc_cache_file_ptr_g = fopen(pdc_cache_file_path_g, "ab"); - if (NULL == pdc_cache_file_ptr_g) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, pdc_cache_file_path_g); - ret_value = FAIL; - goto done; - } + if (NULL == pdc_cache_file_ptr_g) + PGOTO_ERROR(FAIL, "fopen failed [%s]\n", pdc_cache_file_path_g); n_fopen_g++; } // End open cache file @@ -2000,13 +1846,11 @@ PDC_Server_cache_region_to_BB(region_list_t *region) offset = ftell(pdc_cache_file_ptr_g); // Actual write (append) - LOG_ERROR("==PDC_SERVER[%d]: appending %" PRIu64 " bytes to BB\n", pdc_server_rank_g, region->data_size); + LOG_INFO("Appending %" PRIu64 " bytes to BB\n", region->data_size); write_bytes = fwrite(region->buf, 1, region->data_size, pdc_cache_file_ptr_g); if (write_bytes != region->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: fwrite to [%s] FAILED, size %" PRIu64 ", actual writeen %" PRIu64 "!\n", - pdc_server_rank_g, region->storage_location, region->data_size, write_bytes); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "fwrite to [%s] FAILED, size %" PRIu64 ", actual writeen %" PRIu64, + region->storage_location, region->data_size, write_bytes); } n_fwrite_g++; @@ -2015,8 +1859,7 @@ PDC_Server_cache_region_to_BB(region_list_t *region) double region_write_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); server_write_time_g += region_write_time; if (is_debug_g == 1) { - LOG_ERROR("==PDC_SERVER[%d]: fwrite %" PRIu64 " bytes, %.2fs\n", pdc_server_rank_g, write_bytes, - region_write_time); + LOG_ERROR("fwrite %" PRIu64 " bytes, %.2fs\n", write_bytes, region_write_time); } #endif @@ -2028,10 +1871,8 @@ PDC_Server_cache_region_to_BB(region_list_t *region) // Update storage meta ret_value = PDC_Server_update_region_storagelocation_offset(region, PDC_UPDATE_CACHE); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: failed to update region storage info!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(ret_value, "Failed to update region storage info"); // Close shm after writing to BB ret_value = PDC_Server_close_shm(region, 0); @@ -2039,27 +1880,25 @@ PDC_Server_cache_region_to_BB(region_list_t *region) region->is_io_done = 0; done: - fflush(stdout); FUNC_LEAVE(ret_value); } hg_return_t PDC_cache_region_to_bb_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + perr_t ret; hg_return_t ret_value = HG_SUCCESS; server_read_check_out_t *out; - FUNC_ENTER(NULL); - out = (server_read_check_out_t *)callback_info->arg; ret = PDC_Server_cache_region_to_BB(out->region); if (ret != SUCCEED) - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_cache_region_to_BB\n", pdc_server_rank_g); + LOG_ERROR("Error with PDC_Server_cache_region_to_BB\n"); - if (out != NULL) { - free(out); - } + if (out != NULL) + out = (server_read_check_out_t *)PDC_free(out); FUNC_LEAVE(ret_value); } @@ -2067,14 +1906,14 @@ PDC_cache_region_to_bb_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_read_check(data_server_read_check_in_t *in, server_read_check_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_data_server_io_list_t *io_elt = NULL, *io_target = NULL; region_list_t * region_elt = NULL; region_list_t r_target; /* uint32_t i; */ - FUNC_ENTER(NULL); - pdc_metadata_t meta; PDC_metadata_init(&meta); PDC_transfer_t_to_metadata_t(&in->meta, &meta); @@ -2097,19 +1936,16 @@ PDC_Server_read_check(data_server_read_check_in_t *in, server_read_check_out_t * hg_thread_mutex_unlock(&data_read_list_mutex_g); #endif - if (NULL == io_target) { - LOG_ERROR("==PDC_SERVER[%d]: No existing io request with same obj_id %" PRIu64 " found!\n", - pdc_server_rank_g, meta.obj_id); + if (io_target == NULL) { out->ret = -1; - goto done; + PGOTO_ERROR(FAIL, "No existing io request with same obj_id %" PRIu64 " found", meta.obj_id); } if (is_debug_g) { - LOG_ERROR("==PDC_SERVER[%d]: Read check Obj [%s] id=%" PRIu64 " region: start(%" PRIu64 ", %" PRIu64 - ") " + LOG_ERROR("Read check Obj [%s] id=%" PRIu64 " region: start(%" PRIu64 ", %" PRIu64 ") " "size(%" PRIu64 ", %" PRIu64 ") \n", - pdc_server_rank_g, meta.obj_name, meta.obj_id, r_target.start[0], r_target.start[1], - r_target.count[0], r_target.count[1]); + meta.obj_name, meta.obj_id, r_target.start[0], r_target.start[1], r_target.count[0], + r_target.count[1]); } int found_region = 0; @@ -2122,9 +1958,9 @@ PDC_Server_read_check(data_server_read_check_in_t *in, server_read_check_out_t * out->region = NULL; out->is_cache_to_bb = 0; if (region_elt->is_data_ready == 1) { - out->shm_addr = calloc(sizeof(char), ADDR_MAX); + out->shm_addr = PDC_calloc(sizeof(char), ADDR_MAX); if (strlen(region_elt->shm_addr) == 0) - LOG_ERROR("==PDC_SERVER[%d]: found shm_addr is NULL!\n", pdc_server_rank_g); + LOG_ERROR("Found shm_addr is NULL\n"); else strcpy(out->shm_addr, region_elt->shm_addr); out->region = region_elt; @@ -2133,33 +1969,31 @@ PDC_Server_read_check(data_server_read_check_in_t *in, server_read_check_out_t * strstr(region_elt->cache_location, "PDCcacheBB") == NULL) out->is_cache_to_bb = 1; } - ret_value = SUCCEED; - goto done; + PGOTO_DONE(SUCCEED); } } if (found_region == 0) { - LOG_ERROR("==PDC_SERVER[%d]: No io request with same region found!\n", pdc_server_rank_g); + LOG_ERROR("No io request with same region found\n"); PDC_print_region_list(&r_target); out->ret = -1; - goto done; + PGOTO_DONE(ret_value); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_write_check(data_server_write_check_in_t *in, data_server_write_check_out_t *out) { + FUNC_ENTER(NULL); + perr_t ret_value = FAIL; pdc_data_server_io_list_t *io_elt = NULL, *io_target = NULL; region_list_t * region_elt = NULL, *region_tmp = NULL; int found_region = 0; - FUNC_ENTER(NULL); - pdc_metadata_t meta; PDC_metadata_init(&meta); PDC_transfer_t_to_metadata_t(&in->meta, &meta); @@ -2185,10 +2019,8 @@ PDC_Server_write_check(data_server_write_check_in_t *in, data_server_write_check // If not found, create and insert one to the list if (NULL == io_target) { - LOG_ERROR("==PDC_SERVER: No existing io request with same obj_id found!\n"); - out->ret = -1; - ret_value = SUCCEED; - goto done; + out->ret = -1; + PGOTO_ERROR(FAIL, "No existing io request with same obj_id found"); } DL_FOREACH_SAFE(io_target->region_list_head, region_elt, region_tmp) @@ -2203,21 +2035,17 @@ PDC_Server_write_check(data_server_write_check_in_t *in, data_server_write_check // is no longer needed. But this could be tricky, as we don't know if the client // want to read the data multliple times, so the best time is when the server recycles // the shm associated with this region. - - ret_value = SUCCEED; - goto done; + PGOTO_DONE(SUCCEED); } } if (found_region == 0) { - LOG_ERROR("==PDC_SERVER[%d]: No existing IO request of requested region found!\n", pdc_server_rank_g); - out->ret = -1; - ret_value = SUCCEED; - goto done; + LOG_WARNING("No existing IO request of requested region found"); + out->ret = -1; + PGOTO_DONE(SUCCEED); } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2232,10 +2060,10 @@ PDC_Server_write_check(data_server_write_check_in_t *in, data_server_write_check static perr_t PDC_Server_data_read_to_shm(region_list_t *region_list_head) { - perr_t ret_value = FAIL; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + is_server_direct_io_g = 0; // TODO: merge regions for aggregated read @@ -2245,15 +2073,10 @@ PDC_Server_data_read_to_shm(region_list_t *region_list_head) // POSIX read for now ret_value = PDC_Server_regions_io(region_list_head, PDC_POSIX); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error reading data from storage and create shared memory\n", - pdc_server_rank_g); - goto done; + PGOTO_ERROR(FAIL, "Error reading data from storage and create shared memory"); } - ret_value = SUCCEED; - done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -2261,20 +2084,17 @@ perr_t PDC_Server_get_local_storage_location_of_region(uint64_t obj_id, region_list_t *region, uint32_t *n_loc, region_list_t **overlap_region_loc) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *target_meta = NULL; region_list_t * region_elt = NULL; - FUNC_ENTER(NULL); - // Find object metadata *n_loc = 0; target_meta = find_metadata_by_id(obj_id); - if (target_meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: find_metadata_by_id FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (target_meta == NULL) + PGOTO_ERROR(FAIL, "Error with find_metadata_by_id"); DL_FOREACH(target_meta->storage_region_list_head, region_elt) { if (PDC_is_contiguous_region_overlap(region_elt, region) == 1) { @@ -2282,18 +2102,14 @@ PDC_Server_get_local_storage_location_of_region(uint64_t obj_id, region_list_t * overlap_region_loc[*n_loc] = region_elt; *n_loc += 1; } - if (*n_loc > PDC_MAX_OVERLAP_REGION_NUM) { - LOG_ERROR("==PDC_SERVER[%d]: exceeding PDC_MAX_OVERLAP_REGION_NUM regions!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - } // DL_FOREACH + if (*n_loc > PDC_MAX_OVERLAP_REGION_NUM) + PGOTO_ERROR(FAIL, "Exceeding PDC_MAX_OVERLAP_REGION_NUM regions"); + } if (*n_loc == 0) { - LOG_ERROR("==PDC_SERVER[%d]: no overlapping storage region found\n", pdc_server_rank_g); + LOG_ERROR("No overlapping storage region found\n"); PDC_print_region_list(region); - ret_value = FAIL; - goto done; + PGOTO_DONE(FAIL); } done: @@ -2308,17 +2124,20 @@ PDC_Server_get_local_storage_location_of_region(uint64_t obj_id, region_list_t * static perr_t update_region_storage_meta_bulk_cleanup_cb(update_storage_meta_list_t *meta_list_target, int *n_updated) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + (*n_updated)++; DL_DELETE(pdc_update_storage_meta_list_head_g, meta_list_target); - free(meta_list_target->storage_meta_bulk_xfer_data->buf_ptrs[0]); - free(meta_list_target->storage_meta_bulk_xfer_data->buf_sizes); - free(meta_list_target->storage_meta_bulk_xfer_data); - free(meta_list_target); + meta_list_target->storage_meta_bulk_xfer_data->buf_ptrs[0] = + (void *)PDC_free(meta_list_target->storage_meta_bulk_xfer_data->buf_ptrs[0]); + meta_list_target->storage_meta_bulk_xfer_data->buf_sizes = + (hg_size_t *)PDC_free(meta_list_target->storage_meta_bulk_xfer_data->buf_sizes); + meta_list_target->storage_meta_bulk_xfer_data = + (bulk_xfer_data_t *)PDC_free(meta_list_target->storage_meta_bulk_xfer_data); + meta_list_target = (update_storage_meta_list_t *)PDC_free(meta_list_target); if (NULL == pdc_update_storage_meta_list_head_g) { pdc_nbuffered_bulk_update_g = 0; @@ -2338,11 +2157,11 @@ update_region_storage_meta_bulk_cleanup_cb(update_storage_meta_list_t *meta_list static perr_t PDC_Server_update_storage_meta(int *n_updated) { - perr_t ret_value; - update_storage_meta_list_t *meta_list_elt; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + update_storage_meta_list_t *meta_list_elt; + // MPI Reduce implementation of metadata update *n_updated = 0; DL_FOREACH(pdc_update_storage_meta_list_head_g, meta_list_elt) @@ -2353,9 +2172,7 @@ PDC_Server_update_storage_meta(int *n_updated) meta_list_elt, n_updated); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: update storage info FAILED!\n", pdc_server_rank_g); - - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_Server_update_region_storage_meta_bulk_with_cb"); } } @@ -2366,12 +2183,12 @@ PDC_Server_update_storage_meta(int *n_updated) hg_return_t PDC_Server_count_write_check_update_storage_meta_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; data_server_write_check_out_t *write_ret; int n_updated = 0; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING struct timeval pdc_timer_start, pdc_timer_end; gettimeofday(&pdc_timer_start, 0); @@ -2384,13 +2201,10 @@ PDC_Server_count_write_check_update_storage_meta_cb(const struct hg_cb_info *cal if (n_check_write_finish_returned_g >= pdc_buffered_bulk_update_total_g) { ret_value = PDC_Server_update_storage_meta(&n_updated); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: FAILED to update storage meta\n", pdc_server_rank_g); - goto done; - } - - } // end of if - } // end of if (write_ret->ret == 1) + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_update_storage_meta"); + } + } done: @@ -2401,8 +2215,7 @@ PDC_Server_count_write_check_update_storage_meta_cb(const struct hg_cb_info *cal #endif if (write_ret) - free(write_ret); - fflush(stdout); + write_ret = (data_server_write_check_out_t *)PDC_free(write_ret); FUNC_LEAVE(ret_value); } @@ -2419,6 +2232,8 @@ PDC_Server_count_write_check_update_storage_meta_cb(const struct hg_cb_info *cal static perr_t PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint32_t server_id = 0; uint32_t i, j; @@ -2435,13 +2250,8 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) int * request_overlap_cnt = NULL; int nrequest_per_server = 0; - FUNC_ENTER(NULL); - - if (regions_head == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (regions_head == NULL) + PGOTO_ERROR(FAIL, "regions_head was NULL"); nrequest_per_server = 0; region_meta_prev = regions_head->meta; @@ -2451,25 +2261,17 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) region_meta = region_elt->meta; // All requests should point to the same metadata - if (region_meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: request region has NULL metadata!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - else if (region_meta->obj_id != region_meta_prev->obj_id) { - LOG_ERROR("==PDC_SERVER[%d]: request regions are of different object!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region_meta == NULL) + PGOTO_ERROR(FAIL, "Request region has NULL metadata"); + else if (region_meta->obj_id != region_meta_prev->obj_id) + PGOTO_ERROR(FAIL, "Request regions are of different object"); region_meta_prev = region_meta; // nrequest_per_server should be less than PDC_SERVER_MAX_PROC_PER_NODE // and should be the same across all servers. if (nrequest_per_server > PDC_SERVER_MAX_PROC_PER_NODE) { - LOG_ERROR("==PDC_SERVER[%d]: more requests than expected! " - "Increase PDC_SERVER_MAX_PROC_PER_NODE!\n", - pdc_server_rank_g); - fflush(stdout); + PGOTO_ERROR(FAIL, "More requests than expected! " + "Increase PDC_SERVER_MAX_PROC_PER_NODE\n"); } else { // After saninty check, add the current request to gather send buffer @@ -2484,7 +2286,8 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) // Only recv server needs allocation if (server_id == (uint32_t)pdc_server_rank_g) { - all_requests = (region_info_transfer_t *)calloc(pdc_server_size_g, data_size * nrequest_per_server); + all_requests = + (region_info_transfer_t *)PDC_calloc(pdc_server_size_g, data_size * nrequest_per_server); } else all_requests = local_region_transfer; @@ -2498,17 +2301,17 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) // NOTE: Assumes all data server send equal number of requests total_request_cnt = nrequest_per_server * pdc_server_size_g; - send_bytes = (int *)calloc(sizeof(int), pdc_server_size_g); - displs = (int *)calloc(sizeof(int), pdc_server_size_g); - request_overlap_cnt = (int *)calloc(total_request_cnt, sizeof(int)); + send_bytes = (int *)PDC_calloc(sizeof(int), pdc_server_size_g); + displs = (int *)PDC_calloc(sizeof(int), pdc_server_size_g); + request_overlap_cnt = (int *)PDC_calloc(total_request_cnt, sizeof(int)); // ^storage meta results in all_requests to be returned to all data servers // Now server_id has all the data in all_requests, find all storage regions that overlaps with it // equivalent to storage metadadata searching if (server_id == (uint32_t)pdc_server_rank_g) { - send_buf = (update_region_storage_meta_bulk_t *)calloc(sizeof(update_region_storage_meta_bulk_t), - pdc_server_size_g * nrequest_per_server * - PDC_MAX_OVERLAP_REGION_NUM); + send_buf = (update_region_storage_meta_bulk_t *)PDC_calloc(sizeof(update_region_storage_meta_bulk_t), + pdc_server_size_g * nrequest_per_server * + PDC_MAX_OVERLAP_REGION_NUM); // All participants are querying the same object, so obj_ids are the same // Search one by one @@ -2516,31 +2319,24 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) uint32_t overlap_cnt = 0; int server_idx; // overlap_regions_2d has the ptrs to overlap storage regions to current request - overlap_regions_2d = (region_list_t **)calloc(sizeof(region_list_t *), PDC_MAX_OVERLAP_REGION_NUM); + overlap_regions_2d = + (region_list_t **)PDC_calloc(sizeof(region_list_t *), PDC_MAX_OVERLAP_REGION_NUM); for (i = 0; i < total_request_cnt; i++) { server_idx = i / nrequest_per_server; // server_idx should be [0, pdc_server_size_g) - if (server_idx < 0 || server_idx >= pdc_server_size_g) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with server idx count!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (server_idx < 0 || server_idx >= pdc_server_size_g) + PGOTO_ERROR(FAIL, "Error with server idx count"); memset(&req_region, 0, sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&all_requests[i], &req_region); ret_value = PDC_Server_get_local_storage_location_of_region(region_meta->obj_id, &req_region, &overlap_cnt, overlap_regions_2d); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: unable to get local storage location!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Unable to get local storage location"); if (overlap_cnt > PDC_MAX_OVERLAP_REGION_NUM) { - LOG_ERROR("==PDC_SERVER[%d]: found %d storage locations than PDC_MAX_OVERLAP_REGION_NUM!\n", - pdc_server_rank_g, overlap_cnt); + LOG_ERROR("Found %d storage locations than PDC_MAX_OVERLAP_REGION_NUM\n", overlap_cnt); overlap_cnt = PDC_MAX_OVERLAP_REGION_NUM; - - fflush(stdout); } // Record how many overlap regions for each request @@ -2569,7 +2365,7 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) // for each requested server, just scatter // result_storage_meta is the recv result storage metadata of the requests sent - result_storage_meta = (update_region_storage_meta_bulk_t *)calloc( + result_storage_meta = (update_region_storage_meta_bulk_t *)PDC_calloc( sizeof(update_region_storage_meta_bulk_t), nrequest_per_server * PDC_MAX_OVERLAP_REGION_NUM); #ifdef ENABLE_MPI @@ -2594,7 +2390,7 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) if (region_elt->access_type == PDC_READ) { region_elt->n_overlap_storage_region = request_overlap_cnt[overlap_idx + region_idx]; region_elt->overlap_storage_regions = - (region_list_t *)calloc(sizeof(region_list_t), region_elt->n_overlap_storage_region); + (region_list_t *)PDC_calloc(sizeof(region_list_t), region_elt->n_overlap_storage_region); for (i = 0; i < region_elt->n_overlap_storage_region; i++) { PDC_region_transfer_t_to_list_t(&result_storage_meta[result_idx].region_transfer, ®ion_elt->overlap_storage_regions[i]); @@ -2615,38 +2411,37 @@ PDC_Server_get_storage_location_of_region_mpi(region_list_t *regions_head) #ifdef ENABLE_MPI if (server_id == (uint32_t)pdc_server_rank_g) { if (all_requests) - free(all_requests); + all_requests = (region_info_transfer_t *)PDC_free(all_requests); if (overlap_regions_2d) - free(overlap_regions_2d); + overlap_regions_2d = (region_list_t **)PDC_free(overlap_regions_2d); if (send_buf) - free(send_buf); + send_buf = (update_region_storage_meta_bulk_t *)PDC_free(send_buf); } if (result_storage_meta) - free(result_storage_meta); + result_storage_meta = (update_region_storage_meta_bulk_t *)PDC_free(result_storage_meta); #else if (overlap_regions_2d) - free(overlap_regions_2d); + overlap_regions_2d = (region_list_t **)PDC_free(overlap_regions_2d); if (send_buf) - free(send_buf); + send_buf = (update_region_storage_meta_bulk_t *)PDC_free(send_buf); #endif if (send_bytes) - free(send_bytes); + send_bytes = (int *)PDC_free(send_bytes); if (displs) - free(displs); + displs = (int *)PDC_free(displs); if (request_overlap_cnt) - free(request_overlap_cnt); + request_overlap_cnt = (int *)PDC_free(request_overlap_cnt); - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_regions_io(region_list_t *region_list_head, _pdc_io_plugin_t plugin) { - perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + #ifdef ENABLE_TIMING struct timeval pdc_timer_start, pdc_timer_end; gettimeofday(&pdc_timer_start, 0); @@ -2655,20 +2450,15 @@ PDC_Server_regions_io(region_list_t *region_list_head, _pdc_io_plugin_t plugin) // If read, need to get locations from metadata server if (plugin == PDC_POSIX) { ret_value = PDC_Server_posix_one_file_io(region_list_head); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: %s-error with PDC_Server_posix_one_file_io\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_one_file_io"); } else if (plugin == PDC_DAOS) { - LOG_ERROR("DAOS plugin in under development, using POSIX.\n"); + LOG_WARNING("DAOS plugin in under development, using POSIX\n"); ret_value = PDC_Server_posix_one_file_io(region_list_head); } - else { - LOG_ERROR("==PDC_SERVER: unsupported IO plugin!\n"); - ret_value = FAIL; - goto done; - } + else + PGOTO_ERROR(FAIL, "Unsupported IO plugin"); #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); @@ -2676,8 +2466,6 @@ PDC_Server_regions_io(region_list_t *region_list_head, _pdc_io_plugin_t plugin) #endif done: - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -2692,11 +2480,11 @@ PDC_Server_regions_io(region_list_t *region_list_head, _pdc_io_plugin_t plugin) static perr_t PDC_Server_data_write_from_shm(region_list_t *region_list_head) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t *region_elt; - FUNC_ENTER(NULL); - is_server_direct_io_g = 0; // TODO: Merge regions @@ -2719,29 +2507,20 @@ PDC_Server_data_write_from_shm(region_list_t *region_list_head) // Open shared memory and map to data buf region_elt->shm_fd = shm_open(region_elt->shm_addr, O_RDONLY, 0666); if (region_elt->shm_fd == -1) { - LOG_ERROR("==PDC_SERVER[%d]: Shared memory open failed [%s]!\n", pdc_server_rank_g, - region_elt->shm_addr); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Shared memory open failed [%s]", region_elt->shm_addr); } region_elt->buf = mmap(0, region_elt->data_size, PROT_READ, MAP_SHARED, region_elt->shm_fd, 0); - if (region_elt->buf == MAP_FAILED) { - // close and unlink? - ret_value = FAIL; - goto done; - } + if (region_elt->buf == MAP_FAILED) + PGOTO_DONE(FAIL); } // POSIX write ret_value = PDC_Server_regions_io(region_list_head, PDC_POSIX); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER: PDC_Server_regions_io ERROR!\n"); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_regions_io"); done: - fflush(stdout); // TODO: keep the shared memory for now and close them later? DL_FOREACH(region_list_head, region_elt) @@ -2750,13 +2529,14 @@ PDC_Server_data_write_from_shm(region_list_t *region_list_head) ret_value = PDC_Server_close_shm(region_elt, 1); } - fflush(stdout); FUNC_LEAVE(ret_value); } hg_return_t PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_data_server_io_list_t *io_list_elt, *io_list = NULL, *io_list_target = NULL; @@ -2766,8 +2546,6 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) int count; size_t i; - FUNC_ENTER(NULL); - #ifdef ENABLE_TIMING struct timeval pdc_timer_start, pdc_timer_end; gettimeofday(&pdc_timer_start, 0); @@ -2792,12 +2570,8 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) buffer_read_request_total_g = io_info->nbuffer_request * io_info->nclient; buffer_read_request_num_g++; } - else { - LOG_ERROR("==PDC_SERVER: PDC_Server_data_io_via_shm - invalid IO type received from client!\n"); - ret_value = FAIL; - goto done; - } - fflush(stdout); + else + PGOTO_ERROR(FAIL, "Invalid IO type received from client"); #ifdef ENABLE_MULTITHREAD if (io_info->io_type == PDC_WRITE) @@ -2829,12 +2603,9 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) if (NULL == io_list_target) { // pdc_data_server_io_list_t maintains the request list for one object id, // write and read are separate lists - io_list_target = (pdc_data_server_io_list_t *)calloc(1, sizeof(pdc_data_server_io_list_t)); - if (NULL == io_list_target) { - LOG_ERROR("==PDC_SERVER: ERROR allocating pdc_data_server_io_list_t!\n"); - ret_value = FAIL; - goto done; - } + io_list_target = (pdc_data_server_io_list_t *)PDC_calloc(1, sizeof(pdc_data_server_io_list_t)); + if (NULL == io_list_target) + PGOTO_ERROR(FAIL, "Error allocating pdc_data_server_io_list_t"); io_list_target->obj_id = io_info->meta.obj_id; io_list_target->total = io_info->nclient; io_list_target->count = 0; @@ -2874,12 +2645,9 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) } io_list_target->count++; - if (is_debug_g == 1) { - LOG_ERROR("==PDC_SERVER[%d]: received %d/%d data %s requests of [%s]\n", pdc_server_rank_g, - io_list_target->count, io_list_target->total, + if (is_debug_g == 1) + LOG_ERROR("Received %d/%d data %s requests of [%s]\n", io_list_target->count, io_list_target->total, io_info->io_type == PDC_READ ? "read" : "write", io_info->meta.obj_name); - fflush(stdout); - } int has_read_cache = 0; // Need to check if there is already one region in the list, and update accordingly @@ -2894,26 +2662,23 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) else { // Remove that region DL_DELETE(io_list_target->region_list_head, region_elt); - free(region_elt); + region_elt = (region_list_t *)PDC_free(region_elt); } } } if (has_read_cache != 1) { // append current request region to the io list - region_list_t *new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); - if (new_region == NULL) { - LOG_ERROR("==PDC_SERVER: ERROR allocating new_region!\n"); - ret_value = FAIL; - goto done; - } + region_list_t *new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); + if (new_region == NULL) + PGOTO_ERROR(FAIL, "Error allocating new_region"); PDC_region_list_t_deep_cp(&(io_info->region), new_region); DL_APPEND(io_list_target->region_list_head, new_region); if (is_debug_g == 1) { DL_COUNT(io_list_target->region_list_head, region_elt, count); - LOG_DEBUG("==PDC_SERVER[%d]: Added 1 to IO request list, obj_id=%" PRIu64 ", %d total\n", - pdc_server_rank_g, new_region->meta->obj_id, count); + LOG_DEBUG("Added 1 to IO request list, obj_id=%" PRIu64 ", %d total\n", new_region->meta->obj_id, + count); PDC_print_region_list(new_region); } } @@ -2922,11 +2687,8 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) if (io_info->io_type == PDC_WRITE && buffer_write_request_num_g >= buffer_write_request_total_g && buffer_write_request_total_g != 0) { - if (is_debug_g) { - LOG_ERROR("==PDC_SERVER[%d]: received all %d requests, starts writing.\n", pdc_server_rank_g, - buffer_write_request_total_g); - fflush(stdout); - } + if (is_debug_g) + LOG_DEBUG("Received all %d requests, starts writing.\n", buffer_write_request_total_g); // Perform IO for all requests in each io_list (of unique obj_id) DL_FOREACH(pdc_data_server_write_list_head_g, io_list_elt) @@ -2952,8 +2714,7 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) // If BB is enabled, then overwrite with BB path with the right number of servers if (write_to_bb_percentage_g > 0) { if (strcmp(io_list_elt->bb_path, "") == 0 || io_list_elt->bb_path[0] == 0) { - LOG_ERROR("==PDC_SERVER[%d]: Error with BB path [%s]!\n", pdc_server_rank_g, - io_list_elt->bb_path); + LOG_ERROR("Error with BB path [%s]\n", io_list_elt->bb_path); } else { if (pdc_server_rank_g % 2 == 0) { @@ -2979,11 +2740,8 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) curr_cnt++; } ret_value = PDC_Server_data_write_from_shm(io_list_elt->region_list_head); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_data_write_from_shm FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_data_write_from_shm FAILED"); } // end for io_list buffer_write_request_num_g = 0; buffer_write_request_total_g = 0; @@ -2996,13 +2754,12 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) current_read_from_cache_cnt_g = 0; total_read_from_cache_cnt_g = buffer_read_request_total_g * cache_percentage_g / 100; if (pdc_server_rank_g == 0) { - LOG_ERROR("==PDC_SERVER[%d]: cache percentage %d%% read_from_cache %d/%d\n", pdc_server_rank_g, - cache_percentage_g, current_read_from_cache_cnt_g, total_read_from_cache_cnt_g); + LOG_INFO("Cache percentage %d%% read_from_cache %d/%d\n", cache_percentage_g, + current_read_from_cache_cnt_g, total_read_from_cache_cnt_g); } if (is_debug_g) { - LOG_ERROR("==PDC_SERVER[%d]: received all %d requests, starts reading.\n", pdc_server_rank_g, - buffer_read_request_total_g); + LOG_DEBUG("Received all %d requests, starts reading.\n", buffer_read_request_total_g); } DL_FOREACH(pdc_data_server_read_list_head_g, io_list_elt) { @@ -3022,10 +2779,8 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) } } ret_value = PDC_Server_data_read_to_shm(io_list_elt->region_list_head); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_data_read_to_shm FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_data_read_to_shm FAILED"); } buffer_read_request_num_g = 0; buffer_read_request_total_g = 0; @@ -3037,34 +2792,27 @@ PDC_Server_data_io_via_shm(const struct hg_cb_info *callback_info) #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_id, int type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *target_meta = NULL; /* pdc_metadata_t *region_meta = NULL; */ region_list_t *region_elt = NULL, *new_region = NULL; int update_success = -1; - FUNC_ENTER(NULL); - - if (region == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region == NULL) + PGOTO_ERROR(FAIL, "region was NULL"); // Find object metadata target_meta = find_metadata_by_id(obj_id); - if (target_meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: FAIL to get storage metadata\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (target_meta == NULL) + PGOTO_ERROR(FAIL, "Failed to get storage metadata"); // Find if there is the same region already stored in the metadata and update it DL_FOREACH(target_meta->storage_region_list_head, region_elt) @@ -3082,7 +2830,7 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i region_elt->region_hist = region->region_hist; } else { - LOG_ERROR("==PDC_SERVER[%d]: error with update type %d!\n", pdc_server_rank_g, type); + LOG_ERROR("Error with update type %d\n", type); break; } @@ -3099,12 +2847,9 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i if (update_success == -1) { // Create the region list - new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); - if (PDC_region_list_t_deep_cp(region, new_region) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: deep copy FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); + if (PDC_region_list_t_deep_cp(region, new_region) != SUCCEED) + PGOTO_ERROR(FAIL, "Deep copy FAILED"); new_region->meta = target_meta; new_region->region_hist = region->region_hist; @@ -3114,8 +2859,6 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i } done: - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -3129,22 +2872,21 @@ PDC_Server_update_local_region_storage_loc(region_list_t *region, uint64_t obj_i static hg_return_t PDC_Server_update_region_loc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret_value; server_lookup_args_t *lookup_args; hg_handle_t handle; metadata_update_out_t output; - FUNC_ENTER(NULL); - lookup_args = (server_lookup_args_t *)callback_info->arg; handle = callback_info->info.forward.handle; /* Get output from server*/ ret_value = HG_Get_output(handle, &output); if (ret_value != HG_SUCCESS || output.ret != 20171031) { - LOG_ERROR("==PDC_SERVER[%d]: error HG_Get_output\n", pdc_server_rank_g); lookup_args->ret_int = -1; - goto done; + PGOTO_ERROR(ret_value, "Error with HG_Get_output"); } lookup_args->ret_int = output.ret; @@ -3159,6 +2901,8 @@ PDC_Server_update_region_loc_cb(const struct hg_cb_info *callback_info) perr_t PDC_Server_update_region_storagelocation_offset(region_list_t *region, int type) { + FUNC_ENTER(NULL); + hg_return_t hg_ret; perr_t ret_value = SUCCEED; uint32_t server_id = 0; @@ -3167,26 +2911,14 @@ PDC_Server_update_region_storagelocation_offset(region_list_t *region, int type) update_region_loc_in_t in; server_lookup_args_t lookup_args; - FUNC_ENTER(NULL); - - if (region == NULL) { - LOG_ERROR("==PDC_SERVER[%d] NULL region!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - - if (region->storage_location[0] == 0) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region == NULL) + PGOTO_ERROR(FAIL, "region was NULL"); + if (region->storage_location[0] == 0) + PGOTO_ERROR(FAIL, "region->storage_location was NULL"); region_meta = region->meta; - if (region_meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: region meta is NULL!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region_meta == NULL) + PGOTO_ERROR(FAIL, "Region meta was NULL"); server_id = PDC_get_server_by_obj_id(region_meta->obj_id, pdc_server_size_g); @@ -3194,33 +2926,22 @@ PDC_Server_update_region_storagelocation_offset(region_list_t *region, int type) // Metadata object is local, no need to send update RPC ret_value = PDC_Server_update_local_region_storage_loc(region, region_meta->obj_id, type); update_local_region_count_g++; - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: update_local_region_storage FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with update_local_region_storage"); } else { if (PDC_Server_lookup_server_id(server_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting remote server %d addr via lookup\n", pdc_server_rank_g, - server_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting remote server %d addr via lookup", server_id); } hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, update_region_loc_register_id_g, &update_region_loc_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Create FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); - if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: Sending updated region loc to server %d\n", pdc_server_rank_g, - server_id); - fflush(stdout); - } + if (is_debug_g == 1) + LOG_DEBUG("Sending updated region loc to server %d\n", server_id); in.obj_id = region->meta->obj_id; in.offset = region->offset; @@ -3236,62 +2957,53 @@ PDC_Server_update_region_storagelocation_offset(region_list_t *region, int type) } if (in.hist.nbin == 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR sending hist to server %d with 0 bins\n", pdc_server_rank_g, - server_id); + LOG_ERROR("Error sending hist to server %d with 0 bins\n", server_id); } lookup_args.rpc_handle = update_region_loc_handle; hg_ret = HG_Forward(update_region_loc_handle, PDC_Server_update_region_loc_cb, &lookup_args, &in); if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward() to server %d FAILED\n", pdc_server_rank_g, server_id); HG_Destroy(update_region_loc_handle); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Forward to server %d", server_id); } HG_Destroy(update_region_loc_handle); } done: - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_add_region_storage_meta_to_bulk_buf(region_list_t *region, bulk_xfer_data_t *bulk_data) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; uint64_t obj_id = 0; update_region_storage_meta_bulk_t *curr_buf_ptr; uint64_t * obj_id_ptr; - FUNC_ENTER(NULL); - // Sanity check if (NULL == region || region->storage_location[0] == 0 || NULL == region->meta) { - LOG_ERROR("==PDC_SERVER[%d]: invalid region data!\n", pdc_server_rank_g); + LOG_ERROR("Invalid region data\n"); PDC_print_region_list(region); - ret_value = FAIL; - goto done; + PGOTO_DONE(FAIL); } // Alloc space and init if it's empty if (0 == bulk_data->n_alloc) { - bulk_data->buf_ptrs = (void **)calloc(sizeof(void *), PDC_BULK_XFER_INIT_NALLOC + 1); - update_region_storage_meta_bulk_t *buf_ptrs_1d = (update_region_storage_meta_bulk_t *)calloc( + bulk_data->buf_ptrs = (void **)PDC_calloc(sizeof(void *), PDC_BULK_XFER_INIT_NALLOC + 1); + update_region_storage_meta_bulk_t *buf_ptrs_1d = (update_region_storage_meta_bulk_t *)PDC_calloc( sizeof(update_region_storage_meta_bulk_t), PDC_BULK_XFER_INIT_NALLOC); - bulk_data->buf_sizes = (hg_size_t *)calloc(sizeof(hg_size_t), PDC_BULK_XFER_INIT_NALLOC); - if (NULL == buf_ptrs_1d || NULL == bulk_data->buf_sizes) { - LOG_ERROR("==PDC_SERVER[%d]: calloc FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + bulk_data->buf_sizes = (hg_size_t *)PDC_calloc(sizeof(hg_size_t), PDC_BULK_XFER_INIT_NALLOC); + if (NULL == buf_ptrs_1d || NULL == bulk_data->buf_sizes) + PGOTO_ERROR(FAIL, "PDC_calloc FAILED"); // first element of bulk_buf is the obj_id - bulk_data->buf_ptrs[0] = (void *)calloc(sizeof(uint64_t), 1); + bulk_data->buf_ptrs[0] = (void *)PDC_calloc(sizeof(uint64_t), 1); bulk_data->buf_sizes[0] = sizeof(uint64_t); for (i = 1; i < PDC_BULK_XFER_INIT_NALLOC + 1; i++) { @@ -3307,30 +3019,19 @@ PDC_Server_add_region_storage_meta_to_bulk_buf(region_list_t *region, bulk_xfer_ // TODO: Need to expand the space when more than initial allocated int idx = bulk_data->idx; - if (idx >= bulk_data->n_alloc) { - LOG_ERROR("==PDC_SERVER[%d]: need to alloc larger!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (idx >= bulk_data->n_alloc) + PGOTO_ERROR(FAIL, "Need to alloc larger"); // get obj_id obj_id = region->meta->obj_id; - if (obj_id == 0) { - LOG_ERROR("==PDC_SERVER[%d]: invalid metadata from region!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (obj_id == 0) + PGOTO_ERROR(FAIL, "Invalid metadata from region"); obj_id_ptr = (uint64_t *)bulk_data->buf_ptrs[0]; // Check if current region has the same obj_id - if (0 != *obj_id_ptr) { - if (bulk_data->obj_id != obj_id) { - LOG_ERROR("==PDC_SERVER[%d]: region has a different obj id!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - } + if (0 != *obj_id_ptr && bulk_data->obj_id != obj_id) + PGOTO_ERROR(FAIL, "Region has a different obj id"); else { // obj_id and target_id only need to be init when the first data is added (when obj_id==0) *obj_id_ptr = obj_id; @@ -3352,6 +3053,8 @@ PDC_Server_add_region_storage_meta_to_bulk_buf(region_list_t *region, bulk_xfer_ perr_t PDC_Server_update_region_storage_meta_bulk_local(update_region_storage_meta_bulk_t **bulk_ptrs, int cnt) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; pdc_metadata_t * target_meta = NULL; @@ -3360,24 +3063,21 @@ PDC_Server_update_region_storage_meta_bulk_local(update_region_storage_meta_bulk int update_success = 0, express_insert = 0; uint64_t obj_id; - FUNC_ENTER(NULL); - - if (NULL == bulk_ptrs || cnt == 0 || NULL == bulk_ptrs[0]) { - LOG_ERROR("==PDC_SERVER[%d]: invalid input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (bulk_ptrs == NULL) + PGOTO_ERROR(FAIL, "bulk_ptrs was NULL"); + if (cnt == 0) + PGOTO_ERROR(FAIL, "cnt was 0"); + if (bulk_ptrs[0] == NULL) + PGOTO_ERROR(FAIL, "bulk_ptrs[0] was NULL"); obj_id = *(uint64_t *)bulk_ptrs[0]; // First ptr in buf_ptrs is the obj_id for (i = 1; i < cnt; i++) { - bulk_ptr = (update_region_storage_meta_bulk_t *)(bulk_ptrs[i]); // Create a new region for each and copy the data from bulk data - - new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&bulk_ptr->region_transfer, new_region); new_region->data_size = PDC_get_region_size(new_region); strcpy(new_region->storage_location, bulk_ptr->storage_location); @@ -3385,12 +3085,8 @@ PDC_Server_update_region_storage_meta_bulk_local(update_region_storage_meta_bulk // The bulk data are regions of same obj_id, and the corresponding metadata must be local target_meta = find_metadata_by_id(obj_id); - if (target_meta == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: FAIL to get storage metadata\n", pdc_server_rank_g); - - ret_value = FAIL; - goto done; - } + if (target_meta == NULL) + PGOTO_ERROR(FAIL, "target_meta was NULL"); new_region->meta = target_meta; new_region->obj_id = target_meta->obj_id; @@ -3409,10 +3105,8 @@ PDC_Server_update_region_storage_meta_bulk_local(update_region_storage_meta_bulk region_elt->offset = new_region->offset; update_success = 1; - LOG_ERROR("==PDC_SERVER[%d]: overwrite existing region location/offset\n", - pdc_server_rank_g); - fflush(stdout); - free(new_region); + LOG_INFO("Overwrite existing region location/offset\n"); + new_region = (region_list_t *)PDC_free(new_region); break; } } // DL_FOREACH @@ -3430,49 +3124,44 @@ PDC_Server_update_region_storage_meta_bulk_local(update_region_storage_meta_bulk static hg_return_t update_storage_meta_bulk_rpc_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_handle_t handle = callback_info->info.forward.handle; pdc_int_ret_t bulk_rpc_ret; - hg_return_t ret = HG_SUCCESS; + hg_return_t ret_value = HG_SUCCESS; update_region_storage_meta_bulk_args_t *cb_args = (update_region_storage_meta_bulk_args_t *)callback_info->arg; // Sent the bulk handle with rpc and get a response - ret = HG_Get_output(handle, &bulk_rpc_ret); - if (ret != HG_SUCCESS) { - LOG_ERROR("Could not get output\n"); - goto done; - } + ret_value = HG_Get_output(handle, &bulk_rpc_ret); + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Could not get output"); /* Get output parameters, 9999 corresponds to the one set in update_storage_meta_bulk_cb */ if (bulk_rpc_ret.ret != 9999) - LOG_ERROR("==PDC_SERVER[%d]: update storage meta bulk rpc returned value error!\n", - pdc_server_rank_g); + LOG_ERROR("Update storage meta bulk rpc returned value error\n"); - fflush(stdout); - - ret = HG_Free_output(handle, &bulk_rpc_ret); - if (ret != HG_SUCCESS) { - LOG_ERROR("Could not free output\n"); - goto done; - } + ret_value = HG_Free_output(handle, &bulk_rpc_ret); + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Could not free output"); if (cb_args->cb != NULL) cb_args->cb((update_storage_meta_list_t *)cb_args->meta_list_target, cb_args->n_updated); /* Free memory handle */ - ret = HG_Bulk_free(cb_args->bulk_handle); - if (ret != HG_SUCCESS) { - LOG_ERROR("Could not free bulk data handle\n"); - goto done; - } + ret_value = HG_Bulk_free(cb_args->bulk_handle); + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Could not free bulk data handle"); done: - return ret; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_update_region_storage_meta_bulk_mpi(bulk_xfer_data_t *bulk_data) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; #ifdef ENABLE_MPI int i; @@ -3481,8 +3170,6 @@ PDC_Server_update_region_storage_meta_bulk_mpi(bulk_xfer_data_t *bulk_data) void ** all_meta = NULL; #endif - FUNC_ENTER(NULL); - #ifdef ENABLE_MPI server_id = bulk_data->target_id; int meta_cnt = bulk_data->idx - 1; // idx includes the first element of buf_ptrs, which is count @@ -3491,7 +3178,7 @@ PDC_Server_update_region_storage_meta_bulk_mpi(bulk_xfer_data_t *bulk_data) // Only recv server needs allocation if (server_id == (uint32_t)pdc_server_rank_g) { - recv_buf = (update_region_storage_meta_bulk_t *)calloc(pdc_server_size_g, data_size); + recv_buf = (update_region_storage_meta_bulk_t *)PDC_calloc(pdc_server_size_g, data_size); } // bulk_data->buf_ptrs[0] is number of metadata to be updated @@ -3503,7 +3190,7 @@ PDC_Server_update_region_storage_meta_bulk_mpi(bulk_xfer_data_t *bulk_data) // Now server_id has all the data in recv_buf, start update all if (server_id == (uint32_t)pdc_server_rank_g) { - all_meta = (void **)calloc(sizeof(void *), all_meta_cnt + 1); + all_meta = (void **)PDC_calloc(sizeof(void *), all_meta_cnt + 1); all_meta[0] = bulk_data->buf_ptrs[0]; for (i = 1; i < all_meta_cnt + 1; i++) { all_meta[i] = &recv_buf[i - 1]; @@ -3511,22 +3198,19 @@ PDC_Server_update_region_storage_meta_bulk_mpi(bulk_xfer_data_t *bulk_data) ret_value = PDC_Server_update_region_storage_meta_bulk_local( (update_region_storage_meta_bulk_t **)all_meta, all_meta_cnt + 1); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: update_region_storage_meta_bulk_local FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with update_region_storage_meta_bulk_local"); update_local_region_count_g += all_meta_cnt; } // end of if done: if (server_id == (uint32_t)pdc_server_rank_g) { - free(recv_buf); - free(all_meta); + recv_buf = (update_region_storage_meta_bulk_t *)PDC_free(recv_buf); + all_meta = (void **)PDC_free(all_meta); } #else - LOG_ERROR("is not supposed to be called without MPI enabled!\n"); + LOG_ERROR("Not supposed to be called without MPI enabled\n"); #endif - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3535,6 +3219,8 @@ PDC_Server_update_region_storage_meta_bulk_with_cb(bulk_xfer_data_t * b update_storage_meta_list_t *meta_list_target, int * n_updated) { + FUNC_ENTER(NULL); + hg_return_t hg_ret; perr_t ret_value = SUCCEED; @@ -3545,10 +3231,8 @@ PDC_Server_update_region_storage_meta_bulk_with_cb(bulk_xfer_data_t * b bulk_rpc_in_t bulk_rpc_in; update_region_storage_meta_bulk_args_t *cb_args; - FUNC_ENTER(NULL); - - cb_args = - (update_region_storage_meta_bulk_args_t *)calloc(1, sizeof(update_region_storage_meta_bulk_args_t)); + cb_args = (update_region_storage_meta_bulk_args_t *)PDC_calloc( + 1, sizeof(update_region_storage_meta_bulk_args_t)); server_id = bulk_data->target_id; if (server_id == (uint32_t)pdc_server_rank_g) { @@ -3556,10 +3240,8 @@ PDC_Server_update_region_storage_meta_bulk_with_cb(bulk_xfer_data_t * b ret_value = PDC_Server_update_region_storage_meta_bulk_local( (update_region_storage_meta_bulk_t **)bulk_data->buf_ptrs, bulk_data->idx); update_local_region_count_g++; - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: update_region_storage_meta_bulk_local FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with update_region_storage_meta_bulk_local"); meta_list_target->is_updated = 1; // Run callback function immediately @@ -3567,29 +3249,20 @@ PDC_Server_update_region_storage_meta_bulk_with_cb(bulk_xfer_data_t * b } // end of if else { if (PDC_Server_lookup_server_id(server_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting remote server %d addr via lookup\n", pdc_server_rank_g, - server_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting remote server %d addr via lookup", server_id); } // Send the bulk handle to the target with RPC hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, bulk_rpc_register_id_g, &rpc_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create handle"); /* Register memory */ hg_ret = HG_Bulk_create(hg_class_g, bulk_data->idx, bulk_data->buf_ptrs, bulk_data->buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); /* Fill input structure */ bulk_rpc_in.origin = pdc_server_rank_g; @@ -3605,18 +3278,13 @@ PDC_Server_update_region_storage_meta_bulk_with_cb(bulk_xfer_data_t * b /* Forward call to remote addr */ hg_ret = HG_Forward(rpc_handle, update_storage_meta_bulk_rpc_cb, cb_args, &bulk_rpc_in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not forward call\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not forward call"); meta_list_target->is_updated = 1; } // end of else done: - fflush(stdout); - FUNC_LEAVE(ret_value); } @@ -3642,6 +3310,8 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re uint64_t *storage_start, uint64_t *storage_count, FILE *fp, uint64_t file_offset, void *buf, size_t *total_read_bytes) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t overlap_start[DIM_MAX] = {0}, overlap_count[DIM_MAX] = {0}; uint64_t buf_start[DIM_MAX] = {0}; @@ -3652,14 +3322,9 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re int n_contig_read = 0; double n_contig_MB = 0.0; - FUNC_ENTER(NULL); - *total_read_bytes = 0; - if (ndim > 3 || ndim <= 0) { - LOG_ERROR("==PDC_SERVER[%d]: dim=%" PRIu32 " unsupported yet!", pdc_server_rank_g, ndim); - ret_value = FAIL; - goto done; - } + if (ndim > 3 || ndim <= 0) + PGOTO_ERROR(FAIL, "dim=%" PRIu32 " is unsupported", ndim); if (req_count && req_count[0] == 0) { is_all_selected = 1; @@ -3672,9 +3337,7 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re // Get the actual start and count of region in storage if (PDC_get_overlap_start_count(ndim, req_start, req_count, storage_start, storage_count, overlap_start, overlap_count) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_get_overlap_start_count FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_get_overlap_start_count"); } total_bytes = 1; @@ -3722,8 +3385,8 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re } if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: read storage offset %" PRIu64 ", buf_offset %" PRIu64 "\n", - pdc_server_rank_g, storage_offset, buf_offset); + LOG_DEBUG("Read storage offset %" PRIu64 ", buf_offset %" PRIu64 "\n", storage_offset, + buf_offset); } read_bytes = fread(buf + buf_offset, 1, total_bytes, fp); @@ -3731,26 +3394,20 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end1, 0); double region_read_time1 = PDC_get_elapsed_time_double(&pdc_timer_start1, &pdc_timer_end1); - if (is_debug_g) { - LOG_ERROR("==PDC_SERVER[%d]: fseek + fread %" PRIu64 " bytes, %.2fs\n", pdc_server_rank_g, - read_bytes, region_read_time1); - fflush(stdout); - } + if (is_debug_g) + LOG_ERROR("seek + fread %" PRIu64 " bytes, %.2fs\n", read_bytes, region_read_time1); #endif n_contig_MB += read_bytes / 1048576.0; n_contig_read++; if (read_bytes != total_bytes) { - LOG_ERROR("==PDC_SERVER[%d]: read failed actual read bytes %" PRIu64 ", should be %" PRIu64 "\n", - pdc_server_rank_g, read_bytes, total_bytes); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Read failed actual read bytes %" PRIu64 ", should be %" PRIu64 "\n", + read_bytes, total_bytes); } *total_read_bytes += read_bytes; if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: Read entire storage region, size=%" PRIu64 "\n", pdc_server_rank_g, - read_bytes); + LOG_DEBUG("Read entire storage region, size=%" PRIu64 "\n", read_bytes); } } // end if else { @@ -3767,11 +3424,8 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re read_bytes = fread(buf + buf_offset + row_offset, 1, overlap_count[0], fp); n_contig_MB += read_bytes / 1048576.0; n_contig_read++; - if (read_bytes != overlap_count[0]) { - LOG_ERROR("==PDC_SERVER[%d]: fread failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (read_bytes != overlap_count[0]) + PGOTO_ERROR(FAIL, "fread failed"); *total_read_bytes += read_bytes; } // for each row } // ndim=2 @@ -3794,11 +3448,8 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re read_bytes = fread(buf + buf_serialize_offset, 1, overlap_count[0], fp); n_contig_MB += read_bytes / 1048576.0; n_contig_read++; - if (read_bytes != overlap_count[0]) { - LOG_ERROR("==PDC_SERVER[%d]: fread failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (read_bytes != overlap_count[0]) + PGOTO_ERROR(FAIL, "fread failed\n"); *total_read_bytes += read_bytes; if (is_debug_g == 1) { LOG_DEBUG("z: %" PRIu64 ", j: %" PRIu64 ", Read data size=%" PRIu64 ": [%.*s]\n", j, @@ -3813,23 +3464,20 @@ PDC_Server_read_overlap_regions(uint32_t ndim, uint64_t *req_start, uint64_t *re n_fread_g += n_contig_read; fread_total_MB += n_contig_MB; - if (total_bytes != *total_read_bytes) { - LOG_ERROR("==PDC_SERVER[%d]: read size error!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (total_bytes != *total_read_bytes) + PGOTO_ERROR(FAIL, "Read size error"); done: - fflush(stdout); - FUNC_LEAVE(ret_value); } void PDC_init_bulk_xfer_data_t(bulk_xfer_data_t *a) { + FUNC_ENTER(NULL); + if (NULL == a) { - LOG_ERROR("NULL input!\n"); + LOG_ERROR("NULL input\n"); return; } a->buf_ptrs = NULL; @@ -3839,6 +3487,8 @@ PDC_init_bulk_xfer_data_t(bulk_xfer_data_t *a) a->obj_id = 0; a->target_id = 0; a->origin_id = 0; + + FUNC_LEAVE_VOID(); } /* @@ -3852,6 +3502,8 @@ PDC_init_bulk_xfer_data_t(bulk_xfer_data_t *a) static perr_t PDC_Server_read_one_region(region_list_t *read_region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t read_bytes = 0; size_t total_read_bytes = 0; @@ -3864,23 +3516,18 @@ PDC_Server_read_one_region(region_list_t *read_region) double fopen_time; #endif - FUNC_ENTER(NULL); - if (read_region->access_type != PDC_READ || read_region->n_overlap_storage_region == 0 || read_region->overlap_storage_regions == NULL) { - - LOG_ERROR("==PDC_SERVER[%d]: Error with input\n", pdc_server_rank_g); + LOG_ERROR("Error with input\n"); PDC_print_region_list(read_region); - goto done; + PGOTO_DONE(FAIL); } // Create the shm segment to read data into snprintf(read_region->shm_addr, ADDR_MAX, "/PDC%d_%d", pdc_server_rank_g, rand()); ret_value = PDC_create_shm_segment(read_region); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with shared memory creation\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with shared memory creation"); is_shm_created = 1; total_mem_cache_size_mb_g += (read_region->data_size / 1048576); @@ -3888,16 +3535,13 @@ PDC_Server_read_one_region(region_list_t *read_region) // read with the corresponding offset and size DL_FOREACH(read_region->overlap_storage_regions, region_elt) { - if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: Found overlapping storage regions %d\n", pdc_server_rank_g, - n_storage_regions); + LOG_DEBUG("Found overlapping storage regions %d\n", n_storage_regions); } if (region_elt->storage_location[0] == 0) { - LOG_DEBUG("==PDC_SERVER[%d]: empty overlapping storage location \n", pdc_server_rank_g); + LOG_DEBUG("Empty overlapping storage location\n"); PDC_print_storage_region_list(region_elt); - fflush(stdout); continue; } @@ -3916,8 +3560,7 @@ PDC_Server_read_one_region(region_list_t *read_region) fp_read = fopen(region_elt->storage_location, "rb"); if (fp_read == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, - read_region->storage_location); + LOG_ERROR("fopen failed [%s]\n", read_region->storage_location); continue; } n_fopen_g++; @@ -3936,7 +3579,7 @@ PDC_Server_read_one_region(region_list_t *read_region) region_elt->offset, read_region->buf, &read_bytes); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_read_overlap_regions\n", pdc_server_rank_g); + LOG_ERROR("Error with PDC_Server_read_overlap_regions\n"); fclose(fp_read); fp_read = NULL; continue; @@ -3948,11 +3591,8 @@ PDC_Server_read_one_region(region_list_t *read_region) } // end of for all overlapping storage regions for one request region #ifdef ENABLE_TIMING - if (is_debug_g == 1) { - LOG_ERROR("==PDC_SERVER[%d]: Read data total size %" PRIu64 ", fopen time: %.3f\n", pdc_server_rank_g, - total_read_bytes, fopen_time); - fflush(stdout); - } + if (is_debug_g == 1) + LOG_ERROR("Read data total size %" PRIu64 ", fopen time: %.3f\n", total_read_bytes, fopen_time); #endif read_region->is_data_ready = 1; @@ -3965,7 +3605,6 @@ PDC_Server_read_one_region(region_list_t *read_region) read_region->is_data_ready = 0; read_region->is_io_done = 0; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -3973,21 +3612,7 @@ PDC_Server_read_one_region(region_list_t *read_region) /* * Read with POSIX within one file, based on the region list * after the server has accumulated requests from all node local clients - - - - - - - - - - - - * - - * \param region_list_head[IN] Region info of IO request * * \return Non-negative on success/Negative on failure @@ -3995,6 +3620,8 @@ PDC_Server_read_one_region(region_list_t *read_region) perr_t PDC_Server_posix_one_file_io(region_list_t *region_list_head) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; size_t read_bytes = 0, write_bytes = 0; size_t total_read_bytes = 0; @@ -4007,13 +3634,8 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) int stripe_count, stripe_size; #endif - FUNC_ENTER(NULL); - - if (NULL == region_list_head) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (NULL == region_list_head) + PGOTO_ERROR(FAIL, "region_list_head was NULL"); // For read requests, it's better to aggregate read requests from all node-local clients // and query once, rather than query one by one, so we aggregate at the beginning @@ -4030,9 +3652,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) continue; ret_value = PDC_Server_get_storage_location_of_region_mpi(region_elt); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_get_storage_location_of_region failed!\n", - pdc_server_rank_g); - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_Server_get_storage_location_of_region"); } } } @@ -4048,7 +3668,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) { if (region_elt->access_type == PDC_READ) { if (region_elt->is_io_done == 1 && region_elt->is_shm_closed != 1) { - LOG_ERROR("==PDC_SERVER[%d]: found cached data!\n", pdc_server_rank_g); + LOG_ERROR("Found cached data\n"); if (region_elt->access_type == PDC_READ && current_read_from_cache_cnt_g < total_read_from_cache_cnt_g) @@ -4061,7 +3681,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) snprintf(region_elt->shm_addr, ADDR_MAX, "/PDC%d_%d", pdc_server_rank_g, rand()); ret_value = PDC_create_shm_segment(region_elt); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with shared memory creation\n", pdc_server_rank_g); + LOG_ERROR("Error with shared memory creation\n"); continue; } @@ -4077,8 +3697,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) fclose(fp_read); fp_read = fopen(region_elt->cache_location, "rb"); if (fp_read == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: unable to open file [%s]\n", pdc_server_rank_g, - region_elt->cache_location); + LOG_ERROR("Unable to open file [%s]\n", region_elt->cache_location); } n_fopen_g++; } @@ -4089,13 +3708,13 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) fseek(fp_read, region_elt->cache_offset, SEEK_SET); if (region_elt->data_size == 0) { - LOG_ERROR("==PDC_SERVER[%d]: region data_size is 0\n", pdc_server_rank_g); + LOG_ERROR("Region data_size is 0\n"); continue; } read_bytes = fread(region_elt->buf, 1, region_elt->data_size, fp_read); if (read_bytes != region_elt->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: read size %zu is not expected %" PRIu64 "\n", - pdc_server_rank_g, read_bytes, region_elt->data_size); + LOG_ERROR("Read size %zu is not expected %" PRIu64 "\n", read_bytes, + region_elt->data_size); continue; } #ifdef ENABLE_TIMING @@ -4129,7 +3748,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) n_fopen_g++; } else { - LOG_ERROR("==PDC_SERVER[%d]: NULL storage location\n", pdc_server_rank_g); + LOG_ERROR("NULL storage location\n"); fp_read = NULL; } @@ -4140,10 +3759,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) #endif if (fp_read == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, - region_elt->storage_location); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "fopen failed [%s]", region_elt->storage_location); } } @@ -4156,30 +3772,22 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) region_elt->overlap_storage_regions[i].offset, region_elt->buf, &read_bytes); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_read_overlap_regions\n", - pdc_server_rank_g); fclose(fp_read); fp_read = NULL; - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_Server_read_overlap_regions"); } total_read_bytes += read_bytes; prev_path = region_elt->overlap_storage_regions[i].storage_location; } // end of for all overlapping storage regions for one request region - if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: Read data total size %zu\n", pdc_server_rank_g, - total_read_bytes); - fflush(stdout); - } + if (is_debug_g == 1) + LOG_DEBUG("Read data total size %zu\n", total_read_bytes); offset += total_read_bytes; } // end else read from storage - if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: Read data total size %zu\n", pdc_server_rank_g, - total_read_bytes); - fflush(stdout); - } + if (is_debug_g == 1) + LOG_DEBUG("Read data total size %zu\n", total_read_bytes); region_elt->is_data_ready = 1; region_elt->is_io_done = 1; @@ -4190,9 +3798,8 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) // Assumes all regions are written to one file if (region_elt->storage_location[0] == 0) { - ret_value = FAIL; region_elt->is_data_ready = -1; - goto done; + PGOTO_DONE(FAIL); } // Open file if needed: @@ -4241,10 +3848,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) #endif if (NULL == fp_write) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, - region_elt->storage_location); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "fopen failed [%s]", region_elt->storage_location); } } // End open file @@ -4259,13 +3863,10 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) // Actual write (append) write_bytes = fwrite(region_elt->buf, 1, region_elt->data_size, fp_write); if (write_bytes != region_elt->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: fwrite to [%s] FAILED, region off %" PRIu64 ", size %" PRIu64 - ", " - "actual writeen %zu!\n", - pdc_server_rank_g, region_elt->storage_location, offset, region_elt->data_size, - write_bytes); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, + "fwrite to [%s] FAILED, region off %" PRIu64 ", size %" PRIu64 ", " + "actual writeen %zu\n", + region_elt->storage_location, offset, region_elt->data_size, write_bytes); } n_fwrite_g++; fwrite_total_MB += write_bytes / 1048576.0; @@ -4275,8 +3876,7 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) double region_write_time = PDC_get_elapsed_time_double(&pdc_timer_start5, &pdc_timer_end5); server_write_time_g += region_write_time; if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: fwrite %" PRIu64 " bytes, %.2fs\n", pdc_server_rank_g, - write_bytes, region_write_time); + LOG_DEBUG("fwrite %" PRIu64 " bytes, %.2fs\n", write_bytes, region_write_time); } #endif @@ -4294,21 +3894,15 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) region_elt->offset = offset; ret_value = PDC_Server_update_region_storagelocation_offset(region_elt, PDC_UPDATE_STORAGE); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: failed to update region storage info!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Failed to update region storage info"); previous_region = region_elt; region_elt->is_io_done = 1; - - } // end of WRITE - else { - LOG_ERROR("==PDC_SERVER[%d]: unsupported access type\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; } - } // end DL_FOREACH region IO request (region) + else + PGOTO_ERROR(FAIL, "Unsupported access type"); + } done: if (fp_write != NULL) { @@ -4324,7 +3918,6 @@ PDC_Server_posix_one_file_io(region_list_t *region_list_head) if (ret_value != SUCCEED) region_elt->is_data_ready = -1; - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -4343,15 +3936,16 @@ static perr_t PDC_Server_data_io_direct(pdc_access_t io_type, uint64_t obj_id, struct pdc_region_info *region_info, void *buf) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t *io_region = NULL; #ifdef ENABLE_LUSTRE int stripe_count, stripe_size; #endif - FUNC_ENTER(NULL); is_server_direct_io_g = 1; - io_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + io_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_init_region_list(io_region); PDC_region_info_to_list_t(region_info, io_region); @@ -4388,27 +3982,24 @@ PDC_Server_data_io_direct(pdc_access_t io_type, uint64_t obj_id, struct pdc_regi // Need to get the metadata ret_value = PDC_Server_get_metadata_by_id_with_cb(obj_id, PDC_Server_regions_io, io_region); - fflush(stdout); FUNC_LEAVE(ret_value); } static perr_t PDC_Server_posix_write(int fd, void *buf, uint64_t write_size) { + FUNC_ENTER(NULL); + // Write 1GB at a time uint64_t write_bytes = 0, max_write_size = 1073741824; perr_t ret_value = SUCCEED; ssize_t ret; - FUNC_ENTER(NULL); - while (write_size > max_write_size) { ret = write(fd, buf, max_write_size); if (ret < 0 || ret != (ssize_t)max_write_size) { - LOG_ERROR("==PDC_SERVER[%d]: in-loop: write %d failed, ret = %ld, max_write_size = %llu\n", - pdc_server_rank_g, fd, ret, max_write_size); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "In-loop: write %d failed, ret = %ld, max_write_size = %llu", fd, ret, + max_write_size); } write_bytes += ret; buf += max_write_size; @@ -4417,10 +4008,7 @@ PDC_Server_posix_write(int fd, void *buf, uint64_t write_size) ret = write(fd, buf, write_size); if (ret < 0 || ret != (ssize_t)write_size) { - LOG_ERROR("==PDC_SERVER[%d]: write %d failed, not all data written %llu/%llu\n", pdc_server_rank_g, - fd, write_bytes, write_size); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "write %d failed, not all data written %llu/%llu", fd, write_bytes, write_size); } done: @@ -4431,6 +4019,8 @@ PDC_Server_posix_write(int fd, void *buf, uint64_t write_size) static zfp_field * _setup_zfp(struct pdc_region_info *region_info, zfp_stream **zfp) { + FUNC_ENTER(NULL); + zfp_type type = zfp_type_double; zfp_field *field; @@ -4439,7 +4029,7 @@ _setup_zfp(struct pdc_region_info *region_info, zfp_stream **zfp) else if (region_info->unit == 4) type = zfp_type_int32; else - LOG_ERROR("==PDC_SERVER[%d]: unit has size %u not expected!\n", pdc_server_rank_g, region_info->unit); + LOG_ERROR("Unit has size %u not expected\n", region_info->unit); if (region_info->ndim == 1) field = zfp_field_1d(region_info->buf, type, region_info->size[0]); @@ -4453,13 +4043,15 @@ _setup_zfp(struct pdc_region_info *region_info, zfp_stream **zfp) // TODO: precision mode for now zfp_stream_set_accuracy(*zfp, 0.01); - return field; + FUNC_LEAVE(field); } #endif perr_t PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, void *buf, size_t unit) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; data_server_region_t *region = NULL; region_list_t * overlap_region = NULL; @@ -4487,7 +4079,7 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, region = PDC_Server_get_obj_region(obj_id); PDC_Server_register_obj_region_by_pointer(®ion, obj_id, 0); - region_list_t *request_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + region_list_t *request_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); for (i = 0; i < region_info->ndim; i++) { request_region->start[i] = region_info->offset[i]; request_region->count[i] = region_info->size[i]; @@ -4512,27 +4104,16 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, &overlap_size); if (overlap_offset) { - // is_overlap = 1; if (!is_contained && detect_region_contained(region_info->offset, region_info->size, overlap_region->start, overlap_region->count, region_info->ndim)) { is_contained = 1; } -#if 0 - local_write_size = overlap_region->count[0]; - for ( i = 1; i < (unsigned) region_info->ndim; ++i ) { - local_write_size *= overlap_region->count[i]; - } - total_write_size += local_write_size; -#endif if (region_info->ndim == 1) { // 1D can overwrite data in region directly pos = (overlap_offset[0] - overlap_region->start[0]) * unit; if (pos > write_size) { - LOG_ERROR("==PDC_SERVER[%d]: Error with buf pos calculation %llu / %llu!\n", - pdc_server_rank_g, pos, write_size); - ret_value = -1; - goto done; + PGOTO_ERROR(FAIL, "Error with buf pos calculation %llu / %llu", pos, write_size); } lseek(region->fd, overlap_region->offset + pos, SEEK_SET); @@ -4545,24 +4126,20 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_write FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - // No need to update metadata + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_write"); } else { // data_sieving_g = 1 by default, export PDC_DATA_SIEVING=0 to change if (data_sieving_g) { // Create a buffer for loading the entire region. - tmp_buf = (char *)malloc(overlap_region->data_size); + tmp_buf = (char *)PDC_malloc(overlap_region->data_size); #ifdef PDC_TIMING start_posix = MPI_Wtime(); #endif if (pread(region->fd, tmp_buf, overlap_region->data_size, overlap_region->offset) != (ssize_t)overlap_region->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; @@ -4581,12 +4158,9 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_write FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - free(tmp_buf); + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_write"); + tmp_buf = (char *)PDC_free(tmp_buf); } else { if (region_info->ndim == 2) { @@ -4613,7 +4187,7 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #endif } else { - tmp_buf = (char *)malloc(overlap_size[0] * overlap_size[1] * unit); + tmp_buf = (char *)PDC_malloc(overlap_size[0] * overlap_size[1] * unit); memcpy_overlap_subregion(region_info->ndim, unit, buf, region_info->offset, region_info->size, tmp_buf, overlap_offset, overlap_size, overlap_offset, overlap_size); @@ -4625,13 +4199,10 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif - free(tmp_buf); + tmp_buf = (char *)PDC_free(tmp_buf); } if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_write FAILED!\n", - pdc_server_rank_g); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_write"); } } else { @@ -4657,10 +4228,7 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_write FAILED!\n", - pdc_server_rank_g); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_write"); } } } @@ -4692,8 +4260,8 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #endif } else { - tmp_buf = (char *)malloc(overlap_size[0] * overlap_size[1] * overlap_size[2] * - unit); + tmp_buf = (char *)PDC_malloc(overlap_size[0] * overlap_size[1] * + overlap_size[2] * unit); memcpy_overlap_subregion(region_info->ndim, unit, buf, region_info->offset, region_info->size, tmp_buf, overlap_offset, overlap_size, overlap_offset, overlap_size); @@ -4706,7 +4274,7 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif - free(tmp_buf); + tmp_buf = (char *)PDC_free(tmp_buf); } } else { @@ -4743,7 +4311,7 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, } } } - free(overlap_offset); + overlap_offset = (uint64_t *)PDC_free(overlap_offset); } } if (is_contained == 0) { @@ -4757,22 +4325,22 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, field = _setup_zfp(region_info, &zfp); if (field == NULL) - LOG_ERROR("==PDC_SERVER[%d]: _setup_zfp failed!\n", pdc_server_rank_g); + LOG_ERROR("_setup_zfp failed\n"); else { bufsize = zfp_stream_maximum_size(zfp, field); if (bufsize == 0) - LOG_ERROR("==PDC_SERVER[%d]: zfp_stream_maximum_size returned 0!\n", pdc_server_rank_g); - buffer = malloc(bufsize); + LOG_ERROR("zfp_stream_maximum_size returned 0\n"); + buffer = PDC_malloc(bufsize); if (buffer == 0) - LOG_ERROR("==PDC_SERVER[%d]: malloc failed!\n", pdc_server_rank_g); + LOG_ERROR("malloc failed\n"); else { stream = stream_open(buffer, bufsize); zfp_stream_set_bit_stream(zfp, stream); // Compress the data and overwrite the write_size for the following posix write size_t compress_size = zfp_compress(zfp, field); - LOG_ERROR("==PDC_SERVER[%d]: zfp compressed size %lu / %llu CR=%.2lf\n", pdc_server_rank_g, - compress_size, write_size, (double)write_size / compress_size); + LOG_ERROR("zfp compressed size %lu / %llu CR=%.2lf\n", compress_size, write_size, + (double)write_size / compress_size); buf = buffer; write_size = compress_size; } @@ -4789,11 +4357,8 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_posix += MPI_Wtime() - start_posix; #endif - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_write FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_write"); // Store storage information request_region->data_size = write_size; @@ -4802,28 +4367,27 @@ PDC_Server_data_write_out(uint64_t obj_id, struct pdc_region_info *region_info, } else { PDC_Server_unregister_obj_region_by_pointer(region, 0); - free(request_region); + request_region = (region_list_t *)PDC_free(request_region); } #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); write_total_sec = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_ERROR("==PDC_SERVER[%d]: write region time: %.4f, %llu bytes\n", pdc_server_rank_g, write_total_sec, - write_size); - fflush(stdout); + LOG_INFO("Write region time: %.4f, %llu bytes\n", write_total_sec, write_size); #endif #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_write_out += MPI_Wtime() - start; #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } // End PDC_Server_data_write_out perr_t PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, void *buf, size_t unit) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; ssize_t request_bytes = unit; data_server_region_t *region = NULL; @@ -4832,17 +4396,10 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, uint64_t * overlap_offset, *overlap_size; char * tmp_buf; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), start_posix; #endif region = PDC_Server_get_obj_region(obj_id); - /* - if (region == NULL) { - LOG_ERROR("cannot locate file handle\n"); - goto done; - } - */ // Was opened previously and closed. // The location string is cached, so we utilize // that to reopen the file. @@ -4876,22 +4433,19 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, if (pread(region->fd, buf + (overlap_offset[0] - region_info->offset[0]) * unit, overlap_size[0] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[0] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; #endif - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_posix_read FAILED!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_posix_read"); // No need to update metadata } else { // data_sieving_g = 1 by default, export PDC_DATA_SIEVING=0 to change if (data_sieving_g) { - tmp_buf = (char *)malloc(overlap_region->data_size); + tmp_buf = (char *)PDC_malloc(overlap_region->data_size); #ifdef PDC_TIMING start_posix = MPI_Wtime(); #endif @@ -4905,8 +4459,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, while (leftover > 0) { if (pread(region->fd, tmp_buf + buf_off, read_size, reg_off) != read_size) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes %llu\n", - pdc_server_rank_g, read_size); + LOG_ERROR("pread failed to read enough bytes %llu\n", read_size); } reg_off += read_size; buf_off += read_size; @@ -4918,8 +4471,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, else { if (pread(region->fd, tmp_buf, overlap_region->data_size, overlap_region->offset) != (ssize_t)overlap_region->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } } #ifdef PDC_TIMING @@ -4927,7 +4479,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, #endif #ifdef ENABLE_ZFP - // Uncompress the data + // Uncompress the data zfp_field * field; zfp_stream *zfp; size_t bufsize, decompress_size; @@ -4935,9 +4487,8 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, field = _setup_zfp(region_info, &zfp); if (field == NULL) - LOG_ERROR("==PDC_SERVER[%d]: _setup_zfp failed!\n", pdc_server_rank_g); + LOG_ERROR("_setup_zfp failed\n"); else { - if (region_info->ndim >= 1) decompress_size = region_info->unit * region_info->size[0]; if (region_info->ndim >= 2) @@ -4945,20 +4496,19 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, if (region_info->ndim >= 3) decompress_size *= region_info->size[2]; if (decompress_size == 0) - LOG_ERROR("==PDC_SERVER[%d]: zfp_stream_maximum_size returned 0!\n", - pdc_server_rank_g); + LOG_ERROR("zfp_stream_maximum_size returned 0\n"); - void *decompress_buffer = malloc(decompress_size); + void *decompress_buffer = PDC_malloc(decompress_size); if (decompress_buffer == 0) - LOG_ERROR("==PDC_SERVER[%d]: malloc failed!\n", pdc_server_rank_g); + LOG_ERROR("malloc failed\n"); else { stream = stream_open(decompress_buffer, decompress_size); zfp_stream_set_bit_stream(zfp, stream); // Decompress the data decompress_size = zfp_decompress(zfp, field); if (decompress_size == 0) - LOG_ERROR("==PDC_SERVER[%d]: zfp_decompress failed!\n", pdc_server_rank_g); - free(tmp_buf); + LOG_ERROR("zfp_decompress failed\n"); + tmp_buf = (char *)PDC_free(tmp_buf); tmp_buf = decompress_buffer; } } @@ -4971,7 +4521,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, overlap_region->count, buf, region_info->offset, region_info->size, overlap_offset, overlap_size); - free(tmp_buf); + tmp_buf = (char *)PDC_free(tmp_buf); } else { if (region_info->ndim == 2) { @@ -4992,23 +4542,21 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, overlap_size[0] * overlap_size[1] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[0] * overlap_size[1] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; #endif } else { - tmp_buf = (char *)malloc(overlap_size[0] * overlap_size[1] * unit); + tmp_buf = (char *)PDC_malloc(overlap_size[0] * overlap_size[1] * unit); #ifdef PDC_TIMING start_posix = MPI_Wtime(); #endif if (pread(region->fd, tmp_buf, overlap_size[0] * overlap_size[1] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[0] * overlap_size[1] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; @@ -5016,7 +4564,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, memcpy_overlap_subregion(region_info->ndim, unit, tmp_buf, overlap_offset, overlap_size, buf, region_info->offset, region_info->size, overlap_offset, overlap_size); - free(tmp_buf); + tmp_buf = (char *)PDC_free(tmp_buf); } } else { @@ -5035,8 +4583,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, unit, overlap_size[1] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[1] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; @@ -5064,16 +4611,15 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, overlap_size[0] * overlap_size[1] * overlap_size[2] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[0] * overlap_size[1] * overlap_size[2] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; #endif } else { - tmp_buf = (char *)malloc(overlap_size[0] * overlap_size[1] * overlap_size[2] * - unit); + tmp_buf = (char *)PDC_malloc(overlap_size[0] * overlap_size[1] * + overlap_size[2] * unit); #ifdef PDC_TIMING start_posix = MPI_Wtime(); #endif @@ -5081,8 +4627,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, overlap_size[0] * overlap_size[1] * overlap_size[2] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[0] * overlap_size[1] * overlap_size[2] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += MPI_Wtime() - start_posix; @@ -5090,7 +4635,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, memcpy_overlap_subregion(region_info->ndim, unit, tmp_buf, overlap_offset, overlap_size, buf, region_info->offset, region_info->size, overlap_offset, overlap_size); - free(tmp_buf); + tmp_buf = (char *)PDC_free(tmp_buf); } } else { @@ -5114,8 +4659,7 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, unit, overlap_size[2] * unit, overlap_region->offset + pos) != (ssize_t)(overlap_size[2] * unit)) { - LOG_ERROR("==PDC_SERVER[%d]: pread failed to read enough bytes\n", - pdc_server_rank_g); + LOG_ERROR("pread failed to read enough bytes\n"); } #ifdef PDC_TIMING pdc_server_timings->PDCdata_server_read_posix += @@ -5127,16 +4671,14 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, } } } - free(overlap_offset); + overlap_offset = (uint64_t *)PDC_free(overlap_offset); } } PDC_Server_unregister_obj_region_by_pointer(region, 0); #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); read_total_sec = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_INFO("==PDC_SERVER[%d]: read region time: %.4f, %llu bytes\n", pdc_server_rank_g, read_total_sec, - total_read_bytes); - fflush(stdout); + LOG_INFO("Read region time: %.4f, %llu bytes\n", read_total_sec, total_read_bytes); #endif #ifdef PDC_TIMING @@ -5144,45 +4686,36 @@ PDC_Server_data_read_from(uint64_t obj_id, struct pdc_region_info *region_info, #endif done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_data_write_direct(uint64_t obj_id, struct pdc_region_info *region_info, void *buf) { - perr_t ret_value = SUCCEED; FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + ret_value = PDC_Server_data_io_direct(PDC_WRITE, obj_id, region_info, buf); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_data_write_direct() " - "error with PDC_Server_data_io_direct()\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_data_io_direct"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_data_read_direct(uint64_t obj_id, struct pdc_region_info *region_info, void *buf) { - perr_t ret_value = SUCCEED; FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; + ret_value = PDC_Server_data_io_direct(PDC_READ, obj_id, region_info, buf); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_data_read_direct() " - "error with PDC_Server_data_io_direct()\n", - pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_data_io_direct"); done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5190,35 +4723,31 @@ perr_t PDC_Server_get_local_storage_meta_with_one_name(storage_meta_query_one_name_args_t *args) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; pdc_metadata_t *meta = NULL; region_list_t * region_elt = NULL, *region_head = NULL, *res_region_list = NULL; int region_count = 0, i = 0; - FUNC_ENTER(NULL); - // FIXME: currently use timestep value of 0 PDC_Server_search_with_name_timestep(args->name, PDC_get_hash_by_name(args->name), 0, &meta); - if (meta == NULL) { - goto done; - } + if (meta == NULL) + PGOTO_DONE(ret_value); region_head = meta->storage_region_list_head; // Copy the matched regions with storage metadata to a result region list DL_COUNT(region_head, region_elt, region_count); args->n_res = region_count; - res_region_list = (region_list_t *)calloc(region_count, sizeof(region_list_t)); + res_region_list = (region_list_t *)PDC_calloc(region_count, sizeof(region_list_t)); // Copy location and offset i = 0; DL_FOREACH(region_head, region_elt) { if (i >= region_count) { - LOG_ERROR("==PDC_SERVER[%d] More regions %d than allocated %d\n", pdc_server_rank_g, i, - region_count); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "More regions %d than allocated %d", i, region_count); } PDC_region_list_t_deep_cp(region_elt, &res_region_list[i]); res_region_list[i].prev = NULL; @@ -5228,7 +4757,6 @@ PDC_Server_get_local_storage_meta_with_one_name(storage_meta_query_one_name_args } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5243,23 +4771,21 @@ PDC_Server_get_local_storage_meta_with_one_name(storage_meta_query_one_name_args static perr_t PDC_Server_get_all_storage_meta_with_one_name(storage_meta_query_one_name_args_t *args) { + FUNC_ENTER(NULL); + hg_return_t hg_ret; perr_t ret_value = SUCCEED; uint32_t server_id = 0; hg_handle_t rpc_handle; storage_meta_name_query_in_t in; - FUNC_ENTER(NULL); - server_id = PDC_get_server_by_name(args->name, pdc_server_size_g); if (server_id == (uint32_t)pdc_server_rank_g) { // Metadata object is local, no need to send update RPC // Fill in with storage meta (region_list_t **regions, int n_res) ret_value = PDC_Server_get_local_storage_meta_with_one_name(args); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: get local storage location ERROR!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Failed to get local storage location"); // Execute callback function immediately // cb: PDC_Server_accumulate_storage_meta_then_read @@ -5270,17 +4796,11 @@ PDC_Server_get_all_storage_meta_with_one_name(storage_meta_query_one_name_args_t else { // send the name to target server server_id = PDC_get_server_by_name(args->name, pdc_server_size_g); - if (is_debug_g == 1) { - LOG_DEBUG("==PDC_SERVER[%d]: will get storage meta from remote server %d\n", pdc_server_rank_g, - server_id); - fflush(stdout); - } + if (is_debug_g == 1) + LOG_DEBUG("Will get storage meta from remote server %d\n", server_id); if (PDC_Server_lookup_server_id(server_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting remote server %d addr via lookup\n", pdc_server_rank_g, - server_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting remote server %d addr via lookup", server_id); } n_get_remote_storage_meta_g++; @@ -5297,17 +4817,13 @@ PDC_Server_get_all_storage_meta_with_one_name(storage_meta_query_one_name_args_t hg_ret = HG_Forward(rpc_handle, PDC_check_int_ret_cb, NULL, &in); if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: Could not start HG_Forward to server %u\n", pdc_server_rank_g, - server_id); HG_Destroy(rpc_handle); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Could not start HG_Forward to server %u", server_id); } HG_Destroy(rpc_handle); - } // end else + } done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5322,14 +4838,14 @@ PDC_Server_get_all_storage_meta_with_one_name(storage_meta_query_one_name_args_t static perr_t PDC_Server_accumulate_storage_meta_then_read(storage_meta_query_one_name_args_t *in) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; accumulate_storage_meta_t *accu_meta; region_list_t * req_region = NULL, *region_elt = NULL, *read_list_head = NULL; int i, is_sort_read; size_t j; - FUNC_ENTER(NULL); - accu_meta = in->accu_meta; // Add current input to accumulate_storage_meta structure @@ -5381,7 +4897,7 @@ PDC_Server_accumulate_storage_meta_then_read(storage_meta_query_one_name_args_t // Read data to shm ret_value = PDC_Server_read_one_region(region_elt); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error with PDC_Server_read_one_region\n", pdc_server_rank_g); + LOG_ERROR("Error with PDC_Server_read_one_region\n"); } } @@ -5390,10 +4906,8 @@ PDC_Server_accumulate_storage_meta_then_read(storage_meta_query_one_name_args_t #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); read_total_sec = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_INFO("==PDC_SERVER[%d]: read %d objects time: %.4f, n_fread: %d, n_fopen: %d, is_sort_read: %d\n", - pdc_server_rank_g, accu_meta->n_accumulated, read_total_sec, n_fread_g, n_fopen_g, - is_sort_read); - fflush(stdout); + LOG_INFO("Read %d objects time: %.4f, n_fread: %d, n_fopen: %d, is_sort_read: %d\n", + accu_meta->n_accumulated, read_total_sec, n_fread_g, n_fopen_g, is_sort_read); #endif // send all shm info to client @@ -5402,27 +4916,26 @@ PDC_Server_accumulate_storage_meta_then_read(storage_meta_query_one_name_args_t } // End if // TODO free many things - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_Server_query_read_names(query_read_names_args_t *query_read_args) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; storage_meta_query_one_name_args_t *query_name_args = NULL; - FUNC_ENTER(NULL); - // Temp storage to accumulate all storage meta of the requested objects // Each task should have one such structure accumulate_storage_meta_t *accmulate_meta = - (accumulate_storage_meta_t *)calloc(1, sizeof(accumulate_storage_meta_t)); + (accumulate_storage_meta_t *)PDC_calloc(1, sizeof(accumulate_storage_meta_t)); accmulate_meta->n_total = query_read_args->cnt; accmulate_meta->client_id = query_read_args->client_id; accmulate_meta->client_seq_id = query_read_args->client_seq_id; - accmulate_meta->storage_meta = (storage_meta_query_one_name_args_t **)calloc( + accmulate_meta->storage_meta = (storage_meta_query_one_name_args_t **)PDC_calloc( query_read_args->cnt, sizeof(storage_meta_query_one_name_args_t *)); // Now we need to retrieve their storage metadata, some can be found in local metadata server, @@ -5431,9 +4944,9 @@ PDC_Server_query_read_names(query_read_names_args_t *query_read_args) for (i = 0; i < query_read_args->cnt; i++) { // query_name_args is the struct to store all storage metadata of each request obj (obj_name) query_name_args = - (storage_meta_query_one_name_args_t *)calloc(1, sizeof(storage_meta_query_one_name_args_t)); + (storage_meta_query_one_name_args_t *)PDC_calloc(1, sizeof(storage_meta_query_one_name_args_t)); query_name_args->seq_id = i; - query_name_args->req_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + query_name_args->req_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_init_region_list(query_name_args->req_region); query_name_args->req_region->access_type = PDC_READ; // TODO: if requesting partial data, adjust the actual region info accordingly @@ -5450,46 +4963,47 @@ PDC_Server_query_read_names(query_read_names_args_t *query_read_args) // When all storage metadata have been collected, the read operation will be triggered // in PDC_Server_accumulate_storage_meta_then_read(). - fflush(stdout); FUNC_LEAVE(ret_value); } hg_return_t PDC_Server_query_read_names_cb(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + PDC_Server_query_read_names((query_read_names_args_t *)callback_info->arg); - return HG_SUCCESS; + FUNC_LEAVE(HG_SUCCESS); } hg_return_t PDC_Server_storage_meta_name_query_bulk_respond_cb(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; - hg_handle_t handle = callback_info->info.forward.handle; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; + hg_handle_t handle = callback_info->info.forward.handle; pdc_int_ret_t bulk_rpc_ret; // Sent the bulk handle with rpc and get a response - ret = HG_Get_output(handle, &bulk_rpc_ret); - if (ret != HG_SUCCESS) { - LOG_ERROR("Could not get output\n"); - goto done; - } + ret_value = HG_Get_output(handle, &bulk_rpc_ret); + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Could not get output"); - ret = HG_Free_output(handle, &bulk_rpc_ret); - if (ret != HG_SUCCESS) { - LOG_ERROR("Could not free output\n"); - goto done; - } + ret_value = HG_Free_output(handle, &bulk_rpc_ret); + if (ret_value != HG_SUCCESS) + PGOTO_ERROR(ret_value, "Could not free output"); done: - return ret; + FUNC_LEAVE(ret_value); } // Get all storage meta of the one requested object name and bulk xfer to original requested server hg_return_t PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t hg_ret = HG_SUCCESS; perr_t ret_value; storage_meta_name_query_in_t * args; @@ -5503,43 +5017,34 @@ PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callbac region_info_transfer_t ** region_infos; region_list_t * region_elt; int i, j; - FUNC_ENTER(NULL); - args = (storage_meta_name_query_in_t *)callback_info->arg; // Now metadata object is local - query_args = (storage_meta_query_one_name_args_t *)calloc(1, sizeof(storage_meta_query_one_name_args_t)); + query_args = + (storage_meta_query_one_name_args_t *)PDC_calloc(1, sizeof(storage_meta_query_one_name_args_t)); query_args->name = args->obj_name; ret_value = PDC_Server_get_local_storage_meta_with_one_name(query_args); if (ret_value != SUCCEED) { - - LOG_ERROR("==PDC_SERVER[%d]: get local storage location ERROR!\n", pdc_server_rank_g); - goto done; + PGOTO_ERROR(FAIL, "Error with geting local storage location"); } // Now the storage meta is stored in query_args->regions; server_id = args->origin_id; if (PDC_Server_lookup_server_id(server_id) != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting remote server %d addr via lookup\n", pdc_server_rank_g, - server_id); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error getting remote server %d addr via lookup", server_id); } // bulk transfer to args->origin_id hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, get_storage_meta_name_query_bulk_result_rpc_register_id_g, &rpc_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create handle"); int nbuf = 3 * query_args->n_res + 1; - buf_sizes = (hg_size_t *)calloc(sizeof(hg_size_t), nbuf); - buf_ptrs = (void **)calloc(sizeof(void *), nbuf); - region_infos = (region_info_transfer_t **)calloc(sizeof(region_info_transfer_t *), query_args->n_res); + buf_sizes = (hg_size_t *)PDC_calloc(sizeof(hg_size_t), nbuf); + buf_ptrs = (void **)PDC_calloc(sizeof(void *), nbuf); + region_infos = (region_info_transfer_t **)PDC_calloc(sizeof(region_info_transfer_t *), query_args->n_res); // buf_ptrs[0]: task_id buf_ptrs[0] = &(args->task_id); @@ -5551,7 +5056,7 @@ PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callbac j = 0; DL_FOREACH(query_args->overlap_storage_region_list, region_elt) { - region_infos[j] = (region_info_transfer_t *)calloc(sizeof(region_info_transfer_t), 1); + region_infos[j] = (region_info_transfer_t *)PDC_calloc(sizeof(region_info_transfer_t), 1); PDC_region_list_t_to_transfer(region_elt, region_infos[j]); if (region_elt->cache_location[0] != 0) { @@ -5572,31 +5077,20 @@ PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callbac /* Register memory */ hg_ret = HG_Bulk_create(hg_class_g, nbuf, buf_ptrs, buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); /* Fill input structure */ bulk_rpc_in.cnt = query_args->n_res; bulk_rpc_in.origin = pdc_server_rank_g; bulk_rpc_in.bulk_handle = bulk_handle; - // TODO: put ptrs that need to be freed into cb_args - /* cb_args.bulk_handle = bulk_handle; */ - /* cb_args.rpc_handle = rpc_handle; */ - /* Forward call to remote addr */ hg_ret = HG_Forward(rpc_handle, PDC_Server_storage_meta_name_query_bulk_respond_cb, NULL, &bulk_rpc_in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not forward call\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not forward call"); done: - fflush(stdout); FUNC_LEAVE(hg_ret); } @@ -5609,18 +5103,15 @@ PDC_Server_storage_meta_name_query_bulk_respond(const struct hg_cb_info *callbac perr_t PDC_Server_proc_storage_meta_bulk(int task_id, int n_regions, region_list_t *region_list_head) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; storage_meta_query_one_name_args_t *query_args; - FUNC_ENTER(NULL); - pdc_task_list_t *task = PDC_find_task_from_list(&pdc_server_s2s_task_head_g, task_id, &pdc_server_task_mutex_g); - if (task == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Error getting task %d\n", pdc_server_rank_g, task_id); - ret_value = FAIL; - goto done; - } + if (task == NULL) + PGOTO_ERROR(FAIL, "Error getting task %d", task_id); // Add the result storage regions to accumulate_storage_meta query_args = (storage_meta_query_one_name_args_t *)task->cb_args; @@ -5634,22 +5125,20 @@ PDC_Server_proc_storage_meta_bulk(int task_id, int n_regions, region_list_t *reg PDC_del_task_from_list(&pdc_server_s2s_task_head_g, task, &pdc_server_task_mutex_g); done: - fflush(stdout); - FUNC_LEAVE(ret_value); } perr_t PDC_Server_add_client_shm_to_cache(int cnt, void *buf_cp) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i, j; region_storage_meta_t * storage_metas = (region_storage_meta_t *)buf_cp; pdc_data_server_io_list_t *io_list_elt, *io_list_target; region_list_t * new_region; - FUNC_ENTER(NULL); - #ifdef ENABLE_MULTITHREAD hg_thread_mutex_lock(&data_read_list_mutex_g); #endif @@ -5665,7 +5154,7 @@ PDC_Server_add_client_shm_to_cache(int cnt, void *buf_cp) // If not found, create and insert one to the read list if (NULL == io_list_target) { - io_list_target = (pdc_data_server_io_list_t *)calloc(1, sizeof(pdc_data_server_io_list_t)); + io_list_target = (pdc_data_server_io_list_t *)PDC_calloc(1, sizeof(pdc_data_server_io_list_t)); io_list_target->obj_id = storage_metas[i].obj_id; io_list_target->total = 0; io_list_target->count = 0; @@ -5679,7 +5168,7 @@ PDC_Server_add_client_shm_to_cache(int cnt, void *buf_cp) io_list_target->total++; io_list_target->count++; - new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_region_transfer_t_to_list_t(&storage_metas[i].region_transfer, new_region); strcpy(new_region->shm_addr, storage_metas[i].storage_location); new_region->offset = storage_metas[i].offset; @@ -5687,31 +5176,23 @@ PDC_Server_add_client_shm_to_cache(int cnt, void *buf_cp) // Open shared memory and map to data buf new_region->shm_fd = shm_open(new_region->shm_addr, O_RDONLY, 0666); - if (new_region->shm_fd == -1) { - LOG_ERROR("==PDC_SERVER[%d]: Shared memory open failed [%s]!\n", pdc_server_rank_g, - new_region->shm_addr); - ret_value = FAIL; - goto done; - } + if (new_region->shm_fd == -1) + PGOTO_ERROR(FAIL, "Shared memory open failed [%s]", new_region->shm_addr); new_region->buf = mmap(0, new_region->data_size, PROT_READ, MAP_SHARED, new_region->shm_fd, new_region->offset); - if (new_region->buf == MAP_FAILED) { - ret_value = FAIL; - goto done; - } + if (new_region->buf == MAP_FAILED) + PGOTO_DONE(FAIL); new_region->is_data_ready = 1; new_region->is_io_done = 1; DL_PREPEND(io_list_target->region_list_head, new_region); - - } // End for each cache entry + } done: #ifdef ENABLE_MULTITHREAD hg_thread_mutex_unlock(&data_read_list_mutex_g); #endif - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -5719,56 +5200,62 @@ PDC_Server_add_client_shm_to_cache(int cnt, void *buf_cp) void PDC_Server_free_query_task(query_task_t *task) { + FUNC_ENTER(NULL); + int i; if (NULL != task->query) PDCquery_free_all(task->query); if (task->coords) - free(task->coords); + task->coords = (uint64_t *)PDC_free(task->coords); for (i = 0; i < task->n_read_data_region; i++) { if (task->data_arr && task->data_arr[i]) - free(task->data_arr[i]); + task->data_arr[i] = (void *)PDC_free(task->data_arr[i]); } if (task->data_arr) - free(task->data_arr); + task->data_arr = (void *)PDC_free(task->data_arr); if (task->n_hits_from_server) - free(task->n_hits_from_server); + task->n_hits_from_server = (uint64_t *)PDC_free(task->n_hits_from_server); + + task = (query_task_t *)PDC_free(task); - free(task); + FUNC_LEAVE_VOID(); } void PDC_query_visit_leaf_with_cb(pdc_query_t *query, perr_t (*func)(pdc_query_t *arg)) { + FUNC_ENTER(NULL); + if (NULL == query) - return; + FUNC_LEAVE_VOID(); PDC_query_visit_leaf_with_cb(query->left, func); PDC_query_visit_leaf_with_cb(query->right, func); if (NULL == query->left && NULL == query->right) func(query); - return; + + FUNC_LEAVE_VOID(); } static perr_t PDC_Server_data_read_to_buf_1_region(region_list_t *region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; uint64_t offset, read_bytes; FILE * fp_read = NULL; if (region->is_data_ready == 1) - return SUCCEED; + FUNC_LEAVE(SUCCEED); fp_read = fopen(region->storage_location, "rb"); - if (NULL == fp_read) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, region->storage_location); - ret_value = FAIL; - goto done; - } + if (NULL == fp_read) + PGOTO_ERROR(FAIL, "fopen failed [%s]", region->storage_location); n_fopen_g++; offset = ftell(fp_read); @@ -5777,20 +5264,14 @@ PDC_Server_data_read_to_buf_1_region(region_list_t *region) else fseek(fp_read, region->offset, SEEK_SET); - if (region->data_size == 0) { - LOG_ERROR("==PDC_SERVER[%d]: region data_size is 0\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region->data_size == 0) + PGOTO_ERROR(FAIL, "Region data_size was 0"); - region->buf = malloc(region->data_size); + region->buf = PDC_malloc(region->data_size); read_bytes = fread(region->buf, 1, region->data_size, fp_read); if (read_bytes != region->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: read size %" PRIu64 " is not expected %" PRIu64 "\n", pdc_server_rank_g, - read_bytes, region->data_size); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Read size %" PRIu64 " is not expected %" PRIu64, read_bytes, region->data_size); } region->is_data_ready = 1; @@ -5799,12 +5280,15 @@ PDC_Server_data_read_to_buf_1_region(region_list_t *region) done: if (fp_read) fclose(fp_read); - return ret_value; + + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_data_read_to_buf(region_list_t *region_list_head) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t *region_elt; char * prev_path = NULL; @@ -5829,8 +5313,7 @@ PDC_Server_data_read_to_buf(region_list_t *region_list_head) fclose(fp_read); fp_read = fopen(region_elt->storage_location, "rb"); if (NULL == fp_read) { - LOG_ERROR("==PDC_SERVER[%d]: fopen failed [%s]\n", pdc_server_rank_g, - region_elt->storage_location); + LOG_ERROR("fopen failed [%s]\n", region_elt->storage_location); } n_fopen_g++; } @@ -5842,16 +5325,16 @@ PDC_Server_data_read_to_buf(region_list_t *region_list_head) fseek(fp_read, region_elt->offset, SEEK_SET); if (region_elt->data_size == 0) { - LOG_ERROR("==PDC_SERVER[%d]: region data_size is 0\n", pdc_server_rank_g); + LOG_ERROR("Region data_size is 0\n"); continue; } - region_elt->buf = malloc(region_elt->data_size); + region_elt->buf = PDC_malloc(region_elt->data_size); read_bytes = fread(region_elt->buf, 1, region_elt->data_size, fp_read); if (read_bytes != region_elt->data_size) { - LOG_ERROR("==PDC_SERVER[%d]: read size %" PRIu64 " is not expected %" PRIu64 "\n", - pdc_server_rank_g, read_bytes, region_elt->data_size); + LOG_ERROR("Read size %" PRIu64 " is not expected %" PRIu64 "\n", read_bytes, + region_elt->data_size); continue; } read_count++; @@ -5868,26 +5351,26 @@ PDC_Server_data_read_to_buf(region_list_t *region_list_head) double read_time = PDC_get_elapsed_time_double(&pdc_timer_start1, &pdc_timer_end1); server_read_time_g += read_time; if (region_list_head != NULL) { - LOG_INFO("==PDC_SERVER[%d]: finished reading obj %" PRIu64 " of %d regions, %.2f seconds!\n", - pdc_server_rank_g, region_list_head->obj_id, read_count, read_time); + LOG_INFO("Finished reading obj %" PRIu64 " of %d regions, %.2f seconds\n", region_list_head->obj_id, + read_count, read_time); } else - LOG_INFO("==PDC_SERVER[%d]: no regions have been read!\n", pdc_server_rank_g); + LOG_INFO("No regions have been read\n"); #endif - - fflush(stdout); - return ret_value; + FUNC_LEAVE(ret_value); } static int PDC_region_has_hits_from_hist(pdc_query_constraint_t *constraint, pdc_histogram_t *region_hist) { + FUNC_ENTER(NULL); + pdc_query_op_t lop; double value, value2; if (constraint == NULL || region_hist == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: NULL input!\n", pdc_server_rank_g); - return -1; + LOG_ERROR("NULL input\n"); + FUNC_LEAVE(-1); } switch (constraint->type) { @@ -5917,15 +5400,16 @@ PDC_region_has_hits_from_hist(pdc_query_constraint_t *constraint, pdc_histogram_ value2 = (double)constraint->value2; break; default: - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); - return -1; + LOG_ERROR("Error with operator type\n"); + FUNC_LEAVE(-1); + break; } lop = constraint->op; if (constraint->is_range == 1) { if (value > region_hist->range[region_hist->nbin * 2 - 1] || value2 < region_hist->range[0]) { - return 0; + FUNC_LEAVE(0); } } else { @@ -5933,20 +5417,22 @@ PDC_region_has_hits_from_hist(pdc_query_constraint_t *constraint, pdc_histogram_ if (lop == PDC_LT || lop == PDC_LTE) { if (value < region_hist->range[0]) - return 0; + FUNC_LEAVE(0); } else if (lop == PDC_GT || lop == PDC_GTE) { if (value > region_hist->range[region_hist->nbin * 2 - 1]) - return 0; + FUNC_LEAVE(0); } } - return 1; + FUNC_LEAVE(1); } static perr_t PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_combine_op_t combine_op) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t * req_region = NULL, *region_tmp = NULL; region_list_t * storage_region_list_head = NULL; @@ -5957,10 +5443,10 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com pdc_query_constraint_t *constraint = query->constraint; storage_region_list_head = constraint->storage_region_list_head; - if (NULL == constraint || NULL == storage_region_list_head) { - LOG_ERROR("==PDC_SERVER[%d]: NULL query constraint/storage region!\n", pdc_server_rank_g); - goto done; - } + if (constraint == NULL) + PGOTO_ERROR(FAIL, "constraint was NULL"); + if (storage_region_list_head == NULL) + PGOTO_ERROR(FAIL, "storage_region_list_head was NULL"); obj_id = constraint->obj_id; @@ -5981,12 +5467,9 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com if (NULL == io_list_target) { // pdc_data_server_io_list_t maintains the request list for one object id, // write and read are separate lists - io_list_target = (pdc_data_server_io_list_t *)calloc(1, sizeof(pdc_data_server_io_list_t)); - if (NULL == io_list_target) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR allocating pdc_data_server_io_list_t!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + io_list_target = (pdc_data_server_io_list_t *)PDC_calloc(1, sizeof(pdc_data_server_io_list_t)); + if (NULL == io_list_target) + PGOTO_ERROR(FAIL, "Error with allocating pdc_data_server_io_list_t"); io_list_target->obj_id = obj_id; io_list_target->total = 0; // not used yet io_list_target->count = 0; @@ -6012,8 +5495,7 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com if (combine_op == PDC_QUERY_OR) { if (task->invalid_region_ids != NULL) { - free(task->invalid_region_ids); - task->invalid_region_ids = NULL; + task->invalid_region_ids = (int *)PDC_free(task->invalid_region_ids); task->ninvalid_region = 0; } } @@ -6032,14 +5514,12 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com // use histogram to see if we need to read this region if (gen_hist_g == 1) { - if (req_region->region_hist->nbin == 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR histogram is empty!\n", pdc_server_rank_g); - fflush(stdout); - } + if (req_region->region_hist->nbin == 0) + LOG_ERROR("Error histogram is empty\n"); if (PDC_region_has_hits_from_hist(constraint, req_region->region_hist) == 0) { if (task->invalid_region_ids == NULL) - task->invalid_region_ids = (int *)calloc(count, sizeof(int)); + task->invalid_region_ids = (int *)PDC_calloc(count, sizeof(int)); can_skip = 0; for (i = 0; i < task->ninvalid_region; i++) { @@ -6066,12 +5546,9 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com if (1 != is_same_region) { // append current request region to the io list - region_list_t *new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); - if (new_region == NULL) { - LOG_ERROR("==PDC_SERVER: ERROR allocating new_region!\n"); - ret_value = FAIL; - goto done; - } + region_list_t *new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); + if (new_region == NULL) + PGOTO_ERROR(FAIL, "Error with allocating new_region"); req_region->io_cache_region = new_region; PDC_region_list_t_deep_cp(req_region, new_region); new_region->is_data_ready = 0; @@ -6083,32 +5560,29 @@ PDC_Server_load_query_data(query_task_t *task, pdc_query_t *query, pdc_query_com DL_APPEND(io_list_target->region_list_head, new_region); } - } // Ened DL_FOREACH + } // Currently reads all regions of a query constraint together - // TODO: potential optimization: aggregate all I/O requests ret_value = PDC_Server_data_read_to_buf(io_list_target->region_list_head); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_data_read_to_shm FAILED!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_data_read_to_buf"); done: - fflush(stdout); - return ret_value; + FUNC_LEAVE(ret_value); } perr_t region_index_to_coord(int ndim, uint64_t idx, uint64_t *sizes, uint64_t *coord) { + FUNC_ENTER(NULL); + if (sizes == NULL || coord == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: input NULL!\n", pdc_server_rank_g); - return FAIL; + LOG_ERROR("Input NULL\n"); + FUNC_LEAVE(FAIL); } - if (ndim > 3) { - LOG_ERROR("==PDC_SERVER[%d]: dimension > 3 not supported!\n", pdc_server_rank_g); - return FAIL; + LOG_ERROR("Dimension > 3 not supported\n"); + FUNC_LEAVE(FAIL); } if (ndim == 3) { @@ -6121,22 +5595,23 @@ region_index_to_coord(int ndim, uint64_t idx, uint64_t *sizes, uint64_t *coord) } coord[0] = idx; - return SUCCEED; + FUNC_LEAVE(SUCCEED); } uint64_t coord_to_region_index(size_t ndim, uint64_t *coord, region_list_t *region, int unit_size) { + FUNC_ENTER(NULL); + uint64_t off = 0; if (ndim == 0 || coord == NULL || region == NULL || region->start[0] == 0 || region->count[0] == 0) { - LOG_ERROR("==PDC_SERVER[%d]: input NULL!\n", pdc_server_rank_g); - return 0; + LOG_ERROR("Input NULL\n"); + FUNC_LEAVE(0); } - if (ndim > 3) { - LOG_ERROR("==PDC_SERVER[%d]: cannot handle dim > 3!\n", pdc_server_rank_g); - return 0; + LOG_ERROR("Cannot handle dim > 3\n"); + FUNC_LEAVE(0); } if (ndim == 3) @@ -6147,37 +5622,42 @@ coord_to_region_index(size_t ndim, uint64_t *coord, region_list_t *region, int u off += (coord[0] - region->start[0] / unit_size); - return off; + FUNC_LEAVE(off); } static int is_coord_within_region(int ndim, uint64_t *coords, region_list_t *region_constraint, int unit_size) { + FUNC_ENTER(NULL); + int i; uint64_t coord[3]; if (coords == NULL || region_constraint == NULL || ndim > 3) - return -1; + FUNC_LEAVE(-1); for (i = 0; i < ndim; i++) { coord[i] = coords[i]; coord[i] *= unit_size; if (coord[i] < region_constraint->start[i] || coord[i] > region_constraint->start[i] + region_constraint->count[i]) { - return -1; + FUNC_LEAVE(-1); } } - return 1; + + FUNC_LEAVE(1); } static int is_idx_within_region(uint64_t idx, region_list_t *region, region_list_t *region_constraint, int unit_size) { + FUNC_ENTER(NULL); + size_t i, ndim; uint64_t coord[DIM_MAX]; if (region == NULL || region_constraint == NULL) - return -1; + FUNC_LEAVE(-1); ndim = region->ndim; region_index_to_coord(ndim, idx, region->count, (uint64_t *)&coord); @@ -6187,28 +5667,32 @@ is_idx_within_region(uint64_t idx, region_list_t *region, region_list_t *region_ coord[i] += region->start[i]; if (coord[i] < region_constraint->start[i] || coord[i] > region_constraint->start[i] + region_constraint->count[i]) { - return -1; + FUNC_LEAVE(-1); } } - return 1; + + FUNC_LEAVE(1); } int compare_coords_1d(const void *a, const void *b) { - return (memcmp(a, b, sizeof(uint64_t))); + FUNC_ENTER(NULL); + FUNC_LEAVE(memcmp(a, b, sizeof(uint64_t))); } int compare_coords_2d(const void *a, const void *b) { - return (memcmp(a, b, sizeof(uint64_t) * 2)); + FUNC_ENTER(NULL); + FUNC_LEAVE(memcmp(a, b, sizeof(uint64_t) * 2)); } int compare_coords_3d(const void *a, const void *b) { - return (memcmp(a, b, sizeof(uint64_t) * 3)); + FUNC_ENTER(NULL); + FUNC_LEAVE(memcmp(a, b, sizeof(uint64_t) * 3)); } /* perr_t QUERY_EVALUATE_SCAN_OPT(uint64_t _n, float *_data, pdc_query_op_t _op, void *_value, */ @@ -6225,9 +5709,7 @@ compare_coords_3d(const void *a, const void *b) _ndim = (_region)->ndim; \ istart = (_sel)->nhits * _ndim; \ if (_ndim > 3) { \ - LOG_ERROR("==PDC_SERVER[%d]: dimension > 3 not supported!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Dimension > 3 not supported"); \ } \ if ((_combine_op) == PDC_QUERY_NONE || (_combine_op) == PDC_QUERY_OR) { \ for (iii = 0; iii < (_n); iii++) { \ @@ -6257,19 +5739,15 @@ compare_coords_3d(const void *a, const void *b) is_good = 1; \ break; \ default: \ - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with operator type"); \ } \ if (is_good == 1) { \ if ((istart + cur_count + 1) * _ndim > ((_sel)->coords_alloc)) { \ ((_sel)->coords_alloc) *= 2; \ - ((_sel)->coords) = \ - (uint64_t *)realloc(((_sel)->coords), (_sel)->coords_alloc * sizeof(uint64_t)); \ + ((_sel)->coords) = (uint64_t *)PDC_realloc(((_sel)->coords), \ + (_sel)->coords_alloc * sizeof(uint64_t)); \ if (NULL == ((_sel)->coords)) { \ - LOG_ERROR("==PDC_SERVER[%d]: error with malloc!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with PDC_realloc"); \ } \ } \ ttt = iii; \ @@ -6328,9 +5806,7 @@ compare_coords_3d(const void *a, const void *b) is_good = 1; \ break; \ default: \ - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with operator type"); \ } \ if (is_good != 1) { \ /* Invalidate the coord by setting it to max value */ \ @@ -6353,8 +5829,7 @@ compare_coords_3d(const void *a, const void *b) jjj++; \ } \ if (iii > (_sel)->nhits) \ - LOG_ERROR("==PDC_SERVER[%d]: Error! invalidated more elements than total\n", \ - pdc_server_rank_g); \ + LOG_ERROR("Error invalidated more elements than total\n"); \ else \ ((_sel)->nhits) -= iii; \ } \ @@ -6370,9 +5845,7 @@ compare_coords_3d(const void *a, const void *b) _ndim = (_region)->ndim; \ istart = (_sel)->nhits * _ndim; \ if (_ndim > 3) { \ - LOG_ERROR("==PDC_SERVER[%d]: dimension > 3 not supported!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Dimension > 3 not supported"); \ } \ if ((_combine_op) == PDC_QUERY_NONE || (_combine_op) == PDC_QUERY_OR) { \ for (iii = 0; iii < (_n); iii++) { \ @@ -6397,19 +5870,15 @@ compare_coords_3d(const void *a, const void *b) is_good = 1; \ } \ else { \ - LOG_ERROR("==PDC_SERVER[%d]: error with range op! \n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with range op"); \ } \ if (is_good == 1) { \ if ((istart + cur_count + 1) * _ndim > ((_sel)->coords_alloc)) { \ ((_sel)->coords_alloc) *= 2; \ - ((_sel)->coords) = \ - (uint64_t *)realloc(((_sel)->coords), (_sel)->coords_alloc * sizeof(uint64_t)); \ + ((_sel)->coords) = (uint64_t *)PDC_realloc(((_sel)->coords), \ + (_sel)->coords_alloc * sizeof(uint64_t)); \ if (NULL == ((_sel)->coords)) { \ - LOG_ERROR("==PDC_SERVER[%d]: error with malloc!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with malloc"); \ } \ } \ ttt = iii; \ @@ -6463,9 +5932,7 @@ compare_coords_3d(const void *a, const void *b) is_good = 1; \ } \ else { \ - LOG_ERROR("==PDC_SERVER[%d]: - error with range op!\n", pdc_server_rank_g); \ - ret_value = FAIL; \ - goto done; \ + PGOTO_ERROR(FAIL, "Error with range op"); \ } \ if (is_good != 1) { \ /* Invalidate the coord by setting it to max value */ \ @@ -6488,8 +5955,7 @@ compare_coords_3d(const void *a, const void *b) jjj++; \ } \ if (iii > (_sel)->nhits) \ - LOG_ERROR("==PDC_SERVER[%d]: Error! invalidated more elements than total\n", \ - pdc_server_rank_g); \ + LOG_ERROR("Error invalidated more elements than total\n"); \ else \ ((_sel)->nhits) -= iii; \ } \ @@ -6501,6 +5967,7 @@ void PDC_gen_fastbit_idx_name(char *out, char *prefix, uint64_t obj_id, int timestep, int ndim, uint64_t *start, uint64_t *count) { + FUNC_ENTER(NULL); if (ndim == 1) { sprintf(out, "%s-%" PRIu64 "-%d-%" PRIu64 "-%" PRIu64 "", prefix, obj_id, timestep, start[0], @@ -6515,12 +5982,16 @@ PDC_gen_fastbit_idx_name(char *out, char *prefix, uint64_t obj_id, int timestep, "%s-%" PRIu64 "-%d-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "-%" PRIu64 "", prefix, obj_id, timestep, start[0], start[1], start[2], count[0], count[1], count[2]); } + + FUNC_LEAVE_VOID(); } perr_t generate_write_fastbit_idx(uint64_t obj_id, void *data, uint64_t dataCount, FastBitDataType ft, int timestep, int ndim, uint64_t *start, uint64_t *count) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; long int fastbitErr; char bmsName[128]; @@ -6533,32 +6004,21 @@ generate_write_fastbit_idx(uint64_t obj_id, void *data, uint64_t dataCount, Fast uint64_t nk = 0, no = 0, nb = 0; FILE * fp; - FUNC_ENTER(NULL); - PDC_gen_fastbit_idx_name(bmsName, "bms", obj_id, timestep, ndim, start, count); PDC_gen_fastbit_idx_name(keyName, "key", obj_id, timestep, ndim, start, count); PDC_gen_fastbit_idx_name(offName, "off", obj_id, timestep, ndim, start, count); fastbitErr = fastbit_iapi_register_array(bmsName, ft, data, dataCount); - if (fastbitErr < 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with fastbit_iapi_register_array\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (fastbitErr < 0) + PGOTO_ERROR(FAIL, "Error with fastbit_iapi_register_array"); fastbitErr = fastbit_iapi_build_index(bmsName, (const char *)gBinningOption); - if (fastbitErr < 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with fastbit_iapi_build_index\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (fastbitErr < 0) + PGOTO_ERROR(FAIL, "Error with fastbit_iapi_build_index"); fastbitErr = fastbit_iapi_deconstruct_index(bmsName, &keys, &nk, &offsets, &no, &bms, &nb); - if (fastbitErr < 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with fastbit_iapi_deconstruct_index\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (fastbitErr < 0) + PGOTO_ERROR(FAIL, "Error with fastbit_iapi_deconstruct_index"); // Need to write out bms, key, and offset char storage_location[256]; @@ -6577,57 +6037,56 @@ generate_write_fastbit_idx(uint64_t obj_id, void *data, uint64_t dataCount, Fast sprintf(out_name, "%s/%s", storage_location, bmsName); fp = fopen(out_name, "w"); - if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: unable to open file [%s]\n", pdc_server_rank_g, out_name); - goto done; - } + if (fp == NULL) + PGOTO_ERROR(FAIL, "Unable to open file [%s]", out_name); fwrite(bms, nb, sizeof(uint32_t), fp); fclose(fp); sprintf(out_name, "%s/%s", storage_location, keyName); fp = fopen(out_name, "w"); - if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: unable to open file [%s]\n", pdc_server_rank_g, out_name); - goto done; - } + if (fp == NULL) + PGOTO_ERROR(FAIL, "Unable to open file [%s]", out_name); fwrite(keys, nk, sizeof(double), fp); fclose(fp); sprintf(out_name, "%s/%s", storage_location, offName); fp = fopen(out_name, "w"); - if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: unable to open file [%s]\n", pdc_server_rank_g, out_name); - goto done; - } + if (fp == NULL) + PGOTO_ERROR(FAIL, "Unable to open file [%s]", out_name); fwrite(offsets, no, sizeof(int64_t), fp); fclose(fp); done: if (bms) - free(bms); + bms = (uint32_t *)PDC_free(bms); if (keys) - free(keys); + keys = (double *)PDC_free(keys); if (offsets) - free(offsets); + offsets = (int64_t *)PDC_free(offsets); fastbit_iapi_free_all(); + FUNC_LEAVE(ret_value); } int PDC_bmreader(void *ctx, uint64_t start, uint64_t count, uint32_t *buf) { + FUNC_ENTER(NULL); + const uint32_t *bms = (uint32_t *)ctx + start; unsigned j; for (j = 0; j < count; ++j) { buf[j] = bms[j]; } - return 0; + FUNC_LEAVE(0); } int queryData(const char *name) { + FUNC_ENTER(NULL); + uint64_t nhits, i; uint64_t * buf; double val1 = 0.0, val2 = 10.0; @@ -6638,7 +6097,7 @@ queryData(const char *name) nhits = fastbit_selection_evaluate(sel); LOG_INFO("Query has %" PRIu64 " hits\n", nhits); - buf = (uint64_t *)calloc(nhits, sizeof(uint64_t)); + buf = (uint64_t *)PDC_calloc(nhits, sizeof(uint64_t)); nhits = fastbit_selection_get_coordinates(sel, buf, nhits, 0); @@ -6648,10 +6107,11 @@ queryData(const char *name) } LOG_JUST_PRINT("\n"); - free(buf); + buf = (uint64_t *)PDC_free(buf); fastbit_iapi_free_all(); - return 1; + + FUNC_LEAVE(1); } int @@ -6659,6 +6119,8 @@ PDC_load_fastbit_index(char *idx_name, uint64_t obj_id, FastBitDataType dtype, i uint64_t *dims, uint64_t *start, uint64_t *count, uint32_t **bms, double **keys, int64_t **offsets) { + FUNC_ENTER(NULL); + char bmsName[128]; char keyName[128]; char offName[128]; @@ -6687,13 +6149,13 @@ PDC_load_fastbit_index(char *idx_name, uint64_t obj_id, FastBitDataType dtype, i sprintf(out_name, "%s/%s", storage_location, bmsName); fp = fopen(out_name, "r"); if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR opening file [%s]!\n", pdc_server_rank_g, out_name); - return -1; + LOG_ERROR("Error opening file [%s]\n", out_name); + FUNC_LEAVE(-1); } fseek(fp, 0, SEEK_END); size = ftell(fp); nb = size / sizeof(uint32_t); - *bms = (uint32_t *)calloc(nb, sizeof(uint32_t)); + *bms = (uint32_t *)PDC_calloc(nb, sizeof(uint32_t)); fseek(fp, 0, SEEK_SET); fread(*bms, nb, sizeof(uint32_t), fp); fclose(fp); @@ -6701,14 +6163,13 @@ PDC_load_fastbit_index(char *idx_name, uint64_t obj_id, FastBitDataType dtype, i sprintf(out_name, "%s/%s", storage_location, keyName); fp = fopen(out_name, "r"); if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR opening file [%s]!\n", pdc_server_rank_g, out_name); - return -1; + LOG_ERROR("Error opening file [%s]\n", out_name); + FUNC_LEAVE(-1); } - fseek(fp, 0, SEEK_END); size = ftell(fp); nk = size / sizeof(double); - *keys = (double *)calloc(nk, sizeof(double)); + *keys = (double *)PDC_calloc(nk, sizeof(double)); fseek(fp, 0, SEEK_SET); fread(*keys, nk, sizeof(double), fp); fclose(fp); @@ -6716,13 +6177,13 @@ PDC_load_fastbit_index(char *idx_name, uint64_t obj_id, FastBitDataType dtype, i sprintf(out_name, "%s/%s", storage_location, offName); fp = fopen(out_name, "r"); if (fp == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR opening file [%s]!\n", pdc_server_rank_g, out_name); - return -1; + LOG_ERROR("Error opening file [%s]\n", out_name); + FUNC_LEAVE(-1); } fseek(fp, 0, SEEK_END); size = ftell(fp); no = size / sizeof(int64_t); - *offsets = (int64_t *)calloc(no, sizeof(int64_t)); + *offsets = (int64_t *)PDC_calloc(no, sizeof(int64_t)); fseek(fp, 0, SEEK_SET); fread(*offsets, no, sizeof(int64_t), fp); fclose(fp); @@ -6730,13 +6191,15 @@ PDC_load_fastbit_index(char *idx_name, uint64_t obj_id, FastBitDataType dtype, i fastbit_iapi_register_array_index_only(idx_name, dtype, dims, ndim, *keys, nk, *offsets, no, *bms, PDC_bmreader); - return 1; + FUNC_LEAVE(1); } perr_t PDC_query_fastbit_idx(region_list_t *region, pdc_query_constraint_t *constraint, uint64_t *nhit, uint64_t **coords) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; FastBitDataType ft = 0; uint64_t type_size; @@ -6749,13 +6212,8 @@ PDC_query_fastbit_idx(region_list_t *region, pdc_query_constraint_t *constraint, uint64_t start[DIM_MAX], count[DIM_MAX]; pdc_var_type_t dtype; - FUNC_ENTER(NULL); - - if (region == NULL || constraint == NULL || coords == NULL || nhit == NULL) { - LOG_ERROR("==PDC_SERVER[%d]:ERROR with input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region == NULL || constraint == NULL || coords == NULL || nhit == NULL) + PGOTO_ERROR(FAIL, "Error with input"); dtype = constraint->type; if (PDC_INT == dtype) @@ -6813,10 +6271,7 @@ PDC_query_fastbit_idx(region_list_t *region, pdc_query_constraint_t *constraint, v2 = (double)(*((uint64_t *)&constraint->value2)); break; default: - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - + PGOTO_ERROR(FAIL, "Error with operator type"); } // End switch if (constraint->op == PDC_GT) @@ -6847,41 +6302,38 @@ PDC_query_fastbit_idx(region_list_t *region, pdc_query_constraint_t *constraint, } *nhit = fastbit_selection_evaluate(sel); if (*nhit > 0) { - *coords = malloc(*nhit * sizeof(uint64_t)); + *coords = PDC_malloc(*nhit * sizeof(uint64_t)); fastbit_selection_get_coordinates(sel, *coords, *nhit, 0); } if (bms) - free(bms); + bms = (uint32_t *)PDC_free(bms); if (keys) - - free(keys); + keys = (double *)PDC_free(keys); if (offsets) - free(offsets); + offsets = (int64_t *)PDC_free(offsets); if (sel) fastbit_selection_free(sel); fastbit_iapi_free_all(); done: if (ret_value == FAIL) *nhit = 0; + FUNC_LEAVE(ret_value); } perr_t PDC_gen_fastbit_idx(region_list_t *region, pdc_var_type_t dtype) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int i; FastBitDataType ft; uint64_t dataCount, start[DIM_MAX], count[DIM_MAX], type_size; - FUNC_ENTER(NULL); - - if (region == NULL || region->buf == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (region == NULL || region->buf == NULL) + PGOTO_ERROR(FAIL, "Error with input"); if (PDC_INT == dtype) ft = FastBitDataTypeInt; @@ -6917,6 +6369,8 @@ static perr_t PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_query_t *left, pdc_query_combine_op_t combine_op) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; region_list_t * region_elt, *region_list_head, *cache_region, tmp_region, *region_constraint = NULL; pdc_selection_t *sel = query->sel; @@ -6935,8 +6389,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ void * value = NULL, *buf = NULL; int n_eval_region = 0, can_skip, region_iter = 0; - LOG_INFO("==PDC_SERVER[%d]: start query evaluation!\n", pdc_server_rank_g); - fflush(stdout); + LOG_INFO("Start query evaluation\n"); #ifdef ENABLE_TIMING struct timeval pdc_timer_start, pdc_timer_end; @@ -6945,29 +6398,21 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ #endif // query is guarenteed to be non-leaf nodes - if (query == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: input query NULL!\n", pdc_server_rank_g); - goto done; - } + if (query == NULL) + PGOTO_ERROR(FAIL, "Input query NULL"); // Need to go through each region for query evaluation, so get region head region_list_head = (region_list_t *)query->constraint->storage_region_list_head; - if (NULL == region_list_head) { - LOG_ERROR("==PDC_SERVER[%d]: error with storage_region_list_head!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (NULL == region_list_head) + PGOTO_ERROR(FAIL, "Error with storage_region_list_head"); unit_size = PDC_get_var_type_size(query->constraint->type); if (task->ndim <= 0 || task->ndim > 3) task->ndim = region_list_head->ndim; ndim = task->ndim; - if (ndim <= 0 || ndim > 3) { - LOG_ERROR("==PDC_SERVER[%d]: error with ndim = %d!\n", pdc_server_rank_g, ndim); - ret_value = FAIL; - goto done; - } + if (ndim <= 0 || ndim > 3) + PGOTO_ERROR(FAIL, "Error with ndim = %d", ndim); // Calculate total number of elements of all regions if (task->total_elem == 0) { @@ -6979,10 +6424,10 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ // No need to evaluate a query if a previous one has selected all and combining with OR if (sel->nhits == task->total_elem && combine_op == PDC_QUERY_OR) { - goto done; + PGOTO_DONE(ret_value); } else if (sel->nhits == 0 && combine_op == PDC_QUERY_AND) { - goto done; + PGOTO_DONE(ret_value); } // Set up region constraint if the query has one @@ -7026,10 +6471,8 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ ui64hi = (uint64_t)query->constraint->value2; break; default: - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } // End switch + PGOTO_ERROR(FAIL, "Error with operator type"); + } lop = query->constraint->op; rop = query->constraint->op2; @@ -7070,7 +6513,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ if (gen_hist_g == 1) { if (PDC_region_has_hits_from_hist(query->constraint, region_elt->region_hist) == 0) { if (task->invalid_region_ids == NULL) - task->invalid_region_ids = (int *)calloc(count, sizeof(int)); + task->invalid_region_ids = (int *)PDC_calloc(count, sizeof(int)); can_skip = 0; for (i = 0; i < task->ninvalid_region; i++) { @@ -7090,8 +6533,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ uint64_t idx_nhits = 0, *idx_coords = NULL, tmp_coord[DIM_MAX]; PDC_query_fastbit_idx(region_elt, query->constraint, &idx_nhits, &idx_coords); if (idx_nhits > region_elt->data_size / unit_size) { - LOG_WARNING("==PDC_SERVER[%d]: idx_nhits = %" PRIu64 " may be too large!\n", - pdc_server_rank_g, idx_nhits); + LOG_WARNING("idx_nhits = %" PRIu64 " may be too large\n", idx_nhits); } if (idx_nhits > 0) { @@ -7100,7 +6542,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ sel->coords_alloc = 2 * idx_nhits; else sel->coords_alloc *= 2; - sel->coords = (uint64_t *)realloc(sel->coords, sel->coords_alloc * sizeof(uint64_t)); + sel->coords = (uint64_t *)PDC_realloc(sel->coords, sel->coords_alloc * sizeof(uint64_t)); } for (iter = 0; iter < idx_nhits; iter++) { if (ndim > 1) @@ -7110,8 +6552,8 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ for (j = 0; j < ndim; j++) { tmp = (sel->nhits + iter) * ndim + j; if (tmp > sel->coords_alloc) { - LOG_ERROR("==PDC_SERVER[%d]: - coord array overflow %" PRIu64 "/ %" PRIu64 "!\n", - pdc_server_rank_g, tmp, sel->coords_alloc); + LOG_ERROR("Coord array overflow %" PRIu64 "/ %" PRIu64 "\n", tmp, + sel->coords_alloc); } else sel->coords[tmp] = tmp_coord[j] + region_elt->start[j] / unit_size; @@ -7120,7 +6562,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ sel->nhits += idx_nhits; if (idx_coords) - free(idx_coords); + idx_coords = (uint64_t *)PDC_free(idx_coords); } n_eval_region++; @@ -7129,8 +6571,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ } // End if use fastbit else { // Load data - LOG_INFO("==PDC_SERVER[%d]: start loading data!\n", pdc_server_rank_g); - fflush(stdout); + LOG_INFO("Start loading data\n"); PDC_Server_load_query_data(task, query, combine_op); region_iter = -1; @@ -7169,7 +6610,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ if (gen_hist_g == 1) { if (PDC_region_has_hits_from_hist(query->constraint, region_elt->region_hist) == 0) { if (task->invalid_region_ids == NULL) - task->invalid_region_ids = (int *)calloc(count, sizeof(int)); + task->invalid_region_ids = (int *)PDC_calloc(count, sizeof(int)); can_skip = 0; for (i = 0; (int)i < task->ninvalid_region; i++) { @@ -7266,9 +6707,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ } break; default: - LOG_ERROR("==PDC_SERVER[%d]: error with operator type!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with operator type"); } // End switch n_eval_region++; @@ -7277,8 +6716,8 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ if (n_eval_region == 0 && combine_op == PDC_QUERY_AND) { if (sel->nhits > 0) { - sel->nhits = 0; - free(sel->coords); + sel->nhits = 0; + sel->coords = (uint64_t *)PDC_free(sel->coords); sel->coords_alloc = 0; sel->coords = NULL; } @@ -7318,7 +6757,7 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ if (pdc_server_rank_g == 0 || pdc_server_rank_g == 1) { gettimeofday(&pdc_timer_end1, 0); double rm_dup_time = PDC_get_elapsed_time_double(&pdc_timer_start1, &pdc_timer_end1); - LOG_INFO("==PDC_SERVER[%d]: remove duplicate time %.4fs\n", pdc_server_rank_g, rm_dup_time); + LOG_INFO("Remove duplicates time %.4fs\n", rm_dup_time); } #endif @@ -7326,28 +6765,26 @@ PDC_Server_query_evaluate_merge_opt(pdc_query_t *query, query_task_t *task, pdc_ #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); double query_eval_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_INFO("==PDC_SERVER[%d]: evaluated %d regions of %" PRIu64 ": %" PRIu64 "/ %" PRIu64 - " hits, time %.4fs\n", - pdc_server_rank_g, n_eval_region, query->constraint->obj_id, sel->nhits, task->total_elem, - query_eval_time); + LOG_INFO("Evaluated %d regions of %" PRIu64 ": %" PRIu64 "/ %" PRIu64 " hits, time %.4fs\n", + n_eval_region, query->constraint->obj_id, sel->nhits, task->total_elem, query_eval_time); #endif - - fflush(stdout); - return ret_value; + FUNC_LEAVE(ret_value); } void PDC_query_visit_all_with_cb_arg(pdc_query_t *query, void (*func)(pdc_query_t *, void *), void *arg) { + FUNC_ENTER(NULL); + if (NULL == query) - return; + FUNC_LEAVE_VOID(); func(query, arg); PDC_query_visit_all_with_cb_arg(query->left, func, arg); PDC_query_visit_all_with_cb_arg(query->right, func, arg); - return; + FUNC_LEAVE_VOID(); } void @@ -7355,8 +6792,10 @@ PDC_query_visit(pdc_query_t *query, perr_t (*func)(pdc_query_t *, query_task_t *, pdc_query_t *, pdc_query_combine_op_t), query_task_t *arg, pdc_query_t *left, pdc_query_combine_op_t combine_op) { + FUNC_ENTER(NULL); + if (NULL == query) - return; + FUNC_LEAVE_VOID(); PDC_query_visit(query->left, func, arg, left, combine_op); PDC_query_visit(query->right, func, arg, query->left, query->combine_op); @@ -7364,14 +6803,16 @@ PDC_query_visit(pdc_query_t *query, if (NULL == query->left && NULL == query->right) func(query, arg, left, combine_op); - return; + FUNC_LEAVE_VOID(); } void PDC_query_visit_leaf_with_cb_arg(pdc_query_t *query, void (*func)(pdc_query_t *, void *), void *arg) { + FUNC_ENTER(NULL); + if (NULL == query) - return; + FUNC_LEAVE_VOID(); PDC_query_visit_leaf_with_cb_arg(query->left, func, arg); PDC_query_visit_leaf_with_cb_arg(query->right, func, arg); @@ -7379,29 +6820,35 @@ PDC_query_visit_leaf_with_cb_arg(pdc_query_t *query, void (*func)(pdc_query_t *, if (NULL == query->left && NULL == query->right) func(query, arg); - return; + FUNC_LEAVE_VOID(); } void has_more_storage_region_to_recv(pdc_query_t *query, void *arg) { + FUNC_ENTER(NULL); + int *has_more = (int *)arg; if (query == NULL || query->constraint == NULL) { - return; + FUNC_LEAVE_VOID(); } if (query->constraint->storage_region_list_head == NULL) *has_more = 1; + + FUNC_LEAVE_VOID(); } perr_t attach_cache_storage_region_to_query(pdc_query_t *query) { + FUNC_ENTER(NULL); + cache_storage_region_t *cache_region_elt; if (NULL == query->constraint) { - LOG_ERROR("==PDC_SERVER[%d]: query->constraint is NULL!\n", pdc_server_rank_g); - return FAIL; + LOG_ERROR("query->constraint is NULL\n"); + FUNC_LEAVE(FAIL); } DL_FOREACH(cache_storage_region_head_g, cache_region_elt) @@ -7412,88 +6859,78 @@ attach_cache_storage_region_to_query(pdc_query_t *query) } } - return SUCCEED; + FUNC_LEAVE(SUCCEED); } void attach_sel_to_query(pdc_query_t *query, void *sel) { + FUNC_ENTER(NULL); + if (query != NULL) query->sel = sel; + + FUNC_LEAVE_VOID(); } perr_t attach_local_storage_region_to_query(pdc_query_t *query) - { + FUNC_ENTER(NULL); + /* pdc_metadata_t *meta; */ pdc_data_server_io_list_t *obj_reg; if (NULL == query->constraint) { - LOG_ERROR("==PDC_SERVER[%d]: query->constraint is NULL!\n", pdc_server_rank_g); - return FAIL; + LOG_ERROR("query->constraint was NULL\n"); + FUNC_LEAVE(FAIL); } obj_reg = PDC_Server_get_obj_region_query(query->constraint->obj_id); if (obj_reg == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: cannot find region from object!\n", pdc_server_rank_g); + LOG_ERROR("Cannot find region from object\n"); } else query->constraint->storage_region_list_head = obj_reg->region_list_head; - return SUCCEED; + FUNC_LEAVE(SUCCEED); } static perr_t PDC_Server_send_nhits_to_server(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; send_nhits_t in; hg_handle_t handle; int server_id; - FUNC_ENTER(NULL); - server_id = task->manager; - if (server_id >= pdc_server_size_g) { - LOG_ERROR("==PDC_SERVER[%d]: server_id %d invalid!\n", pdc_server_rank_g, server_id); - ret_value = FAIL; - goto done; - } + if (server_id >= pdc_server_size_g) + PGOTO_ERROR(FAIL, "server_id %d invalid", server_id); - if (pdc_remote_server_info_g == NULL) { - - LOG_ERROR("==PDC_SERVER[%d]: pdc_remote_server_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (pdc_remote_server_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_remote_server_info_g was NULL"); if (pdc_remote_server_info_g[server_id].addr_valid == 0) { ret_value = PDC_Server_lookup_server_id(server_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup failed"); } hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, send_nhits_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); in.query_id = task->query_id; in.nhits = task->query->sel->nhits; hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); @@ -7504,6 +6941,8 @@ PDC_Server_send_nhits_to_server(query_task_t *task) static perr_t PDC_Server_send_nhits_to_client(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; @@ -7511,50 +6950,32 @@ PDC_Server_send_nhits_to_client(query_task_t *task) hg_handle_t handle; int client_id; - FUNC_ENTER(NULL); - client_id = task->client_id; - if (client_id >= pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: client_id %d invalid!\n", pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; - } + if (client_id >= pdc_client_num_g) + PGOTO_ERROR(FAIL, "client_id %d invalid", client_id); - if (pdc_client_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_client_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (pdc_client_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_client_info_g was NULL"); if (pdc_client_info_g[client_id].addr_valid == 0) { ret_value = PDC_Server_lookup_client(client_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_client failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_client failed"); } hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, send_nhits_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); // Fill input structure in.nhits = task->nhits; in.query_id = task->query_id; - LOG_INFO("==PDC_SERVER[%d]: sending %" PRIu64 " nhits to client!\n", pdc_server_rank_g, in.nhits); - - fflush(stdout); + LOG_INFO("Sending %" PRIu64 " nhits to client\n", in.nhits); hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); @@ -7565,6 +6986,8 @@ PDC_Server_send_nhits_to_client(query_task_t *task) hg_return_t PDC_recv_nhits(const struct hg_cb_info *callback_info) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; send_nhits_t *in = (send_nhits_t *)callback_info->arg; query_task_t *task_elt; @@ -7579,7 +7002,7 @@ PDC_recv_nhits(const struct hg_cb_info *callback_info) } if (task_elt == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Invalid task ID!\n", pdc_server_rank_g); + LOG_ERROR("Invalid task ID\n"); task_elt = query_task_list_head_g; } @@ -7587,14 +7010,16 @@ PDC_recv_nhits(const struct hg_cb_info *callback_info) if (task_elt && task_elt->n_recv >= task_elt->n_sent_server) PDC_Server_send_nhits_to_client(task_elt); - free(in); + in = (send_nhits_t *)PDC_free(in); - return ret; + FUNC_LEAVE(ret); } static perr_t PDC_Server_send_coords_to_client(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle; @@ -7604,28 +7029,17 @@ PDC_Server_send_coords_to_client(query_task_t *task) void * buf; int client_id; - FUNC_ENTER(NULL); - client_id = task->client_id; - if (client_id >= pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: client_id %d invalid!\n", pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; - } + if (client_id >= pdc_client_num_g) + PGOTO_ERROR(FAIL, "client_id %d invalid", client_id); - if (pdc_client_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_client_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (pdc_client_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_client_info_g was NULL"); if (pdc_client_info_g[client_id].addr_valid == 0) { ret_value = PDC_Server_lookup_client(client_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_client failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_client failed"); } if (pdc_server_size_g == 1) { @@ -7643,11 +7057,8 @@ PDC_Server_send_coords_to_client(query_task_t *task) if (in.cnt > 0) { hg_ret = HG_Bulk_create(hg_class_g, 1, &buf, &buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); } in.seq_id = task->query_id; @@ -7656,17 +7067,12 @@ PDC_Server_send_coords_to_client(query_task_t *task) in.bulk_handle = bulk_handle; hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, send_bulk_rpc_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); @@ -7677,6 +7083,8 @@ PDC_Server_send_coords_to_client(query_task_t *task) static perr_t PDC_Server_send_coords_to_server(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle; @@ -7686,40 +7094,24 @@ PDC_Server_send_coords_to_server(query_task_t *task) void * buf; int server_id; - FUNC_ENTER(NULL); - server_id = task->manager; - if (server_id >= pdc_server_size_g) { - LOG_ERROR("==PDC_SERVER[%d]: server_id %d invalid!\n", pdc_server_rank_g, server_id); - ret_value = FAIL; - goto done; - } - - if (pdc_remote_server_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_server_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - - goto done; - } + if (server_id >= pdc_server_size_g) + PGOTO_ERROR(FAIL, "server_id %d invalid", server_id); + if (pdc_remote_server_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_server_info_g was NULL"); if (pdc_remote_server_info_g[server_id].addr_valid == 0) { ret_value = PDC_Server_lookup_server_id(server_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_server_id failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_server_id failed"); } if (task->query->sel->nhits > 0) { buf = task->query->sel->coords; buf_sizes = task->query->sel->nhits * sizeof(uint64_t) * task->ndim; hg_ret = HG_Bulk_create(hg_class_g, 1, &buf, &buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); } // Fill input structure @@ -7733,16 +7125,12 @@ PDC_Server_send_coords_to_server(query_task_t *task) hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, send_bulk_rpc_register_id_g, &handle); if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "Error with HG_Create"); } hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); @@ -7752,37 +7140,40 @@ PDC_Server_send_coords_to_server(query_task_t *task) pdc_query_constraint_t * PDC_Server_get_constraint_from_query(pdc_query_t *query, uint64_t obj_id) { + FUNC_ENTER(NULL); + pdc_query_constraint_t *constraint; if (query == NULL) - return NULL; + FUNC_LEAVE(NULL); if (query->constraint && query->constraint->obj_id == obj_id) - return query->constraint; + FUNC_LEAVE(query->constraint); constraint = PDC_Server_get_constraint_from_query(query->left, obj_id); if (constraint != NULL) - return constraint; + FUNC_LEAVE(constraint); constraint = PDC_Server_get_constraint_from_query(query->left, obj_id); if (constraint != NULL) - return constraint; + FUNC_LEAVE(constraint); - return NULL; + FUNC_LEAVE(NULL); } uint64_t coord_to_offset(size_t ndim, uint64_t *coord, uint64_t *start, uint64_t *count, size_t unit_size) { + FUNC_ENTER(NULL); + uint64_t off = 0; if (ndim == 0 || coord == NULL || start == NULL || count == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: input NULL!\n", pdc_server_rank_g); - return -1; + LOG_ERROR("Input NULL\n"); + FUNC_LEAVE(-1); } - if (ndim > 3) { - LOG_ERROR("==PDC_SERVER[%d]: cannot handle dim > 3!\n", pdc_server_rank_g); - return 0; + LOG_ERROR("Cannot handle dim > 3\n"); + FUNC_LEAVE(0); } if (ndim == 3) @@ -7792,31 +7183,36 @@ coord_to_offset(size_t ndim, uint64_t *coord, uint64_t *start, uint64_t *count, off += (coord[0] * unit_size - start[0]); - return off; + FUNC_LEAVE(off); } int is_coord_in_region(int ndim, uint64_t *coord, size_t unit_size, region_list_t *region) { + FUNC_ENTER(NULL); + int i; if (ndim == 0 || coord == NULL || region == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: input NULL!\n", pdc_server_rank_g); - return -1; + LOG_ERROR("Input NULL"); + FUNC_LEAVE(-1); } for (i = 0; i < ndim; i++) { if (coord[i] * unit_size < region->start[i] || coord[i] * unit_size > region->start[i] + region->count[i]) { - return -1; + FUNC_LEAVE(-1); } } - return 1; + + FUNC_LEAVE(1); } perr_t PDC_send_data_to_client(int client_id, void *buf, size_t ndim, size_t unit_size, uint64_t count, int id, int client_seq_id) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle; @@ -7824,38 +7220,23 @@ PDC_send_data_to_client(int client_id, void *buf, size_t ndim, size_t unit_size, bulk_rpc_in_t in; hg_size_t buf_sizes; - FUNC_ENTER(NULL); - - if (client_id >= pdc_client_num_g) { - LOG_ERROR("==PDC_SERVER[%d]: client_id %d invalid!\n", pdc_server_rank_g, client_id); - ret_value = FAIL; - goto done; - } - - if (pdc_client_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_client_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (client_id >= pdc_client_num_g) + PGOTO_ERROR(FAIL, "client_id %d invalid", client_id); + if (pdc_client_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_client_info_g was NULL"); if (pdc_client_info_g[client_id].addr_valid == 0) { ret_value = PDC_Server_lookup_client(client_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_client failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_client failed"); } buf_sizes = count * unit_size; if (buf != NULL && buf_sizes != 0) { hg_ret = HG_Bulk_create(hg_class_g, 1, &buf, &buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); } in.ndim = ndim; @@ -7867,17 +7248,12 @@ PDC_send_data_to_client(int client_id, void *buf, size_t ndim, size_t unit_size, in.bulk_handle = bulk_handle; hg_ret = HG_Create(hg_context_g, pdc_client_info_g[client_id].addr, send_bulk_rpc_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); @@ -7889,8 +7265,10 @@ PDC_send_data_to_client(int client_id, void *buf, size_t ndim, size_t unit_size, hg_return_t PDC_Server_read_coords(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; - query_task_t * task = (query_task_t *)callback_info->arg; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; + query_task_t * task = (query_task_t *)callback_info->arg; pdc_query_constraint_t *constraint; region_list_t * storage_region_head, *region_elt, *cache_region; size_t ndim, unit_size; @@ -7903,12 +7281,11 @@ PDC_Server_read_coords(const struct hg_cb_info *callback_info) ndim = storage_region_head->ndim; unit_size = PDC_get_var_type_size(constraint->type); my_size = task->my_nread_coords * unit_size; - task->my_data = malloc(my_size); + task->my_data = PDC_malloc(my_size); if (NULL == task->my_data) { - LOG_ERROR("==PDC_SERVER[%d]: error allocating %" PRIu64 " bytes for data read!\n", - pdc_server_rank_g, task->my_nread_coords * unit_size); - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Eror allocating %" PRIu64 " bytes for data read", + task->my_nread_coords * unit_size); } data_off = 0; @@ -7925,13 +7302,12 @@ PDC_Server_read_coords(const struct hg_cb_info *callback_info) if (cache_region->is_io_done != 1) { PDC_Server_data_read_to_buf_1_region(cache_region); } - /* float *tmp = cache_region->buf + buf_off; */ memcpy(task->my_data + data_off, cache_region->buf + buf_off, unit_size); data_off += unit_size; break; } } - } // End for + } PDC_send_data_to_client(task->client_id, task->my_data, ndim, unit_size, task->my_nread_coords, task->query_id, task->client_seq_id); @@ -7939,23 +7315,20 @@ PDC_Server_read_coords(const struct hg_cb_info *callback_info) else { // Requested object is not part of query, need to find their storage data and then read from // storage - - LOG_INFO("==PDC_SERVER[%d]: Requested object is not here, need to find its storage data!\n", - pdc_server_rank_g); - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Requested object is not here, need to find its storage data"); } done: - fflush(stdout); - - return ret; + FUNC_LEAVE(ret_value); } // Receive coords from other servers hg_return_t PDC_recv_read_coords(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; hg_bulk_t local_bulk_handle = callback_info->info.bulk.local_handle; struct bulk_args_t *bulk_args = (struct bulk_args_t *)callback_info->arg; query_task_t * task_elt = NULL; @@ -7968,10 +7341,8 @@ PDC_recv_read_coords(const struct hg_cb_info *callback_info) out.ret = 1; if (callback_info->ret != HG_SUCCESS) { - // HG_LOG_ERROR("Error in callback"); - ret = HG_PROTOCOL_ERROR; out.ret = -1; - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Error with callback_info->ret"); } else { nhits = bulk_args->cnt; @@ -7981,23 +7352,21 @@ PDC_recv_read_coords(const struct hg_cb_info *callback_info) origin = bulk_args->origin; obj_id = bulk_args->obj_id; - if (nhits == 0) { - LOG_ERROR("==PDC_SERVER[%d]: received 0 read coords!\n", pdc_server_rank_g); - goto done; - } + if (nhits == 0) + PGOTO_ERROR(HG_OTHER_ERROR, "Received 0 read coords"); if (nhits * ndim * sizeof(uint64_t) != bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: receive buf size not expected %" PRIu64 " / %zu!\n", - pdc_server_rank_g, nhits * ndim * sizeof(uint64_t), bulk_args->nbytes); + PGOTO_ERROR(HG_OTHER_ERROR, "Receive buf size not expected %" PRIu64 " / %zu", + nhits * ndim * sizeof(uint64_t), bulk_args->nbytes); } - ret = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&buf, - NULL, NULL); + ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, + (void **)&buf, NULL, NULL); DL_FOREACH(query_task_list_head_g, task_elt) { if (task_elt->query_id == query_id) { - task_elt->my_read_coords = (uint64_t *)malloc(bulk_args->nbytes); + task_elt->my_read_coords = (uint64_t *)PDC_malloc(bulk_args->nbytes); memcpy(task_elt->my_read_coords, buf, bulk_args->nbytes); task_elt->my_read_obj_id = obj_id; @@ -8008,37 +7377,34 @@ PDC_recv_read_coords(const struct hg_cb_info *callback_info) } } - if (task_elt == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Invalid task ID %d!\n", pdc_server_rank_g, query_id); - goto done; - } - LOG_ERROR("==PDC_SERVER[%d]: received read coords from server %d!\n", pdc_server_rank_g, origin); - } // End else + if (task_elt == NULL) + PGOTO_ERROR(HG_OTHER_ERROR, "Invalid task ID %d", query_id); + } done: - ret = HG_Bulk_free(local_bulk_handle); - if (ret != HG_SUCCESS) { + ret_value = HG_Bulk_free(local_bulk_handle); + if (ret_value != HG_SUCCESS) { LOG_ERROR("Could not free HG bulk handle\n"); - return ret; + FUNC_LEAVE(ret_value); } - - ret = HG_Respond(bulk_args->handle, PDC_Server_read_coords, task_elt, &out); - if (ret != HG_SUCCESS) + ret_value = HG_Respond(bulk_args->handle, PDC_Server_read_coords, task_elt, &out); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not respond\n"); - - ret = HG_Destroy(bulk_args->handle); - if (ret != HG_SUCCESS) + ret_value = HG_Destroy(bulk_args->handle); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not destroy handle\n"); - free(bulk_args); - return ret; + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); + FUNC_LEAVE(ret_value); } // Receive coords from other servers hg_return_t PDC_recv_coords(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; hg_bulk_t local_bulk_handle = callback_info->info.bulk.local_handle; struct bulk_args_t *bulk_args = (struct bulk_args_t *)callback_info->arg; query_task_t * task_elt; @@ -8052,10 +7418,8 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) out.ret = 1; if (callback_info->ret != HG_SUCCESS) { - // HG_LOG_ERROR("Error in callback"); - ret = HG_PROTOCOL_ERROR; out.ret = -1; - goto done; + PGOTO_ERROR(HG_PROTOCOL_ERROR, "Error with callback_info->ret"); } else { nhits = bulk_args->cnt; @@ -8066,12 +7430,12 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) if (nhits > 0) { if (nhits * unit_size * ndim != bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: receive size is unexpected %" PRIu64 " / %" PRIu64 "!\n", - pdc_server_rank_g, (uint64_t)nhits * unit_size * ndim, (uint64_t)bulk_args->nbytes); + LOG_ERROR("Received size is unexpected %" PRIu64 " / %" PRIu64 "\n", + (uint64_t)nhits * unit_size * ndim, (uint64_t)bulk_args->nbytes); } - ret = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&buf, - NULL, NULL); + ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, + (void **)&buf, NULL, NULL); } found_task = 0; @@ -8084,19 +7448,19 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) } if (found_task == 0) { // Need to create a task and insert to global list - task_elt = (query_task_t *)calloc(1, sizeof(query_task_t)); + task_elt = (query_task_t *)PDC_calloc(1, sizeof(query_task_t)); task_elt->query_id = query_id; DL_APPEND(query_task_list_head_g, task_elt); } if (NULL == task_elt->coords_arr) - task_elt->coords_arr = (uint64_t **)calloc(pdc_server_size_g, sizeof(uint64_t *)); + task_elt->coords_arr = (uint64_t **)PDC_calloc(pdc_server_size_g, sizeof(uint64_t *)); if (NULL == task_elt->n_hits_from_server) - task_elt->n_hits_from_server = (uint64_t *)calloc(pdc_server_size_g, sizeof(uint64_t)); + task_elt->n_hits_from_server = (uint64_t *)PDC_calloc(pdc_server_size_g, sizeof(uint64_t)); if (nhits > 0) { - task_elt->coords_arr[origin] = (uint64_t *)malloc(bulk_args->nbytes); + task_elt->coords_arr[origin] = (uint64_t *)PDC_malloc(bulk_args->nbytes); memcpy(task_elt->coords_arr[origin], buf, bulk_args->nbytes); task_elt->n_hits_from_server[origin] = nhits; } @@ -8110,53 +7474,53 @@ PDC_recv_coords(const struct hg_cb_info *callback_info) total_hits += task_elt->n_hits_from_server[i]; if (total_hits > 0) { - task_elt->coords = (uint64_t *)malloc(total_hits * unit_size); + task_elt->coords = (uint64_t *)PDC_malloc(total_hits * unit_size); uint64_t off = 0, size; for (i = 0; i < pdc_server_size_g; i++) { if (task_elt->coords_arr[i] != NULL) { size = task_elt->n_hits_from_server[i] * unit_size; memcpy(task_elt->coords + off, task_elt->coords_arr[i], size); - free(task_elt->coords_arr[i]); + task_elt->coords_arr[i] = (uint64_t *)PDC_free(task_elt->coords_arr[i]); task_elt->coords_arr[i] = NULL; off += task_elt->n_hits_from_server[i]; } } - free(task_elt->coords_arr); + task_elt->coords_arr = (uint64_t **)PDC_free(task_elt->coords_arr); task_elt->coords_arr = NULL; } - LOG_INFO("==PDC_SERVER[%d]: received all %d query results, send to client!\n", pdc_server_rank_g, - task_elt->n_recv); + LOG_INFO("Received all %d query results, send to client\n", task_elt->n_recv); PDC_Server_send_coords_to_client(task_elt); } } // End else done: - fflush(stdout); if (nhits > 0) { - ret = HG_Bulk_free(local_bulk_handle); - if (ret != HG_SUCCESS) { + ret_value = HG_Bulk_free(local_bulk_handle); + if (ret_value != HG_SUCCESS) { LOG_ERROR("Could not free HG bulk handle\n"); - return ret; + return ret_value; } } - ret = HG_Respond(bulk_args->handle, NULL, NULL, &out); - if (ret != HG_SUCCESS) + ret_value = HG_Respond(bulk_args->handle, NULL, NULL, &out); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not respond\n"); - ret = HG_Destroy(bulk_args->handle); - if (ret != HG_SUCCESS) + ret_value = HG_Destroy(bulk_args->handle); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not destroy handle\n"); - free(bulk_args); + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); - return ret; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_send_query_result_to_client(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (task->get_op == PDC_QUERY_GET_NHITS) { @@ -8167,63 +7531,51 @@ PDC_Server_send_query_result_to_client(query_task_t *task) } else if (task->get_op == PDC_QUERY_GET_DATA) { } - else { - LOG_ERROR("==PDC_SERVER[%d]: Invalid get_op type!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + else + PGOTO_ERROR(FAIL, "Invalid get_op type"); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: error sending query result to client!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error sending query result to client"); done: - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_send_query_result_to_manager(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; if (task->get_op == PDC_QUERY_GET_NHITS) { ret_value = PDC_Server_send_nhits_to_server(task); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: error with PDC_Server_send_nhits_to_server!\n", pdc_server_rank_g); - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_send_nhits_to_server"); } else if (task->get_op == PDC_QUERY_GET_SEL) { ret_value = PDC_Server_send_coords_to_server(task); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: error with PDC_Server_send_coords_to_server!\n", pdc_server_rank_g); - goto done; - } - } - else { - LOG_ERROR("==PDC_SERVER[%d]: Invalid get_op type!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "Error with PDC_Server_send_coords_to_server"); } + else + PGOTO_ERROR(FAIL, "Invalid get_op type"); - // TODO: free the task_list at close time + LOG_INFO("Sent query results to manager %d\n", task->manager); - LOG_ERROR("==PDC_SERVER[%d]: sent query results to manager %d!\n", pdc_server_rank_g, task->manager); done: - fflush(stdout); - - return ret_value; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_do_query(query_task_t *task) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; - if (task == NULL || task->is_done == 1) { - goto done; - } + if (task == NULL || task->is_done == 1) + PGOTO_DONE(ret_value); #ifdef ENABLE_TIMING struct timeval pdc_timer_start, pdc_timer_end; @@ -8237,7 +7589,7 @@ PDC_Server_do_query(query_task_t *task) if (task->get_op == PDC_QUERY_GET_NHITS) { if (task->query && task->query->sel && task->query->sel->coords_alloc > 0 && task->query->sel->coords) { - free(task->query->sel->coords); + task->query->sel->coords = (uint64_t *)PDC_free(task->query->sel->coords); task->query->sel->coords = 0; task->query->sel->coords_alloc = 0; } @@ -8246,26 +7598,27 @@ PDC_Server_do_query(query_task_t *task) #ifdef ENABLE_TIMING gettimeofday(&pdc_timer_end, 0); double query_process_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - LOG_INFO("==PDC_SERVER[%d]: query processing time %.4fs\n", pdc_server_rank_g, query_process_time); + LOG_INFO("Query processing time %.4fs\n", query_process_time); #endif task->is_done = 1; done: - return ret_value; + FUNC_LEAVE(ret_value); } perr_t add_storage_region_to_buf(void **in_buf, uint64_t *buf_alloc, uint64_t *buf_off, const region_list_t *region) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; void * buf = *in_buf; uint64_t my_size, tmp_size; if (in_buf == NULL || *in_buf == NULL || region == NULL || buf_alloc == NULL || buf_off == NULL || region->storage_location[0] == '\0') { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! NULL input!\n", pdc_server_rank_g); - goto done; + PGOTO_ERROR(FAIL, "Error with input paramters"); } my_size = 4 + strlen(region->storage_location) + 1 + sizeof(region_info_transfer_t) + 20; @@ -8288,19 +7641,11 @@ add_storage_region_to_buf(void **in_buf, uint64_t *buf_alloc, uint64_t *buf_off, region_info_transfer_t *region_info = (region_info_transfer_t *)(buf + *buf_off); region_info->ndim = region->ndim; - if (region->ndim >= 3) { - region_info->start_2 = region->start[2]; - region_info->count_2 = region->count[2]; - } - if (region->ndim >= 2) { - region_info->start_1 = region->start[1]; - region_info->count_1 = region->count[1]; - } - region_info->start_0 = region->start[0]; - region_info->count_0 = region->count[0]; - (*buf_off) += sizeof(region_info_transfer_t); + PDC_copy_region_desc(region->count, region_info->count, region_info->ndim, region_info->ndim); + PDC_copy_region_desc(region->start, region_info->start, region_info->ndim, region_info->ndim); + (*buf_off) += sizeof(region_info_transfer_t); uint64_t *offset = (uint64_t *)(buf + *buf_off); *offset = region->offset; (*buf_off) += sizeof(uint64_t); @@ -8337,12 +7682,14 @@ add_storage_region_to_buf(void **in_buf, uint64_t *buf_alloc, uint64_t *buf_off, } done: - return ret_value; + FUNC_LEAVE(ret_value); } perr_t add_to_cache_storage_region(uint64_t obj_id, region_list_t *region) { + FUNC_ENTER(NULL); + cache_storage_region_t *elt, *new_cache_region; int found = 0; @@ -8355,7 +7702,7 @@ add_to_cache_storage_region(uint64_t obj_id, region_list_t *region) } if (found == 0) { - new_cache_region = (cache_storage_region_t *)calloc(sizeof(cache_storage_region_t), 1); + new_cache_region = (cache_storage_region_t *)PDC_calloc(sizeof(cache_storage_region_t), 1); new_cache_region->obj_id = obj_id; DL_PREPEND(cache_storage_region_head_g, new_cache_region); DL_PREPEND(new_cache_region->storage_region_head, region); @@ -8364,73 +7711,50 @@ add_to_cache_storage_region(uint64_t obj_id, region_list_t *region) DL_PREPEND(elt->storage_region_head, region); } - return SUCCEED; + FUNC_LEAVE(SUCCEED); } perr_t PDC_send_query_metadata_bulk(bulk_rpc_in_t *in, void *buf, uint64_t buf_sizes, int server_id) { + FUNC_ENTER(NULL); perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle = NULL; hg_bulk_t bulk_handle = NULL; - FUNC_ENTER(NULL); - - if (buf == NULL || buf_sizes == 0 || server_id < 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR with input!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (buf == NULL || buf_sizes == 0 || server_id < 0) + PGOTO_ERROR(FAIL, "Error with input"); - if (server_id >= (int32_t)pdc_server_size_g) { - LOG_ERROR("==PDC_SERVER[%d]: server_id %d invalid!\n", pdc_server_rank_g, server_id); - ret_value = FAIL; - goto done; - } + if (server_id >= (int32_t)pdc_server_size_g) + PGOTO_ERROR(FAIL, "server_id %d invalid", server_id); - if (pdc_remote_server_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_server_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (pdc_remote_server_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_server_info_g is NULL"); if (pdc_remote_server_info_g[server_id].addr_valid == 0) { ret_value = PDC_Server_lookup_server_id(server_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_server_id failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_server_id failed"); } hg_ret = HG_Bulk_create(hg_class_g, 1, &buf, &buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); in->bulk_handle = bulk_handle; hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, send_bulk_rpc_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_DONE(FAIL); - LOG_INFO("==PDC_SERVER[%d]: sending %" PRIu64 " meta to server %d!\n", pdc_server_rank_g, in->cnt, - server_id); - fflush(stdout); + LOG_INFO("Sending %" PRIu64 " meta to server %d\n", in->cnt, server_id); hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: if (handle) @@ -8442,8 +7766,10 @@ PDC_send_query_metadata_bulk(bulk_rpc_in_t *in, void *buf, uint64_t buf_sizes, i void attach_storage_region_to_query(pdc_query_t *query, region_list_t *region) { + FUNC_ENTER(NULL); + if (NULL == query) - return; + FUNC_LEAVE_VOID(); attach_storage_region_to_query(query->left, region); attach_storage_region_to_query(query->right, region); @@ -8455,12 +7781,16 @@ attach_storage_region_to_query(pdc_query_t *query, region_list_t *region) query->constraint->storage_region_list_head = region; } } + + FUNC_LEAVE_VOID(); } void PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, int *obj_idx, uint64_t *obj_ids, int op) { + FUNC_ENTER(NULL); + pdc_metadata_t *meta = NULL; int i, server_id, count, avg_count, nsent, nsent_server; region_list_t * elt, *new_region = NULL; @@ -8472,7 +7802,7 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in // there can be multiple pass to the same object, we only need to send it once for (i = 0; i < *obj_idx; i++) { if (obj_id == obj_ids[i]) { - goto done; + PGOTO_DONE_VOID; } } @@ -8492,10 +7822,9 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in } if (meta->all_storage_region_distributed == 1) - goto done; + PGOTO_DONE_VOID; - LOG_INFO("==PDC_SERVER[%d]: found metadata for %" PRIu64 ", %d regions!\n", pdc_server_rank_g, obj_id, - count); + LOG_INFO("Found metadata for %" PRIu64 ", %d regions\n", obj_id, count); // Need to distribute storage metadata to other servers avg_count = ceil((1.0 * count) / task->n_sent_server); @@ -8505,7 +7834,7 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in task->n_sent_server = ceil((1.0 * count) / avg_count); buf_alloc = 4096 * avg_count; - region_bulk_buf = calloc(buf_alloc, 1); + region_bulk_buf = PDC_calloc(buf_alloc, 1); memset(&header, 0, sizeof(bulk_rpc_in_t)); header.seq_id = task->query_id; @@ -8527,15 +7856,12 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in server_id %= pdc_server_size_g; } - if (nsent > count) { - LOG_ERROR("==PDC_SERVER[%d]: Error sending more storage meta (%d) than expected (%d)!\n", - pdc_server_rank_g, nsent, count); - fflush(stdout); - } + if (nsent > count) + LOG_ERROR("Error sending more storage meta (%d) than expected (%d)\n", nsent, count); if (server_id == pdc_server_rank_g) { // If needs to send to self, make a copy of the storage metadata - new_region = (region_list_t *)calloc(1, sizeof(region_list_t)); + new_region = (region_list_t *)PDC_calloc(1, sizeof(region_list_t)); PDC_region_list_t_deep_cp(elt, new_region); add_to_cache_storage_region(obj_id, new_region); @@ -8557,7 +7883,7 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in // new buf for another server buf_off = 0; - region_bulk_buf = calloc(buf_alloc, 1); + region_bulk_buf = PDC_calloc(buf_alloc, 1); } else { task->n_recv_obj++; @@ -8571,22 +7897,21 @@ PDC_Server_distribute_query_storage_info(query_task_t *task, uint64_t obj_id, in } } // End DL_FOREACH - LOG_INFO("==PDC_SERVER[%d]: distributed all storage meta of %" PRIu64 "!\n", pdc_server_rank_g, - obj_id); - fflush(stdout); + LOG_INFO("Distributed all storage meta of %" PRIu64 "\n", obj_id); meta->all_storage_region_distributed = 1; } // end if (NULL != meta) done: - fflush(stdout); - return; + FUNC_LEAVE_VOID(); } void PDC_Server_distribute_query_workload(query_task_t *task, pdc_query_t *query, int *obj_idx, uint64_t *obj_ids, int op) { + FUNC_ENTER(NULL); + // Postorder tranversal if (NULL != query) { PDC_Server_distribute_query_workload(task, query->left, obj_idx, obj_ids, op); @@ -8596,13 +7921,16 @@ PDC_Server_distribute_query_workload(query_task_t *task, pdc_query_t *query, int if (NULL == query->left && NULL == query->right) PDC_Server_distribute_query_storage_info(task, query->constraint->obj_id, obj_idx, obj_ids, op); } - return; + + FUNC_LEAVE_VOID(); } hg_return_t PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; hg_bulk_t local_bulk_handle = callback_info->info.bulk.local_handle; struct bulk_args_t * bulk_args = (struct bulk_args_t *)callback_info->arg; void * buf; @@ -8618,36 +7946,28 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) pdc_int_ret_t out; out.ret = 1; - LOG_INFO("==PDC_SERVER[%d]: received %d query metadata from %d!\n", pdc_server_rank_g, bulk_args->cnt, - bulk_args->origin); - fflush(stdout); + LOG_INFO("Received %d query metadata from %d\n", bulk_args->cnt, bulk_args->origin); // TODO: test if (callback_info->ret != HG_SUCCESS) { - // HG_LOG_ERROR("Error in callback"); - ret = HG_PROTOCOL_ERROR; out.ret = -1; - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Error with callback_info->ret"); } else { nregion = bulk_args->cnt; - if (nregion <= 0) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! 0 query metadata received!\n", pdc_server_rank_g); - goto done; - } - ret = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, (void **)&buf, - NULL, NULL); + if (nregion <= 0) + PGOTO_ERROR(HG_OTHER_ERROR, "0 query metadata received"); + ret_value = HG_Bulk_access(local_bulk_handle, 0, bulk_args->nbytes, HG_BULK_READWRITE, 1, + (void **)&buf, NULL, NULL); - regions = (region_list_t *)calloc(nregion, sizeof(region_list_t)); + regions = (region_list_t *)PDC_calloc(nregion, sizeof(region_list_t)); buf_off = 0; for (i = 0; i < nregion; i++) { - if (buf_off > bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! buf overflow %d! 1\n", pdc_server_rank_g, i); - fflush(stdout); - } + if (buf_off > bulk_args->nbytes) + LOG_ERROR("buf overflow %d\n", i); loc_len_ptr = (int *)(buf + buf_off); buf_off += sizeof(int); @@ -8670,10 +7990,8 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) has_hist_ptr = (int *)(buf + buf_off); buf_off += sizeof(int); - if (buf_off > bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! buf overflow %d!2\n", pdc_server_rank_g, i); - fflush(stdout); - } + if (buf_off > bulk_args->nbytes) + LOG_ERROR("buf overflow %d!2\n", i); if (*has_hist_ptr == 1) { hist_ptr = (pdc_histogram_t *)(buf + buf_off); @@ -8683,27 +8001,23 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) hist_ptr->bin = (uint64_t *)(buf + buf_off); buf_off += (hist_ptr->nbin * sizeof(uint64_t)); - regions[i].region_hist = (pdc_histogram_t *)calloc(1, sizeof(pdc_histogram_t)); + regions[i].region_hist = (pdc_histogram_t *)PDC_calloc(1, sizeof(pdc_histogram_t)); PDC_copy_hist(regions[i].region_hist, hist_ptr); if (regions[i].region_hist->nbin == 0 || regions[i].region_hist->nbin > 1000) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR received hist nbin=%d\n", pdc_server_rank_g, - regions[i].region_hist->nbin); + LOG_ERROR("Received hist nbin=%d", regions[i].region_hist->nbin); } } - if (buf_off > bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! buf overflow %d! 3\n", pdc_server_rank_g, i); - fflush(stdout); - } + if (buf_off > bulk_args->nbytes) + LOG_ERROR("buf overflow %d\n", i); + regions[i].obj_id = bulk_args->obj_id; regions[i].ndim = bulk_args->ndim; } - if (buf_off > bulk_args->nbytes) { - LOG_ERROR("==PDC_SERVER[%d]: ERROR! buf overflow after!\n", pdc_server_rank_g); - fflush(stdout); - } + if (buf_off > bulk_args->nbytes) + LOG_ERROR("buf overflow after\n"); found_task = 0; DL_FOREACH(query_task_list_head_g, task_elt) @@ -8717,7 +8031,7 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) if (found_task == 0) { // Need to create a task and insert to global list - task_elt = (query_task_t *)calloc(1, sizeof(query_task_t)); + task_elt = (query_task_t *)PDC_calloc(1, sizeof(query_task_t)); task_elt->query_id = bulk_args->query_id; task_elt->ndim = bulk_args->ndim; @@ -8731,35 +8045,31 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) add_to_cache_storage_region(bulk_args->obj_id, ®ions[i]); if (bulk_args->op == PDC_RECV_REGION_DO_READ) { - goto done; + PGOTO_DONE(ret_value); } attach_storage_region_to_query(query, ®ions[nregion - 1]); } // End else done: - ret = HG_Bulk_free(local_bulk_handle); - if (ret != HG_SUCCESS) { + ret_value = HG_Bulk_free(local_bulk_handle); + if (ret_value != HG_SUCCESS) { LOG_ERROR("Could not free HG bulk handle\n"); - return ret; + FUNC_LEAVE(ret_value); } - - ret = HG_Respond(bulk_args->handle, NULL, NULL, &out); - if (ret != HG_SUCCESS) + ret_value = HG_Respond(bulk_args->handle, NULL, NULL, &out); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not respond\n"); - - ret = HG_Destroy(bulk_args->handle); - if (ret != HG_SUCCESS) + ret_value = HG_Destroy(bulk_args->handle); + if (ret_value != HG_SUCCESS) LOG_ERROR("Could not destroy handle\n"); - if (bulk_args->op == PDC_RECV_REGION_DO_READ) - return ret; - + FUNC_LEAVE(ret_value); if (bulk_args->origin == task_elt->prev_server_id || task_elt->prev_server_id == -1) { - uint64_t *obj_ids = (uint64_t *)calloc(pdc_server_size_g, sizeof(uint64_t)); + uint64_t *obj_ids = (uint64_t *)PDC_calloc(pdc_server_size_g, sizeof(uint64_t)); int obj_idx = 0; PDC_Server_distribute_query_workload(task_elt, query, &obj_idx, obj_ids, PDC_RECV_REGION_DO_QUERY); - free(obj_ids); + obj_ids = (uint64_t *)PDC_free(obj_ids); } int has_more = 0; @@ -8772,14 +8082,16 @@ PDC_recv_query_metadata_bulk(const struct hg_cb_info *callback_info) PDC_Server_send_query_result_to_manager(task_elt); } - free(bulk_args); - return ret; + bulk_args = (struct bulk_args_t *)PDC_free(bulk_args); + FUNC_LEAVE(ret_value); } hg_return_t PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; pdc_query_xfer_t *query_xfer = (pdc_query_xfer_t *)callback_info->arg; int obj_idx = 0; uint64_t * obj_ids; @@ -8788,19 +8100,15 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) pdc_query_t * query; query = PDC_deserialize_query(query_xfer); - if (NULL == query) { - LOG_ERROR("==PDC_SERVER[%d]: deserialize query FAILED!\n", pdc_server_rank_g); - goto done; - } + if (NULL == query) + PGOTO_ERROR(HG_OTHER_ERROR, "Deserialize query FAILED"); - query->sel = (pdc_selection_t *)calloc(1, sizeof(pdc_selection_t)); + query->sel = (pdc_selection_t *)PDC_calloc(1, sizeof(pdc_selection_t)); query->sel->nhits = 0; query->sel->coords_alloc = 8192; - query->sel->coords = (uint64_t *)calloc(query->sel->coords_alloc, sizeof(uint64_t)); - if (NULL == query->sel->coords) { - LOG_ERROR("==PDC_SERVER[%d]: error with calloc!\n", pdc_server_rank_g); - goto done; - } + query->sel->coords = (uint64_t *)PDC_calloc(query->sel->coords_alloc, sizeof(uint64_t)); + if (NULL == query->sel->coords) + PGOTO_ERROR(HG_OTHER_ERROR, "Error with PDC_calloc"); // Attach the query sel to all query nodes PDC_query_visit_all_with_cb_arg(query, attach_sel_to_query, query->sel); @@ -8811,14 +8119,13 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) if (task_elt->query_id == query_xfer->query_id) { query_id_exist = 1; new_task = task_elt; - LOG_WARNING("==PDC_SERVER[%d]: query id already exist!\n", pdc_server_rank_g); - fflush(stdout); + LOG_WARNING("Query id already exist\n"); break; } } if (0 == query_id_exist) { - new_task = (query_task_t *)calloc(1, sizeof(query_task_t)); + new_task = (query_task_t *)PDC_calloc(1, sizeof(query_task_t)); DL_APPEND(query_task_list_head_g, new_task); } @@ -8827,15 +8134,14 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) new_task->manager = query_xfer->manager; new_task->query = query; new_task->n_unique_obj = query_xfer->n_unique_obj; - new_task->obj_ids = (uint64_t *)calloc(query_xfer->n_unique_obj, sizeof(uint64_t)); + new_task->obj_ids = (uint64_t *)PDC_calloc(query_xfer->n_unique_obj, sizeof(uint64_t)); new_task->get_op = query_xfer->get_op; new_task->region_constraint = (region_list_t *)query->region_constraint; new_task->next_server_id = query_xfer->next_server_id; new_task->prev_server_id = query_xfer->prev_server_id; if (is_debug_g == 1) { - LOG_INFO("==PDC_SERVER[%d]: appended new query task %d to list head\n", pdc_server_rank_g, - new_task->query_id); + LOG_INFO("Appended new query task %d to list head\n", new_task->query_id); } // find metadata of all queried objects and distribute to other servers @@ -8854,12 +8160,12 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) // Manager distributes data first if (pdc_server_rank_g == new_task->manager) { - obj_ids = (uint64_t *)calloc(query_xfer->n_unique_obj, sizeof(uint64_t)); + obj_ids = (uint64_t *)PDC_calloc(query_xfer->n_unique_obj, sizeof(uint64_t)); obj_idx = 0; PDC_Server_distribute_query_workload(new_task, query, &obj_idx, obj_ids, PDC_RECV_REGION_DO_QUERY); - free(obj_ids); - goto done; + obj_ids = (uint64_t *)PDC_free(obj_ids); + PGOTO_DONE(ret_value); } int has_more = 0; @@ -8867,7 +8173,6 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) if (has_more == 0) { // Process query PDC_Server_do_query(new_task); - // Send the result to manager PDC_Server_send_query_result_to_manager(new_task); } @@ -8876,15 +8181,16 @@ PDC_Server_recv_data_query(const struct hg_cb_info *callback_info) done: if (query_xfer) PDC_query_xfer_free(query_xfer); - fflush(stdout); - return ret; + FUNC_LEAVE(ret_value); } perr_t PDC_Server_send_read_coords_to_server(int server_id, uint64_t *coord, uint64_t ncoords, int ndim, int query_id, int client_seq_id, uint64_t obj_id, uint64_t total_hits) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; hg_return_t hg_ret; hg_handle_t handle; @@ -8893,37 +8199,21 @@ PDC_Server_send_read_coords_to_server(int server_id, uint64_t *coord, uint64_t n hg_size_t buf_sizes; void * buf; - FUNC_ENTER(NULL); - - if (server_id >= pdc_server_size_g) { - LOG_ERROR("==PDC_SERVER[%d]: server_id %d invalid!\n", pdc_server_rank_g, server_id); - ret_value = FAIL; - goto done; - } - - if (pdc_remote_server_info_g == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: pdc_server_info_g is NULL\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } - + if (server_id >= pdc_server_size_g) + PGOTO_ERROR(FAIL, "server_id %d invalid", server_id); + if (pdc_remote_server_info_g == NULL) + PGOTO_ERROR(FAIL, "pdc_server_info_g was NULL"); if (pdc_remote_server_info_g[server_id].addr_valid == 0) { ret_value = PDC_Server_lookup_server_id(server_id); - if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_SERVER[%d]: PDC_Server_lookup_server_id failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (ret_value != SUCCEED) + PGOTO_ERROR(FAIL, "PDC_Server_lookup_server_id failed"); } buf = coord; buf_sizes = ncoords * ndim * sizeof(uint64_t); hg_ret = HG_Bulk_create(hg_class_g, 1, &buf, &buf_sizes, HG_BULK_READ_ONLY, &bulk_handle); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("Could not create bulk data handle\n"); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Could not create bulk data handle"); // Fill input structure in.ndim = ndim; @@ -8938,27 +8228,24 @@ PDC_Server_send_read_coords_to_server(int server_id, uint64_t *coord, uint64_t n hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[server_id].addr, send_bulk_rpc_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); hg_ret = HG_Forward(handle, PDC_check_int_ret_cb, NULL, &in); - if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "HG_Forward failed"); done: HG_Destroy(handle); - return ret_value; + FUNC_LEAVE(ret_value); } static perr_t PDC_Server_send_query_obj_read_to_all_server(query_task_t *task, uint64_t obj_id) { + FUNC_ENTER(NULL); + hg_return_t hg_ret; perr_t ret_value = SUCCEED; int i; @@ -8976,33 +8263,29 @@ PDC_Server_send_query_obj_read_to_all_server(query_task_t *task, uint64_t obj_id hg_ret = HG_Create(hg_context_g, pdc_remote_server_info_g[i].addr, send_read_sel_obj_id_rpc_register_id_g, &handle); - if (hg_ret != HG_SUCCESS) { - ret_value = FAIL; - goto done; - } + if (hg_ret != HG_SUCCESS) + PGOTO_ERROR(FAIL, "Error with HG_Create"); hg_ret = HG_Forward(handle, NULL, NULL, &in); if (hg_ret != HG_SUCCESS) { - LOG_ERROR("==PDC_SERVER[%d]: HG_Forward failed!\n", pdc_server_rank_g); HG_Destroy(handle); - ret_value = FAIL; - goto done; + PGOTO_ERROR(FAIL, "HG_Forward failed"); } hg_ret = HG_Destroy(handle); } done: - fflush(stdout); - - return ret_value; + FUNC_LEAVE(ret_value); } hg_return_t PDC_Server_recv_read_sel_obj_data(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; - get_sel_data_rpc_in_t * in = (get_sel_data_rpc_in_t *)callback_info->arg; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; + get_sel_data_rpc_in_t * in = (get_sel_data_rpc_in_t *)callback_info->arg; query_task_t * task_elt, *task = NULL; uint64_t nhits, *coord, *coords = NULL, obj_id, buf_off, my_size, data_off, i; size_t ndim, unit_size; @@ -9020,19 +8303,16 @@ PDC_Server_recv_read_sel_obj_data(const struct hg_cb_info *callback_info) } if (NULL == task) { - LOG_ERROR("==PDC_SERVER[%d]: cannot find task id = %d, obj = %" PRIu64 "\n", pdc_server_rank_g, - in->query_id, in->obj_id); - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Cannot find task id = %d, obj = %" PRIu64, in->query_id, in->obj_id); } coords = task->query->sel->coords; nhits = task->query->sel->nhits; ndim = task->ndim; obj_id = in->obj_id; - // If I have not participated in previous query, just skip - if (NULL == coords) { - goto done; - } + // If we have not participated in previous query, just skip + if (NULL == coords) + PGOTO_DONE(ret_value); // Get storage region DL_FOREACH(cache_storage_region_head_g, cache_region_elt) @@ -9045,19 +8325,16 @@ PDC_Server_recv_read_sel_obj_data(const struct hg_cb_info *callback_info) } if (NULL == storage_region_head) { - LOG_ERROR("==PDC_SERVER[%d]: cannot find cached storage region query_id=%d, obj_id=%" PRIu64 "\n", - pdc_server_rank_g, in->query_id, in->obj_id); - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Cannot find cached storage region query_id=%d, obj_id=%" PRIu64, + in->query_id, in->obj_id); } ndim = storage_region_head->ndim; unit_size = PDC_get_var_type_size(data_type); my_size = nhits * unit_size; - task->my_data = malloc(my_size); + task->my_data = PDC_malloc(my_size); if (NULL == task->my_data) { - LOG_ERROR("==PDC_SERVER[%d]: error allocating %" PRIu64 " bytes for data read!\n", pdc_server_rank_g, - nhits * unit_size); - goto done; + PGOTO_ERROR(HG_OTHER_ERROR, "Error allocating %" PRIu64 " bytes for data read", nhits * unit_size); } // We will read task->coords, from obj_id @@ -9084,17 +8361,18 @@ PDC_Server_recv_read_sel_obj_data(const struct hg_cb_info *callback_info) // Send read data back to client PDC_send_data_to_client(task->client_id, task->my_data, ndim, unit_size, nhits, task->query_id, pdc_server_rank_g); -done: - fflush(stdout); - return ret; +done: + FUNC_LEAVE(ret_value); } hg_return_t PDC_Server_recv_get_sel_data(const struct hg_cb_info *callback_info) { - hg_return_t ret = HG_SUCCESS; - get_sel_data_rpc_in_t *in = (get_sel_data_rpc_in_t *)callback_info->arg; + FUNC_ENTER(NULL); + + hg_return_t ret_value = HG_SUCCESS; + get_sel_data_rpc_in_t *in = (get_sel_data_rpc_in_t *)callback_info->arg; query_task_t * task_elt, *task = NULL; pdc_metadata_t * meta; struct hg_cb_info fake_callback_info = {0}; @@ -9108,27 +8386,22 @@ PDC_Server_recv_get_sel_data(const struct hg_cb_info *callback_info) } } - if (NULL == task) { - LOG_ERROR("==PDC_SERVER[%d]: cannot find query task id=%d\n", pdc_server_rank_g, in->query_id); - goto done; - } + if (NULL == task) + PGOTO_ERROR(HG_OTHER_ERROR, "Cannot find query task id=%d\n", in->query_id); // Find metadata object meta = PDC_Server_get_obj_metadata(in->obj_id); - if (NULL == meta) { - LOG_ERROR("==PDC_SERVER[%d]: cannot find metadata object id=%" PRIu64 "\n", pdc_server_rank_g, - in->obj_id); - goto done; - } + if (NULL == meta) + PGOTO_ERROR(HG_OTHER_ERROR, "Cannot find metadata object id=%" PRIu64 "\n", in->obj_id); if (pdc_server_size_g != 1) { if (meta->all_storage_region_distributed != 1) { // Storage metadata have not been distributed - uint64_t *obj_ids = (uint64_t *)calloc(pdc_server_size_g, sizeof(uint64_t)); + uint64_t *obj_ids = (uint64_t *)PDC_calloc(pdc_server_size_g, sizeof(uint64_t)); int obj_idx = 0; PDC_Server_distribute_query_storage_info(task, in->obj_id, &obj_idx, obj_ids, PDC_RECV_REGION_DO_READ); - free(obj_ids); + obj_ids = (uint64_t *)PDC_free(obj_ids); } // Send query id and obj_id to other servers, as they have cached the corresponding coords PDC_Server_send_query_obj_read_to_all_server(task, in->obj_id); @@ -9147,6 +8420,7 @@ PDC_Server_recv_get_sel_data(const struct hg_cb_info *callback_info) done: if (in) - free(in); - return ret; + in = (get_sel_data_rpc_in_t *)PDC_free(in); + + FUNC_LEAVE(ret_value); } diff --git a/src/server/pdc_server_region/pdc_server_region_cache.c b/src/server/pdc_server_region/pdc_server_region_cache.c index f53a2237d..8344a1914 100644 --- a/src/server/pdc_server_region/pdc_server_region_cache.c +++ b/src/server/pdc_server_region/pdc_server_region_cache.c @@ -3,8 +3,6 @@ #include "pdc_timing.h" #include "pdc_logger.h" -/* #define TANG_DEBUG 1 */ - #ifdef PDC_SERVER_CACHE #ifdef PDC_SERVER_CACHE_MAX_GB @@ -47,6 +45,8 @@ static int pdc_idle_flush_time_g; int PDC_region_server_cache_init() { + FUNC_ENTER(NULL); + int server_rank = 0; char *p; @@ -73,7 +73,7 @@ PDC_region_server_cache_init() MPI_Comm_rank(MPI_COMM_WORLD, &server_rank); #endif if (server_rank == 0) - LOG_INFO("==PDC_SERVER[%d]: max cache size: %llu\n", server_rank, maximum_cache_size); + LOG_INFO("Max cache size: %llu\n", maximum_cache_size); obj_cache_list = NULL; obj_cache_list_end = NULL; @@ -82,13 +82,15 @@ PDC_region_server_cache_init() gettimeofday(&last_cache_activity_timeval_g, NULL); - return 0; + FUNC_LEAVE(0); } // PDC cache finalize, has to be done here in case of checkpoint for region data earlier. int PDC_region_server_cache_finalize() { + FUNC_ENTER(NULL); + #ifdef PDC_TIMING double start = MPI_Wtime(); #endif @@ -103,7 +105,8 @@ PDC_region_server_cache_finalize() #ifdef PDC_TIMING pdc_server_timings->PDCcache_clean += MPI_Wtime() - start; #endif - return 0; + + FUNC_LEAVE(0); } /* @@ -113,6 +116,8 @@ PDC_region_server_cache_finalize() int PDC_check_region_relation(uint64_t *offset, uint64_t *size, uint64_t *offset2, uint64_t *size2, int ndim) { + FUNC_ENTER(NULL); + int i; int flag; flag = 1; @@ -122,7 +127,7 @@ PDC_check_region_relation(uint64_t *offset, uint64_t *size, uint64_t *offset2, u } } if (flag) { - return PDC_REGION_CONTAINED; + FUNC_LEAVE(PDC_REGION_CONTAINED); } for (i = 0; i < ndim; ++i) { if (offset[i] > offset2[i] || offset[i] + size[i] < offset2[i] + size2[i]) { @@ -130,7 +135,7 @@ PDC_check_region_relation(uint64_t *offset, uint64_t *size, uint64_t *offset2, u } } if (flag) { - return PDC_REGION_CONTAINED_BY; + FUNC_LEAVE(PDC_REGION_CONTAINED_BY); } flag = 1; for (i = 0; i < ndim; ++i) { @@ -139,12 +144,13 @@ PDC_check_region_relation(uint64_t *offset, uint64_t *size, uint64_t *offset2, u } } if (flag) { - return PDC_REGION_PARTIAL_OVERLAP; + FUNC_LEAVE(PDC_REGION_PARTIAL_OVERLAP); } else { - return PDC_REGION_NO_OVERLAP; + FUNC_LEAVE(PDC_REGION_NO_OVERLAP); } - return 0; + + FUNC_LEAVE(0); } /* @@ -155,9 +161,11 @@ int extract_overlaping_region(const uint64_t *offset, const uint64_t *size, const uint64_t *offset2, const uint64_t *size2, int ndim, uint64_t **offset_merged, uint64_t **size_merged) { + FUNC_ENTER(NULL); + int i; - *offset_merged = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - *size_merged = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + *offset_merged = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim); + *size_merged = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim); for (i = 0; i < ndim; ++i) { if (offset2[i] > offset[i]) { offset_merged[0][i] = offset2[i]; @@ -168,7 +176,8 @@ extract_overlaping_region(const uint64_t *offset, const uint64_t *size, const ui size_merged[0][i] = offset2[i] + size2[i] - offset[i]; } } - return 0; + + FUNC_LEAVE(0); } /* @@ -181,6 +190,8 @@ pdc_region_merge_buf_copy(const uint64_t *offset, const uint64_t *size, const ui const uint64_t *size2, const char *buf, const char *buf2, char **buf_merged, int unit, int connect_flag) { + FUNC_ENTER(NULL); + uint64_t overlaps; int i; for (i = 0; i < connect_flag; ++i) { @@ -221,7 +232,8 @@ pdc_region_merge_buf_copy(const uint64_t *offset, const uint64_t *size, const ui *buf_merged += unit * size2[connect_flag]; } } - return 0; + + FUNC_LEAVE(0); } /* * This function merges two regions. The two regions must have the same offset/size in all dimensions but one. @@ -232,6 +244,8 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons const uint64_t *offset2, const uint64_t *size2, char **buf_merged_ptr, uint64_t **offset_merged, uint64_t **size_merged, int ndim, int unit) { + FUNC_ENTER(NULL); + int connect_flag, i, j; uint64_t tmp_buf_size; char * buf_merged; @@ -241,7 +255,7 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons for (i = 0; i < ndim; ++i) { // A dimension is detached, immediately return with failure if (offset[i] > offset2[i] + size2[i] || offset2[i] > offset[i] + size[i]) { - return PDC_MERGE_FAILED; + FUNC_LEAVE(PDC_MERGE_FAILED); } // If we pass the previous condition, this dimension is connected between these two regions. if (offset[i] != offset2[i] || size[i] != size2[i]) { @@ -253,7 +267,7 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons } else { // We have seen such a dimension before, immediately return with failure. - return PDC_MERGE_FAILED; + FUNC_LEAVE(PDC_MERGE_FAILED); } } } @@ -262,8 +276,8 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons connect_flag = ndim - 1; } // If we reach here, then the two regions can be merged into one. - *offset_merged = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - *size_merged = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + *offset_merged = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim); + *size_merged = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim); for (i = 0; i < ndim; ++i) { if (i != connect_flag) { offset_merged[0][i] = offset[i]; @@ -295,7 +309,7 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons for (i = 1; i < ndim; ++i) { tmp_buf_size *= size_merged[0][i]; } - buf_merged = (char *)malloc(sizeof(char) * tmp_buf_size); + buf_merged = (char *)PDC_malloc(sizeof(char) * tmp_buf_size); *buf_merged_ptr = buf_merged; if (ndim == 1) { pdc_region_merge_buf_copy(offset, size, offset2, size2, buf, buf2, &buf_merged, unit, connect_flag); @@ -336,7 +350,8 @@ PDC_region_merge(const char *buf, const char *buf2, const uint64_t *offset, cons connect_flag); } } - return PDC_MERGE_SUCCESS; + + FUNC_LEAVE(PDC_MERGE_SUCCESS); } /* @@ -350,9 +365,11 @@ int PDC_region_cache_copy(char *buf, char *buf2, const uint64_t *offset, const uint64_t *size, const uint64_t *offset2, const uint64_t *size2, int ndim, size_t unit, int direction) { + FUNC_ENTER(NULL); + char * src, *dst; uint64_t i, j; - uint64_t *local_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + uint64_t *local_offset = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim); memcpy(local_offset, offset2, sizeof(uint64_t) * ndim); /* Rescale I/O request to cache region offsets. */ for (i = 0; i < (uint64_t)ndim; ++i) { @@ -404,8 +421,9 @@ PDC_region_cache_copy(char *buf, char *buf2, const uint64_t *offset, const uint6 } } } - free(local_offset); - return 0; + local_offset = (uint64_t *)PDC_free(local_offset); + + FUNC_LEAVE(0); } /* @@ -420,19 +438,15 @@ PDC_region_cache_register(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dim size_t buf_size, const uint64_t *offset, const uint64_t *size, int ndim, size_t unit) { + FUNC_ENTER(NULL); + pdc_obj_cache * obj_cache_iter, *obj_cache = NULL; struct pdc_region_info *region_cache_info; if (obj_ndim != ndim && obj_ndim > 0) { LOG_INFO("reports obj_ndim != ndim, %d != %d\n", obj_ndim, ndim); - return FAIL; + FUNC_LEAVE(FAIL); } -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: for %llu\n", cur_time, PDC_get_rank(), obj_id); -#endif - pthread_mutex_lock(&pdc_obj_cache_list_mutex); obj_cache_iter = obj_cache_list; @@ -446,7 +460,7 @@ PDC_region_cache_register(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dim if (obj_cache == NULL) { if (obj_cache_list != NULL) { - obj_cache_list_end->next = (pdc_obj_cache *)malloc(sizeof(pdc_obj_cache)); + obj_cache_list_end->next = (pdc_obj_cache *)PDC_malloc(sizeof(pdc_obj_cache)); obj_cache_list_end = obj_cache_list_end->next; obj_cache_list_end->next = NULL; @@ -456,7 +470,7 @@ PDC_region_cache_register(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dim obj_cache_list_end->region_cache_end = NULL; } else { - obj_cache_list = (pdc_obj_cache *)malloc(sizeof(pdc_obj_cache)); + obj_cache_list = (pdc_obj_cache *)PDC_malloc(sizeof(pdc_obj_cache)); obj_cache_list_end = obj_cache_list; obj_cache_list_end->obj_id = obj_id; @@ -467,31 +481,31 @@ PDC_region_cache_register(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dim } obj_cache_list_end->ndim = obj_ndim; if (obj_ndim) { - obj_cache_list_end->dims = (uint64_t *)malloc(sizeof(uint64_t) * obj_ndim); + obj_cache_list_end->dims = (uint64_t *)PDC_malloc(sizeof(uint64_t) * obj_ndim); memcpy(obj_cache_list_end->dims, obj_dims, sizeof(uint64_t) * obj_ndim); } obj_cache = obj_cache_list_end; } if (obj_cache->region_cache == NULL) { - obj_cache->region_cache = (pdc_region_cache *)malloc(sizeof(pdc_region_cache)); + obj_cache->region_cache = (pdc_region_cache *)PDC_malloc(sizeof(pdc_region_cache)); obj_cache->region_cache_end = obj_cache->region_cache; obj_cache->region_cache_end->next = NULL; } else { - obj_cache->region_cache_end->next = (pdc_region_cache *)malloc(sizeof(pdc_region_cache)); + obj_cache->region_cache_end->next = (pdc_region_cache *)PDC_malloc(sizeof(pdc_region_cache)); obj_cache->region_cache_end = obj_cache->region_cache_end->next; obj_cache->region_cache_end->next = NULL; } obj_cache->region_cache_size++; obj_cache->region_cache_end->region_cache_info = - (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); region_cache_info = obj_cache->region_cache_end->region_cache_info; region_cache_info->ndim = ndim; - region_cache_info->offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim * 2); + region_cache_info->offset = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim * 2); region_cache_info->size = region_cache_info->offset + ndim; - region_cache_info->buf = (char *)malloc(sizeof(char) * buf_size); + region_cache_info->buf = (char *)PDC_malloc(sizeof(char) * buf_size); region_cache_info->unit = unit; memcpy(region_cache_info->offset, offset, sizeof(uint64_t) * ndim); @@ -506,39 +520,45 @@ PDC_region_cache_register(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dim gettimeofday(&(obj_cache->timestamp), NULL); if (total_cache_size > maximum_cache_size) { - LOG_INFO("==PDC_SERVER[%d]: server cache full %.1f / %.1f MB, will flush to storage\n", - PDC_get_rank(), total_cache_size / 1048576.0, maximum_cache_size / 1048576.0); + LOG_INFO("Server cache full %.1f / %.1f MB, will flush to storage\n", total_cache_size / 1048576.0, + maximum_cache_size / 1048576.0); PDC_region_cache_flush_all(); } - return 0; + FUNC_LEAVE(0); } int PDC_region_cache_free() { + FUNC_ENTER(NULL); + pdc_obj_cache * obj_cache_iter, *obj_temp; pdc_region_cache *region_cache_iter, *region_temp; obj_cache_iter = obj_cache_list; while (obj_cache_iter != NULL) { region_cache_iter = obj_cache_iter->region_cache; while (region_cache_iter != NULL) { - free(region_cache_iter->region_cache_info); + region_cache_iter->region_cache_info = + (struct pdc_region_info *)PDC_free(region_cache_iter->region_cache_info); region_temp = region_cache_iter; region_cache_iter = region_cache_iter->next; - free(region_temp); + region_temp = (pdc_region_cache *)PDC_free(region_temp); } obj_temp = obj_cache_iter; obj_cache_iter = obj_cache_iter->next; - free(obj_temp); + obj_temp = (pdc_obj_cache *)PDC_free(obj_temp); } - return 0; + + FUNC_LEAVE(0); } perr_t PDC_transfer_request_data_write_out(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct pdc_region_info *region_info, void *buf, size_t unit) { + FUNC_ENTER(NULL); + // flag indicates whether the input region is fully contained in another cached region. int flag; pdc_obj_cache * obj_cache, *obj_cache_iter; @@ -547,7 +567,6 @@ PDC_transfer_request_data_write_out(uint64_t obj_id, int obj_ndim, const uint64_ perr_t ret_value = SUCCEED; char cur_time[64]; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(); #endif @@ -560,11 +579,6 @@ PDC_transfer_request_data_write_out(uint64_t obj_id, int obj_ndim, const uint64_ if (region_info->ndim >= 3) write_size *= region_info->size[2]; -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d]: enter for %llu\n", cur_time, PDC_get_rank(), obj_id); -#endif - pthread_mutex_lock(&pdc_obj_cache_list_mutex); obj_cache = NULL; @@ -595,45 +609,25 @@ PDC_transfer_request_data_write_out(uint64_t obj_id, int obj_ndim, const uint64_ region_info->ndim, unit, buf, region_info->offset, region_info->size, region_cache_iter->region_cache_info->buf, region_cache_iter->region_cache_info->offset, region_cache_iter->region_cache_info->size, overlap_offset, overlap_size); - free(overlap_offset); + overlap_offset = (uint64_t *)PDC_free(overlap_offset); if (flag) { break; } } - /* - else { - merge_status = PDC_region_merge(buf, region_cache_iter->region_cache_info->buf, - region_info->offset, region_info->size, region_cache_iter->region_cache_info->offset, - region_cache_iter->region_cache_info->size, &buf_merged, &offset_merged, &size_merged, ndim, - unit); if ( merge_status == PDC_MERGE_SUCCESS ) { - - } - } - */ region_cache_iter = region_cache_iter->next; } } pthread_mutex_unlock(&pdc_obj_cache_list_mutex); - /* PDC_get_time_str(cur_time); */ - if (!flag) { PDC_region_cache_register(obj_id, obj_ndim, obj_dims, buf, write_size, region_info->offset, region_info->size, region_info->ndim, unit); } - // PDC_Server_data_write_out2(obj_id, region_info, buf, unit); #ifdef PDC_TIMING pdc_server_timings->PDCcache_write += MPI_Wtime() - start; #endif -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d]: leaving\n", cur_time, PDC_get_rank()); -#endif - - // done: - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -641,11 +635,14 @@ static int merge_requests(uint64_t *start, uint64_t *end, int request_size, char **buf, uint64_t **new_start, uint64_t **new_end, char ***new_buf, uint64_t unit, int *request_size_ptr) { + FUNC_ENTER(NULL); + int i, index; int merged_requests = 1; char * ptr; size_t total_data_size = end[0] - start[0]; uint64_t prev_end = end[0]; + for (i = 1; i < request_size; ++i) { if (prev_end < start[i]) { merged_requests++; @@ -659,15 +656,15 @@ merge_requests(uint64_t *start, uint64_t *end, int request_size, char **buf, uin } } } - *new_start = (uint64_t *)malloc(sizeof(uint64_t) * merged_requests * 2); + *new_start = (uint64_t *)PDC_malloc(sizeof(uint64_t) * merged_requests * 2); *new_end = new_start[0] + merged_requests; index = 0; new_start[0][0] = start[0]; new_end[0][0] = end[0]; - *new_buf = (char **)malloc(merged_requests * sizeof(char *)); - new_buf[0][0] = (char *)malloc(total_data_size * unit); + *new_buf = (char **)PDC_malloc(merged_requests * sizeof(char *)); + new_buf[0][0] = (char *)PDC_malloc(total_data_size * unit); ptr = new_buf[0][0]; memcpy(ptr, buf[0], (end[0] - start[0]) * unit); ptr += (end[0] - start[0]) * unit; @@ -692,25 +689,28 @@ merge_requests(uint64_t *start, uint64_t *end, int request_size, char **buf, uin } *request_size_ptr = merged_requests; - return 0; + FUNC_LEAVE(0); } static int sort_by_offset(const void *elem1, const void *elem2) { + FUNC_ENTER(NULL); + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-qual" if ((*(struct pdc_region_info **)elem1)->offset[0] > (*(struct pdc_region_info **)elem2)->offset[0]) - return 1; + FUNC_LEAVE(1); if ((*(struct pdc_region_info **)elem1)->offset[0] < (*(struct pdc_region_info **)elem2)->offset[0]) - return -1; - return 0; + FUNC_LEAVE(-1); + FUNC_LEAVE(0); #pragma GCC diagnostic pop } - int PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int flag) { + FUNC_ENTER(NULL); + int i, nflush = 0; pdc_region_cache * region_cache_iter, *region_cache_temp; struct pdc_region_info * region_cache_info; @@ -726,21 +726,19 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int #endif env_char = getenv("PDC_SERVER_CACHE_NO_FLUSH"); if (env_char && atoi(env_char) != 0) { - LOG_ERROR("==PDC_SERVER[%d]: flushed disabled\n", PDC_get_rank()); - return 0; + LOG_ERROR("Flushed disabled\n"); + FUNC_LEAVE(0); } - /* PDC_get_time_str(cur_time); */ - // For 1D case, we can merge regions to minimize the number of POSIX calls. if (obj_cache->ndim == 1 && obj_cache->region_cache_size) { - start = (uint64_t *)malloc(sizeof(uint64_t) * obj_cache->region_cache_size * 2); + start = (uint64_t *)PDC_malloc(sizeof(uint64_t) * obj_cache->region_cache_size * 2); end = start + obj_cache->region_cache_size; - buf = (char **)malloc(sizeof(char *) * obj_cache->region_cache_size); + buf = (char **)PDC_malloc(sizeof(char *) * obj_cache->region_cache_size); // Sort the regions based on start index - obj_regions = (struct pdc_region_info **)malloc(sizeof(struct pdc_region_info *) * - obj_cache->region_cache_size); + obj_regions = (struct pdc_region_info **)PDC_malloc(sizeof(struct pdc_region_info *) * + obj_cache->region_cache_size); unit = obj_cache->region_cache->region_cache_info->unit; region_cache_iter = obj_cache->region_cache; i = 0; @@ -755,13 +753,13 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int end[i] = obj_regions[i]->offset[0] + obj_regions[i]->size[0]; buf[i] = obj_regions[i]->buf; } - free(obj_regions); + obj_regions = (struct pdc_region_info **)PDC_free(obj_regions); // Merge adjacent regions merge_requests(start, end, obj_cache->region_cache_size, buf, &new_start, &new_end, &new_buf, unit, &merged_request_size); - free(start); - free(buf); + start = (uint64_t *)PDC_free(start); + buf = (char **)PDC_free(buf); // Record buffer pointer to be freed later. buf_ptr = new_buf[0]; // Override the first merge_request_size number of cache regions with the merge regions @@ -771,8 +769,8 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int region_cache_info = region_cache_iter->region_cache_info; region_cache_info->offset[0] = new_start[i]; region_cache_info->size[0] = new_end[i] - new_start[i]; - free(region_cache_info->buf); - region_cache_info->buf = new_buf[i]; + region_cache_info->buf = (void *)PDC_free(region_cache_info->buf); + region_cache_info->buf = new_buf[i]; if (i == merged_request_size - 1) { region_cache_temp = region_cache_iter->next; region_cache_iter->next = NULL; @@ -782,17 +780,17 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int region_cache_iter = region_cache_iter->next; } } - free(new_start); - free(new_buf); + new_start = (uint64_t *)PDC_free(new_start); + new_buf = (char **)PDC_free(new_buf); // Free other regions. while (region_cache_iter) { - region_cache_info = region_cache_iter->region_cache_info; - free(region_cache_info->offset); - free(region_cache_info->buf); - free(region_cache_info); - region_cache_temp = region_cache_iter; - region_cache_iter = region_cache_iter->next; - free(region_cache_temp); + region_cache_info = region_cache_iter->region_cache_info; + region_cache_info->offset = (uint64_t *)PDC_free(region_cache_info->offset); + region_cache_info->buf = (void *)PDC_free(region_cache_info->buf); + region_cache_info = (struct pdc_region_info *)PDC_free(region_cache_info); + region_cache_temp = region_cache_iter; + region_cache_iter = region_cache_iter->next; + region_cache_temp = (pdc_region_cache *)PDC_free(region_cache_temp); } nflush += merged_request_size; } // End for 1D @@ -812,23 +810,22 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int if (write_size > 0) { PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d.%d]: server flushed %.1f / %.1f MB to storage\n", cur_time, - PDC_get_rank(), flag, write_size / 1048576.0, total_cache_size / 1048576.0); + LOG_INFO("Server flushed %.1f / %.1f MB to storage\n", write_size / 1048576.0, + total_cache_size / 1048576.0); } total_cache_size -= write_size; - free(region_cache_info->offset); - if (obj_cache->ndim > 1) { - free(region_cache_info->buf); - } - free(region_cache_info); + region_cache_info->offset = (uint64_t *)PDC_free(region_cache_info->offset); + if (obj_cache->ndim > 1) + region_cache_info->buf = (void *)PDC_free(region_cache_info->buf); + region_cache_info = (struct pdc_region_info *)PDC_free(region_cache_info); region_cache_temp = region_cache_iter; region_cache_iter = region_cache_iter->next; - free(region_cache_temp); + region_cache_temp = (pdc_region_cache *)PDC_free(region_cache_temp); nflush++; } if (merged_request_size && obj_cache->ndim == 1) { - free(buf_ptr); + buf_ptr = (char *)PDC_free(buf_ptr); } obj_cache->region_cache = NULL; obj_cache->region_cache_size = 0; @@ -838,13 +835,14 @@ PDC_region_cache_flush_by_pointer(uint64_t obj_id, pdc_obj_cache *obj_cache, int #endif /* PDC_get_time_str(cur_time); */ - - return nflush; + FUNC_LEAVE(nflush); } int PDC_region_cache_flush(uint64_t obj_id) { + FUNC_ENTER(NULL); + pdc_obj_cache *obj_cache = NULL, *obj_cache_iter; obj_cache_iter = obj_cache_list; @@ -856,51 +854,43 @@ PDC_region_cache_flush(uint64_t obj_id) obj_cache_iter = obj_cache_iter->next; } if (obj_cache == NULL) { - return 1; + FUNC_LEAVE(1); } -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d]: going to flush\n", cur_time, PDC_get_rank()); -#endif - PDC_region_cache_flush_by_pointer(obj_id, obj_cache, 0); - return 0; + FUNC_LEAVE(0); } int PDC_region_cache_flush_all() { + FUNC_ENTER(NULL); + pdc_obj_cache *obj_cache_iter, *obj_cache_temp; pthread_mutex_lock(&pdc_obj_cache_list_mutex); obj_cache_iter = obj_cache_list; while (obj_cache_iter != NULL) { - -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d]: going to flush\n", cur_time, PDC_get_rank()); -#endif - PDC_region_cache_flush_by_pointer(obj_cache_iter->obj_id, obj_cache_iter, 0); obj_cache_temp = obj_cache_iter; obj_cache_iter = obj_cache_iter->next; if (obj_cache_temp->ndim) { - free(obj_cache_temp->dims); + obj_cache_temp->dims = (uint64_t *)PDC_free(obj_cache_temp->dims); } - free(obj_cache_temp); + obj_cache_temp = (pdc_obj_cache *)PDC_free(obj_cache_temp); } obj_cache_list = NULL; pthread_mutex_unlock(&pdc_obj_cache_list_mutex); - return 0; + + FUNC_LEAVE(0); } void * PDC_region_cache_clock_cycle(void *ptr) { + FUNC_ENTER(NULL); + pdc_obj_cache *obj_cache, *obj_cache_iter; struct timeval current_time; struct timeval finish_time; @@ -939,8 +929,7 @@ PDC_region_cache_clock_cycle(void *ptr) if (nflush > 0) { PDC_get_time_str(cur_time); - LOG_INFO("%s ==PDC_SERVER[%d.1]: flushed %d regions to storage, took %.4fs\n", - cur_time, PDC_get_rank(), nflush, elapsed_time); + LOG_INFO("Flushed %d regions to storage, took %.4fs\n", nflush, elapsed_time); } } else { @@ -965,19 +954,21 @@ PDC_region_cache_clock_cycle(void *ptr) pthread_mutex_unlock(&pdc_cache_mutex); usleep(10000); } - return 0; + + FUNC_LEAVE(0); } perr_t PDC_transfer_request_data_read_from(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct pdc_region_info *region_info, void *buf, size_t unit) { - perr_t ret_value = SUCCEED; FUNC_ENTER(NULL); + + perr_t ret_value = SUCCEED; #ifdef PDC_TIMING double start = MPI_Wtime(); #endif - // PDC_Server_data_read_from2(obj_id, region_info, buf, unit); + pthread_mutex_lock(&pdc_obj_cache_list_mutex); PDC_region_fetch(obj_id, obj_ndim, obj_dims, region_info, buf, unit); pthread_mutex_unlock(&pdc_obj_cache_list_mutex); @@ -985,8 +976,7 @@ PDC_transfer_request_data_read_from(uint64_t obj_id, int obj_ndim, const uint64_ #ifdef PDC_TIMING pdc_server_timings->PDCcache_read += MPI_Wtime() - start; #endif - // done: - fflush(stdout); + FUNC_LEAVE(ret_value); } @@ -998,6 +988,8 @@ int PDC_region_fetch(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct pdc_region_info *region_info, void *buf, size_t unit) { + FUNC_ENTER(NULL); + pdc_obj_cache *obj_cache = NULL, *obj_cache_iter; int flag = 0; // size_t j; @@ -1029,7 +1021,7 @@ PDC_region_fetch(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct region_cache_iter->region_cache_info->offset, region_cache_iter->region_cache_info->size, buf, region_info->offset, region_info->size, overlap_offset, overlap_size); - free(overlap_offset); + overlap_offset = (uint64_t *)PDC_free(overlap_offset); // flag = 1 at here. break; } @@ -1038,16 +1030,11 @@ PDC_region_fetch(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct } if (!flag) { if (obj_cache != NULL) { -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: going to flush\n", cur_time, PDC_get_rank()); -#endif - PDC_region_cache_flush_by_pointer(obj_id, obj_cache, 0); } PDC_Server_transfer_request_io(obj_id, obj_ndim, obj_dims, region_info, buf, unit, 0); } - return 0; + + FUNC_LEAVE(0); } #endif diff --git a/src/server/pdc_server_region/pdc_server_region_request_handler.h b/src/server/pdc_server_region/pdc_server_region_request_handler.h index cb2953365..e16e921a5 100644 --- a/src/server/pdc_server_region/pdc_server_region_request_handler.h +++ b/src/server/pdc_server_region/pdc_server_region_request_handler.h @@ -1,12 +1,17 @@ -/* #define TANG_DEBUG 1 */ +#ifndef PDC_SERVER_REGION_REQUEST_HANDLER_H +#define PDC_SERVER_REGION_REQUEST_HANDLER_H + +#include "pdc_timing.h" hg_return_t transfer_request_all_bulk_transfer_read_cb2(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + hg_return_t ret = HG_SUCCESS; struct transfer_request_all_local_bulk_args2 *local_bulk_args2 = info->arg; int i; - FUNC_ENTER(NULL); + #ifdef PDC_TIMING double end, start; #endif @@ -17,11 +22,11 @@ transfer_request_all_bulk_transfer_read_cb2(const struct hg_cb_info *info) } pthread_mutex_unlock(&transfer_request_status_mutex); clean_write_bulk_data(&(local_bulk_args2->request_data)); - free(local_bulk_args2->data_buf); - free(local_bulk_args2->transfer_request_id); + local_bulk_args2->data_buf = (void *)PDC_free(local_bulk_args2->data_buf); + local_bulk_args2->transfer_request_id = (uint64_t *)PDC_free(local_bulk_args2->transfer_request_id); HG_Bulk_free(local_bulk_args2->bulk_handle); HG_Destroy(local_bulk_args2->handle); - free(local_bulk_args2); + local_bulk_args2 = (struct transfer_request_all_local_bulk_args2 *)PDC_free(local_bulk_args2); #ifdef PDC_TIMING // transfer_request_inner_read_all_bulk is purely for transferring read data from server to client. @@ -37,6 +42,8 @@ transfer_request_all_bulk_transfer_read_cb2(const struct hg_cb_info *info) hg_return_t transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_all_local_bulk_args2 *local_bulk_args2; struct transfer_request_all_local_bulk_args * local_bulk_args = info->arg; const struct hg_info * handle_info; @@ -47,8 +54,6 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) uint64_t total_mem_size, mem_size; char * ptr; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING double end; #endif @@ -58,7 +63,7 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) parse_bulk_data(local_bulk_args->data_buf, &request_data, PDC_READ); // print_bulk_data(&request_data); - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); total_mem_size = 0; for (i = 0; i < request_data.n_objs; ++i) { mem_size = request_data.unit[i]; @@ -68,14 +73,14 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) total_mem_size += mem_size; } - local_bulk_args2 = (struct transfer_request_all_local_bulk_args2 *)malloc( + local_bulk_args2 = (struct transfer_request_all_local_bulk_args2 *)PDC_malloc( sizeof(struct transfer_request_all_local_bulk_args2)); - local_bulk_args2->data_buf = (char *)malloc(total_mem_size); + local_bulk_args2->data_buf = (char *)PDC_malloc(total_mem_size); ptr = local_bulk_args2->data_buf; #ifndef PDC_SERVER_CACHE data_server_region_t **temp_ptrs = - (data_server_region_t **)malloc(sizeof(data_server_region_t *) * request_data.n_objs); + (data_server_region_t **)PDC_malloc(sizeof(data_server_region_t *) * request_data.n_objs); for (i = 0; i < request_data.n_objs; ++i) { temp_ptrs[i] = PDC_Server_get_obj_region(request_data.obj_id[i]); PDC_Server_register_obj_region_by_pointer(temp_ptrs + i, request_data.obj_id[i], 1); @@ -113,7 +118,7 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) for (i = 0; i < request_data.n_objs; ++i) { PDC_Server_unregister_obj_region_by_pointer(temp_ptrs[i], 1); } - free(temp_ptrs); + temp_ptrs = (data_server_region_t **)PDC_free(temp_ptrs); #endif #ifdef PDC_TIMING @@ -146,14 +151,14 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) LOG_ERROR("Error at transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info)"); } // pointers in request_data are freed in the next call back function - free(local_bulk_args->data_buf); - free(remote_reg_info); + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); HG_Bulk_free(local_bulk_args->bulk_handle); HG_Free_input(local_bulk_args->handle, &(local_bulk_args->in)); - free(local_bulk_args); + local_bulk_args = (struct transfer_request_all_local_bulk_args *)PDC_free(local_bulk_args); FUNC_LEAVE(ret); } @@ -161,6 +166,8 @@ transfer_request_all_bulk_transfer_read_cb(const struct hg_cb_info *info) hg_return_t transfer_request_all_bulk_transfer_write_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_all_local_bulk_args *local_bulk_args = info->arg; transfer_request_all_data request_data; hg_return_t ret = HG_SUCCESS; @@ -168,13 +175,6 @@ transfer_request_all_bulk_transfer_write_cb(const struct hg_cb_info *info) int i; char cur_time[64]; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: enter\n", cur_time, PDC_get_rank()); -#endif - gettimeofday(&last_cache_activity_timeval_g, NULL); #ifdef PDC_TIMING @@ -185,25 +185,20 @@ transfer_request_all_bulk_transfer_write_cb(const struct hg_cb_info *info) start = MPI_Wtime(); #endif - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); request_data.n_objs = local_bulk_args->in.n_objs; parse_bulk_data(local_bulk_args->data_buf, &request_data, PDC_WRITE); // print_bulk_data(&request_data); #ifndef PDC_SERVER_CACHE data_server_region_t **temp_ptrs = - (data_server_region_t **)malloc(sizeof(data_server_region_t *) * request_data.n_objs); + (data_server_region_t **)PDC_malloc(sizeof(data_server_region_t *) * request_data.n_objs); for (i = 0; i < request_data.n_objs; ++i) { temp_ptrs[i] = PDC_Server_get_obj_region(request_data.obj_id[i]); PDC_Server_register_obj_region_by_pointer(temp_ptrs + i, request_data.obj_id[i], 1); } #endif -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: before (cache) writing\n", cur_time, PDC_get_rank()); -#endif - for (i = 0; i < request_data.n_objs; ++i) { remote_reg_info->ndim = request_data.remote_ndim[i]; remote_reg_info->offset = request_data.remote_offset[i]; @@ -231,29 +226,24 @@ transfer_request_all_bulk_transfer_write_cb(const struct hg_cb_info *info) pthread_mutex_unlock(&transfer_request_status_mutex); } -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: after (cache) writing\n", cur_time, PDC_get_rank()); -#endif - #ifndef PDC_SERVER_CACHE for (i = 0; i < request_data.n_objs; ++i) { PDC_Server_unregister_obj_region_by_pointer(temp_ptrs[i], 1); } - free(temp_ptrs); + temp_ptrs = (data_server_region_t **)PDC_free(temp_ptrs); #endif clean_write_bulk_data(&request_data); - free(local_bulk_args->transfer_request_id); - free(local_bulk_args->data_buf); - free(remote_reg_info); + local_bulk_args->transfer_request_id = (uint64_t *)PDC_free(local_bulk_args->transfer_request_id); + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); HG_Bulk_free(local_bulk_args->bulk_handle); HG_Free_input(local_bulk_args->handle, &(local_bulk_args->in)); HG_Destroy(local_bulk_args->handle); - free(local_bulk_args); + local_bulk_args = (struct transfer_request_all_local_bulk_args *)PDC_free(local_bulk_args); #ifdef PDC_TIMING end = MPI_Wtime(); @@ -261,17 +251,14 @@ transfer_request_all_bulk_transfer_write_cb(const struct hg_cb_info *info) pdc_timestamp_register(pdc_transfer_request_inner_write_all_bulk_timestamps, start, end); #endif -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: leaving\n", cur_time, PDC_get_rank()); -#endif - FUNC_LEAVE(ret); } hg_return_t transfer_request_wait_all_bulk_transfer_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_wait_all_local_bulk_args *local_bulk_args = info->arg; transfer_request_wait_all_out_t out; @@ -282,11 +269,9 @@ transfer_request_wait_all_bulk_transfer_cb(const struct hg_cb_info *info) int * handle_ref; pdc_transfer_status_t status; - FUNC_ENTER(NULL); - // free is in PDC_finish_request fast_return = 1; - handle_ref = (int *)calloc(1, sizeof(int)); + handle_ref = (int *)PDC_calloc(1, sizeof(int)); pthread_mutex_lock(&transfer_request_status_mutex); ptr = local_bulk_args->data_buf; for (i = 0; i < local_bulk_args->in.n_objs; ++i) { @@ -302,9 +287,9 @@ transfer_request_wait_all_bulk_transfer_cb(const struct hg_cb_info *info) } pthread_mutex_unlock(&transfer_request_status_mutex); if (fast_return) { - free(handle_ref); - out.ret = 1; - ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); + handle_ref = (int *)PDC_free(handle_ref); + out.ret = 1; + ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); HG_Free_input(local_bulk_args->handle, &(local_bulk_args->in)); HG_Destroy(local_bulk_args->handle); } @@ -312,11 +297,11 @@ transfer_request_wait_all_bulk_transfer_cb(const struct hg_cb_info *info) HG_Free_input(local_bulk_args->handle, &(local_bulk_args->in)); } - free(local_bulk_args->data_buf); + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); HG_Bulk_free(local_bulk_args->bulk_handle); - free(local_bulk_args); + local_bulk_args = (struct transfer_request_wait_all_local_bulk_args *)PDC_free(local_bulk_args); #ifdef PDC_TIMING double end = MPI_Wtime(); @@ -331,19 +316,13 @@ transfer_request_wait_all_bulk_transfer_cb(const struct hg_cb_info *info) hg_return_t transfer_request_bulk_transfer_write_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_local_bulk_args *local_bulk_args = info->arg; hg_return_t ret = HG_SUCCESS; struct pdc_region_info * remote_reg_info; uint64_t obj_dims[3]; - FUNC_ENTER(NULL); - -#ifdef TANG_DEBUG - char cur_time[64]; - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: enter\n", cur_time, PDC_get_rank()); -#endif - gettimeofday(&last_cache_activity_timeval_g, NULL); #ifdef PDC_TIMING @@ -354,26 +333,22 @@ transfer_request_bulk_transfer_write_cb(const struct hg_cb_info *info) start = MPI_Wtime(); #endif - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); remote_reg_info->ndim = (local_bulk_args->in.remote_region).ndim; - remote_reg_info->offset = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (local_bulk_args->in.remote_region).start_0; - (remote_reg_info->size)[0] = (local_bulk_args->in.remote_region).count_0; - obj_dims[0] = (local_bulk_args->in).obj_dim0; - } - if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (local_bulk_args->in.remote_region).start_1; - (remote_reg_info->size)[1] = (local_bulk_args->in.remote_region).count_1; - obj_dims[1] = (local_bulk_args->in).obj_dim1; - } - if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (local_bulk_args->in.remote_region).start_2; - (remote_reg_info->size)[2] = (local_bulk_args->in.remote_region).count_2; - obj_dims[2] = (local_bulk_args->in).obj_dim2; - } + remote_reg_info->offset = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + + PDC_copy_region_desc((local_bulk_args->in).remote_region.start, remote_reg_info->offset, + remote_reg_info->ndim, remote_reg_info->ndim); + PDC_copy_region_desc((local_bulk_args->in).remote_region.count, remote_reg_info->size, + remote_reg_info->ndim, remote_reg_info->ndim); + PDC_copy_region_desc((local_bulk_args->in).obj_dims, obj_dims, remote_reg_info->ndim, + remote_reg_info->ndim); +/* + printf("Server transfer request at write branch, index 1 value = %d\n", + *((int *)(local_bulk_args->data_buf + sizeof(int)))); +*/ #ifdef PDC_SERVER_CACHE PDC_transfer_request_data_write_out(local_bulk_args->in.obj_id, local_bulk_args->in.obj_ndim, obj_dims, remote_reg_info, (void *)local_bulk_args->data_buf, @@ -386,8 +361,8 @@ transfer_request_bulk_transfer_write_cb(const struct hg_cb_info *info) pthread_mutex_lock(&transfer_request_status_mutex); PDC_finish_request(local_bulk_args->transfer_request_id); pthread_mutex_unlock(&transfer_request_status_mutex); - free(local_bulk_args->data_buf); - free(remote_reg_info); + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); HG_Bulk_free(local_bulk_args->bulk_handle); @@ -403,9 +378,10 @@ transfer_request_bulk_transfer_write_cb(const struct hg_cb_info *info) hg_return_t transfer_request_bulk_transfer_read_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_local_bulk_args *local_bulk_args = info->arg; hg_return_t ret; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double end = MPI_Wtime(), start; @@ -436,11 +412,12 @@ transfer_request_bulk_transfer_read_cb(const struct hg_cb_info *info) // transfer_request_status_cb(hg_handle_t handle) HG_TEST_RPC_CB(transfer_request_status, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; transfer_request_status_in_t in; transfer_request_status_out_t out; - FUNC_ENTER(NULL); HG_Get_input(handle, &in); pthread_mutex_lock(&transfer_request_status_mutex); @@ -451,7 +428,6 @@ HG_TEST_RPC_CB(transfer_request_status, handle) HG_Free_input(handle, &in); HG_Destroy(handle); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -459,6 +435,8 @@ HG_TEST_RPC_CB(transfer_request_status, handle) // transfer_request_wait_cb(hg_handle_t handle) HG_TEST_RPC_CB(transfer_request_wait, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; transfer_request_wait_in_t in; transfer_request_wait_out_t out; @@ -466,7 +444,6 @@ HG_TEST_RPC_CB(transfer_request_wait, handle) int fast_return = 0; int * handle_ref; - FUNC_ENTER(NULL); #ifdef PDC_TIMING double start = MPI_Wtime(), end; #endif @@ -475,7 +452,7 @@ HG_TEST_RPC_CB(transfer_request_wait, handle) pthread_mutex_lock(&transfer_request_status_mutex); status = PDC_check_request(in.transfer_request_id); if (status == PDC_TRANSFER_STATUS_PENDING) { - handle_ref = (int *)calloc(1, sizeof(int)); + handle_ref = (int *)PDC_calloc(1, sizeof(int)); PDC_try_finish_request(in.transfer_request_id, handle, handle_ref, 0); } else { @@ -504,7 +481,6 @@ HG_TEST_RPC_CB(transfer_request_wait, handle) } #endif - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -512,20 +488,22 @@ HG_TEST_RPC_CB(transfer_request_wait, handle) // transfer_request_wait_all_cb(hg_handle_t handle) HG_TEST_RPC_CB(transfer_request_wait_all, handle) { + FUNC_ENTER(NULL); + struct transfer_request_wait_all_local_bulk_args *local_bulk_args; const struct hg_info * info; transfer_request_wait_all_in_t in; hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); + HG_Get_input(handle, &in); info = HG_Get_info(handle); - local_bulk_args = (struct transfer_request_wait_all_local_bulk_args *)malloc( + local_bulk_args = (struct transfer_request_wait_all_local_bulk_args *)PDC_malloc( sizeof(struct transfer_request_wait_all_local_bulk_args)); local_bulk_args->handle = handle; - local_bulk_args->data_buf = malloc(in.total_buf_size); + local_bulk_args->data_buf = PDC_malloc(in.total_buf_size); local_bulk_args->in = in; #ifdef PDC_TIMING @@ -541,7 +519,6 @@ HG_TEST_RPC_CB(transfer_request_wait_all, handle) local_bulk_args->in.total_buf_size, HG_OP_ID_IGNORE); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -549,6 +526,8 @@ HG_TEST_RPC_CB(transfer_request_wait_all, handle) // transfer_request_all_cb(hg_handle_t handle) HG_TEST_RPC_CB(transfer_request_all, handle) { + FUNC_ENTER(NULL); + struct transfer_request_all_local_bulk_args *local_bulk_args; const struct hg_info * info; transfer_request_all_in_t in; @@ -557,30 +536,23 @@ HG_TEST_RPC_CB(transfer_request_all, handle) int i; char cur_time[64]; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING double start = MPI_Wtime(), end; #endif HG_Get_input(handle, &in); -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: enter process CLIENT[%d]\n", cur_time, PDC_get_rank(), in.client_id); -#endif - gettimeofday(&last_cache_activity_timeval_g, NULL); info = HG_Get_info(handle); - local_bulk_args = (struct transfer_request_all_local_bulk_args *)malloc( + local_bulk_args = (struct transfer_request_all_local_bulk_args *)PDC_malloc( sizeof(struct transfer_request_all_local_bulk_args)); // Read will return to client in the first call back (after metadata for region request is received) local_bulk_args->handle = handle; - local_bulk_args->data_buf = malloc(in.total_buf_size); + local_bulk_args->data_buf = PDC_malloc(in.total_buf_size); local_bulk_args->in = in; - local_bulk_args->transfer_request_id = (uint64_t *)malloc(sizeof(uint64_t) * in.n_objs); + local_bulk_args->transfer_request_id = (uint64_t *)PDC_malloc(sizeof(uint64_t) * in.n_objs); // [Tang]TODO is this necessary? /* pthread_mutex_lock(&transfer_request_id_mutex); */ @@ -607,20 +579,10 @@ HG_TEST_RPC_CB(transfer_request_all, handle) &(local_bulk_args->in.total_buf_size), HG_BULK_READWRITE, &(local_bulk_args->bulk_handle)); -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[x]: start bulk \n", cur_time); -#endif - ret_value = HG_Bulk_transfer(info->context, transfer_request_all_bulk_transfer_write_cb, local_bulk_args, HG_BULK_PULL, info->addr, in.local_bulk_handle, 0, local_bulk_args->bulk_handle, 0, local_bulk_args->in.total_buf_size, HG_OP_ID_IGNORE); - -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[x]: done bulk\n", cur_time); -#endif } else { // Read operation has to receive region metadata first. There will be another bulk transfer triggered @@ -649,31 +611,27 @@ HG_TEST_RPC_CB(transfer_request_all, handle) } #endif -#ifdef TANG_DEBUG - PDC_get_time_str(cur_time); - LOG_DEBUG("%s ==PDC_SERVER[%d]: leaving responded CLIENT[%d]\n", cur_time, PDC_get_rank(), in.client_id); -#endif - - fflush(stdout); FUNC_LEAVE(ret_value); } hg_return_t transfer_request_metadata_query_bulk_transfer_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_metadata_query_local_bulk_args *local_bulk_args = info->arg; hg_return_t ret = HG_SUCCESS; transfer_request_metadata_query_out_t out; - FUNC_ENTER(NULL); out.query_id = transfer_request_metadata_query_parse(local_bulk_args->in.n_objs, (char *)local_bulk_args->data_buf, local_bulk_args->in.is_write, &(out.total_buf_size)); - free(local_bulk_args->data_buf); - out.ret = 1; - ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); + out.ret = 1; + ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); HG_Bulk_free(local_bulk_args->bulk_handle); HG_Destroy(local_bulk_args->handle); + FUNC_LEAVE(ret); } @@ -682,19 +640,20 @@ transfer_request_metadata_query_bulk_transfer_cb(const struct hg_cb_info *info) HG_TEST_RPC_CB(transfer_request_metadata_query, handle) { + FUNC_ENTER(NULL); + struct transfer_request_metadata_query_local_bulk_args *local_bulk_args; const struct hg_info * info; transfer_request_metadata_query_in_t in; hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); HG_Get_input(handle, &in); info = HG_Get_info(handle); - local_bulk_args = (struct transfer_request_metadata_query_local_bulk_args *)malloc( + local_bulk_args = (struct transfer_request_metadata_query_local_bulk_args *)PDC_malloc( sizeof(struct transfer_request_metadata_query_local_bulk_args)); - local_bulk_args->data_buf = malloc(in.total_buf_size); + local_bulk_args->data_buf = PDC_malloc(in.total_buf_size); local_bulk_args->in = in; local_bulk_args->handle = handle; ret_value = HG_Bulk_create(info->hg_class, 1, &(local_bulk_args->data_buf), &(in.total_buf_size), @@ -711,24 +670,25 @@ HG_TEST_RPC_CB(transfer_request_metadata_query, handle) HG_Free_input(handle, &in); - fflush(stdout); FUNC_LEAVE(ret_value); } hg_return_t transfer_request_metadata_query2_bulk_transfer_cb(const struct hg_cb_info *info) { + FUNC_ENTER(NULL); + struct transfer_request_metadata_query2_local_bulk_args *local_bulk_args = info->arg; hg_return_t ret = HG_SUCCESS; transfer_request_metadata_query2_out_t out; - FUNC_ENTER(NULL); + out.ret = 1; + local_bulk_args->data_buf = (void *)PDC_free(local_bulk_args->data_buf); + ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); - out.ret = 1; - free(local_bulk_args->data_buf); - ret = HG_Respond(local_bulk_args->handle, NULL, NULL, &out); HG_Bulk_free(local_bulk_args->bulk_handle); HG_Destroy(local_bulk_args->handle); + FUNC_LEAVE(ret); } @@ -737,17 +697,18 @@ transfer_request_metadata_query2_bulk_transfer_cb(const struct hg_cb_info *info) HG_TEST_RPC_CB(transfer_request_metadata_query2, handle) { + FUNC_ENTER(NULL); + struct transfer_request_metadata_query2_local_bulk_args *local_bulk_args; const struct hg_info * info; transfer_request_metadata_query2_in_t in; hg_return_t ret_value = HG_SUCCESS; - FUNC_ENTER(NULL); HG_Get_input(handle, &in); info = HG_Get_info(handle); - local_bulk_args = (struct transfer_request_metadata_query2_local_bulk_args *)malloc( + local_bulk_args = (struct transfer_request_metadata_query2_local_bulk_args *)PDC_malloc( sizeof(struct transfer_request_metadata_query2_local_bulk_args)); local_bulk_args->handle = handle; @@ -768,7 +729,6 @@ HG_TEST_RPC_CB(transfer_request_metadata_query2, handle) HG_Free_input(handle, &in); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -777,6 +737,8 @@ HG_TEST_RPC_CB(transfer_request_metadata_query2, handle) // transfer_request_cb(hg_handle_t handle) HG_TEST_RPC_CB(transfer_request, handle) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; transfer_request_in_t in; transfer_request_out_t out; @@ -786,8 +748,6 @@ HG_TEST_RPC_CB(transfer_request, handle) struct pdc_region_info * remote_reg_info; uint64_t obj_dims[3]; - FUNC_ENTER(NULL); - #ifdef PDC_TIMING double start = MPI_Wtime(), end; #endif @@ -798,16 +758,9 @@ HG_TEST_RPC_CB(transfer_request, handle) info = HG_Get_info(handle); - total_mem_size = in.remote_unit; - if (in.remote_region.ndim >= 1) { - total_mem_size *= in.remote_region.count_0; - } - if (in.remote_region.ndim >= 2) { - total_mem_size *= in.remote_region.count_1; - } - if (in.remote_region.ndim >= 3) { - total_mem_size *= in.remote_region.count_2; - } + total_mem_size = + PDC_get_region_desc_size_bytes(in.remote_region.count, in.remote_unit, in.remote_region.ndim); + /* pthread_mutex_lock(&transfer_request_id_mutex); */ out.metadata_id = PDC_transfer_request_id_register(); /* pthread_mutex_unlock(&transfer_request_id_mutex); */ @@ -815,11 +768,11 @@ HG_TEST_RPC_CB(transfer_request, handle) PDC_commit_request(out.metadata_id); pthread_mutex_unlock(&transfer_request_status_mutex); - local_bulk_args = - (struct transfer_request_local_bulk_args *)malloc(sizeof(struct transfer_request_local_bulk_args)); + local_bulk_args = (struct transfer_request_local_bulk_args *)PDC_malloc( + sizeof(struct transfer_request_local_bulk_args)); local_bulk_args->handle = handle; local_bulk_args->total_mem_size = total_mem_size; - local_bulk_args->data_buf = malloc(total_mem_size); + local_bulk_args->data_buf = PDC_malloc(total_mem_size); local_bulk_args->in = in; local_bulk_args->transfer_request_id = out.metadata_id; #ifdef PDC_TIMING @@ -842,28 +795,19 @@ HG_TEST_RPC_CB(transfer_request, handle) local_bulk_args->bulk_handle, 0, total_mem_size, HG_OP_ID_IGNORE); } else { - // in.access_type == PDC_READ - - remote_reg_info = (struct pdc_region_info *)malloc(sizeof(struct pdc_region_info)); + remote_reg_info = (struct pdc_region_info *)PDC_malloc(sizeof(struct pdc_region_info)); remote_reg_info->ndim = (in.remote_region).ndim; - remote_reg_info->offset = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - remote_reg_info->size = (uint64_t *)malloc(remote_reg_info->ndim * sizeof(uint64_t)); - if (remote_reg_info->ndim >= 1) { - (remote_reg_info->offset)[0] = (in.remote_region).start_0; - (remote_reg_info->size)[0] = (in.remote_region).count_0; - obj_dims[0] = in.obj_dim0; - } - if (remote_reg_info->ndim >= 2) { - (remote_reg_info->offset)[1] = (in.remote_region).start_1; - (remote_reg_info->size)[1] = (in.remote_region).count_1; - obj_dims[1] = in.obj_dim1; - } - if (remote_reg_info->ndim >= 3) { - (remote_reg_info->offset)[2] = (in.remote_region).start_2; - (remote_reg_info->size)[2] = (in.remote_region).count_2; - obj_dims[2] = in.obj_dim2; - } + remote_reg_info->offset = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + remote_reg_info->size = (uint64_t *)PDC_malloc(remote_reg_info->ndim * sizeof(uint64_t)); + + PDC_copy_region_desc((in.remote_region).start, remote_reg_info->offset, remote_reg_info->ndim, + remote_reg_info->ndim); + PDC_copy_region_desc((in.remote_region).count, remote_reg_info->size, remote_reg_info->ndim, + remote_reg_info->ndim); + PDC_copy_region_desc((local_bulk_args->in).obj_dims, obj_dims, remote_reg_info->ndim, + remote_reg_info->ndim); + #ifdef PDC_SERVER_CACHE PDC_transfer_request_data_read_from(in.obj_id, in.obj_ndim, obj_dims, remote_reg_info, (void *)local_bulk_args->data_buf, in.remote_unit); @@ -883,7 +827,7 @@ HG_TEST_RPC_CB(transfer_request, handle) ret_value = HG_Bulk_transfer(info->context, transfer_request_bulk_transfer_read_cb, local_bulk_args, HG_BULK_PUSH, info->addr, in.local_bulk_handle, 0, local_bulk_args->bulk_handle, 0, total_mem_size, HG_OP_ID_IGNORE); - free(remote_reg_info); + remote_reg_info = (struct pdc_region_info *)PDC_free(remote_reg_info); } if (ret_value != HG_SUCCESS) { LOG_ERROR("Error at HG_TEST_RPC_CB(transfer_request, handle)\n"); @@ -904,6 +848,7 @@ HG_TEST_RPC_CB(transfer_request, handle) } #endif - fflush(stdout); FUNC_LEAVE(ret_value); } + +#endif \ No newline at end of file diff --git a/src/server/pdc_server_region/pdc_server_region_transfer.c b/src/server/pdc_server_region/pdc_server_region_transfer.c index ab9b5b1ee..97950aaef 100644 --- a/src/server/pdc_server_region/pdc_server_region_transfer.c +++ b/src/server/pdc_server_region/pdc_server_region_transfer.c @@ -2,6 +2,7 @@ #include "pdc_server_data.h" #include "pdc_timing.h" #include "pdc_logger.h" +#include "pdc_malloc.h" static int io_by_region_g = 1; @@ -42,13 +43,14 @@ PDC_server_transfer_request_finalize() perr_t PDC_commit_request(uint64_t transfer_request_id) { + FUNC_ENTER(NULL); + pdc_transfer_request_status *ptr; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); if (transfer_request_status_list == NULL) { transfer_request_status_list = - (pdc_transfer_request_status *)malloc(sizeof(pdc_transfer_request_status)); + (pdc_transfer_request_status *)PDC_malloc(sizeof(pdc_transfer_request_status)); transfer_request_status_list->status = PDC_TRANSFER_STATUS_PENDING; transfer_request_status_list->handle_ref = NULL; transfer_request_status_list->out_type = -1; @@ -57,17 +59,16 @@ PDC_commit_request(uint64_t transfer_request_id) transfer_request_status_list_end = transfer_request_status_list; } else { - ptr = transfer_request_status_list_end; - ptr->next = (pdc_transfer_request_status *)malloc(sizeof(pdc_transfer_request_status)); - ptr->next->status = PDC_TRANSFER_STATUS_PENDING; - ptr->next->handle_ref = NULL; - ptr->next->out_type = -1; + ptr = transfer_request_status_list_end; + ptr->next = (pdc_transfer_request_status *)PDC_malloc(sizeof(pdc_transfer_request_status)); + ptr->next->status = PDC_TRANSFER_STATUS_PENDING; + ptr->next->handle_ref = NULL; + ptr->next->out_type = -1; ptr->next->transfer_request_id = transfer_request_id; ptr->next->next = NULL; transfer_request_status_list_end = ptr->next; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -79,14 +80,14 @@ PDC_commit_request(uint64_t transfer_request_id) perr_t PDC_finish_request(uint64_t transfer_request_id) { + FUNC_ENTER(NULL); + pdc_transfer_request_status * ptr, *tmp = NULL; perr_t ret_value = SUCCEED; transfer_request_wait_out_t out; transfer_request_wait_all_out_t out_all; char cur_time[64]; - FUNC_ENTER(NULL); - ptr = transfer_request_status_list; while (ptr != NULL) { if (ptr->transfer_request_id == transfer_request_id) { @@ -108,7 +109,7 @@ PDC_finish_request(uint64_t transfer_request_id) ret_value = HG_Respond(ptr->handle, NULL, NULL, &out); } HG_Destroy(ptr->handle); - free(ptr->handle_ref); + ptr->handle_ref = (int *)PDC_free(ptr->handle_ref); } if (tmp != NULL) { /* Case for removing the any nodes but the first one. */ @@ -117,13 +118,13 @@ PDC_finish_request(uint64_t transfer_request_id) if (ptr->next == NULL) { transfer_request_status_list_end = tmp; } - free(ptr); + ptr = (pdc_transfer_request_status *)PDC_free(ptr); } else { /* Case for removing the first node, i.e ptr == transfer_request_status_list*/ tmp = transfer_request_status_list; transfer_request_status_list = transfer_request_status_list->next; - free(tmp); + tmp = (pdc_transfer_request_status *)PDC_free(tmp); /* Free pointer is the last list node, so nothing is left in the list. */ if (transfer_request_status_list == NULL) { transfer_request_status_list_end = NULL; @@ -136,7 +137,6 @@ PDC_finish_request(uint64_t transfer_request_id) ptr = ptr->next; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -149,9 +149,10 @@ PDC_finish_request(uint64_t transfer_request_id) pdc_transfer_status_t PDC_check_request(uint64_t transfer_request_id) { + FUNC_ENTER(NULL); + pdc_transfer_request_status *ptr, *tmp = NULL; pdc_transfer_status_t ret_value = PDC_TRANSFER_STATUS_NOT_FOUND; - FUNC_ENTER(NULL); ptr = transfer_request_status_list; while (ptr != NULL) { @@ -169,13 +170,13 @@ PDC_check_request(uint64_t transfer_request_id) if (ptr->next == NULL) { transfer_request_status_list_end = tmp; } - free(ptr); + ptr = (pdc_transfer_request_status *)PDC_free(ptr); } else { /* Case for removing the first node, i.e ptr == transfer_request_status_list*/ tmp = transfer_request_status_list; transfer_request_status_list = transfer_request_status_list->next; - free(tmp); + tmp = (pdc_transfer_request_status *)PDC_free(tmp); /* Free pointer is the last list node, so nothing is left in the list. */ if (transfer_request_status_list == NULL) { transfer_request_status_list_end = NULL; @@ -188,7 +189,6 @@ PDC_check_request(uint64_t transfer_request_id) ptr = ptr->next; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -200,9 +200,10 @@ PDC_check_request(uint64_t transfer_request_id) pdc_transfer_status_t PDC_try_finish_request(uint64_t transfer_request_id, hg_handle_t handle, int *handle_ref, int out_type) { + FUNC_ENTER(NULL); + pdc_transfer_request_status *ptr; pdc_transfer_status_t ret_value = PDC_TRANSFER_STATUS_NOT_FOUND; - FUNC_ENTER(NULL); ptr = transfer_request_status_list; while (ptr != NULL) { @@ -216,7 +217,6 @@ PDC_try_finish_request(uint64_t transfer_request_id, hg_handle_t handle, int *ha ptr = ptr->next; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -231,14 +231,13 @@ PDC_try_finish_request(uint64_t transfer_request_id, hg_handle_t handle, int *ha pdcid_t PDC_transfer_request_id_register() { - pdcid_t ret_value; - FUNC_ENTER(NULL); + pdcid_t ret_value; + ret_value = transfer_request_id_g; transfer_request_id_g++; - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -262,6 +261,8 @@ perr_t PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *obj_dims, struct pdc_region_info *region_info, void *buf, size_t unit, int is_write) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; int fd; char * data_path = NULL; @@ -271,10 +272,6 @@ PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *ob uint64_t i, j; char cur_time[64]; - FUNC_ENTER(NULL); - - /* PDC_get_time_str(cur_time); */ - if (io_by_region_g || obj_ndim == 0) { // PDC_Server_register_obj_region(obj_id); if (is_write) { @@ -283,13 +280,10 @@ PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *ob else { PDC_Server_data_read_from(obj_id, region_info, buf, unit); } - // PDC_Server_unregister_obj_region(obj_id); - goto done; - } - if (obj_ndim != (int)region_info->ndim) { - LOG_ERROR("Server I/O error: Obj dim does not match obj dim\n"); - goto done; + PGOTO_DONE(ret_value); } + if (obj_ndim != (int)region_info->ndim) + PGOTO_ERROR(FAIL, "Obj dim does not match obj dim\n"); user_specified_data_path = getenv("PDC_DATA_LOC"); if (user_specified_data_path != NULL) { @@ -305,9 +299,6 @@ PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *ob PDC_get_rank(), PDC_get_rank()); PDC_mkdir(storage_location); - /* LOG_ERROR("Rank %d, write to offset %llu, size %llu\n", server_rank, region_info->offset[0], - * region_info->size[0]); */ - fd = open(storage_location, O_RDWR | O_CREAT, 0666); if (region_info->ndim == 1) { lseek(fd, region_info->offset[0] * unit, SEEK_SET); @@ -372,40 +363,42 @@ PDC_Server_transfer_request_io(uint64_t obj_id, int obj_ndim, const uint64_t *ob close(fd); done: - /* PDC_get_time_str(cur_time); */ - - fflush(stdout); FUNC_LEAVE(ret_value); } int clean_write_bulk_data(transfer_request_all_data *request_data) { - free(request_data->obj_id); - free(request_data->obj_ndim); - free(request_data->remote_ndim); - free(request_data->remote_offset); - free(request_data->unit); - free(request_data->data_buf); - return 0; + FUNC_ENTER(NULL); + + request_data->obj_id = (pdcid_t *)PDC_free(request_data->obj_id); + request_data->obj_ndim = (int *)PDC_free(request_data->obj_ndim); + request_data->remote_ndim = (int *)PDC_free(request_data->remote_ndim); + request_data->remote_offset = (uint64_t **)PDC_free(request_data->remote_offset); + request_data->unit = (size_t *)PDC_free(request_data->unit); + request_data->data_buf = (char **)PDC_free(request_data->data_buf); + + FUNC_LEAVE(0); } int parse_bulk_data(void *buf, transfer_request_all_data *request_data, pdc_access_t access_type) { + FUNC_ENTER(NULL); + char * ptr = (char *)buf; int i, j; uint64_t data_size; // preallocate arrays of size number of objects - request_data->obj_id = (pdcid_t *)malloc(sizeof(pdcid_t) * request_data->n_objs); - request_data->obj_ndim = (int *)malloc(sizeof(int) * request_data->n_objs); - request_data->remote_ndim = (int *)malloc(sizeof(int) * request_data->n_objs); - request_data->remote_offset = (uint64_t **)malloc(sizeof(uint64_t *) * request_data->n_objs * 3); + request_data->obj_id = (pdcid_t *)PDC_malloc(sizeof(pdcid_t) * request_data->n_objs); + request_data->obj_ndim = (int *)PDC_malloc(sizeof(int) * request_data->n_objs); + request_data->remote_ndim = (int *)PDC_malloc(sizeof(int) * request_data->n_objs); + request_data->remote_offset = (uint64_t **)PDC_malloc(sizeof(uint64_t *) * request_data->n_objs * 3); request_data->remote_length = request_data->remote_offset + request_data->n_objs; request_data->obj_dims = request_data->remote_length + request_data->n_objs; - request_data->unit = (size_t *)malloc(sizeof(size_t) * request_data->n_objs); - request_data->data_buf = (char **)malloc(sizeof(char *) * request_data->n_objs); + request_data->unit = (size_t *)PDC_malloc(sizeof(size_t) * request_data->n_objs); + request_data->data_buf = (char **)PDC_malloc(sizeof(char *) * request_data->n_objs); /* * The following times n_objs (one set per object). @@ -448,5 +441,5 @@ parse_bulk_data(void *buf, transfer_request_all_data *request_data, pdc_access_t } } - return 0; + FUNC_LEAVE(0); } diff --git a/src/server/pdc_server_region/pdc_server_region_transfer_metadata_query.c b/src/server/pdc_server_region/pdc_server_region_transfer_metadata_query.c index 69ac1c2ee..c66ecd905 100644 --- a/src/server/pdc_server_region/pdc_server_region_transfer_metadata_query.c +++ b/src/server/pdc_server_region/pdc_server_region_transfer_metadata_query.c @@ -4,6 +4,8 @@ #include #include "pdc_region.h" #include "pdc_logger.h" +#include "pdc_timing.h" +#include "pdc_malloc.h" typedef struct pdc_region_metadata_pkg { uint64_t * reg_offset; @@ -58,18 +60,19 @@ static uint64_t metadata_query_buf_create(pdc_obj_region_metadata *regions, int perr_t transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; char * ptr; int n_objs, reg_count; int i, j; - FUNC_ENTER(NULL); metadata_server_objs = NULL; metadata_server_objs_end = NULL; metadata_query_buf_head = NULL; metadata_query_buf_end = NULL; pdc_server_size = pdc_server_size_input; - data_server_bytes = (uint64_t *)calloc(pdc_server_size, sizeof(uint64_t)); + data_server_bytes = (uint64_t *)PDC_calloc(pdc_server_size, sizeof(uint64_t)); query_id_g = 100000; ptr = checkpoint; pthread_mutex_init(&metadata_query_mutex, NULL); @@ -79,11 +82,12 @@ transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint ptr += sizeof(int); for (i = 0; i < n_objs; ++i) { if (metadata_server_objs) { - metadata_server_objs_end->next = (pdc_obj_metadata_pkg *)malloc(sizeof(pdc_obj_metadata_pkg)); - metadata_server_objs_end = metadata_server_objs_end->next; + metadata_server_objs_end->next = + (pdc_obj_metadata_pkg *)PDC_malloc(sizeof(pdc_obj_metadata_pkg)); + metadata_server_objs_end = metadata_server_objs_end->next; } else { - metadata_server_objs = (pdc_obj_metadata_pkg *)malloc(sizeof(pdc_obj_metadata_pkg)); + metadata_server_objs = (pdc_obj_metadata_pkg *)PDC_malloc(sizeof(pdc_obj_metadata_pkg)); metadata_server_objs_end = metadata_server_objs; } @@ -95,12 +99,12 @@ transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint ptr += sizeof(int); metadata_server_objs_end->regions = - (pdc_region_metadata_pkg *)malloc(sizeof(pdc_region_metadata_pkg)); + (pdc_region_metadata_pkg *)PDC_malloc(sizeof(pdc_region_metadata_pkg)); metadata_server_objs_end->regions_end = metadata_server_objs_end->regions; metadata_server_objs_end->regions_end->next = NULL; metadata_server_objs_end->regions_end->reg_offset = - (uint64_t *)malloc(sizeof(uint64_t) * metadata_server_objs_end->ndim * 2); + (uint64_t *)PDC_malloc(sizeof(uint64_t) * metadata_server_objs_end->ndim * 2); metadata_server_objs_end->regions_end->reg_size = metadata_server_objs_end->regions_end->reg_offset + metadata_server_objs_end->ndim; metadata_server_objs_end->regions_end->data_server_id = *(uint32_t *)ptr; @@ -111,12 +115,12 @@ transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint for (j = 1; j < reg_count; ++j) { metadata_server_objs_end->regions->next = - (pdc_region_metadata_pkg *)malloc(sizeof(pdc_region_metadata_pkg)); + (pdc_region_metadata_pkg *)PDC_malloc(sizeof(pdc_region_metadata_pkg)); metadata_server_objs_end->regions_end = metadata_server_objs_end->regions_end->next; metadata_server_objs_end->regions_end->next = NULL; metadata_server_objs_end->regions_end->reg_offset = - (uint64_t *)malloc(sizeof(uint64_t) * metadata_server_objs_end->ndim * 2); + (uint64_t *)PDC_malloc(sizeof(uint64_t) * metadata_server_objs_end->ndim * 2); metadata_server_objs_end->regions_end->reg_size = metadata_server_objs_end->regions_end->reg_offset + metadata_server_objs_end->ndim; metadata_server_objs_end->regions_end->data_server_id = *(uint32_t *)ptr; @@ -128,7 +132,6 @@ transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint } } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -138,29 +141,29 @@ transfer_request_metadata_query_init(int pdc_server_size_input, char *checkpoint perr_t transfer_request_metadata_query_finalize() { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_obj_metadata_pkg * obj_temp, *obj_temp2; pdc_region_metadata_pkg *region_temp, *region_temp2; - FUNC_ENTER(NULL); obj_temp = metadata_server_objs; while (obj_temp) { region_temp = obj_temp->regions; while (region_temp) { - region_temp2 = region_temp; - region_temp = region_temp->next; - free(region_temp2->reg_offset); - free(region_temp2); + region_temp2 = region_temp; + region_temp = region_temp->next; + region_temp2->reg_offset = (uint64_t *)PDC_free(region_temp2->reg_offset); + region_temp2 = (pdc_region_metadata_pkg *)PDC_free(region_temp2); } obj_temp2 = obj_temp; obj_temp = obj_temp->next; - free(obj_temp2); + obj_temp2 = (pdc_obj_metadata_pkg *)PDC_free(obj_temp2); } metadata_server_objs = NULL; pthread_mutex_destroy(&metadata_query_mutex); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -176,12 +179,14 @@ transfer_request_metadata_query_finalize() perr_t transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoint_size) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; pdc_obj_metadata_pkg * obj_temp; pdc_region_metadata_pkg *region_temp; char * ptr; int reg_count, obj_count; - FUNC_ENTER(NULL); + pthread_mutex_lock(&metadata_query_mutex); // First value is the size of objects @@ -201,7 +206,7 @@ transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoi obj_temp = obj_temp->next; obj_count++; } - *checkpoint = (char *)malloc(*checkpoint_size); + *checkpoint = (char *)PDC_malloc(*checkpoint_size); ptr = *checkpoint; memcpy(ptr, &obj_count, sizeof(int)); ptr += sizeof(int); @@ -234,7 +239,6 @@ transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoi } pthread_mutex_unlock(&metadata_query_mutex); - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -245,6 +249,8 @@ transfer_request_metadata_query_checkpoint(char **checkpoint, uint64_t *checkpoi static uint64_t metadata_query_buf_create(pdc_obj_region_metadata *regions, int size, uint64_t *total_buf_size_ptr) { + FUNC_ENTER(NULL); + pdc_obj_metadata_pkg * temp; pdc_region_metadata_pkg *region_metadata; int i; @@ -256,11 +262,10 @@ metadata_query_buf_create(pdc_obj_region_metadata *regions, int size, uint64_t * int * transfer_request_counters; int transfer_request_counter_total; - FUNC_ENTER(NULL); // Iterate through all input regions. We compute the total buf size in this loop total_data_size = sizeof(int); transfer_request_counter_total = 0; - transfer_request_counters = (int *)calloc(size, sizeof(int)); + transfer_request_counters = (int *)PDC_calloc(size, sizeof(int)); for (i = 0; i < size; ++i) { temp = metadata_server_objs; // First check which obj list @@ -296,9 +301,9 @@ metadata_query_buf_create(pdc_obj_region_metadata *regions, int size, uint64_t * goto done; } - query_buf = (pdc_metadata_query_buf *)malloc(sizeof(pdc_metadata_query_buf)); + query_buf = (pdc_metadata_query_buf *)PDC_malloc(sizeof(pdc_metadata_query_buf)); // Free query_buf->buf in transfer_request_metadata_query2_bulk_transfer_cb. - query_buf->buf = (char *)malloc(total_data_size); + query_buf->buf = (char *)PDC_malloc(total_data_size); query_buf->next = NULL; query_buf->id = query_id_g; query_id_g++; @@ -334,7 +339,7 @@ metadata_query_buf_create(pdc_obj_region_metadata *regions, int size, uint64_t * ptr += sizeof(uint64_t) * regions[i].ndim; } // overlap_size is freed together. - free(overlap_offset); + overlap_offset = (uint64_t *)PDC_free(overlap_offset); region_metadata = region_metadata->next; } } @@ -351,21 +356,20 @@ metadata_query_buf_create(pdc_obj_region_metadata *regions, int size, uint64_t * done: *total_buf_size_ptr = total_data_size; - free(transfer_request_counters); + transfer_request_counters = (int *)PDC_free(transfer_request_counters); FUNC_LEAVE(query_id); } /** * Find previously stored query buffer and return the buffer. Delete the entry from the linked list. */ - perr_t transfer_request_metadata_query_lookup_query_buf(uint64_t query_id, char **buf_ptr) { + FUNC_ENTER(NULL); + pdc_metadata_query_buf *metadata_query, *previous; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - /* pthread_mutex_lock(&metadata_query_mutex); */ previous = NULL; int i = 0; @@ -383,8 +387,8 @@ transfer_request_metadata_query_lookup_query_buf(uint64_t query_id, char **buf_p if (metadata_query_buf_end == metadata_query) { metadata_query_buf_end = previous; } - free(metadata_query); - goto done; + metadata_query = (pdc_metadata_query_buf *)PDC_free(metadata_query); + PGOTO_DONE(ret_value); } i++; previous = metadata_query; @@ -392,8 +396,6 @@ transfer_request_metadata_query_lookup_query_buf(uint64_t query_id, char **buf_p } *buf_ptr = NULL; done: - /* pthread_mutex_unlock(&metadata_query_mutex); */ - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -406,6 +408,8 @@ uint64_t transfer_request_metadata_query_parse(int32_t n_objs, char *buf, uint8_t is_write, uint64_t *total_buf_size_ptr) { + FUNC_ENTER(NULL); + char * ptr = buf; int i; uint64_t query_id = 0; @@ -414,10 +418,7 @@ transfer_request_metadata_query_parse(int32_t n_objs, char *buf, uint8_t is_writ uint8_t region_partition; pdc_obj_region_metadata *region_metadata; - FUNC_ENTER(NULL); - /* pthread_mutex_lock(&metadata_query_mutex); */ - - region_metadata = (pdc_obj_region_metadata *)malloc(sizeof(pdc_obj_region_metadata) * n_objs); + region_metadata = (pdc_obj_region_metadata *)PDC_malloc(sizeof(pdc_obj_region_metadata) * n_objs); for (i = 0; i < n_objs; ++i) { region_metadata[i].obj_id = *((uint64_t *)ptr); @@ -440,10 +441,8 @@ transfer_request_metadata_query_parse(int32_t n_objs, char *buf, uint8_t is_writ unit, data_server_id, region_partition); } } - query_id = metadata_query_buf_create(region_metadata, n_objs, total_buf_size_ptr); - free(region_metadata); - /* pthread_mutex_unlock(&metadata_query_mutex); */ - fflush(stdout); + query_id = metadata_query_buf_create(region_metadata, n_objs, total_buf_size_ptr); + region_metadata = (pdc_obj_region_metadata *)PDC_free(region_metadata); FUNC_LEAVE(query_id); } @@ -452,16 +451,17 @@ transfer_request_metadata_reg_append(pdc_region_metadata_pkg *regions, int ndim, uint64_t *reg_size, size_t unit, uint32_t data_server_id, uint8_t region_partition) { + FUNC_ENTER(NULL); + hg_return_t ret_value = HG_SUCCESS; uint64_t min_bytes; uint64_t min_bytes_server; int i; uint64_t total_reg_size; - FUNC_ENTER(NULL); regions->next = NULL; - regions->reg_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim * 2); + regions->reg_offset = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim * 2); regions->reg_size = regions->reg_offset + ndim; memcpy(regions->reg_offset, reg_offset, sizeof(uint64_t) * ndim); @@ -489,7 +489,6 @@ transfer_request_metadata_reg_append(pdc_region_metadata_pkg *regions, int ndim, regions->data_server_id = data_server_id; } - fflush(stdout); FUNC_LEAVE(ret_value); } @@ -497,11 +496,12 @@ static uint64_t transfer_request_metadata_query_append(uint64_t obj_id, int ndim, uint64_t *reg_offset, uint64_t *reg_size, size_t unit, uint32_t data_server_id, uint8_t region_partition) { + FUNC_ENTER(NULL); + pdc_obj_metadata_pkg * temp; pdc_region_metadata_pkg *region_metadata; pdc_region_metadata_pkg *temp_region_metadata; - FUNC_ENTER(NULL); temp = metadata_server_objs; while (temp) { if (temp->obj_id == obj_id) { @@ -510,7 +510,7 @@ transfer_request_metadata_query_append(uint64_t obj_id, int ndim, uint64_t *reg_ temp = temp->next; } if (temp == NULL) { - temp = (pdc_obj_metadata_pkg *)malloc(sizeof(pdc_obj_metadata_pkg)); + temp = (pdc_obj_metadata_pkg *)PDC_malloc(sizeof(pdc_obj_metadata_pkg)); if (metadata_server_objs) { metadata_server_objs_end->next = temp; metadata_server_objs_end = temp; @@ -534,7 +534,7 @@ transfer_request_metadata_query_append(uint64_t obj_id, int ndim, uint64_t *reg_ region_metadata = region_metadata->next; } // Reaching this line means that we are creating a new region and append it to the end of the object list. - temp_region_metadata = (pdc_region_metadata_pkg *)malloc(sizeof(pdc_region_metadata_pkg)); + temp_region_metadata = (pdc_region_metadata_pkg *)PDC_malloc(sizeof(pdc_region_metadata_pkg)); if (temp->regions) { temp->regions_end->next = temp_region_metadata; temp->regions_end = temp_region_metadata; @@ -545,6 +545,5 @@ transfer_request_metadata_query_append(uint64_t obj_id, int ndim, uint64_t *reg_ } transfer_request_metadata_reg_append(temp_region_metadata, ndim, reg_offset, reg_size, unit, data_server_id, region_partition); - fflush(stdout); FUNC_LEAVE(temp->regions_end->data_server_id); } diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 212916ea0..bf9935c84 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -42,98 +42,70 @@ endif() include_directories(${TEST_EXT_INCLUDE_DIRS}) set(PROGRAMS - pdc_init -# create_prop -# create_region -# create_obj_coll -# set_prop - dup_prop - read_obj - read_obj_shared -# create_cont -# create_cont_coll - open_cont - cont_life - cont_iter - cont_info - cont_del - cont_getid - cont_tags - consistency_semantics - create_obj - open_obj - open_existing_obj - obj_info - obj_del - obj_iter - obj_life -# obj_dim - obj_buf - obj_tags - obj_put_data - obj_get_data - read_write_perf - read_write_col_perf - region_transfer_partial - region_transfer_2D_partial - region_transfer_3D_partial - region_transfer_overlap - region_transfer_overlap_2D - region_transfer_overlap_3D - region_transfer_merge - obj_round_robin_io - obj_round_robin_io_all -# close_server -# stat_obj - delete_obj - vpicio - vpicio_mts - bdcats - vpicio_old - bdcats_old -# cont_add_del -# data_server_meta_test - kvtag_add_get -# kvtag_get - kvtag_query -# obj_transformation - region_transfer_query - region_transfer - region_transfer_status - region_transfer_skewed - region_transfer_2D - # region_transfer_2D_skewed - region_transfer_3D - # region_transfer_3D_skewed - region_transfer_write_only - region_transfer_read_only - region_transfer_write_read - region_transfer_all - region_transfer_all_2D - region_transfer_all_3D - region_transfer_all_append - region_transfer_all_append_2D - region_transfer_all_append_3D - region_transfer_all_split_wait - region_transfer_set_dims - region_transfer_set_dims_2D - region_transfer_set_dims_3D - #query_vpic_create_data - #query_vpic - #query_vpic_multi - #query_vpic_multi_preload - #query_vpic_multi_nopreload - #query_vpic_bin_sds_preload - #query_vpic_bin_sds_nopreload - #query_vpic_bin_sds1_preload - #query_vpic_bin_sds1_nopreload - #query_vpic_multi_nopreload1 - #gen_fastbit_idx - #query_vpic_exyz_nopreload - #query_vpic_exyz_preload - query_data - producer_waitall - ) + misc/pdc_init + prop/dup_prop + obj/read_obj + obj/read_obj_shared + cont/open_cont + cont/cont_life + cont/cont_iter + cont/cont_info + cont/cont_del + cont/cont_getid + cont/cont_tags + misc/consistency_semantics + obj/create_obj + obj/open_obj + obj/open_existing_obj + obj/obj_info + obj/obj_del + obj/obj_iter + obj/obj_life + obj/obj_buf + obj/obj_tags + obj/obj_put_data + obj/obj_get_data + misc/read_write_perf + misc/read_write_col_perf + region/region_transfer_partial + region/region_transfer_2D_partial + region/region_transfer_3D_partial + region/region_transfer_overlap + region/region_transfer_overlap_2D + region/region_transfer_overlap_3D + region/region_transfer_merge + obj/obj_round_robin_io + obj/obj_round_robin_io_all + obj/delete_obj + misc/vpicio + misc/vpicio_mts + misc/bdcats + deprecated/vpicio_old + deprecated/bdcats_old + tags/kvtag_add_get + tags/kvtag_query + region/region_transfer_query + region/region_transfer + region/region_transfer_status + region/region_transfer_skewed + region/region_transfer_2D + region/region_transfer_3D + region/region_transfer_write_only + region/region_transfer_read_only + region/region_transfer_write_read + region/region_transfer_all + region/region_transfer_all_2D + region/region_transfer_all_3D + region/region_transfer_all_append + region/region_transfer_all_append_2D + region/region_transfer_all_append_3D + region/region_transfer_all_split_wait + region/region_transfer_set_dims + region/region_transfer_set_dims_2D + region/region_transfer_set_dims_3D + query/query_data + misc/producer_waitall +) # TODO: Check if import_vpic.c is needed. If yes, we have to add the following : # if (HDF5_FOUND) @@ -143,31 +115,53 @@ set(PROGRAMS # message(FATAL_ERROR "Could not find HDF5, please make sure that HDF5 has been compiled with shared libraries enabled.") # endif() - foreach(program ${PROGRAMS}) - add_executable(${program} ${program}.c) - target_link_libraries(${program} pdc pdc_commons ${TEST_EXT_LIB}) - target_include_directories(${program} PRIVATE ${TEST_EXT_INCLUDE_DIRS}) -endforeach(program) + get_filename_component(program_name ${program} NAME) + get_filename_component(program_dir ${program} DIRECTORY) + + set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${program}.c") + + if(EXISTS ${SOURCE_FILE}) + add_executable(${program_name} ${SOURCE_FILE}) + target_include_directories(${program_name} PRIVATE + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/src/tests/include + ) + target_link_libraries(${program_name} pdc pdc_commons ${TEST_EXT_LIB}) + else() + message(WARNING "Source file ${SOURCE_FILE} not found, skipping ${program_name}.") + endif() +endforeach() if(BUILD_MPI_TESTING) set(MPI_PROGRAMS - kvtag_range_query_scale - kvtag_affix_query_scale - kvtag_add_get_benchmark - kvtag_add_get_scale - llsm_idioms_bench - idioms_ci_test + tags/kvtag_range_query_scale + tags/kvtag_affix_query_scale + tags/kvtag_add_get_benchmark + tags/kvtag_add_get_scale + misc/llsm_idioms_bench + misc/idioms_ci_test ) foreach(program ${MPI_PROGRAMS}) - add_executable(${program} ${program}.c) - if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") - target_compile_options(${program} PRIVATE ${SUPPRESSED_LIST}) + get_filename_component(program_name ${program} NAME) + get_filename_component(program_dir ${program} DIRECTORY) + + set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${program_dir}/${program_name}.c") + + if(EXISTS ${SOURCE_FILE}) + add_executable(${program_name} ${SOURCE_FILE}) + if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(${program_name} PRIVATE ${SUPPRESSED_LIST}) + endif() + target_link_libraries(${program_name} pdc pdc_commons ${TEST_EXT_LIB}) + target_include_directories(${program_name} PRIVATE + ${TEST_EXT_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/src/tests/include) + else() + message(WARNING "Source file ${SOURCE_FILE} not found, skipping ${program_name}.") endif() - target_link_libraries(${program} pdc pdc_commons ${TEST_EXT_LIB}) - target_include_directories(${program} PRIVATE ${TEST_EXT_INCLUDE_DIRS}) - endforeach(program) + endforeach() endif() @@ -175,10 +169,10 @@ if(UUID_FOUND) message(STATUS "UUID library found: ${UUID_LIBRARIES}") message(STATUS "UUID include directory: ${UUID_INCLUDE_DIRS}") set(ENHANCED_PROGRAMS - dart_algo_sim - dart_attr_dist_test - dart_func_test - dart_test + dart/dart_algo_sim + dart/dart_attr_dist_test + dart/dart_func_test + dart/dart_test ) set(TEST_EXT_LIB ${TEST_EXT_LIB} ${UUID_LIBRARIES}) @@ -198,9 +192,18 @@ if(UUID_FOUND) endif(PDC_ENABLE_JULIA) foreach(program ${ENHANCED_PROGRAMS}) - add_executable(${program} ${program}.c ${EXTRA_SRC_FILE}) - target_link_libraries(${program} pdc pdc_commons ${TEST_EXT_LIB}) - target_include_directories(${program} PRIVATE ${TEST_EXT_INCLUDE_DIRS}) + get_filename_component(program_name ${program} NAME) + get_filename_component(program_dir ${program} DIRECTORY) + + set(SOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${program}.c") + + if(EXISTS ${SOURCE_FILE}) + add_executable(${program_name} ${SOURCE_FILE} ${EXTRA_SRC_FILE}) + target_link_libraries(${program_name} pdc pdc_commons ${TEST_EXT_LIB}) + target_include_directories(${program_name} PRIVATE ${TEST_EXT_INCLUDE_DIRS}) + else() + message(WARNING "Source file ${SOURCE_FILE} not found, skipping ${program_name}.") + endif() endforeach(program) endif(UUID_FOUND) @@ -211,13 +214,13 @@ set(SCRIPTS run_multiple_test.sh run_multiple_mpi_test.sh run_checkpoint_restart_test.sh - ) +) foreach(script ${SCRIPTS}) file( - COPY ${script} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE WORLD_READ WORLD_EXECUTE - ) + COPY ${script} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE WORLD_READ WORLD_EXECUTE + ) endforeach(script) @@ -229,7 +232,7 @@ endforeach(script) OPTION(GEN_TRANSFORM_LIB "Create a transform library" OFF) if(GEN_TRANSFORM_LIB) FIND_LIBRARY(BLOSC_LIBRARY blosc $ENV{HOME}/Sandbox/c-blosc/build/blosc) - set(PDC_TRANSFORMS_SRCS pdc_transforms_lib.c) + set(PDC_TRANSFORMS_SRCS transforms/pdc_transforms_lib.c) add_library(pdctransforms ${PDC_TRANSFORMS_SRCS}) target_link_libraries(pdctransforms pdc ${BLOSC_LIBRARY}) endif() @@ -237,15 +240,12 @@ endif() # ******************************************* # Create a transform library for testing # ******************************************* -set(PDC_ANALYSIS_SRCS pdc_analysis_lib.c) +set(PDC_ANALYSIS_SRCS analysis/pdc_analysis_lib.c) add_library(pdcanalysis ${PDC_ANALYSIS_SRCS}) target_link_libraries(pdcanalysis pdc) add_test(NAME pdc_init WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./pdc_init ) -#add_test(NAME create_prop WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./create_prop ) -#add_test(NAME set_prop WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./set_prop ) add_test(NAME dup_prop WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./dup_prop ) -#add_test(NAME create_cont WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./create_cont ) add_test(NAME open_cont WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./open_cont ) add_test(NAME cont_life WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./cont_life ) add_test(NAME cont_iter WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./cont_iter ) @@ -253,12 +253,10 @@ add_test(NAME cont_info WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTO add_test(NAME cont_getid WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./cont_getid ) add_test(NAME cont_tags WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./cont_tags ) add_test(NAME cont_del WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./cont_del ) -#add_test(NAME create_obj WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./create_obj ) add_test(NAME obj_del WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_del ) add_test(NAME open_obj WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./open_obj ) add_test(NAME obj_iter WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_iter ) add_test(NAME obj_life WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_life ) -#add_test(NAME obj_dim WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_dim ) add_test(NAME obj_buf WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_buf ) add_test(NAME obj_tags WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_tags ) add_test(NAME kvtag_add_get WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./kvtag_add_get) @@ -267,14 +265,11 @@ add_test(NAME idioms_ci_test WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECT add_test(NAME obj_info WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_info ) add_test(NAME obj_put_data WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_put_data ) add_test(NAME obj_get_data WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./obj_get_data ) -#add_test(NAME create_region WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./create_region ) add_test(NAME region_transfer WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer ) add_test(NAME region_transfer_status WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_status ) add_test(NAME region_transfer_2D WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_2D ) add_test(NAME region_transfer_3D WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_3D ) add_test(NAME region_transfer_skewed WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_skewed ) -# add_test(NAME region_transfer_2D_skewed WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_2D_skewed ) -# add_test(NAME region_transfer_3D_skewed WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_3D_skewed ) add_test(NAME region_transfer_partial WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_partial ) add_test(NAME region_transfer_2D_partial WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_2D_partial ) add_test(NAME region_transfer_3D_partial WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./region_transfer_3D_partial ) @@ -317,102 +312,77 @@ add_test(NAME read_obj_int64 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTOR add_test(NAME read_obj_uint64 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./read_obj o 1 uint64) add_test(NAME read_obj_int16 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./read_obj o 1 int16) add_test(NAME read_obj_int8 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./read_obj o 1 int8) -# add_test(NAME query_data WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_test.sh ./query_data o 1) -#add_test(NAME region_transfer_write_read2 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_checkpoint_restart_test.sh ./region_transfer_write_only ./region_transfer_read_only) -#add_test(NAME vpicio_bdcats WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio_old ./bdcats_old) add_test(NAME vpicio_bdcats_transfer_request WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./bdcats) -set_tests_properties(pdc_init PROPERTIES LABELS serial ) -#set_tests_properties(create_prop PROPERTIES LABELS serial ) -#set_tests_properties(set_prop PROPERTIES LABELS serial ) -set_tests_properties(dup_prop PROPERTIES LABELS serial ) -#set_tests_properties(create_cont PROPERTIES LABELS serial ) -set_tests_properties(open_cont PROPERTIES LABELS serial ) -set_tests_properties(cont_life PROPERTIES LABELS serial ) -set_tests_properties(cont_iter PROPERTIES LABELS serial ) -set_tests_properties(cont_info PROPERTIES LABELS serial ) -set_tests_properties(cont_getid PROPERTIES LABELS serial ) -set_tests_properties(cont_tags PROPERTIES LABELS serial ) -set_tests_properties(cont_del PROPERTIES LABELS serial ) -#set_tests_properties(create_obj PROPERTIES LABELS serial ) -set_tests_properties(obj_del PROPERTIES LABELS serial ) -set_tests_properties(open_obj PROPERTIES LABELS serial ) -set_tests_properties(obj_iter PROPERTIES LABELS serial ) -set_tests_properties(obj_life PROPERTIES LABELS serial ) -#set_tests_properties(obj_dim PROPERTIES LABELS serial ) -set_tests_properties(obj_buf PROPERTIES LABELS serial ) -set_tests_properties(obj_tags PROPERTIES LABELS serial ) -set_tests_properties(kvtag_add_get PROPERTIES LABELS serial ) -set_tests_properties(kvtag_query PROPERTIES LABELS serial ) -set_tests_properties(idioms_ci_test PROPERTIES LABELS serial ) -set_tests_properties(obj_info PROPERTIES LABELS serial ) -set_tests_properties(obj_put_data PROPERTIES LABELS serial ) -set_tests_properties(obj_get_data PROPERTIES LABELS serial ) -#set_tests_properties(create_region PROPERTIES LABELS serial ) -set_tests_properties(region_transfer PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_status PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_skewed PROPERTIES LABELS serial ) -# set_tests_properties(region_transfer_2D_skewed PROPERTIES LABELS serial ) -# set_tests_properties(region_transfer_3D_skewed PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_partial PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_2D_partial PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_3D_partial PROPERTIES LABELS serial ) - -set_tests_properties(region_transfer_overlap PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_overlap_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_overlap_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_write_read PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all2 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all2_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all2_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append2 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append2_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append2_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all3 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all3_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all3_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append3 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append3_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append3_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all4 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all4_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all4_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append4 PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append4_2D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_append4_3D PROPERTIES LABELS serial ) -set_tests_properties(region_transfer_all_split_wait PROPERTIES LABELS serial ) -set_tests_properties(read_obj_int PROPERTIES LABELS serial ) -set_tests_properties(read_obj_float PROPERTIES LABELS serial ) -set_tests_properties(read_obj_double PROPERTIES LABELS serial ) -set_tests_properties(read_obj_char PROPERTIES LABELS serial ) -set_tests_properties(read_obj_uint PROPERTIES LABELS serial ) -set_tests_properties(read_obj_int64 PROPERTIES LABELS serial ) -set_tests_properties(read_obj_uint64 PROPERTIES LABELS serial ) -set_tests_properties(read_obj_int16 PROPERTIES LABELS serial ) -set_tests_properties(read_obj_int8 PROPERTIES LABELS serial ) -# set_tests_properties(query_data PROPERTIES LABELS serial ) -#set_tests_properties(vpicio_bdcats PROPERTIES LABELS serial ) -set_tests_properties(vpicio_bdcats_transfer_request PROPERTIES LABELS serial ) -#set_tests_properties(region_transfer_write_read2 PROPERTIES LABELS serial ) -#add_test(NAME vpicio_query_vpic WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic ) -#add_test(NAME vpicio_query_vpic_multi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_multi ) -#add_test(NAME vpicio_query_vpic_multi_preload WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_multi_preload ) -#add_test(NAME vpicio_query_vpic_multi_nopreload1 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_multi_nopreload1 ) -#add_test(NAME vpicio_query_vpic_create_data WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_create_data ) -#add_test(NAME vpicio_query_vpic_bin_sds1_nopreload WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_bin_sds1_nopreload ) -#add_test(NAME vpicio_query_vpic_bin_sds1_preload WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_bin_sds1_preload ) -#add_test(NAME vpicio_query_vpic_exyz_preload WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_exyz_preload ) -#add_test(NAME vpicio_query_vpic_exyz_nopreload WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND run_multiple_test.sh ./vpicio ./query_vpic_exyz_nopreload ) - +set_tests_properties(pdc_init PROPERTIES LABELS serial) +set_tests_properties(dup_prop PROPERTIES LABELS serial) +set_tests_properties(open_cont PROPERTIES LABELS serial) +set_tests_properties(cont_life PROPERTIES LABELS serial) +set_tests_properties(cont_iter PROPERTIES LABELS serial) +set_tests_properties(cont_info PROPERTIES LABELS serial) +set_tests_properties(cont_getid PROPERTIES LABELS serial) +set_tests_properties(cont_tags PROPERTIES LABELS serial) +set_tests_properties(cont_del PROPERTIES LABELS serial) +set_tests_properties(obj_del PROPERTIES LABELS serial) +set_tests_properties(open_obj PROPERTIES LABELS serial) +set_tests_properties(obj_iter PROPERTIES LABELS serial) +set_tests_properties(obj_life PROPERTIES LABELS serial) +set_tests_properties(obj_buf PROPERTIES LABELS serial) +set_tests_properties(obj_tags PROPERTIES LABELS serial) +set_tests_properties(kvtag_add_get PROPERTIES LABELS serial) +set_tests_properties(kvtag_query PROPERTIES LABELS serial) +set_tests_properties(idioms_ci_test PROPERTIES LABELS serial) +set_tests_properties(obj_info PROPERTIES LABELS serial) +set_tests_properties(obj_put_data PROPERTIES LABELS serial) +set_tests_properties(obj_get_data PROPERTIES LABELS serial) +set_tests_properties(region_transfer PROPERTIES LABELS serial) +set_tests_properties(region_transfer_status PROPERTIES LABELS serial) +set_tests_properties(region_transfer_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_skewed PROPERTIES LABELS serial) +set_tests_properties(region_transfer_partial PROPERTIES LABELS serial) +set_tests_properties(region_transfer_2D_partial PROPERTIES LABELS serial) +set_tests_properties(region_transfer_3D_partial PROPERTIES LABELS serial) +set_tests_properties(region_transfer_overlap PROPERTIES LABELS serial) +set_tests_properties(region_transfer_overlap_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_overlap_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_write_read PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all2 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all2_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all2_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append2 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append2_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append2_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all3 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all3_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all3_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append3 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append3_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append3_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all4 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all4_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all4_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append4 PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append4_2D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_append4_3D PROPERTIES LABELS serial) +set_tests_properties(region_transfer_all_split_wait PROPERTIES LABELS serial) +set_tests_properties(read_obj_int PROPERTIES LABELS serial) +set_tests_properties(read_obj_float PROPERTIES LABELS serial) +set_tests_properties(read_obj_double PROPERTIES LABELS serial) +set_tests_properties(read_obj_char PROPERTIES LABELS serial) +set_tests_properties(read_obj_uint PROPERTIES LABELS serial) +set_tests_properties(read_obj_int64 PROPERTIES LABELS serial) +set_tests_properties(read_obj_uint64 PROPERTIES LABELS serial) +set_tests_properties(read_obj_int16 PROPERTIES LABELS serial) +set_tests_properties(read_obj_int8 PROPERTIES LABELS serial) +set_tests_properties(vpicio_bdcats_transfer_request PROPERTIES LABELS serial) if(BUILD_MPI_TESTING) add_test(NAME read_obj_shared_int WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./read_obj_shared ${MPI_RUN_CMD} 4 6 o 1 int) @@ -424,15 +394,10 @@ if(BUILD_MPI_TESTING) add_test(NAME read_obj_shared_uint64 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./read_obj_shared ${MPI_RUN_CMD} 4 6 o 1 uint64) add_test(NAME read_obj_shared_int16 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./read_obj_shared ${MPI_RUN_CMD} 4 6 o 1 int16) add_test(NAME read_obj_shared_int8 WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./read_obj_shared ${MPI_RUN_CMD} 4 6 o 1 int8) -# add_test(NAME create_obj_coll WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./create_obj_coll ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME create_cont_coll WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./create_cont_coll ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME region_transfer_status_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_status ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_2D_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_2D ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_3D_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_3D ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_skewed_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_skewed ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME region_transfer_2D_skewed_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_2D_skewed ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME region_transfer_3D_skewed_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_3D_skewed ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_partial_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_partial ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_2D_partial_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_2D_partial ${MPI_RUN_CMD} 4 6 ) add_test(NAME region_transfer_3D_partial_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./region_transfer_3D_partial ${MPI_RUN_CMD} 4 6 ) @@ -472,10 +437,7 @@ if(BUILD_MPI_TESTING) add_test(NAME obj_round_robin_io_all_2D WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_round_robin_io ${MPI_RUN_CMD} 4 4 int 2 ) add_test(NAME obj_round_robin_io_all_3D WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_round_robin_io ${MPI_RUN_CMD} 4 4 int 3 ) add_test(NAME pdc_init_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./pdc_init ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME create_prop_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./create_prop ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME set_prop_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./set_prop ${MPI_RUN_CMD} 4 6 ) add_test(NAME dup_prop_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./dup_prop ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME create_cont_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./create_cont ${MPI_RUN_CMD} 4 6 ) add_test(NAME open_cont_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./open_cont ${MPI_RUN_CMD} 4 6 ) add_test(NAME cont_life_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./cont_life ${MPI_RUN_CMD} 4 6 ) add_test(NAME cont_iter_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./cont_iter ${MPI_RUN_CMD} 4 6 ) @@ -483,11 +445,9 @@ if(BUILD_MPI_TESTING) add_test(NAME cont_getid_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./cont_getid ${MPI_RUN_CMD} 4 6 ) add_test(NAME cont_tags_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./cont_tags ${MPI_RUN_CMD} 4 6 ) add_test(NAME consistency_semantics WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./consistency_semantics ${MPI_RUN_CMD} 2 4 ) -# add_test(NAME create_obj_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./create_obj ${MPI_RUN_CMD} 4 6 ) add_test(NAME open_obj_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./open_obj ${MPI_RUN_CMD} 4 6 ) add_test(NAME obj_iter_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_iter ${MPI_RUN_CMD} 4 6 ) add_test(NAME obj_life_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_life ${MPI_RUN_CMD} 4 6 ) -# add_test(NAME obj_dim_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_dim ${MPI_RUN_CMD} 4 6 ) add_test(NAME obj_buf_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_buf ${MPI_RUN_CMD} 4 6 ) add_test(NAME obj_tags_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_tags ${MPI_RUN_CMD} 4 6 ) add_test(NAME obj_info_mpi WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND mpi_test.sh ./obj_info ${MPI_RUN_CMD} 4 6 ) @@ -505,8 +465,6 @@ if(BUILD_MPI_TESTING) set_tests_properties(read_obj_shared_uint64 PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(read_obj_shared_int16 PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(read_obj_shared_int8 PROPERTIES LABELS "parallel;parallel_obj" ) -# set_tests_properties(create_obj_coll PROPERTIES LABELS "parallel;parallel_obj" ) -# set_tests_properties(create_cont_coll PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(consistency_semantics PROPERTIES LABELS "parallel;parallel_consistency") set_tests_properties(region_transfer_partial_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_2D_partial_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) @@ -515,12 +473,9 @@ if(BUILD_MPI_TESTING) set_tests_properties(region_transfer_overlap_2D_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_overlap_3D_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) -# set_tests_properties(region_transfer_status_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_2D_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_3D_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_skewed_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) -# set_tests_properties(region_transfer_2D_skewed_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) -# set_tests_properties(region_transfer_3D_skewed_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(region_transfer_write_read_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(vpicio_bdcats_mpi PROPERTIES LABELS "parallel;parallel_region_transfer" ) set_tests_properties(vpicio_mpi_small_cache PROPERTIES LABELS "parallel;parallel_region_transfer" ) @@ -556,21 +511,16 @@ if(BUILD_MPI_TESTING) set_tests_properties(obj_round_robin_io_all_2D PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_round_robin_io_all_3D PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(pdc_init_mpi PROPERTIES LABELS "parallel;parallel_pdc" ) -# set_tests_properties(create_prop_mpi PROPERTIES LABELS "parallel;parallel_prop" ) -# set_tests_properties(set_prop_mpi PROPERTIES LABELS "parallel;parallel_prop" ) set_tests_properties(dup_prop_mpi PROPERTIES LABELS "parallel;parallel_prop" ) -# set_tests_properties(create_cont_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(open_cont_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(cont_life_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(cont_iter_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(cont_info_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(cont_getid_mpi PROPERTIES LABELS "parallel;parallel_cont" ) set_tests_properties(cont_tags_mpi PROPERTIES LABELS "parallel;parallel_cont" ) -# set_tests_properties(create_obj_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(open_obj_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_iter_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_life_mpi PROPERTIES LABELS "parallel;parallel_obj" ) -# set_tests_properties(obj_dim_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_buf_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_tags_mpi PROPERTIES LABELS "parallel;parallel_obj" ) set_tests_properties(obj_info_mpi PROPERTIES LABELS "parallel;parallel_obj" ) diff --git a/src/tests/pdc_analysis_lib.c b/src/tests/analysis/pdc_analysis_lib.c similarity index 100% rename from src/tests/pdc_analysis_lib.c rename to src/tests/analysis/pdc_analysis_lib.c diff --git a/src/tests/bdcats.c b/src/tests/bdcats.c deleted file mode 100644 index 228aa1b2e..000000000 --- a/src/tests/bdcats.c +++ /dev/null @@ -1,439 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" - -#define NPARTICLES 8388608 - -double -uniform_random_number() -{ - return (((double)rand()) / ((double)(RAND_MAX))); -} - -void -print_usage() -{ - LOG_JUST_PRINT("Usage: srun -n ./bdcats #particles\n"); -} - -int -main(int argc, char **argv) -{ - int rank = 0, size = 1; - pdcid_t pdc_id, cont_id; - pdcid_t obj_xx, obj_yy, obj_zz, obj_pxx, obj_pyy, obj_pzz, obj_id11, obj_id22; - pdcid_t region_x, region_y, region_z, region_px, region_py, region_pz, region_id1, region_id2; - pdcid_t region_xx, region_yy, region_zz, region_pxx, region_pyy, region_pzz, region_id11, region_id22; - perr_t ret; - - float * x, *y, *z; - float * px, *py, *pz; - int * id1, *id2; - uint64_t numparticles; - int ndim = 1; - uint64_t *offset; - uint64_t *offset_remote; - uint64_t *mysize; - - pdcid_t transfer_request_x, transfer_request_y, transfer_request_z, transfer_request_px, - transfer_request_py, transfer_request_pz, transfer_request_id1, transfer_request_id2; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - numparticles = NPARTICLES; - if (argc == 2) { - numparticles = atoll(argv[1]); - if (rank == 0) - LOG_INFO("Writing %" PRIu64 " number of particles with %d clients.\n", numparticles, size); - } - - x = (float *)malloc(numparticles * sizeof(float)); - y = (float *)malloc(numparticles * sizeof(float)); - z = (float *)malloc(numparticles * sizeof(float)); - - px = (float *)malloc(numparticles * sizeof(float)); - py = (float *)malloc(numparticles * sizeof(float)); - pz = (float *)malloc(numparticles * sizeof(float)); - - id1 = (int *)malloc(numparticles * sizeof(int)); - id2 = (int *)malloc(numparticles * sizeof(int)); - - // create a pdc - pdc_id = PDCinit("pdc"); - - // open a container - cont_id = PDCcont_open("c1", pdc_id); - if (cont_id == 0) - LOG_ERROR("Failed to create container"); - - // open objects - obj_xx = PDCobj_open("obj-var-xx", pdc_id); - if (obj_xx == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-xx"); - exit(-1); - } - obj_yy = PDCobj_open("obj-var-yy", pdc_id); - if (obj_yy == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-yy"); - exit(-1); - } - obj_zz = PDCobj_open("obj-var-zz", pdc_id); - if (obj_zz == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-zz"); - exit(-1); - } - obj_pxx = PDCobj_open("obj-var-pxx", pdc_id); - if (obj_pxx == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-pxx"); - exit(-1); - } - obj_pyy = PDCobj_open("obj-var-pyy", pdc_id); - if (obj_pyy == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-pyy"); - exit(-1); - } - obj_pzz = PDCobj_open("obj-var-pzz", pdc_id); - if (obj_pzz == 0) { - LOG_ERROR("Error when open object %s\n", "obj-var-pzz"); - exit(-1); - } - obj_id11 = PDCobj_open("id11", pdc_id); - if (obj_id11 == 0) { - LOG_ERROR("Error when open object %s\n", "id11"); - exit(-1); - } - obj_id22 = PDCobj_open("id22", pdc_id); - if (obj_id22 == 0) { - LOG_ERROR("Error when open object %s\n", "id22"); - exit(-1); - } - - offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - offset_remote = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - offset[0] = 0; - offset_remote[0] = rank * numparticles; - mysize[0] = numparticles; - - // create a region - region_x = PDCregion_create(ndim, offset, mysize); - region_y = PDCregion_create(ndim, offset, mysize); - region_z = PDCregion_create(ndim, offset, mysize); - region_px = PDCregion_create(ndim, offset, mysize); - region_py = PDCregion_create(ndim, offset, mysize); - region_pz = PDCregion_create(ndim, offset, mysize); - region_id1 = PDCregion_create(ndim, offset, mysize); - region_id2 = PDCregion_create(ndim, offset, mysize); - - region_xx = PDCregion_create(ndim, offset_remote, mysize); - region_yy = PDCregion_create(ndim, offset_remote, mysize); - region_zz = PDCregion_create(ndim, offset_remote, mysize); - region_pxx = PDCregion_create(ndim, offset_remote, mysize); - region_pyy = PDCregion_create(ndim, offset_remote, mysize); - region_pzz = PDCregion_create(ndim, offset_remote, mysize); - region_id11 = PDCregion_create(ndim, offset_remote, mysize); - region_id22 = PDCregion_create(ndim, offset_remote, mysize); - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - - transfer_request_x = PDCregion_transfer_create(&x[0], PDC_READ, obj_xx, region_x, region_xx); - if (transfer_request_x == 0) { - LOG_ERROR("Array x transfer request creation failed\n"); - return 1; - } - - transfer_request_y = PDCregion_transfer_create(&y[0], PDC_READ, obj_yy, region_y, region_yy); - if (transfer_request_y == 0) { - LOG_ERROR("Array y transfer request creation failed\n"); - return 1; - } - transfer_request_z = PDCregion_transfer_create(&z[0], PDC_READ, obj_zz, region_z, region_zz); - if (transfer_request_z == 0) { - LOG_ERROR("Array z transfer request creation failed\n"); - return 1; - } - transfer_request_px = PDCregion_transfer_create(&px[0], PDC_READ, obj_pxx, region_px, region_pxx); - if (transfer_request_px == 0) { - LOG_ERROR("Array px transfer request creation failed\n"); - return 1; - } - transfer_request_py = PDCregion_transfer_create(&py[0], PDC_READ, obj_pyy, region_py, region_pyy); - if (transfer_request_py == 0) { - LOG_ERROR("Array py transfer request creation failed\n"); - return 1; - } - transfer_request_pz = PDCregion_transfer_create(&pz[0], PDC_READ, obj_pzz, region_pz, region_pzz); - if (transfer_request_pz == 0) { - LOG_ERROR("Array pz transfer request creation failed\n"); - return 1; - } - transfer_request_id1 = PDCregion_transfer_create(&id1[0], PDC_READ, obj_id11, region_id1, region_id11); - if (transfer_request_id1 == 0) { - LOG_ERROR("Array id1 transfer request creation failed\n"); - return 1; - } - transfer_request_id2 = PDCregion_transfer_create(&id2[0], PDC_READ, obj_id22, region_id2, region_id22); - if (transfer_request_id2 == 0) { - LOG_ERROR("Array id2 transfer request creation failed\n"); - return 1; - } - - ret = PDCregion_transfer_start(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_xx\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_yy\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_zz\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_pxx\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_pyy\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_pzz\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_id11\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to start transfer for region_id22\n"); - return 1; - } - - ret = PDCregion_transfer_wait(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_xx\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_yy\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_zz\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_pxx\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_pyy\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_pzz\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_id11\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to transfer wait for region_id22\n"); - return 1; - } - - ret = PDCregion_transfer_close(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("region xx transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("region yy transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("region zz transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("region pxx transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("region pyy transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("region pzz transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("region id11 transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("region id22 transfer close failed\n"); - return 1; - } - - PDC_timing_report("read"); - - if (PDCobj_close(obj_xx) < 0) - LOG_ERROR("Failed to close obj_xx\n"); - - if (PDCobj_close(obj_yy) < 0) - LOG_ERROR("Failed to close object obj_yy\n"); - - if (PDCobj_close(obj_zz) < 0) - LOG_ERROR("Failed to close object obj_zz\n"); - - if (PDCobj_close(obj_pxx) < 0) - LOG_ERROR("Failed to close object obj_pxx\n"); - - if (PDCobj_close(obj_pyy) < 0) - LOG_ERROR("Failed to close object obj_pyy\n"); - - if (PDCobj_close(obj_pzz) < 0) - LOG_ERROR("Failed to close object obj_pzz\n"); - - if (PDCobj_close(obj_id11) < 0) - LOG_ERROR("Failed to close object obj_id11\n"); - - if (PDCobj_close(obj_id22) < 0) - LOG_ERROR("Failed to close object obj_id22\n"); - - if (PDCregion_close(region_x) < 0) - LOG_ERROR("Failed to close region region_x\n"); - - if (PDCregion_close(region_y) < 0) - LOG_ERROR("Failed to close region region_y\n"); - - if (PDCregion_close(region_z) < 0) - LOG_ERROR("Failed to close region region_z\n"); - - if (PDCregion_close(region_px) < 0) - LOG_ERROR("Failed to close region region_px\n"); - - if (PDCregion_close(region_py) < 0) - LOG_ERROR("Failed to close region region_py\n"); - - if (PDCobj_close(region_pz) < 0) - LOG_ERROR("Failed to close region region_pz\n"); - - if (PDCobj_close(region_id1) < 0) - LOG_ERROR("Failed to close region region_id1\n"); - - if (PDCobj_close(region_id2) < 0) - LOG_ERROR("Failed to close region region_id2\n"); - - if (PDCregion_close(region_xx) < 0) - LOG_ERROR("Failed to close region region_xx\n"); - - if (PDCregion_close(region_yy) < 0) - LOG_ERROR("Failed to close region region_yy\n"); - - if (PDCregion_close(region_zz) < 0) - LOG_ERROR("Failed to close region region_zz\n"); - - if (PDCregion_close(region_pxx) < 0) - LOG_ERROR("Failed to close region region_pxx\n"); - - if (PDCregion_close(region_pyy) < 0) - LOG_ERROR("Failed to close region region_pyy\n"); - - if (PDCregion_close(region_pzz) < 0) - LOG_ERROR("Failed to close region region_pzz\n"); - - if (PDCobj_close(region_id11) < 0) - LOG_ERROR("Failed to close region region_id11\n"); - - if (PDCobj_close(region_id22) < 0) - LOG_ERROR("Failed to close region region_id22\n"); - - // close a container - if (PDCcont_close(cont_id) < 0) - LOG_ERROR("Failed to close container c1\n"); - - if (PDCclose(pdc_id) < 0) - LOG_ERROR("Failed to close PDC\n"); - - free(x); - free(y); - free(z); - free(px); - free(py); - free(pz); - free(id1); - free(id2); - free(offset); - free(offset_remote); - free(mysize); - -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - - return 0; -} diff --git a/src/tests/consistency_semantics.c b/src/tests/consistency_semantics.c deleted file mode 100644 index 9f0583d1c..000000000 --- a/src/tests/consistency_semantics.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[2]; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 4; - dims[1] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "consistency_semantics_test"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - PDCprop_set_obj_consistency_semantics(obj_prop, PDC_CONSISTENCY_POSIX); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - - // When use POSIX consistency, we do not need to explicitly call wait() - // PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - - // When use POSIX consistency, we do not need to explicitly call wait() - // PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/cont_add_del.c b/src/tests/cont/cont_add_del.c similarity index 60% rename from src/tests/cont_add_del.c rename to src/tests/cont/cont_add_del.c index a0bb80043..65bc70748 100644 --- a/src/tests/cont_add_del.c +++ b/src/tests/cont/cont_add_del.c @@ -31,7 +31,7 @@ #include #include #include "pdc.h" -#include "pdc_client_connect.h" +#include "test_helper.h" #define NCONT 10 @@ -54,7 +54,7 @@ rand_string(char *str, size_t size) void print_usage() { - LOG_JUST_PRINT("Usage: srun -n ./creat_obj -r num_of_obj_per_rank\n"); + LOG_JUST_PRINT("Usage: srun -n ./cont_add_del -r num_of_obj_per_rank\n"); } int @@ -65,9 +65,10 @@ main(int argc, char **argv) int i; pdcid_t pdc, cont_prop, cont[NCONT], obj_prop; char cont_name[128]; - uint64_t dims[3] = {100, 200, 700}; - pdcid_t *obj_ids = NULL; - int use_name = -1; + uint64_t dims[3] = {100, 200, 700}; + pdcid_t *obj_ids = NULL; + int use_name = -1; + int ret_value = TSUCCEED; struct timeval ht_total_start; struct timeval ht_total_end; @@ -102,12 +103,12 @@ main(int argc, char **argv) return 1; default: print_usage(); - exit(-1); + TGOTO_DONE(TFAIL); } if (count == -1) { print_usage(); - exit(-1); + TGOTO_DONE(TFAIL); } count /= size; @@ -116,31 +117,28 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc - pdc = PDCinit("pdc"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create NCONT container for (i = 0; i < NCONT; i++) { sprintf(cont_name, "Cont%d", i); - cont[i] = PDCcont_create(cont_name, cont_prop); - if (cont[i] <= 0) - LOG_ERROR("Failed to create container"); + TASSERT((cont[i] = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); } // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) - LOG_ERROR("Failed to create object property"); + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); - PDCprop_set_obj_type(obj_prop, PDC_INT); - PDCprop_set_obj_dims(obj_prop, 3, dims); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); env_str = getenv("PDC_OBJ_NAME"); if (env_str != NULL) { @@ -160,35 +158,41 @@ main(int argc, char **argv) gettimeofday(&ht_total_start, 0); for (i = 0; i < count; i++) { - if (use_name == -1) { sprintf(obj_name, "%s", rand_string(tmp_str, 16)); - PDCprop_set_obj_time_step(obj_prop, rank); + TASSERT(PDCprop_set_obj_time_step(obj_prop, rank) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } else if (use_name == 1) { sprintf(obj_name, "%s", obj_prefix[0]); - PDCprop_set_obj_time_step(obj_prop, i + rank * count); + TASSERT(PDCprop_set_obj_time_step(obj_prop, i + rank * count) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } else if (use_name == 4) { sprintf(obj_name, "%s", obj_prefix[i % 4]); - PDCprop_set_obj_time_step(obj_prop, i / 4 + rank * count); + TASSERT(PDCprop_set_obj_time_step(obj_prop, i / 4 + rank * count) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } - else { - LOG_ERROR("Unsupported name choice\n"); - goto done; - } - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_app_name(obj_prop, "test_app"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - if (count < 20) { + else + PGOTO_ERROR(TFAIL, "Unsupported name choice"); + + TASSERT(PDCprop_set_obj_time_step(obj_prop, rank) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "test_app") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + if (count < 20) LOG_INFO("[%d] create obj with name %s\n", rank, obj_name); - } - obj_ids[i] = PDCobj_create(cont[i % NCONT], obj_name, obj_prop); - if (obj_ids[i] <= 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", obj_name); - exit(-1); - } + + TASSERT((obj_ids[i] = PDCobj_create(cont[i % NCONT], obj_name, obj_prop)) != 0, + "Call to PDCobj_create succeeded", "Call to PDCobj_create failed"); // Print progress int progress_factor = count < 10 ? 1 : 10; @@ -197,10 +201,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("%10d created ... %.5e s\n", i * size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif @@ -214,34 +216,33 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to create %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } // Add object to container - PDC_Client_add_objects_to_container(count, obj_ids, cont[0]); + TASSERT(PDC_Client_add_objects_to_container(count, obj_ids, cont[0]) >= 0, + "Call to PDC_Client_del_objects_to_container succeeded", + "Call to PDC_Client_del_objects_to_container failed"); // Delete object to container - PDC_Client_del_objects_to_container(count, obj_ids, cont[0]); + TASSERT(PDC_Client_del_objects_to_container(count, obj_ids, cont[0]) >= 0, + "Call to PDC_Client_del_objects_to_container succeeded", + "Call to PDC_Client_del_objects_to_container failed"); -done: // close all container for (i = 0; i < NCONT; i++) { - if (PDCcont_close(cont[i]) < 0) - LOG_ERROR("Failed to close container c1\n"); + TASSERT(PDCcont_close(cont[i]) >= 0, "Call to PDCcont_close succeeded", + "Call to PDCcont_close failed"); } - // close a container property - if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); - - if (PDCclose(pdc) < 0) - LOG_ERROR("Failed to close PDC\n"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/cont_del.c b/src/tests/cont/cont_del.c similarity index 59% rename from src/tests/cont_del.c rename to src/tests/cont/cont_del.c index 987be51fe..8ee19939d 100644 --- a/src/tests/cont_del.c +++ b/src/tests/cont/cont_del.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -34,7 +35,7 @@ main(int argc, char **argv) int rank = 0, size = 1; perr_t ret; - int ret_value = 0; + int ret_value = TSUCCEED; char cont_name[128]; #ifdef ENABLE_MPI @@ -44,59 +45,29 @@ main(int argc, char **argv) #endif sprintf(cont_name, "c%d", rank); // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - create_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (create_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((create_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create(cont_name, create_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - ret = PDCcont_del(cont); - if (ret != SUCCEED) { - LOG_ERROR("Failed to delete container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create(cont_name, create_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + TASSERT(PDCcont_del(cont) >= 0, "Call to PDCcont_del succeeded", "Call to PDCcont_del failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); LOG_INFO("Trying to open a deleted container, should fail\n"); - cont = PDCcont_open(cont_name, pdc); - if (cont > 0) - LOG_ERROR("Error: opened a container that was just deleted"); + + TASSERT(PDCcont_open(cont_name, pdc) == 0, "Call to PDCcont_open failed as expected", + "Call to PDCcont_open didn't fail as expected"); // close a container property - if (PDCprop_close(create_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(create_prop) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/cont_getid.c b/src/tests/cont/cont_getid.c similarity index 60% rename from src/tests/cont_getid.c rename to src/tests/cont/cont_getid.c index 9a6abadaf..8c9240568 100644 --- a/src/tests/cont_getid.c +++ b/src/tests/cont/cont_getid.c @@ -28,13 +28,14 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) { int rank = 0, size = 1; pdcid_t pdc_id, cont_prop, cont_id, cont_id2, cont_id3; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -43,7 +44,7 @@ main(int argc, char **argv) #endif // create a pdc - pdc_id = PDCinit("pdc"); + TASSERT((pdc_id = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id); @@ -51,48 +52,33 @@ main(int argc, char **argv) LOG_ERROR("Failed to create container property"); ret_value = 1; } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont_id = PDCcont_create_col("c1", cont_prop); - if (cont_id <= 0) { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont_id = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); + #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - - cont_id2 = PDCcont_open("c1", pdc_id); - if (cont_id2 == 0) { - LOG_ERROR("Failed to open container"); - ret_value = 1; - } + TASSERT((cont_id2 = PDCcont_open("c1", pdc_id)) > 0, "Call to PDCcont_open succeeded", + "Call to PDCcont_open failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - cont_id3 = PDCcont_get_id("c1", pdc_id); - if (PDCcont_close(cont_id3) < 0) { - LOG_ERROR("Failed to close container cont_id3\n"); - ret_value = 1; - } - // close a container - if (PDCcont_close(cont_id) < 0) { - LOG_ERROR("Failed to close container cont_id1\n"); - ret_value = 1; - } - if (PDCcont_close(cont_id2) < 0) { - LOG_ERROR("Failed to close container cont_id2\n"); - ret_value = 1; - } + TASSERT((cont_id3 = PDCcont_get_id("c1", pdc_id)) > 0, "Call to PDCcont_get_id succeeded", + "Call to PDCcont_get_id failed"); + // close containers + TASSERT(PDCcont_close(cont_id3) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCcont_close(cont_id) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCcont_close(cont_id2) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - if (PDCclose(pdc_id) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc_id) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/cont_info.c b/src/tests/cont/cont_info.c similarity index 58% rename from src/tests/cont_info.c rename to src/tests/cont/cont_info.c index 9315ecb61..4669a4899 100644 --- a/src/tests/cont_info.c +++ b/src/tests/cont/cont_info.c @@ -28,6 +28,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -35,6 +36,7 @@ main(int argc, char **argv) int rank = 0, size = 1; pdcid_t pdc_id, cont_prop, cont_id, cont_id2; struct pdc_cont_info *cont_info; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -43,52 +45,42 @@ main(int argc, char **argv) #endif // create a pdc - pdc_id = PDCinit("pdc"); - + TASSERT((pdc_id = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id); - if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); - + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont_id = PDCcont_create_col("c1", cont_prop); - if (cont_id <= 0) - LOG_ERROR("Failed to create container"); + TASSERT((cont_id = PDCcont_create("c1", cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - cont_id2 = PDCcont_open("c1", pdc_id); - if (cont_id2 == 0) - LOG_ERROR("Failed to open container"); + TASSERT((cont_id2 = PDCcont_open("c1", pdc_id)) > 0, "Call to PDCcont_open succeeded", + "Call to PDCcont_open failed"); + #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - cont_info = PDCcont_get_info("c1"); - if (strcmp(cont_info->name, "c1")) { - LOG_ERROR("container get info with wrong name\n"); - return 1; - } + TASSERT((cont_info = PDCcont_get_info("c1")) != NULL, "Call to PDCcont_get_info succeeded", + "Call to PDCcont_get_info failed"); + TASSERT(strcmp(cont_info->name, "c1") == 0, "Container c1 had correct name", + "Container c1 had incorrect name"); // close a container - if (PDCcont_close(cont_id) < 0) - LOG_ERROR("Failed to close container cont_id1\n"); - - if (PDCcont_close(cont_id2) < 0) - LOG_ERROR("Failed to close container cont_id2\n"); - + TASSERT(PDCcont_close(cont_id) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCcont_close(cont_id2) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); - - if (PDCclose(pdc_id) < 0) - LOG_ERROR("Failed to close PDC\n"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc_id) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/cont_iter.c b/src/tests/cont/cont_iter.c similarity index 52% rename from src/tests/cont_iter.c rename to src/tests/cont/cont_iter.c index e9d3ba973..6216dfde3 100644 --- a/src/tests/cont_iter.c +++ b/src/tests/cont/cont_iter.c @@ -27,6 +27,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -34,7 +35,7 @@ main(int argc, char **argv) pdcid_t pdc, create_prop, cont1, cont2, cont3; cont_handle *ch; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -42,92 +43,45 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - create_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (create_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((create_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont1 = PDCcont_create("c1", create_prop); - if (cont1 > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont1 = PDCcont_create("c1", create_prop)) != 0, "Call to PDCcont_create succeeded for c1", + "Call to PDCcont_create failed for c1"); // create second container - cont2 = PDCcont_create("c2", create_prop); - if (cont2 > 0) { - LOG_INFO("Create a container c2\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont2 = PDCcont_create("c2", create_prop)) != 0, "Call to PDCcont_create succeeded for c2", + "Call to PDCcont_create failed for c2"); // create third container - cont3 = PDCcont_create("c3", create_prop); - if (cont3 > 0) { - LOG_INFO("Create a container c3\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont3 = PDCcont_create("c3", create_prop)) != 0, "Call to PDCcont_create succeeded for c3", + "Call to PDCcont_create failed for c3"); + // start container iteration ch = PDCcont_iter_start(pdc); - while (!PDCcont_iter_null(ch)) { PDCcont_iter_get_info(ch); - LOG_INFO("container property id is"); - + LOG_INFO("Container property id is %d\n", ch); ch = PDCcont_iter_next(ch); } // close cont1 - if (PDCcont_close(cont1) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont1) >= 0, "Call to PDCcont_close succeeded for c1", + "Call to PDCcont_close failed for c1"); // close cont2 - if (PDCcont_close(cont2) < 0) { - LOG_ERROR("Failed to close container c2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c2\n"); - } + TASSERT(PDCcont_close(cont2) >= 0, "Call to PDCcont_close succeeded for c2", + "Call to PDCcont_close failed for c2"); // close cont3 - if (PDCcont_close(cont3) < 0) { - LOG_ERROR("Failed to close container c3\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c3\n"); - } + TASSERT(PDCcont_close(cont3) >= 0, "Call to PDCcont_close succeeded for c3", + "Call to PDCcont_close failed for c3"); // close a container property - if (PDCprop_close(create_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(create_prop) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/cont_iter_mt.c b/src/tests/cont/cont_iter_mt.c similarity index 98% rename from src/tests/cont_iter_mt.c rename to src/tests/cont/cont_iter_mt.c index 8238a27b1..e0adcd8bf 100644 --- a/src/tests/cont_iter_mt.c +++ b/src/tests/cont/cont_iter_mt.c @@ -51,7 +51,7 @@ TestThread(void *ThreadArgs) if (create_prop > 0) LOG_INFO("[%d] Create a container property, id is %llx\n", args->ThreadRank, create_prop); else - LOG_ERROR("[%d] Fail to create container property!\n", args->ThreadRank); + LOG_ERROR("[%d] Fail to create container property\n", args->ThreadRank); // create a container pdcid_t cont1 = PDCcont_create("c1", create_prop); diff --git a/src/tests/cont_life.c b/src/tests/cont/cont_life.c similarity index 54% rename from src/tests/cont_life.c rename to src/tests/cont/cont_life.c index 7db836807..416a7705a 100644 --- a/src/tests/cont_life.c +++ b/src/tests/cont/cont_life.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -33,7 +34,7 @@ main(int argc, char **argv) pdcid_t pdc, create_prop, cont; // struct _pdc_cont_prop *prop; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -41,62 +42,36 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - create_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (create_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // print default container lifetime (persistent) - // prop = PDCcont_prop_get_info(create_prop); - PDCcont_prop_get_info(create_prop); + TASSERT((create_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCcont_prop_get_info(create_prop) != NULL, "Call to PDCcont_prop_get_info succeeded", + "Call to PDCcont_prop_get_info failed"); // create a container - cont = PDCcont_create("c1", create_prop); - if (cont > 0) { - LOG_INFO("Create a container, c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create("c1", create_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); // set container lifetime to transient - PDCprop_set_cont_lifetime(create_prop, PDC_TRANSIENT); - // prop = PDCcont_prop_get_info(create_prop); - PDCcont_prop_get_info(create_prop); - + TASSERT(PDCprop_set_cont_lifetime(cont, PDC_TRANSIENT) >= 0, + "Call to PDCprop_set_cont_lifetime succeeded", "Call to PDCprop_set_cont_lifetime failed"); + TASSERT(PDCcont_prop_get_info(create_prop) != NULL, "Call to PDCcont_prop_get_info succeeded", + "Call to PDCcont_prop_get_info failed"); // set container lifetime to persistent - PDCcont_persist(cont); - // prop = PDCcont_prop_get_info(create_prop); - PDCcont_prop_get_info(create_prop); - + TASSERT(PDCcont_persist(cont) >= 0, "Call to PDCcont_persist succeeded", + "Call to PDCcont_persist failed"); + TASSERT(PDCcont_prop_get_info(create_prop) != NULL, "Call to PDCcont_prop_get_info succeeded", + "Call to PDCcont_prop_get_info failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(create_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(create_prop) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/cont_life_mt.c b/src/tests/cont/cont_life_mt.c similarity index 93% rename from src/tests/cont_life_mt.c rename to src/tests/cont/cont_life_mt.c index 3c13b7dc2..7cb7c7e77 100644 --- a/src/tests/cont_life_mt.c +++ b/src/tests/cont/cont_life_mt.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" #include "mercury.h" #include "mercury_thread_pool.h" #include "mercury_atomic.h" @@ -51,10 +52,10 @@ TestThread(void *ThreadArgs) if (create_prop > 0) LOG_INFO("[%d] Create a container property, id is %llx\n", args->ThreadRank, create_prop); else - LOG_ERROR("[%d] Fail to create container property!\n", args->ThreadRank); + LOG_ERROR("[%d] Fail to create container property\n", args->ThreadRank); // print default container lifetime (persistent) - struct PDC_cont_prop *prop = PDCcont_prop_get_info(create_prop); + struct _pdc_cont_prop *prop = PDCcont_prop_get_info(create_prop); if (prop->cont_life == PDC_PERSIST) LOG_INFO("[%d] container property (id: %lld) default lifetime is persistent\n", args->ThreadRank, create_prop); @@ -67,7 +68,7 @@ TestThread(void *ThreadArgs) if (cont > 0) LOG_INFO("[%d] Create a container, id is %lld\n", args->ThreadRank, cont); else - LOG_ERROR("[%d] Failed to create container!\n", args->ThreadRank); + LOG_ERROR("[%d] Failed to create container\n", args->ThreadRank); // set container lifetime to transient PDCprop_set_cont_lifetime(create_prop, PDC_TRANSIENT); @@ -111,6 +112,7 @@ main(int argc, char **argv) int status = 0; thread_args_t *args; int rank = 0, size = 1; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -124,7 +126,7 @@ main(int argc, char **argv) // create a pdc pdcid_t create_prop; - pdcid_t pdc = PDC_init("pdc"); + pdcid_t pdc = PDCinit("pdc"); LOG_INFO("[MAIN] created a new pdc, pdc id is: %lld\n", pdc); /*Create nThreads threads in each process*/ @@ -141,7 +143,7 @@ main(int argc, char **argv) } // close pdc - if (PDC_close(pdc) < 0) + if (PDCclose(pdc) < 0) LOG_ERROR("Failed to close PDC\n"); else LOG_INFO("PDC is closed\n"); @@ -154,7 +156,7 @@ main(int argc, char **argv) LOG_INFO("No errors reported\n"); } -#ifdef ENABLE_MPI +#ifdef ENABLE_MPIz MPI_Finalize(); #endif return 0; diff --git a/src/tests/cont/cont_tags.c b/src/tests/cont/cont_tags.c new file mode 100644 index 000000000..fc6b2834a --- /dev/null +++ b/src/tests/cont/cont_tags.c @@ -0,0 +1,138 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, cont2; + int ret_value = TSUCCEED; + + int rank = 0, size = 1; + + char tag_value[128], tag_value2[128], *tag_value_ret; + pdc_var_type_t value_type; + psize_t value_size; + strcpy(tag_value, "some tag value"); + strcpy(tag_value2, "some tag value 2 is longer than tag 1"); + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + TASSERT((cont = PDCcont_create("c1", cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + TASSERT((cont2 = PDCcont_create("c2", cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + + TASSERT(PDCcont_put_tag(cont, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1) >= 0, + "Call to PDCcont_put_tag succeeded for container 1", + "Call to PDCcont_put_tag failed for container 1"); + TASSERT(PDCcont_put_tag(cont, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1) >= 0, + "Call to PDCcont_put_tag succeeded for container 2", + "Call to PDCcont_put_tag failed for container 1"); + + TASSERT(PDCcont_put_tag(cont2, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1) >= 0, + "Call to PDCcont_put_tag succeeded for container 1", + "Call to PDCcont_put_tag failed for container 2"); + TASSERT(PDCcont_put_tag(cont2, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1) >= 0, + "Call to PDCcont_put_tag succeeded for container 2", + "Call to PDCcont_put_tag failed for container 2"); + TASSERT(PDCcont_get_tag(cont, "some tag", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCcont_get_tag succeeded for container 1", + "Call to PDCcont_get_tag failed for container 1"); + + if (strcmp(tag_value, tag_value_ret) != 0) + TGOTO_ERROR(TFAIL, "Wrong tag value at container 1, expected = [%s], get [%s]", tag_value, + tag_value_ret); + + TASSERT(PDCcont_get_tag(cont, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCcont_get_tag succeeded for container 1", + "Call to PDCcont_get_tag failed for container 1"); + + if (strcmp(tag_value2, tag_value_ret) != 0) + TGOTO_ERROR(TFAIL, "Wrong tag value at container 1, expected = [%s], get [%s]", tag_value2, + tag_value_ret); + + TASSERT(PDCcont_get_tag(cont2, "some tag", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCcont_get_tag succeeded for container 2", + "Call to PDCcont_get_tag failed for container 2"); + + if (strcmp(tag_value, tag_value_ret) != 0) + TGOTO_ERROR(TFAIL, "Wrong tag value at container 2, expected = [%s], get [%s]", tag_value, + tag_value_ret); + + TASSERT(PDCcont_get_tag(cont2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCcont_get_tag succeeded for container 2", + "Call to PDCcont_get_tag failed for container 2"); + + if (strcmp(tag_value2, tag_value_ret) != 0) { + LOG_ERROR("Wrong tag value at container 2, expected = [%s], get [%s]\n", tag_value2, tag_value_ret); + return -1; + } + TASSERT(PDCcont_del_tag(cont2, "some tag 2") >= 0, "Call to PDCcont_del_tag succeeded for container 2", + "Call to PDCcont_del_tag failed for container 2"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + TASSERT(PDCcont_get_tag(cont2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCcont_get_tag succeeded for container 2", + "Call to PDCcont_get_tag failed for container 2"); + + if (tag_value_ret != NULL || value_size != 0) + TGOTO_ERROR(TFAIL, "Error: got non-empty tag after deletion"); + else + LOG_INFO("Verified the tag has been deleted successfully\n"); + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a container + TASSERT(PDCcont_close(cont2) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/create_cont.c b/src/tests/cont/create_cont.c similarity index 62% rename from src/tests/create_cont.c rename to src/tests/cont/create_cont.c index 03fe603c2..bf3efb6f7 100644 --- a/src/tests/create_cont.c +++ b/src/tests/cont/create_cont.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -33,7 +34,7 @@ main(int argc, char **argv) pdcid_t pdc, create_prop, cont; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -42,48 +43,22 @@ main(int argc, char **argv) #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - create_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (create_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((create_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create("c1", create_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create("c1", create_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(create_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(create_prop) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/create_cont_coll.c b/src/tests/cont/create_cont_coll.c similarity index 62% rename from src/tests/create_cont_coll.c rename to src/tests/cont/create_cont_coll.c index a8bb04d8e..6dd48327c 100644 --- a/src/tests/create_cont_coll.c +++ b/src/tests/cont/create_cont_coll.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -33,7 +34,7 @@ main(int argc, char **argv) pdcid_t pdc, create_prop, cont; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -42,48 +43,23 @@ main(int argc, char **argv) #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - create_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (create_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((create_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create_col("c1", create_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create_col("c1", create_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(create_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(create_prop) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/open_cont.c b/src/tests/cont/open_cont.c similarity index 64% rename from src/tests/open_cont.c rename to src/tests/cont/open_cont.c index 5aaf2b2e7..7fdcd0a72 100644 --- a/src/tests/open_cont.c +++ b/src/tests/cont/open_cont.c @@ -28,6 +28,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -35,7 +36,7 @@ main(int argc, char **argv) int rank = 0, size = 1; pdcid_t pdc_id, cont_prop, cont_id, cont_id2; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -44,51 +45,33 @@ main(int argc, char **argv) #endif // create a pdc - pdc_id = PDCinit("pdc"); + TASSERT((pdc_id = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id); - if (cont_prop <= 0) { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont_id = PDCcont_create_col("c1", cont_prop); - if (cont_id <= 0) { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont_id = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - cont_id2 = PDCcont_open("c1", pdc_id); - if (cont_id2 == 0) { - LOG_ERROR("Failed to open container"); - ret_value = 1; - } + TASSERT((cont_id2 = PDCcont_open("c1", pdc_id)) > 0, "Call to PDCcont_open succeeded", + "Call to PDCcont_open failed"); + #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif // close a container - if (PDCcont_close(cont_id) < 0) { - LOG_ERROR("Failed to close container cont_id1\n"); - ret_value = 1; - } - if (PDCcont_close(cont_id2) < 0) { - LOG_ERROR("Failed to close container cont_id2\n"); - ret_value = 1; - } + TASSERT(PDCcont_close(cont_id) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCcont_close(cont_id2) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - if (PDCclose(pdc_id) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCclose(pdc_id) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/cont_tags.c b/src/tests/cont_tags.c deleted file mode 100644 index 5afa5dd04..000000000 --- a/src/tests/cont_tags.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, cont2; - perr_t ret; - - int rank = 0, size = 1; - - char tag_value[128], tag_value2[128], *tag_value_ret; - pdc_var_type_t value_type; - psize_t value_size; - strcpy(tag_value, "some tag value"); - strcpy(tag_value2, "some tag value 2 is longer than tag 1"); - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - return -1; - } - // create a container - cont = PDCcont_create("c1", cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - return -1; - } - - cont2 = PDCcont_create("c2", cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c2\n"); - } - else { - LOG_ERROR("Failed to create container"); - return -1; - } - - ret = PDCcont_put_tag(cont, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1); - - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at container 1\n"); - return -1; - } - ret = PDCcont_put_tag(cont, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at container 1\n"); - return -1; - } - - ret = PDCcont_put_tag(cont2, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at container 2\n"); - return -1; - } - - ret = PDCcont_put_tag(cont2, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at container 2\n"); - return -1; - } - - ret = PDCcont_get_tag(cont, "some tag", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at container 1\n"); - return -1; - } - if (strcmp(tag_value, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at container 1, expected = [%s], get [%s]\n", tag_value, tag_value_ret); - return -1; - } - - ret = PDCcont_get_tag(cont, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at container 1\n"); - return -1; - } - - if (strcmp(tag_value2, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at container 1, expected = [%s], get [%s]\n", tag_value2, tag_value_ret); - return -1; - } - - ret = PDCcont_get_tag(cont2, "some tag", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at container 2\n"); - return -1; - } - - if (strcmp(tag_value, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at container 2, expected = [%s], get [%s]\n", tag_value, tag_value_ret); - return -1; - } - - ret = PDCcont_get_tag(cont2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at container 2\n"); - return -1; - } - - if (strcmp(tag_value2, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at container 2, expected = [%s], get [%s]\n", tag_value2, tag_value_ret); - return -1; - } - - ret = PDCcont_del_tag(cont2, "some tag 2"); - if (ret != SUCCEED) { - LOG_ERROR("Delete tag failed at container 2\n"); - return -1; - } - else { - LOG_INFO("successfully deleted a tag from container c2\n"); - } - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - - ret = PDCcont_get_tag(cont2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at container 2\n"); - return -1; - } - - if (tag_value_ret != NULL || value_size != 0) { - LOG_ERROR("Error: got non-empty tag after deletion\n"); - return -1; - } - else { - LOG_INFO("verified the tag has been deleted successfully\n"); - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - return -1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - // close a container - if (PDCcont_close(cont2) < 0) { - LOG_ERROR("Failed to close container c1\n"); - return -1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - return -1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - return -1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return 0; -} diff --git a/src/tests/create_obj_coll.c b/src/tests/create_obj_coll.c deleted file mode 100644 index 2e1cb916e..000000000 --- a/src/tests/create_obj_coll.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - pdcid_t obj1, obj2, open11, open12, open21; - int rank = 0, size = 1; - int ret_value = 0; - char cont_name[128], obj_name1[128], obj_name2[128]; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Rank %d Create a container property\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create container property!\n", rank); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container c1\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create container!\n", rank); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Rank %d Create an object property\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object property!\n", rank); - ret_value = 1; - } - // create first object - sprintf(obj_name1, "o1"); -#ifdef ENABLE_MPI - obj1 = PDCobj_create_mpi(cont, obj_name1, obj_prop, 0, MPI_COMM_WORLD); -#else - obj1 = PDCobj_create(cont, obj_name1, obj_prop); -#endif - if (obj1 > 0) { - LOG_INFO("Rank %d Create an object o1\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); - ret_value = 1; - } - LOG_INFO("checkpoint 1 rank %d\n", rank); - // create second object - sprintf(obj_name2, "o2"); -#ifdef ENABLE_MPI - obj2 = PDCobj_create_mpi(cont, obj_name2, obj_prop, 0, MPI_COMM_WORLD); -#else - obj2 = PDCobj_create(cont, obj_name2, obj_prop); -#endif - if (obj2 > 0) { - LOG_INFO("Rank %d Create an object o2\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); - ret_value = 1; - } - LOG_INFO("checkpoint 2 rank %d\n", rank); - // open first object twice - open11 = PDCobj_open(obj_name1, pdc); - if (open11 == 0) { - LOG_ERROR("Rank %d Fail to open object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o1\n", rank); - } - open12 = PDCobj_open(obj_name1, pdc); - if (open12 == 0) { - LOG_ERROR("Rank %d Fail to open object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o1\n", rank); - } - // open second object once - open21 = PDCobj_open(obj_name2, pdc); - if (open21 == 0) { - LOG_ERROR("Rank %d Fail to open object o2\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o2\n", rank); - } - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Rank %d Fail to close object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o1\n", rank); - } - if (PDCobj_close(open11) < 0) { - LOG_ERROR("Rank %d Fail to close object open11\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open11\n", rank); - } - if (PDCobj_close(open12) < 0) { - LOG_ERROR("Rank %d Fail to close object open12\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open12\n", rank); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Rank %d Fail to close object o2\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o2\n", rank); - } - if (PDCobj_close(open21) < 0) { - LOG_ERROR("Rank %d Fail to close object open21\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open21\n", rank); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Rank %d Fail to close container c1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container c1\n", rank); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Rank %d Fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object property\n", rank); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Rank %d Fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container property\n", rank); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Rank %d Fail to close PDC\n", rank); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/dart_algo_sim.c b/src/tests/dart/dart_algo_sim.c similarity index 71% rename from src/tests/dart_algo_sim.c rename to src/tests/dart/dart_algo_sim.c index e3514da27..2586765a0 100644 --- a/src/tests/dart_algo_sim.c +++ b/src/tests/dart/dart_algo_sim.c @@ -9,6 +9,7 @@ #include "string_utils.h" #include "timer_utils.h" #include "dart_core.h" +#include "pdc.h" #define HASH_MD5 0 #define HASH_MURMUR 1 @@ -35,94 +36,6 @@ virtual_dart_retrieve_server_info_cb(dart_server *server_ptr) server_ptr->request_count = server_ptr->request_count + 1; } -// void -// md5_keyword_insert(char *key, int prefix_len) -// { -// if (key == NULL) -// return; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = md5_hash(len, key); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].indexed_word_count = all_servers[server_id].indexed_word_count + 1; -// } - -// int -// md5_keyword_search(char *key, int prefix_len) -// { -// if (key == NULL) -// return 0; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = md5_hash(len, key); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].request_count = all_servers[server_id].request_count + 1; -// } - -// void -// murmurhash_keyword_insert(char *key, int prefix_len) -// { -// if (key == NULL) -// return; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = murmur3_32(key, len, 1); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].indexed_word_count = all_servers[server_id].indexed_word_count + 1; -// } - -// int -// murmurhash_keyword_search(char *key, int prefix_len) -// { -// if (key == NULL) -// return 0; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = murmur3_32(key, len, 1); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].request_count = all_servers[server_id].request_count + 1; -// } - -// int -// djb2_hash_keyword_insert(char *key, int prefix_len) -// { -// if (key == NULL) -// return; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = djb2_hash(key, len); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].indexed_word_count = all_servers[server_id].indexed_word_count + 1; -// } - -// int -// djb2_hash_keyword_search(char *key, int prefix_len) -// { -// if (key == NULL) -// return 0; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = djb2_hash(key, len); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].request_count = all_servers[server_id].request_count + 1; -// } - -// int -// djb2_hash_keyword_insert_full(char *key, int prefix_len) -// { -// if (key == NULL) -// return; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = djb2_hash(key, strlen(key)); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].indexed_word_count = all_servers[server_id].indexed_word_count + 1; -// } - -// int -// djb2_hash_keyword_search_full(char *key, int prefix_len) -// { -// if (key == NULL) -// return 0; -// int len = prefix_len == 0 ? strlen(key) : prefix_len; -// uint32_t hashVal = djb2_hash(key, strlen(key)); -// uint32_t server_id = hashVal % dart_g.num_server; -// all_servers[server_id].request_count = all_servers[server_id].request_count + 1; -// } - void DHT_INITIAL_keyword_insert(char *key, int prefix_len) { @@ -224,8 +137,8 @@ get_key_distribution(int num_server, char *algo) if (max < num_indexed_word) { max = num_indexed_word; } - println("[%s Key Distribution] The total number of indexed keys on server %d = %.0f", algo, srv_cnt, - num_indexed_word); + LOG_JUST_PRINT("[%s Key Distribution] The total number of indexed keys on server %d = %.0f\n", algo, + srv_cnt, num_indexed_word); sum += (double)num_indexed_word; sqrt_sum += (double)((double)num_indexed_word * (double)num_indexed_word); } @@ -234,8 +147,9 @@ get_key_distribution(int num_server, char *algo) double variance = sqrt_sum / num_server - mean * mean; double stddev = sqrt(variance); - println("[%s Key Distribution] STDDEV = %.3f and CV = %.3f for %d servers and %.0f keys in total.", algo, - stddev, stddev / mean, num_server, sum); + LOG_JUST_PRINT( + "[%s Key Distribution] STDDEV = %.3f and CV = %.3f for %d servers and %.0f keys in total\n", algo, + stddev, stddev / mean, num_server, sum); } void @@ -248,16 +162,16 @@ get_request_distribution(int num_server, char *algo) for (srv_cnt = 0; srv_cnt < num_server; srv_cnt++) { dart_server server_abstract = all_servers[srv_cnt]; double request_count = (double)server_abstract.request_count; - println("[%s Load Balance All] The total number of query requests on server %d = %.0f", algo, srv_cnt, - request_count); + LOG_INFO("[%s Load Balance All] The total number of query requests on server %d = %.0f\n", algo, + srv_cnt, request_count); sum += (double)request_count; sqrt_sum += (double)((double)request_count * (double)request_count); } double mean = sum / (double)num_server; double variance = sqrt_sum / num_server - mean * mean; double stddev = sqrt(variance); - println("[%s Load Balance All] STDDEV = %.3f and CV = %.3f for %d servers and %.0f request in total.", - algo, stddev, stddev / mean, num_server, sum); + LOG_INFO("[%s Load Balance All] STDDEV = %.3f and CV = %.3f for %d servers and %.0f request in total\n", + algo, stddev, stddev / mean, num_server, sum); } void @@ -332,7 +246,7 @@ read_words_from_text(const char *fileName, int *word_count, int **req_count, int FILE *file = fopen(fileName, "r"); /* should check the result */ if (file == NULL) { - println("File not available\n"); + LOG_ERROR("File not available\n"); exit(4); } int lines_allocated = 128; @@ -378,8 +292,8 @@ read_words_from_text(const char *fileName, int *word_count, int **req_count, int void print_usage() { - println("dart_sim.exe " - " "); + LOG_JUST_PRINT("dart_sim.exe " + " \n"); } int @@ -427,7 +341,7 @@ main(int argc, char **argv) algo_name = "DART"; } - println("HASH = %s", algo_name); + LOG_INFO("HASH = %s\n", algo_name); void (*keyword_insert[])(char *, int) = {DHT_INITIAL_keyword_insert, DHT_FULL_keyword_insert, dart_keyword_insert}; diff --git a/src/tests/dart_attr_dist_test.c b/src/tests/dart/dart_attr_dist_test.c similarity index 96% rename from src/tests/dart_attr_dist_test.c rename to src/tests/dart/dart_attr_dist_test.c index a619d36c8..bb0c48997 100644 --- a/src/tests/dart_attr_dist_test.c +++ b/src/tests/dart/dart_attr_dist_test.c @@ -76,7 +76,6 @@ main(int argc, char *argv[]) int rank = 0, size = 1; #ifdef ENABLE_MPI - fflush(stdout); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); @@ -214,7 +213,7 @@ main(int argc, char *argv[]) int num_obj_per_attr = attr_2_obj_array[i]; sprintf(key, "k%ld", i + 12345); sprintf(value, "v%ld", val); - println("attaching attribute #%d [%s:%s] to %d objects", i, key, value, num_obj_per_attr); + LOG_INFO("Attaching attribute #%d [%s:%s] to %d objects\n", i, key, value, num_obj_per_attr); for (j = 0; j < num_obj_per_attr; j++) { // each attribute is attached to a specific number of objects, and this is how we make up // different selectivity. @@ -311,8 +310,8 @@ main(int argc, char *argv[]) } timer_pause(&timer_obj); duration_obj_ms += timer_delta_ms(&timer_obj); - println("[Client_Side_Exact] Search '%s' for %d times and get %d results, obj time: %.4f ms\n", - key, q_repeat_count, rest_count1, duration_obj_ms); + LOG_INFO("[Client_Side_Exact] Search '%s' for %d times and get %d results, obj time: %.4f ms\n", + key, q_repeat_count, rest_count1, duration_obj_ms); } } @@ -344,9 +343,9 @@ main(int argc, char *argv[]) } timer_pause(&timer_dart); duration_dart_ms += timer_delta_ms(&timer_dart); - println("[Client_Side_Exact] Search '%s' for %d times and get %d results, dart " - "time: %.4f ms\n", - key, q_repeat_count, rest_count1, duration_dart_ms); + LOG_INFO("[Client_Side_Exact] Search '%s' for %d times and get %d results, dart " + "time: %.4f ms\n", + key, q_repeat_count, rest_count1, duration_dart_ms); } } diff --git a/src/tests/dart_func_test.c b/src/tests/dart/dart_func_test.c similarity index 81% rename from src/tests/dart_func_test.c rename to src/tests/dart/dart_func_test.c index e4b34313a..ff5317a82 100644 --- a/src/tests/dart_func_test.c +++ b/src/tests/dart/dart_func_test.c @@ -26,8 +26,6 @@ main(int argc, char **argv) int rank = 0, size = 1; #ifdef ENABLE_MPI - // println("MPI enabled!\n"); - fflush(stdout); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); @@ -55,7 +53,7 @@ main(int argc, char **argv) uint64_t data = 12341234; // if (rank == 0) { PDC_Client_insert_obj_ref_into_dart(hash_algo, key, value, strlen(value), PDC_STRING, ref_type, data); - println("[Client_Side_Insert] Insert '%s=%s' for ref %llu", key, value, data); + LOG_INFO("[Client_Side_Insert] Insert '%s=%s' for ref %llu\n", key, value, data); // This is for testing exact search char * exact_query = "abcd=1234"; @@ -63,7 +61,8 @@ main(int argc, char **argv) int rest_count1 = 0; PDC_Client_search_obj_ref_through_dart(hash_algo, exact_query, ref_type, &rest_count1, &out1); - println("[Client_Side_Exact] Search '%s' and get %d results : %llu", exact_query, rest_count1, out1[0]); + LOG_INFO("[Client_Side_Exact] Search '%s' and get %d results : %llu\n", exact_query, rest_count1, + out1[0]); // This function test is for testing the prefix search char * prefix_query = "ab*=12*"; @@ -71,7 +70,8 @@ main(int argc, char **argv) int rest_count2 = 0; PDC_Client_search_obj_ref_through_dart(hash_algo, prefix_query, ref_type, &rest_count2, &out2); - println("[Client_Side_Prefix] Search '%s' and get %d results : %llu", prefix_query, rest_count2, out2[0]); + LOG_INFO("[Client_Side_Prefix] Search '%s' and get %d results : %llu\n", prefix_query, rest_count2, + out2[0]); // This function test is for testing the suffix search. char * suffix_query = "*cd=*34"; @@ -79,7 +79,8 @@ main(int argc, char **argv) int rest_count3 = 0; PDC_Client_search_obj_ref_through_dart(hash_algo, suffix_query, ref_type, &rest_count3, &out3); - println("[Client_Side_Suffix] Search '%s' and get %d results : %llu", suffix_query, rest_count3, out3[0]); + LOG_INFO("[Client_Side_Suffix] Search '%s' and get %d results : %llu\n", suffix_query, rest_count3, + out3[0]); // This is for testing infix search. char * infix_query = "*bc*=*23*"; @@ -87,11 +88,8 @@ main(int argc, char **argv) int rest_count4 = 0; PDC_Client_search_obj_ref_through_dart(hash_algo, infix_query, ref_type, &rest_count4, &out4); - println("[Client_Side_Infix] Search '%s' and get %d results : %llu", infix_query, rest_count4, out4[0]); - - // } - - // done: + LOG_INFO("[Client_Side_Infix] Search '%s' and get %d results : %llu\n", infix_query, rest_count4, + out4[0]); if (PDCcont_close(cont) < 0) LOG_ERROR("Failed to close container %lld\n", cont); diff --git a/src/tests/dart_test.c b/src/tests/dart/dart_test.c similarity index 72% rename from src/tests/dart_test.c rename to src/tests/dart/dart_test.c index baee6b791..4bbf49e6f 100644 --- a/src/tests/dart_test.c +++ b/src/tests/dart/dart_test.c @@ -26,14 +26,15 @@ const int INPUT_WIKI_KEYWORD = 3; void print_usage() { - println("Usage: srun -n ./dart_test " - " /path/to/txtfile \n" - "alphabet_size: 26 for random string, 37 for uuid, 29 for dictionary, 129 for wiki keyword\n" - "replication_factor: 1-5\n" - "word_count: The number of words you would like to generate. For txt files, it doesn't matter.\n" - "txtfile: /path/to/txtfile, for random string and uuid, just provide random/uuid.\n" - "index_type: 1 for full hashing, 2 for initial hashing, 3 for DART\n" - "Example: srun -n 4 ./dart_test 0 26 2 2048 random 3\n"); + LOG_JUST_PRINT( + "Usage: srun -n ./dart_test " + " /path/to/txtfile \n" + "alphabet_size: 26 for random string, 37 for uuid, 29 for dictionary, 129 for wiki keyword\n" + "replication_factor: 1-5\n" + "word_count: The number of words you would like to generate. For txt files, it doesn't matter.\n" + "txtfile: /path/to/txtfile, for random string and uuid, just provide random/uuid.\n" + "index_type: 1 for full hashing, 2 for initial hashing, 3 for DART\n" + "Example: srun -n 4 ./dart_test 0 26 2 2048 random 3\n"); } char ** @@ -56,7 +57,7 @@ read_words_from_text(const char *fileName, int *word_count, int *total_word_coun FILE *file = fopen(fileName, "r"); /* should check the result */ if (file == NULL) { - println("File not available\n"); + LOG_ERROR("File not available\n"); exit(4); } int lines_allocated = 128; @@ -73,15 +74,10 @@ read_words_from_text(const char *fileName, int *word_count, int *total_word_coun #ifdef ENABLE_MPI if (i % (mpi_rank + 1) != 0) { - // char *trash_skip_buf=(char *)calloc(max_line_len, sizeof(char)); char trash_skip_buf[512]; if (fgets(trash_skip_buf, max_line_len - 1, file) == NULL) { - // free(trash_skip_buf); break; } - // println("skip '%s'", trash_skip_buf); - // free(trash_skip_buf); - // i++; continue; } #endif @@ -123,10 +119,9 @@ main(int argc, char **argv) { int rank = 0, size = 1; + int ret_value = SUCCEED; #ifdef ENABLE_MPI - // println("MPI enabled!\n"); - fflush(stdout); MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); @@ -173,20 +168,18 @@ main(int argc, char **argv) else { input_word_list = read_words_from_text(dict_filename, &word_count, &total_word_count, rank); alphabet_size = 29; - if (indexOfStr(dict_filename, "wiki") != -1) { + if (indexOfStr(dict_filename, "wiki") != -1) alphabet_size = 129; - } } - if (rank == 0) { - println("word_count = %d", word_count); - } + if (rank == 0) + LOG_INFO("word_count = %d\n", word_count); pdcid_t pdc = PDCinit("pdc"); pdcid_t cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); + PGOTO_ERROR(FAIL, "Failed to create container property"); pdcid_t cont = PDCcont_create("c1", cont_prop); if (cont <= 0) @@ -242,9 +235,10 @@ main(int argc, char **argv) (uint64_t)data); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Insert] Time to insert key %s for both prefix index and suffix index = " - "%d microseconds", - input_word_list[i], timer_delta_us(&detailed_timer)); + LOG_INFO( + "[Client_Side_Insert] Time to insert key %s for both prefix index and suffix index = " + "%d microseconds\n", + input_word_list[i], timer_delta_us(&detailed_timer)); } #ifdef ENABLE_MPI @@ -257,24 +251,7 @@ main(int argc, char **argv) insert_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Insert_Throughput] %.3f ops/ms", insert_throughput); - - // int srv_cnt = 0; - // double sqrt_sum = 0; - // double sum = 0; - - // for (srv_cnt = 0; srv_cnt < dart_g->num_server; srv_cnt++){ - // dart_server server_abstract = dart_retrieve_server_info_cb((uint32_t)srv_cnt); - // int64_t num_indexed_word = server_abstract.indexed_word_count/2; - // println("[DART Key Distribution] Server %d has %d words indexed", srv_cnt, - // num_indexed_word); sum += (double)num_indexed_word; sqrt_sum += - // (double)((double)num_indexed_word * (double)num_indexed_word); - // } - // double mean = sum/(double)dart_g->num_server; - // double variance = sqrt_sum/dart_g->num_server - mean * mean; - // double stddev = sqrt(variance); - // println("[DART Key Distribution] STDDEV = %.3f for %d servers and %d keys in total.", stddev, - // dart_g->num_server, word_count * size); + LOG_INFO("[Client_Side_Insert_Throughput] %.3f ops/ms\n", insert_throughput); } // /* =============== Exact Query testing ======================= */ @@ -301,9 +278,9 @@ main(int argc, char **argv) PDC_Client_search_obj_ref_through_dart(hash_algo, query_str, ref_type, &rest_count, &out); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Exact] Time to search '%s' and get %d results = %d microseconds for " - "rank %d", - query_str, rest_count, timer_delta_us(&detailed_timer), rank); + LOG_INFO("[Client_Side_Exact] Time to search '%s' and get %d results = %d microseconds for " + "rank %d\n", + query_str, rest_count, timer_delta_us(&detailed_timer), rank); } #ifdef ENABLE_MPI @@ -315,7 +292,7 @@ main(int argc, char **argv) if (rank == 0) { query_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Exact_Throughput] %.3f ops/ms", query_throughput); + LOG_INFO("[Client_Side_Exact_Throughput] %.3f ops/ms\n", query_throughput); int srv_cnt = 0; for (srv_cnt = 0; srv_cnt < dart_g->num_server; srv_cnt++) { @@ -323,8 +300,8 @@ main(int argc, char **argv) server_abstract.id = srv_cnt; dart_retrieve_server_info_cb(&server_abstract); if (round == 1) - println("[DART Load Balance 1] Server %d has query requests = %d", srv_cnt, - server_abstract.request_count); + LOG_INFO("[DART Load Balance 1] Server %d has query requests = %d\n", srv_cnt, + server_abstract.request_count); } } @@ -354,9 +331,9 @@ main(int argc, char **argv) PDC_Client_search_obj_ref_through_dart(hash_algo, query_str, ref_type, &rest_count, &out); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Prefix] Time to search '%s' and get %d results = %d microseconds for " - "rank %d", - query_str, rest_count, timer_delta_us(&detailed_timer), rank); + LOG_INFO("[Client_Side_Prefix] Time to search '%s' and get %d results = %d microseconds for " + "rank %d\n", + query_str, rest_count, timer_delta_us(&detailed_timer), rank); } #ifdef ENABLE_MPI @@ -368,7 +345,7 @@ main(int argc, char **argv) if (rank == 0) { query_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Prefix_Throughput] %.3f ops/ms", query_throughput); + LOG_INFO("[Client_Side_Prefix_Throughput] %.3f ops/ms\n", query_throughput); int srv_cnt = 0; for (srv_cnt = 0; srv_cnt < dart_g->num_server; srv_cnt++) { @@ -376,8 +353,8 @@ main(int argc, char **argv) server_abstract.id = srv_cnt; dart_retrieve_server_info_cb(&server_abstract); if (round == 1) - println("[DART Load Balance 2] Server %d has query requests = %d", srv_cnt, - server_abstract.request_count); + LOG_INFO("[DART Load Balance 2] Server %d has query requests = %d\n", srv_cnt, + server_abstract.request_count); } } @@ -407,9 +384,9 @@ main(int argc, char **argv) PDC_Client_search_obj_ref_through_dart(hash_algo, query_str, ref_type, &rest_count, &out); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Suffix] Time to search '%s' and get %d results = %d microseconds for " - "rank %d", - query_str, rest_count, timer_delta_us(&detailed_timer), rank); + LOG_INFO("[Client_Side_Suffix] Time to search '%s' and get %d results = %d microseconds for " + "rank %d\n", + query_str, rest_count, timer_delta_us(&detailed_timer), rank); } #ifdef ENABLE_MPI @@ -421,7 +398,7 @@ main(int argc, char **argv) if (rank == 0) { query_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Suffix_Throughput] %.3f ops/ms", query_throughput); + LOG_INFO("[Client_Side_Suffix_Throughput] %.3f ops/ms\n", query_throughput); int srv_cnt = 0; for (srv_cnt = 0; srv_cnt < dart_g->num_server; srv_cnt++) { @@ -429,8 +406,8 @@ main(int argc, char **argv) server_abstract.id = srv_cnt; dart_retrieve_server_info_cb(&server_abstract); if (round == 1) - println("[DART Load Balance 3] Server %d has query requests = %d", srv_cnt, - server_abstract.request_count); + LOG_INFO("[DART Load Balance 3] Server %d has query requests = %d\n", srv_cnt, + server_abstract.request_count); } } @@ -463,9 +440,9 @@ main(int argc, char **argv) PDC_Client_search_obj_ref_through_dart(hash_algo, query_str, ref_type, &rest_count, &out); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Infix] Time to search '%s' and get %d results = %d microseconds for " - "rank %d", - query_str, rest_count, timer_delta_us(&detailed_timer), rank); + LOG_INFO("[Client_Side_Infix] Time to search '%s' and get %d results = %d microseconds for " + "rank %d\n", + query_str, rest_count, timer_delta_us(&detailed_timer), rank); } #ifdef ENABLE_MPI @@ -477,7 +454,7 @@ main(int argc, char **argv) if (rank == 0) { query_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Infix_Throughput] %.3f ops/ms", query_throughput); + LOG_INFO("[Client_Side_Infix_Throughput] %.3f ops/ms\n", query_throughput); int srv_cnt = 0; for (srv_cnt = 0; srv_cnt < dart_g->num_server; srv_cnt++) { @@ -485,8 +462,8 @@ main(int argc, char **argv) server_abstract.id = srv_cnt; dart_retrieve_server_info_cb(&server_abstract); if (round == 1) - println("[DART Load Balance 4] Server %d has query requests = %d", srv_cnt, - server_abstract.request_count); + LOG_INFO("[DART Load Balance 4] Server %d has query requests = %d\n", srv_cnt, + server_abstract.request_count); } } @@ -504,8 +481,8 @@ main(int argc, char **argv) dart_retrieve_server_info_cb(&server_abstract); int64_t num_request = server_abstract.request_count; if (round == 1) - println("[DART Load Balance All] The total number of query requests on server %d = %d", - srv_cnt, num_request); + LOG_INFO("[DART Load Balance All] The total number of query requests on server %d = %d\n", + srv_cnt, num_request); sum += (double)num_request; sqrt_sum += (double)((double)num_request * (double)num_request); } @@ -513,14 +490,9 @@ main(int argc, char **argv) double variance = sqrt_sum / dart_g->num_server - mean * mean; double stddev = sqrt(variance); - // double normalSum = (sum - (mean*(double)dart_g->num_server))/stddev; - // double normalSqrtSum = sqrt_sum-2*sum*mean+((sum*sum)/(double)dart_g->num_server); - // double normalMean = normalSum / (double)dart_g->num_server; - // double normalVariance = normalSqrtSum/dart_g->num_server - normalMean * normalMean; - // double normalStdDev = sqrt(normalVariance); if (round == 1) - println( - "[DART DART Load Balance All] STDDEV = %.3f for %d servers and %.1f request in total.", + LOG_INFO( + "[DART DART Load Balance All] STDDEV = %.3f for %d servers and %.1f request in total\n", stddev, dart_g->num_server, sum); srv_cnt = 0; @@ -533,8 +505,8 @@ main(int argc, char **argv) dart_retrieve_server_info_cb(&server_abstract); int64_t num_indexed_word = server_abstract.indexed_word_count / 2; if (round == 1) - println("[DART Key Distribution] Server %d has %d words indexed", srv_cnt, - num_indexed_word); + LOG_INFO("[DART Key Distribution] Server %d has %d words indexed\n", srv_cnt, + num_indexed_word); sum += (double)num_indexed_word; sqrt_sum += (double)((double)num_indexed_word * (double)num_indexed_word); } @@ -542,15 +514,9 @@ main(int argc, char **argv) variance = sqrt_sum / dart_g->num_server - mean * mean; stddev = sqrt(variance); - // normalSum = (sum - (mean*(double)dart_g->num_server))/stddev; - // normalSqrtSum = sqrt_sum-2*sum*mean+((sum*sum)/(double)dart_g->num_server); - // normalMean = normalSum / (double)dart_g->num_server; - // normalVariance = normalSqrtSum/dart_g->num_server - normalMean * normalMean; - // normalStdDev = sqrt(normalVariance); - if (round == 1) - println("[DART Key Distribution] STDDEV = %.3f for %d servers and %d keys in total.", stddev, - dart_g->num_server, word_count * size); + LOG_INFO("[DART Key Distribution] STDDEV = %.3f for %d servers and %d keys in total\n", + stddev, dart_g->num_server, word_count * size); } /* =========================== Delete From Index ========================= */ @@ -567,9 +533,10 @@ main(int argc, char **argv) (uint64_t)data); timer_pause(&detailed_timer); if (round == 1) - println("[Client_Side_Delete] Time to delete key %s for both prefix index and suffix index = " - "%d microseconds", - input_word_list[i], timer_delta_us(&detailed_timer)); + LOG_INFO( + "[Client_Side_Delete] Time to delete key %s for both prefix index and suffix index = " + "%d microseconds\n", + input_word_list[i], timer_delta_us(&detailed_timer)); } #ifdef ENABLE_MPI @@ -582,7 +549,7 @@ main(int argc, char **argv) delete_throughput = (double)((double)(total_word_count) / (double)timer_delta_ms(&timer)); if (round == 1) - println("[Client_Side_Delete_Throughput] %.3f ops/ms", delete_throughput); + LOG_INFO("[Client_Side_Delete_Throughput] %.3f ops/ms\n", delete_throughput); } } // end round loop @@ -598,9 +565,10 @@ main(int argc, char **argv) if (PDCclose(pdc) < 0) LOG_ERROR("Failed to close PDC\n"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/data_server_meta.c b/src/tests/data_server/data_server_meta.c similarity index 99% rename from src/tests/data_server_meta.c rename to src/tests/data_server/data_server_meta.c index 844383e5d..dba79f21c 100644 --- a/src/tests/data_server_meta.c +++ b/src/tests/data_server/data_server_meta.c @@ -85,7 +85,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDC_init("pdc"); diff --git a/src/tests/data_server_meta_test.c b/src/tests/data_server/data_server_meta_test.c similarity index 95% rename from src/tests/data_server_meta_test.c rename to src/tests/data_server/data_server_meta_test.c index ed9b4cb48..96ff92c88 100644 --- a/src/tests/data_server_meta_test.c +++ b/src/tests/data_server/data_server_meta_test.c @@ -13,7 +13,7 @@ void print_usage() { - LOG_JUST_PRINT("Should run with more than 1 processes!\n"); + LOG_JUST_PRINT("Should run with more than 1 processes\n"); } int @@ -98,7 +98,7 @@ main(int argc, char **argv) for (i = 0; i < NOBJ; i++) { PDC_Client_query_metadata_name_timestep(obj_names[i], 0, &metadata[i]); if (metadata[i]->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); goto done; } @@ -107,8 +107,7 @@ main(int argc, char **argv) PDC_Client_write(metadata[i], &write_region, write_data); } - LOG_INFO("%d - Finished writing %d regions. \n", rank, NOBJ); - fflush(stdout); + LOG_INFO("%d - Finished writing %d regions\n", rank, NOBJ); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -133,7 +132,6 @@ main(int argc, char **argv) for (i = 0; i < my_read_obj; i++) { LOG_INFO("Proc %d - [%s]: [%c] ... [%c], size %" PRId64 "\n", rank, obj_names[i], ((char **)out_buf)[i][0], ((char **)out_buf)[i][out_buf_sizes[i] - 1], out_buf_sizes[i]); - fflush(stdout); } #ifdef ENABLE_MPI diff --git a/src/tests/data_server_read.c b/src/tests/data_server/data_server_read.c similarity index 98% rename from src/tests/data_server_read.c rename to src/tests/data_server/data_server_read.c index 4bd096aff..70468abcd 100644 --- a/src/tests/data_server_read.c +++ b/src/tests/data_server/data_server_read.c @@ -87,10 +87,8 @@ main(int argc, char **argv) ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to read data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); diff --git a/src/tests/data_server_read_multi.c b/src/tests/data_server/data_server_read_multi.c similarity index 92% rename from src/tests/data_server_read_multi.c rename to src/tests/data_server/data_server_read_multi.c index 798325105..078862679 100644 --- a/src/tests/data_server_read_multi.c +++ b/src/tests/data_server/data_server_read_multi.c @@ -111,11 +111,11 @@ main(int argc, char **argv) // Query the created object if (rank == 0) - LOG_INFO("%d: Start to query object just created ...", rank); + LOG_INFO("%d: Start to query object just created...", rank); PDC_Client_query_metadata_name_timestep_agg(obj_name, ts, &metadata); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("[%d]: Error with metadata!\n", rank); + LOG_ERROR("[%d]: Error with metadata\n", rank); exit(-1); } #ifdef ENABLE_MPI @@ -129,10 +129,8 @@ main(int argc, char **argv) (meta_end.tv_sec - meta_start.tv_sec) * 1000000LL + meta_end.tv_usec - meta_start.tv_usec; total_meta_sec += meta_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Sleep %.2f seconds.\n", sleepseconds); - fflush(stdout); - } // Fake computation usleep(microseconds); @@ -142,7 +140,7 @@ main(int argc, char **argv) // Wait for previous read completion before reading current timestep ret_value = PDC_Client_wait(&request, 60000, 100); if (ret_value != SUCCEED) { - LOG_ERROR("==PDC_CLIENT: PDC_Client_read - PDC_Client_wait error\n"); + LOG_ERROR("PDC_Client_read - PDC_Client_wait error\n"); goto done; } @@ -157,13 +155,12 @@ main(int argc, char **argv) total_wait_sec += wait_elapsed / 1000000.0; LOG_INFO("Timestep %d read, metadata %.2f s, wait %.2f s.\n", ts, meta_elapsed / 1000000.0, wait_elapsed / 1000000.0); - fflush(stdout); } } ret_value = PDC_Client_iread(metadata, ®ion, &request, mydata); if (ret_value != SUCCEED) { - LOG_ERROR("[%d] Error with PDC_Client_iread!\n", rank); + LOG_ERROR("[%d] Error with PDC_Client_iread\n", rank); goto done; } @@ -178,13 +175,11 @@ main(int argc, char **argv) total_elapsed = (total_end.tv_sec - total_start.tv_sec) * 1000000LL + total_end.tv_usec - total_start.tv_usec; - if (rank == 0) { + if (rank == 0) printf( "Total time read %d ts data each %luMB with %d ranks: %.5e, meta %.2f, wait %.2f, sleep %.2f\n", ntimestep, size_MB, size, total_elapsed / 1000000.0, total_meta_sec, total_wait_sec, sleepseconds * ntimestep); - fflush(stdout); - } done: // close a container diff --git a/src/tests/data_server_read_vpic.c b/src/tests/data_server/data_server_read_vpic.c similarity index 95% rename from src/tests/data_server_read_vpic.c rename to src/tests/data_server/data_server_read_vpic.c index b0103c2be..7d74b8171 100644 --- a/src/tests/data_server_read_vpic.c +++ b/src/tests/data_server/data_server_read_vpic.c @@ -119,7 +119,7 @@ main(int argc, char **argv) ret = PDC_Client_query_metadata_name_timestep(obj_names[i], 0, &obj_metas[i]); #endif if (ret != SUCCEED || obj_metas[i] == NULL || obj_metas[i]->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); exit(-1); } @@ -157,7 +157,7 @@ main(int argc, char **argv) request[i].n_update = read_var; ret = PDC_Client_iread(obj_metas[i], &obj_regions[i], &request[i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iread!\n"); + LOG_ERROR("Error with PDC_Client_iread\n"); goto done; } @@ -176,7 +176,7 @@ main(int argc, char **argv) for (i = 0; i < read_var; i++) { ret = PDC_Client_wait(&request[i], 200000, 100); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } } @@ -195,19 +195,18 @@ main(int argc, char **argv) LOG_INFO("Read %.2f MB data with %d ranks\nTotal read time: %.2f\nSent %.2f, wait %.2f, Throughput " "%.2f MB/s\n", total_size, size, read_time, sent_time_total, wait_time_total, total_size / read_time); - fflush(stdout); } int verify = 1; if (rank == 0) - LOG_INFO("Verifying data correctness ..."); + LOG_INFO("Verifying data correctness..."); // Data verification for (i = 0; i < NPARTICLES; i++) { if (((int *)mydata[7])[i] != i * 2 || ((int *)mydata[6])[i] != i || ((float *)mydata[5])[i] != (i * 2.0 / NPARTICLES) * ZDIM || ((float *)mydata[2])[i] != (i * 1.0 / NPARTICLES) * ZDIM) { - LOG_ERROR("\nERROR on rank %d at element %d. [%d %d %.2f %.2f]/[%d %d %.2f %.2f]\n", rank, i, + LOG_ERROR("\nError on rank %d at element %d. [%d %d %.2f %.2f]/[%d %d %.2f %.2f]\n", rank, i, ((int *)mydata[7])[i], ((int *)mydata[6])[i], ((float *)mydata[5])[i], ((float *)mydata[2])[i], i * 2, i, (i * 2.0 / NPARTICLES) * ZDIM, (i * 1.0 / NPARTICLES) * ZDIM); @@ -221,8 +220,6 @@ main(int argc, char **argv) } done: - fflush(stdout); - if (PDCcont_close(cont_id) < 0) LOG_ERROR("Failed to close container\n"); diff --git a/src/tests/data_server_read_vpic_multits.c b/src/tests/data_server/data_server_read_vpic_multits.c similarity index 93% rename from src/tests/data_server_read_vpic_multits.c rename to src/tests/data_server/data_server_read_vpic_multits.c index f17735434..ba55d9d6b 100644 --- a/src/tests/data_server_read_vpic_multits.c +++ b/src/tests/data_server/data_server_read_vpic_multits.c @@ -120,11 +120,9 @@ main(int argc, char **argv) if (sleep_time < 0) sleep_time = 15; - if (rank == 0) { + if (rank == 0) LOG_INFO("read %d variables, each %dMB per proc, %d timesteps, %.1f compute time\n", n_var, size_per_proc_var_MB, n_ts, sleep_time); - fflush(stdout); - } // In VPIC-IO, each client reads 32MB per variable, 8 var per client, so 256MB per client n_particles = size_per_proc_var_MB * 262144; // Convert to number of particles @@ -199,10 +197,8 @@ main(int argc, char **argv) query_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end_1); query_time_total += query_time; - if (rank == 0) { - LOG_INFO("Query done!\n"); - fflush(stdout); - } + if (rank == 0) + LOG_INFO("Query done\n"); for (ts = 0; ts < n_ts; ts++) { /* @@ -214,7 +210,6 @@ main(int argc, char **argv) if (ts == 0) { if (rank == 0) LOG_INFO("Timestep %d: sync read start\n", ts); - fflush(stdout); // Timing gettimeofday(&pdc_timer_start_1, 0); @@ -222,7 +217,7 @@ main(int argc, char **argv) for (i = 0; i < n_var; i++) { ret = PDC_Client_read(obj_metas[ts][i], &obj_regions[ts][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_read!\n"); + LOG_ERROR("Error with PDC_Client_read\n"); goto done; } } // end of for @@ -235,10 +230,8 @@ main(int argc, char **argv) wait_time = read_time; wait_time_total += wait_time; - if (rank == 0) { - LOG_INFO("sync read done\n"); - fflush(stdout); - } + if (rank == 0) + LOG_INFO("Sync read done\n"); } else { /* @@ -250,16 +243,14 @@ main(int argc, char **argv) #endif gettimeofday(&pdc_timer_start_1, 0); - if (rank == 0) { + if (rank == 0) LOG_INFO("Timestep %d: Wait for prefetch.\n", ts); - fflush(stdout); - } // wait for read to finish before reading next timestep for (i = 0; i < n_var; i++) { ret = PDC_Client_wait(&request[ts][i], 90000, 100); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } } @@ -270,10 +261,8 @@ main(int argc, char **argv) wait_time = PDC_get_elapsed_time_double(&pdc_timer_start_1, &pdc_timer_end_1); wait_time_total += wait_time; - if (rank == 0) { + if (rank == 0) LOG_INFO("Timestep %d: prefetch finished.\n", ts); - fflush(stdout); - } } // Prefetch next ts except the last read @@ -286,7 +275,7 @@ main(int argc, char **argv) ret = PDC_Client_iread(obj_metas[ts + 1][i], &obj_regions[ts + 1][i], &request[ts + 1][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iread!\n"); + LOG_ERROR("Error with PDC_Client_iread\n"); goto done; } } // end of for @@ -306,10 +295,8 @@ main(int argc, char **argv) if (true_sleep_time < 0) true_sleep_time = 0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Compute for %d seconds.\n", (int)(true_sleep_time)); - fflush(stdout); - } // Sleep to fake compute time PDC_msleep((unsigned long)(true_sleep_time * 1000)); @@ -329,13 +316,11 @@ main(int argc, char **argv) gettimeofday(&pdc_timer_end, 0); total_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); total_size = n_particles * 4.0 * 8 * size / 1024.0 / 1024.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("read %d ts each of %.0fMB data with %d ranks: total %.2f\n" "query %.2f, read %.2f, wait %.2f, compute %.2f\n", n_ts, total_size, size, total_time, query_time_total, read_time_total, wait_time_total, compute_total); - fflush(stdout); - } // Free allocated space for (i = 0; i < n_var; i++) { diff --git a/src/tests/data_server_read_vpic_spatial.c b/src/tests/data_server/data_server_read_vpic_spatial.c similarity index 96% rename from src/tests/data_server_read_vpic_spatial.c rename to src/tests/data_server/data_server_read_vpic_spatial.c index 9a68cf512..3e20f6b79 100644 --- a/src/tests/data_server_read_vpic_spatial.c +++ b/src/tests/data_server/data_server_read_vpic_spatial.c @@ -142,7 +142,7 @@ main(int argc, char **argv) ret = PDC_Client_query_metadata_name_timestep(obj_names[i], 0, &obj_metas[i]); #endif if (ret != SUCCEED || obj_metas[i] == NULL || obj_metas[i]->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); exit(-1); } @@ -172,7 +172,7 @@ main(int argc, char **argv) request[i].n_update = 1; ret = PDC_Client_iread(obj_metas[i], &obj_regions[i], &request[i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iread!\n"); + LOG_ERROR("Error with PDC_Client_iread\n"); goto done; } @@ -188,7 +188,7 @@ main(int argc, char **argv) ret = PDC_Client_wait(&request[i], 60000, 100); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } @@ -207,16 +207,12 @@ main(int argc, char **argv) gettimeofday(&pdc_timer_end, 0); read_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); total_size = NPARTICLES * selectivity * 4.0 * 8.0 * size / 1024.0 / 1024.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Read %.2f MB data with %d ranks\nTotal read time: %.2f\nSent %.2f, wait %.2f, Throughput " "%.2f MB/s\n", total_size, size, read_time, sent_time_total, wait_time_total, total_size / read_time); - fflush(stdout); - } done: - fflush(stdout); - if (PDCcont_close(cont_id) < 0) LOG_ERROR("Failed to close container\n"); diff --git a/src/tests/data_server_read_vpic_spatial_multits.c b/src/tests/data_server/data_server_read_vpic_spatial_multits.c similarity index 94% rename from src/tests/data_server_read_vpic_spatial_multits.c rename to src/tests/data_server/data_server_read_vpic_spatial_multits.c index a10c2ad29..bbd882d1b 100644 --- a/src/tests/data_server_read_vpic_spatial_multits.c +++ b/src/tests/data_server/data_server_read_vpic_spatial_multits.c @@ -130,11 +130,9 @@ main(int argc, char **argv) selectivity = 1.0; } - if (rank == 0) { + if (rank == 0) LOG_INFO("read %d variables, each %dMB per proc, %d timesteps, %.1f compute time, %.2f selectivity\n", n_var, size_per_proc_var_MB, n_ts, sleep_time, selectivity); - fflush(stdout); - } // create a pdc pdc_id = PDCinit("pdc"); @@ -206,8 +204,7 @@ main(int argc, char **argv) query_time_total += query_time; if (rank == 0) - LOG_INFO("Query done!\n"); - fflush(stdout); + LOG_INFO("Query done\n"); for (ts = 0; ts < n_ts; ts++) { /* @@ -219,7 +216,6 @@ main(int argc, char **argv) if (ts == 0) { if (rank == 0) LOG_INFO("Timestep %d: sync read start\n", ts); - fflush(stdout); // Timing gettimeofday(&pdc_timer_start_1, 0); @@ -227,7 +223,7 @@ main(int argc, char **argv) for (i = 0; i < n_var; i++) { ret = PDC_Client_read(obj_metas[ts][i], &obj_regions[ts][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_read!\n"); + LOG_ERROR("Error with PDC_Client_read\n"); goto done; } } // end of for @@ -241,8 +237,7 @@ main(int argc, char **argv) wait_time_total += wait_time; if (rank == 0) - LOG_INFO("sync read done\n"); - fflush(stdout); + LOG_INFO("Sync read done\n"); } else { /* @@ -254,16 +249,14 @@ main(int argc, char **argv) #endif gettimeofday(&pdc_timer_start_1, 0); - if (rank == 0) { + if (rank == 0) LOG_INFO("Timestep %d: Wait for prefetch.\n", ts); - fflush(stdout); - } // wait for read to finish before reading next timestep for (i = 0; i < n_var; i++) { ret = PDC_Client_wait(&request[ts][i], 90000, 100); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } } @@ -274,10 +267,8 @@ main(int argc, char **argv) wait_time = PDC_get_elapsed_time_double(&pdc_timer_start_1, &pdc_timer_end_1); wait_time_total += wait_time; - if (rank == 0) { + if (rank == 0) LOG_INFO("Timestep %d: prefetch finished.\n", ts); - fflush(stdout); - } } /* @@ -293,7 +284,7 @@ main(int argc, char **argv) ret = PDC_Client_iread(obj_metas[ts + 1][i], &obj_regions[ts + 1][i], &request[ts + 1][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iread!\n"); + LOG_ERROR("Error with PDC_Client_iread\n"); goto done; } } // end of for @@ -313,10 +304,8 @@ main(int argc, char **argv) if (true_sleep_time < 0) true_sleep_time = 0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Compute for %d seconds.\n", (int)(true_sleep_time)); - fflush(stdout); - } // Sleep to fake compute time PDC_msleep((unsigned long)(true_sleep_time * 1000)); @@ -336,13 +325,11 @@ main(int argc, char **argv) gettimeofday(&pdc_timer_end, 0); total_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); total_size = n_particles * selectivity * 4.0 * 8 * size / 1024.0 / 1024.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("read %d ts each of %.0fMB data with %d ranks: total %.2f\n" "query %.2f, read %.2f, wait %.2f, compute %.2f\n", n_ts, total_size, size, total_time, query_time_total, read_time_total, wait_time_total, compute_total); - fflush(stdout); - } // Free allocated space for (i = 0; i < n_var; i++) { diff --git a/src/tests/data_server_write.c b/src/tests/data_server/data_server_write.c similarity index 97% rename from src/tests/data_server_write.c rename to src/tests/data_server/data_server_write.c index aa26d0ab9..1459edf39 100644 --- a/src/tests/data_server_write.c +++ b/src/tests/data_server/data_server_write.c @@ -96,7 +96,7 @@ main(int argc, char **argv) // Query the created object PDC_Client_query_metadata_name_timestep(obj_name, 0, &metadata); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); } region.ndim = ndim; @@ -123,10 +123,8 @@ main(int argc, char **argv) ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to write data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } // close a container if (PDCcont_close(cont) < 0) diff --git a/src/tests/data_server_write_multi.c b/src/tests/data_server/data_server_write_multi.c similarity index 93% rename from src/tests/data_server_write_multi.c rename to src/tests/data_server/data_server_write_multi.c index c796534d2..b5c597ea5 100644 --- a/src/tests/data_server_write_multi.c +++ b/src/tests/data_server/data_server_write_multi.c @@ -122,7 +122,6 @@ main(int argc, char **argv) // Create a object with only rank 0 if (rank == 0) { LOG_INFO("Creating an object with name [%s], timestep %u\n", obj_name, ts); - /* fflush(stdout); */ test_obj = PDCobj_create(cont, obj_name, obj_prop); if (test_obj <= 0) { LOG_ERROR("Error getting an object id of %s from server, exit...\n", "DataServerTestBin"); @@ -136,11 +135,11 @@ main(int argc, char **argv) // Query the created object if (rank == 0) - LOG_INFO("%d: Start to query object just created ...", rank); + LOG_INFO("%d: Start to query object just created...", rank); PDC_Client_query_metadata_name_timestep_agg(obj_name, ts, &metadata); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("[%d]: Error with metadata!\n", rank); + LOG_ERROR("[%d]: Error with metadata\n", rank); exit(-1); } #ifdef ENABLE_MPI @@ -154,10 +153,8 @@ main(int argc, char **argv) (meta_end.tv_sec - meta_start.tv_sec) * 1000000LL + meta_end.tv_usec - meta_start.tv_usec; total_meta_sec += meta_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Sleep %.2f seconds.\n", sleepseconds); - fflush(stdout); - } // Fake computation usleep(microseconds); @@ -167,7 +164,7 @@ main(int argc, char **argv) // Wait for previous write completion before writting current timestep ret_value = PDC_Client_wait(&request, 60000, 100); if (ret_value != SUCCEED) { - LOG_INFO("==PDC_CLIENT: PDC_Client_write - PDC_Client_wait error\n"); + LOG_INFO("PDC_Client_write - PDC_Client_wait error\n"); goto done; } @@ -183,14 +180,13 @@ main(int argc, char **argv) total_wait_sec += wait_elapsed / 1000000.0; LOG_INFO("Timestep %d written, metadata %.2f s, wait %.2f s.\n", ts, meta_elapsed / 1000000.0, wait_elapsed / 1000000.0); - fflush(stdout); } } // (pdc_metadata_t *meta, struct PDC_region_info *region, PDC_Request_t *request, void *buf) ret_value = PDC_Client_iwrite(metadata, ®ion, &request, mydata); if (ret_value != SUCCEED) { - LOG_ERROR("[%d] Error with PDC_Client_iwrite!\n", rank); + LOG_ERROR("[%d] Error with PDC_Client_iwrite\n", rank); goto done; } @@ -205,13 +201,11 @@ main(int argc, char **argv) total_elapsed = (total_end.tv_sec - total_start.tv_sec) * 1000000LL + total_end.tv_usec - total_start.tv_usec; - if (rank == 0) { + if (rank == 0) LOG_INFO( "Total time write %d ts data each %luMB with %d ranks: %.5e, meta %.2f, wait %.2f, sleep %.2f\n", ntimestep, size_MB, size, total_elapsed / 1000000.0, total_meta_sec, total_wait_sec, sleepseconds * ntimestep); - fflush(stdout); - } done: // close a container diff --git a/src/tests/data_server_write_vpic.c b/src/tests/data_server/data_server_write_vpic.c similarity index 97% rename from src/tests/data_server_write_vpic.c rename to src/tests/data_server/data_server_write_vpic.c index 3dc142952..719c4caca 100644 --- a/src/tests/data_server_write_vpic.c +++ b/src/tests/data_server/data_server_write_vpic.c @@ -61,8 +61,7 @@ main(int argc, char **argv) MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); #else - LOG_INFO("MPI NOT Enabled!\n"); - fflush(stdout); + LOG_INFO("MPI NOT Enabled\n"); #endif char *obj_names[] = {"x", "y", "z", "px", "py", "pz", "id1", "id2"}; @@ -181,7 +180,7 @@ main(int argc, char **argv) ret = PDC_Client_query_metadata_name_timestep(obj_names[i], 0, &obj_metas[i]); #endif if (ret != SUCCEED || obj_metas[i] == NULL || obj_metas[i]->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); exit(-1); } } @@ -215,7 +214,7 @@ main(int argc, char **argv) request[i].n_update = write_var; ret = PDC_Client_iwrite(obj_metas[i], &obj_regions[i], &request[i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iwrite!\n"); + LOG_ERROR("Error with PDC_Client_iwrite\n"); goto done; } @@ -232,7 +231,7 @@ main(int argc, char **argv) for (i = 0; i < write_var; i++) { ret = PDC_Client_wait(&request[i], 200000, 500); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } } @@ -251,7 +250,6 @@ main(int argc, char **argv) LOG_INFO("Write %f MB data with %d ranks\nTotal write time: %.2f\nSent %.2f, wait %.2f, Throughput " "%.2f MB/s\n", total_size, size, write_time, sent_time_total, wait_time_total, total_size / write_time); - fflush(stdout); } done: diff --git a/src/tests/data_server_write_vpic_multits.c b/src/tests/data_server/data_server_write_vpic_multits.c similarity index 96% rename from src/tests/data_server_write_vpic_multits.c rename to src/tests/data_server/data_server_write_vpic_multits.c index 025095641..a4405751d 100644 --- a/src/tests/data_server_write_vpic_multits.c +++ b/src/tests/data_server/data_server_write_vpic_multits.c @@ -130,11 +130,9 @@ main(int argc, char **argv) if (sleep_time < 0) sleep_time = 15; - if (rank == 0) { + if (rank == 0) LOG_INFO("Write %d variables, each %dMB per proc, %d timesteps, %.1f compute time\n", n_var, size_per_proc_var_MB, n_ts, sleep_time); - fflush(stdout); - } // create a pdc pdc_id = PDCinit("pdc"); @@ -212,10 +210,8 @@ main(int argc, char **argv) true_sleep_time = sleep_time - gen_time; } - if (rank == 0) { + if (rank == 0) LOG_INFO("Compute for %.2f seconds\n", gen_time + true_sleep_time); - } - fflush(stdout); // Sleep to fake compute time PDC_msleep((unsigned long)(true_sleep_time * 1000)); @@ -225,10 +221,8 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); #endif - if (rank == 0) { + if (rank == 0) LOG_INFO("Compute done\n"); - fflush(stdout); - } gettimeofday(&pdc_timer_start_1, 0); // Create obj and region one by one @@ -271,10 +265,8 @@ main(int argc, char **argv) create_time = PDC_get_elapsed_time_double(&pdc_timer_start_1, &pdc_timer_end_1); create_time_total += create_time; - if (rank == 0) { + if (rank == 0) LOG_INFO("%d: start querying objects\n", rank); - fflush(stdout); - } for (i = 0; i < n_var; i++) { ret = PDC_Client_query_metadata_name_timestep_agg(obj_names[i], ts, &obj_metas[ts][i]); @@ -291,10 +283,8 @@ main(int argc, char **argv) #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - if (rank == 0) { + if (rank == 0) LOG_INFO("%d: querying done\n", rank); - fflush(stdout); - } // Wait for the previous request to finish if (ts > 0 && ts != n_ts - 1) { @@ -304,7 +294,7 @@ main(int argc, char **argv) for (i = 0; i < n_var; i++) { ret = PDC_Client_wait(&request[ts - 1][i], 30000, 100); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_wait!\n"); + LOG_ERROR("Error with PDC_Client_wait\n"); goto done; } } @@ -318,7 +308,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Timestep %d: start to write.\n", ts); - fflush(stdout); // Last ts is sync IO if (ts != n_ts - 1) { @@ -332,7 +321,7 @@ main(int argc, char **argv) request[ts][i].n_update = n_var; ret = PDC_Client_iwrite(obj_metas[ts][i], &obj_regions[ts][i], &request[ts][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iwrite!\n"); + LOG_ERROR("Error with PDC_Client_iwrite\n"); goto done; } } // end of for @@ -360,7 +349,7 @@ main(int argc, char **argv) for (i = 0; i < n_var; i++) { ret = PDC_Client_write(obj_metas[n_ts - 1][i], &obj_regions[n_ts - 1][i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iwrite!\n"); + LOG_ERROR("Error with PDC_Client_iwrite\n"); goto done; } } // end of for @@ -385,7 +374,6 @@ main(int argc, char **argv) "create %.2f, query %.2f, write %.2f, wait %.2f, compute %.2f\n", n_ts, total_size, size, total_time, create_time_total, query_time_total, write_time_total, wait_time_total, compute_total); - fflush(stdout); } // Free allocated space diff --git a/src/tests/bdcats_old.c b/src/tests/deprecated/bdcats_old.c similarity index 100% rename from src/tests/bdcats_old.c rename to src/tests/deprecated/bdcats_old.c diff --git a/src/tests/bdcats_v2.c b/src/tests/deprecated/bdcats_v2.c similarity index 98% rename from src/tests/bdcats_v2.c rename to src/tests/deprecated/bdcats_v2.c index e945cdeaf..02e80c709 100644 --- a/src/tests/bdcats_v2.c +++ b/src/tests/deprecated/bdcats_v2.c @@ -225,10 +225,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to map with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -274,10 +272,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to lock with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -323,10 +319,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to relese lock with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -371,10 +365,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to read data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } if (PDCobj_close(obj_xx) < 0) LOG_ERROR("Failed to close obj_xx\n"); diff --git a/src/tests/blocked_lock.c b/src/tests/deprecated/blocked_lock.c similarity index 95% rename from src/tests/blocked_lock.c rename to src/tests/deprecated/blocked_lock.c index d821b088f..3d1381471 100644 --- a/src/tests/blocked_lock.c +++ b/src/tests/deprecated/blocked_lock.c @@ -103,8 +103,7 @@ main(int argc, char **argv) mysize[0] = numparticles; // create a region - r1 = PDCregion_create(1, offset, mysize); - // LOG_ERROR("First region id: %lld\n", r1); + r1 = PDCregion_create(1, offset, mysize); r2 = PDCregion_create(1, offset_remote, mysize); ret = PDCbuf_obj_map(&x[0], PDC_FLOAT, r1, obj2, r2); if (ret < 0) { @@ -122,7 +121,6 @@ main(int argc, char **argv) for (int i = 0; i < numparticles; i++) { x[i] = uniform_random_number() * x_dim; - // fflush(stdout); } ret = PDCreg_release_lock(obj2, r2, WRITE); @@ -131,20 +129,15 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); LOG_INFO("done with region release\n"); - fflush(stdout); - if (rank == 0) { + if (rank == 0) LOG_INFO("request another lock\n"); - fflush(stdout); - } ret = PDCreg_obtain_lock(obj2, r2, WRITE, BLOCK); if (ret != SUCCEED) LOG_ERROR("Failed to obtain lock for r2\n"); - if (rank == 0) { + if (rank == 0) LOG_INFO("lock is granted\n"); - fflush(stdout); - } ret = PDCbuf_obj_unmap(obj2, r2); if (ret != SUCCEED) diff --git a/src/tests/buf_map_mpi_v2.c b/src/tests/deprecated/buf_map_mpi_v2.c similarity index 100% rename from src/tests/buf_map_mpi_v2.c rename to src/tests/deprecated/buf_map_mpi_v2.c diff --git a/src/tests/buf_obj_map.c b/src/tests/deprecated/buf_obj_map.c similarity index 100% rename from src/tests/buf_obj_map.c rename to src/tests/deprecated/buf_obj_map.c diff --git a/src/tests/buf_obj_map_mpi.c b/src/tests/deprecated/buf_obj_map_mpi.c similarity index 100% rename from src/tests/buf_obj_map_mpi.c rename to src/tests/deprecated/buf_obj_map_mpi.c diff --git a/src/tests/obj_lock.c b/src/tests/deprecated/obj_lock.c similarity index 100% rename from src/tests/obj_lock.c rename to src/tests/deprecated/obj_lock.c diff --git a/src/tests/obj_transformation.c b/src/tests/deprecated/obj_transformation.c similarity index 99% rename from src/tests/obj_transformation.c rename to src/tests/deprecated/obj_transformation.c index d6f8b2791..ebba0f16d 100644 --- a/src/tests/obj_transformation.c +++ b/src/tests/deprecated/obj_transformation.c @@ -271,10 +271,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to map with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -320,10 +318,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to lock with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } for (i = 0; i < numparticles; i++) { id1[i] = i; @@ -383,10 +379,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to update data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif diff --git a/src/tests/region_obj_map.c b/src/tests/deprecated/region_obj_map.c similarity index 97% rename from src/tests/region_obj_map.c rename to src/tests/deprecated/region_obj_map.c index 1f0ab783c..952e8f455 100644 --- a/src/tests/region_obj_map.c +++ b/src/tests/deprecated/region_obj_map.c @@ -76,7 +76,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -86,7 +86,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -95,7 +95,7 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -118,7 +118,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object diff --git a/src/tests/region_obj_map_2D.c b/src/tests/deprecated/region_obj_map_2D.c similarity index 100% rename from src/tests/region_obj_map_2D.c rename to src/tests/deprecated/region_obj_map_2D.c diff --git a/src/tests/region_obj_map_2D_partial.c b/src/tests/deprecated/region_obj_map_2D_partial.c similarity index 100% rename from src/tests/region_obj_map_2D_partial.c rename to src/tests/deprecated/region_obj_map_2D_partial.c diff --git a/src/tests/region_obj_map_3D.c b/src/tests/deprecated/region_obj_map_3D.c similarity index 99% rename from src/tests/region_obj_map_3D.c rename to src/tests/deprecated/region_obj_map_3D.c index 24d0a2fa4..6dd819f11 100644 --- a/src/tests/region_obj_map_3D.c +++ b/src/tests/deprecated/region_obj_map_3D.c @@ -198,7 +198,7 @@ main(int argc, char **argv) ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - priLOG_ERRORntf("PDCreg_obtain_lock failed\n"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } diff --git a/src/tests/region_obj_map_3D_partial.c b/src/tests/deprecated/region_obj_map_3D_partial.c similarity index 100% rename from src/tests/region_obj_map_3D_partial.c rename to src/tests/deprecated/region_obj_map_3D_partial.c diff --git a/src/tests/region_obj_map_merge.c b/src/tests/deprecated/region_obj_map_merge.c similarity index 75% rename from src/tests/region_obj_map_merge.c rename to src/tests/deprecated/region_obj_map_merge.c index 308c26fb9..6de785c94 100644 --- a/src/tests/region_obj_map_merge.c +++ b/src/tests/deprecated/region_obj_map_merge.c @@ -73,35 +73,35 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_buf(obj_prop, obj_data); @@ -115,20 +115,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -142,34 +142,34 @@ main(int argc, char **argv) } ret = PDCbuf_obj_map(data, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 2; @@ -178,40 +178,40 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data + offset[0], PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -225,97 +225,97 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data_read, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } ret = PDCreg_release_lock(obj1, reg_global, PDC_READ); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i); + LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); ret_value = 1; break; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); free(obj_data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_obj_map_overlap.c b/src/tests/deprecated/region_obj_map_overlap.c similarity index 74% rename from src/tests/region_obj_map_overlap.c rename to src/tests/deprecated/region_obj_map_overlap.c index 98391ef11..9cac4eab8 100644 --- a/src/tests/region_obj_map_overlap.c +++ b/src/tests/deprecated/region_obj_map_overlap.c @@ -73,35 +73,35 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_buf(obj_prop, obj_data); @@ -115,20 +115,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -142,34 +142,34 @@ main(int argc, char **argv) } ret = PDCbuf_obj_map(data, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 2; @@ -178,40 +178,40 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data + offset[0], PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -225,50 +225,50 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data_read, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } ret = PDCreg_release_lock(obj1, reg_global, PDC_READ); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN / 4) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i + BUF_LEN / 4); + LOG_ERROR("wrong value %d!=%d\n", data_read[i], i + BUF_LEN / 4); ret_value = 1; break; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Write the same object again. This time we test writing a region contained in the previously written @@ -285,42 +285,42 @@ main(int argc, char **argv) } ret = PDCbuf_obj_map(data + BUF_LEN / 8, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Read the whole object for checking purpose offset[0] = BUF_LEN / 8; @@ -334,96 +334,96 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data_read, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } ret = PDCreg_release_lock(obj1, reg_global, PDC_READ); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN / 8 + BUF_LEN) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i + BUF_LEN / 8 + BUF_LEN); + LOG_ERROR("wrong value %d!=%d\n", data_read[i], i + BUF_LEN / 8 + BUF_LEN); ret_value = 1; break; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); free(obj_data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_obj_map_overlap_2D.c b/src/tests/deprecated/region_obj_map_overlap_2D.c similarity index 74% rename from src/tests/region_obj_map_overlap_2D.c rename to src/tests/deprecated/region_obj_map_overlap_2D.c index cef21ed67..b569a6736 100644 --- a/src/tests/region_obj_map_overlap_2D.c +++ b/src/tests/deprecated/region_obj_map_overlap_2D.c @@ -74,35 +74,35 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_buf(obj_prop, obj_data); @@ -116,20 +116,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -145,34 +145,34 @@ main(int argc, char **argv) } ret = PDCbuf_obj_map(data, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 8; @@ -183,40 +183,40 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data + BUF_LEN / 2, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -234,31 +234,31 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data_read, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } ret = PDCreg_release_lock(obj1, reg_global, PDC_READ); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN / 4) { - LOG_ERROR("i = %d, wrong value %d!=%d!\n", i, data_read[i], i + BUF_LEN / 4); + LOG_ERROR("i = %d, wrong value %d!=%d\n", i, data_read[i], i + BUF_LEN / 4); ret_value = 1; break; } @@ -268,19 +268,19 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Partial write for a region that has been written before offset[0] = 0; @@ -300,40 +300,40 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data + BUF_LEN / 8, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_WRITE, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); exit(-1); } ret = PDCreg_release_lock(obj1, reg_global, PDC_WRITE); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local regio\nn"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 32; @@ -351,31 +351,31 @@ main(int argc, char **argv) ret = PDCbuf_obj_map(data_read, PDC_INT, reg, obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_map failed"); + LOG_ERROR("PDCbuf_obj_map failed\n"); ret_value = 1; } ret = PDCreg_obtain_lock(obj1, reg_global, PDC_READ, PDC_BLOCK); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_obtain_lock failed"); + LOG_ERROR("PDCreg_obtain_lock failed\n"); ret_value = 1; } ret = PDCreg_release_lock(obj1, reg_global, PDC_READ); if (ret != SUCCEED) { - LOG_ERROR("PDCreg_release_lock failed"); + LOG_ERROR("PDCreg_release_lock failed\n"); ret_value = 1; } ret = PDCbuf_obj_unmap(obj1, reg_global); if (ret != SUCCEED) { - LOG_ERROR("PDCbuf_obj_unmap failed"); + LOG_ERROR("PDCbuf_obj_unmap failed\n"); ret_value = 1; } for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN + BUF_LEN / 8) { - LOG_ERROR("i = %d, wrong value %d!=%d!\n", i, data_read[i], i + BUF_LEN + BUF_LEN / 8); + LOG_ERROR("i = %d, wrong value %d!=%d\n", i, data_read[i], i + BUF_LEN + BUF_LEN / 8); ret_value = 1; break; } @@ -385,65 +385,65 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); free(obj_data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_obj_map_partial.c b/src/tests/deprecated/region_obj_map_partial.c similarity index 95% rename from src/tests/region_obj_map_partial.c rename to src/tests/deprecated/region_obj_map_partial.c index 401322fcb..70f039e20 100644 --- a/src/tests/region_obj_map_partial.c +++ b/src/tests/deprecated/region_obj_map_partial.c @@ -75,7 +75,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -85,7 +85,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -94,13 +94,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_buf(obj_prop, obj_data); @@ -117,7 +117,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -127,7 +127,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -269,7 +269,7 @@ main(int argc, char **argv) } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { diff --git a/src/tests/vpicio_old.c b/src/tests/deprecated/vpicio_old.c similarity index 100% rename from src/tests/vpicio_old.c rename to src/tests/deprecated/vpicio_old.c diff --git a/src/tests/vpicio_v2.c b/src/tests/deprecated/vpicio_v2.c similarity index 99% rename from src/tests/vpicio_v2.c rename to src/tests/deprecated/vpicio_v2.c index ff0347fbc..d540a881f 100644 --- a/src/tests/vpicio_v2.c +++ b/src/tests/deprecated/vpicio_v2.c @@ -298,10 +298,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to map with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -347,10 +345,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to lock with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } for (i = 0; i < numparticles; i++) { id1[i] = i; @@ -407,10 +403,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to update data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); diff --git a/src/tests/helper/julia_helper_loader.c b/src/tests/helper/julia_helper_loader.c index 56d255688..3634897f4 100644 --- a/src/tests/helper/julia_helper_loader.c +++ b/src/tests/helper/julia_helper_loader.c @@ -8,13 +8,13 @@ jl_load_module(const char *mod_name) const char *julia_module_dir = getenv("PDC_JULIA_MODULE_DIR"); if (julia_module_dir == NULL || strlen(julia_module_dir) == 0) { // try to get it from PWD - LOG_WARNING("[PDC_JL_HELPER] Warning: PDC_JULIA_MODULE_DIR is not set, fallback to PWD!\n"); + LOG_WARNING("[PDC_JL_HELPER] Warning: PDC_JULIA_MODULE_DIR is not set, fallback to PWD\n"); julia_module_dir = getenv("PWD"); } if (julia_module_dir == NULL || strlen(julia_module_dir) == 0) { // No way to find julia module directory - LOG_ERROR("[PDC_JL_HELPER] Error: Not able to find Julia module directory!\n"); + LOG_ERROR("[PDC_JL_HELPER] Error: Not able to find Julia module directory\n"); exit(-1); } LOG_INFO("[PDC_JL_HELPER] Julia module directory: %s\n", julia_module_dir); diff --git a/src/tests/include/test_helper.h b/src/tests/include/test_helper.h new file mode 100644 index 000000000..da7883e8d --- /dev/null +++ b/src/tests/include/test_helper.h @@ -0,0 +1,68 @@ +#ifndef TEST_HELPER_H +#define TEST_HELPER_H + +#include "pdc.h" + +#define TSUCCEED 0 +#define TFAIL 1 + +/* + * TGOTO_DONE macro. The argument is the return value which is + * assigned to the `ret_value' variable. Control branches to + * the `done' label. + */ +#define TGOTO_DONE(ret_val) \ + do { \ + ret_value = ret_val; \ + goto done; \ + } while (0) + +#define TGOTO_DONE_VOID \ + do { \ + goto done; \ + } while (0) + +/* + * TGOTO_ERROR macro. The arguments are the return value and an + * error string. The return value is assigned to a variable `ret_value' and + * control branches to the `done' label. + */ +#define TGOTO_ERROR(ret_val, ...) \ + do { \ + LOG_ERROR(__VA_ARGS__); \ + LOG_JUST_PRINT("\n"); \ + TGOTO_DONE(ret_val); \ + } while (0) + +#define TGOTO_ERROR_VOID(...) \ + do { \ + LOG_ERROR(__VA_ARGS__); \ + LOG_JUST_PRINT("\n"); \ + TGOTO_DONE_VOID; \ + } while (0) + +#ifdef ENABLE_MPI +#define TASSERT(status, success_message, fail_message) \ + do { \ + if (!(status)) { \ + TGOTO_ERROR(TFAIL, "%s", fail_message); \ + } \ + else { \ + LOG_INFO("%s\n", success_message); \ + } \ + } while (0) + +#else + +#define TASSERT(status, success_message, fail_message) \ + do { \ + if (!(status)) { \ + TGOTO_ERROR(TFAIL, "%s", fail_message); \ + } \ + else { \ + LOG_INFO("%s\n", success_message); \ + } \ + } while (0) +#endif + +#endif \ No newline at end of file diff --git a/src/tests/kvtag_add_get.c b/src/tests/kvtag_add_get.c deleted file mode 100644 index 5915c405e..000000000 --- a/src/tests/kvtag_add_get.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include "pdc.h" -#include "pdc_client_connect.h" - -int -main() -{ - pdcid_t pdc, cont_prop, cont, obj_prop1, obj_prop2, obj1, obj2; - pdc_kvtag_t kvtag1, kvtag2, kvtag3; - char * v1 = "value1"; - int v2 = 2; - double v3 = 3.45; - pdc_var_type_t type1, type2, type3; - void * value1, *value2, *value3; - psize_t value_size; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) - LOG_INFO("Create a container property\n"); - else - LOG_ERROR("Failed to create container property"); - - // create a container - cont = PDCcont_create("c1", cont_prop); - if (cont > 0) - LOG_INFO("Create a container c1\n"); - else - LOG_ERROR("Failed to create container"); - - // create an object property - obj_prop1 = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop1 > 0) - LOG_INFO("Create an object property\n"); - else - LOG_ERROR("Failed to create object property"); - - obj_prop2 = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop2 > 0) - LOG_INFO("Create an object property\n"); - else - LOG_ERROR("Failed to create object property"); - - // create first object - obj1 = PDCobj_create(cont, "o1", obj_prop1); - if (obj1 > 0) - LOG_INFO("Create an object o1\n"); - else - LOG_ERROR("Failed to create object"); - - // create second object - obj2 = PDCobj_create(cont, "o2", obj_prop2); - if (obj2 > 0) - LOG_INFO("Create an object o2\n"); - else - LOG_ERROR("Failed to create object"); - - kvtag1.name = "key1string"; - kvtag1.value = (void *)v1; - kvtag1.type = PDC_STRING; - kvtag1.size = strlen(v1) + 1; - - kvtag2.name = "key2int"; - kvtag2.value = (void *)&v2; - kvtag2.type = PDC_INT; - kvtag2.size = sizeof(int); - - kvtag3.name = "key3double"; - kvtag3.value = (void *)&v3; - kvtag3.type = PDC_DOUBLE; - kvtag3.size = sizeof(double); - - if (PDCobj_put_tag(obj1, kvtag1.name, kvtag1.value, kvtag1.type, kvtag1.size) < 0) - LOG_ERROR("Failed to add a kvtag to o1\n"); - else - LOG_INFO("successfully added a kvtag to o1\n"); - - if (PDCobj_put_tag(obj2, kvtag2.name, kvtag2.value, kvtag2.type, kvtag2.size) < 0) - LOG_ERROR("Failed to add a kvtag to o1\n"); - else - LOG_INFO("successfully added a kvtag to o1\n"); - - if (PDCobj_put_tag(obj2, kvtag3.name, kvtag3.value, kvtag3.type, kvtag3.size) < 0) - LOG_ERROR("Failed to add a kvtag to o1\n"); - else - LOG_INFO("successfully added a kvtag to o1\n"); - - if (PDCobj_get_tag(obj1, kvtag1.name, (void *)&value1, (void *)&type1, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o1\n"); - else - LOG_INFO("successfully retrieved a kvtag [%s] = [%s] from o1\n", kvtag1.name, (char *)value1); - - if (PDCobj_get_tag(obj2, kvtag2.name, (void *)&value2, (void *)&type2, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o2\n"); - else - LOG_INFO("successfully retrieved a kvtag [%s] = [%d] from o2\n", kvtag2.name, *(int *)value2); - - if (PDCobj_get_tag(obj2, kvtag3.name, (void *)&value3, (void *)&type3, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o2\n"); - else - LOG_INFO("successfully retrieved a kvtag [%s] = [%f] from o2\n", kvtag3.name, *(double *)value3); - - if (PDCobj_del_tag(obj1, kvtag1.name) < 0) - LOG_ERROR("Failed to delete a kvtag from o1\n"); - else - LOG_INFO("successfully deleted a kvtag [%s] from o1\n", kvtag1.name); - - v1 = "New Value After Delete"; - kvtag1.value = (void *)v1; - kvtag1.type = PDC_STRING; - kvtag1.size = strlen(v1) + 1; - if (PDCobj_put_tag(obj1, kvtag1.name, kvtag1.value, kvtag1.type, kvtag1.size) < 0) - LOG_ERROR("Failed to add a kvtag to o1\n"); - else - LOG_INFO("successfully added a kvtag to o1\n"); - - /* PDC_free_kvtag(&value1); */ - - if (PDCobj_get_tag(obj1, kvtag1.name, (void *)&value1, (void *)&type1, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o1\n"); - else - LOG_INFO("successfully retrieved a kvtag [%s] = [%s] from o1\n", kvtag1.name, (char *)value1); - - /* PDC_free_kvtag(&value1); */ - /* PDC_free_kvtag(&value2); */ - /* PDC_free_kvtag(&value3); */ - - // close first object - if (PDCobj_close(obj1) < 0) - LOG_ERROR("Failed to close object o1\n"); - else - LOG_INFO("Successfully closed object o1\n"); - - // close second object - if (PDCobj_close(obj2) < 0) - LOG_ERROR("Failed to close object o2\n"); - else - LOG_INFO("Successfully closed object o2\n"); - - // close a container - if (PDCcont_close(cont) < 0) - LOG_ERROR("Failed to close container c1\n"); - else - LOG_INFO("Successfully closed container c1\n"); - - // close a container property - if (PDCprop_close(obj_prop1) < 0) - LOG_ERROR("Failed to close property"); - else - LOG_INFO("Successfully closed object property\n"); - - if (PDCprop_close(obj_prop2) < 0) - LOG_ERROR("Failed to close property"); - else - LOG_INFO("Successfully closed object property\n"); - - if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); - else - LOG_INFO("Successfully closed container property\n"); - - // close pdc - if (PDCclose(pdc) < 0) - LOG_ERROR("Failed to close PDC\n"); - - return 0; -} diff --git a/src/tests/misc/bdcats.c b/src/tests/misc/bdcats.c new file mode 100644 index 000000000..3f9e814b6 --- /dev/null +++ b/src/tests/misc/bdcats.c @@ -0,0 +1,306 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define NPARTICLES 8388608 + +double +uniform_random_number() +{ + return (((double)rand()) / ((double)(RAND_MAX))); +} + +void +print_usage() +{ + LOG_JUST_PRINT("Usage: srun -n ./bdcats #particles\n"); +} + +int +main(int argc, char **argv) +{ + int rank = 0, size = 1; + pdcid_t pdc_id, cont_id; + pdcid_t obj_xx, obj_yy, obj_zz, obj_pxx, obj_pyy, obj_pzz, obj_id11, obj_id22; + pdcid_t region_x, region_y, region_z, region_px, region_py, region_pz, region_id1, region_id2; + pdcid_t region_xx, region_yy, region_zz, region_pxx, region_pyy, region_pzz, region_id11, region_id22; + int ret_value = TSUCCEED; + + float * x, *y, *z; + float * px, *py, *pz; + int * id1, *id2; + uint64_t numparticles; + int ndim = 1; + uint64_t *offset; + uint64_t *offset_remote; + uint64_t *mysize; + + pdcid_t transfer_request_x, transfer_request_y, transfer_request_z, transfer_request_px, + transfer_request_py, transfer_request_pz, transfer_request_id1, transfer_request_id2; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + numparticles = NPARTICLES; + if (argc == 2) { + numparticles = atoll(argv[1]); + if (rank == 0) + LOG_INFO("Writing %" PRIu64 " number of particles with %d clients.\n", numparticles, size); + } + + x = (float *)malloc(numparticles * sizeof(float)); + y = (float *)malloc(numparticles * sizeof(float)); + z = (float *)malloc(numparticles * sizeof(float)); + + px = (float *)malloc(numparticles * sizeof(float)); + py = (float *)malloc(numparticles * sizeof(float)); + pz = (float *)malloc(numparticles * sizeof(float)); + + id1 = (int *)malloc(numparticles * sizeof(int)); + id2 = (int *)malloc(numparticles * sizeof(int)); + + // create a pdc + TASSERT((pdc_id = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // open a container + TASSERT((cont_id = PDCcont_open("c1", pdc_id)) > 0, "Call to PDCcont_open succeeded", + "Call to PDCcont_open failed"); + // open objects + TASSERT((obj_xx = PDCobj_open("obj-var-xx", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_yy = PDCobj_open("obj-var-yy", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_zz = PDCobj_open("obj-var-zz", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_pxx = PDCobj_open("obj-var-pxx", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_pyy = PDCobj_open("obj-var-pyy", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_pzz = PDCobj_open("obj-var-pyy", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_id11 = PDCobj_open("obj-var-pyy", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((obj_id22 = PDCobj_open("id22", pdc_id)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + + offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + offset_remote = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + offset[0] = 0; + offset_remote[0] = rank * numparticles; + mysize[0] = numparticles; + + // create regions + TASSERT((region_x = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_y = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_z = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_px = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_py = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id1 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id2 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + TASSERT((region_xx = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_yy = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_zz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pxx = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pyy = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pzz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id11 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id22 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + TASSERT((transfer_request_x = PDCregion_transfer_create(&x[0], PDC_READ, obj_xx, region_x, region_xx)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_y = PDCregion_transfer_create(&y[0], PDC_READ, obj_yy, region_y, region_yy)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_z = PDCregion_transfer_create(&z[0], PDC_READ, obj_zz, region_z, region_zz)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_px = + PDCregion_transfer_create(&px[0], PDC_READ, obj_pxx, region_px, region_pxx)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_py = + PDCregion_transfer_create(&py[0], PDC_READ, obj_pyy, region_py, region_pyy)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_pz = + PDCregion_transfer_create(&pz[0], PDC_READ, obj_pzz, region_pz, region_pzz)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_id1 = + PDCregion_transfer_create(&id1[0], PDC_READ, obj_id11, region_id1, region_id11)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_id2 = + PDCregion_transfer_create(&id2[0], PDC_READ, obj_id22, region_id2, region_id22)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + + TASSERT(PDCregion_transfer_start(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_transfer_wait(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_transfer_close(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + PDC_timing_report("read"); + + TASSERT(PDCobj_close(obj_xx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_yy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_zz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pxx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pyy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pzz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_id11) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_id22) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCregion_close(region_x) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_y) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_z) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_px) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_py) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id1) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id2) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_xx) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_yy) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_zz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pxx) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pyy) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pzz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id11) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id22) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close a container + TASSERT(PDCcont_close(cont_id) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCclose(pdc_id) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(offset); + free(offset_remote); + free(mysize); + free(x); + free(y); + free(z); + free(px); + free(py); + free(pz); + free(id1); + free(id2); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + + return ret_value; +} diff --git a/src/tests/client_server.c b/src/tests/misc/client_server.c similarity index 99% rename from src/tests/client_server.c rename to src/tests/misc/client_server.c index a510d004b..a4efe8ac1 100644 --- a/src/tests/client_server.c +++ b/src/tests/misc/client_server.c @@ -102,7 +102,7 @@ client_lookup_cb(const struct hg_cb_info *callback_info) hg_ret = HG_Forward(handle, client_rpc_cb, client_lookup_args, &in); if (hg_ret != HG_SUCCESS) { - LOG_ERROR("client_lookup_cb(): Could not start HG_Forward()\n"); + LOG_ERROR("Could not start HG_Forward()\n"); return EXIT_FAILURE; } return HG_SUCCESS; diff --git a/src/tests/misc/consistency_semantics.c b/src/tests/misc/consistency_semantics.c new file mode 100644 index 000000000..c0db6bbc7 --- /dev/null +++ b/src/tests/misc/consistency_semantics.c @@ -0,0 +1,179 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = 0; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[2]; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 4; + dims[1] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "consistency_semantics_test") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + TASSERT(PDCprop_set_obj_consistency_semantics(obj_prop, PDC_CONSISTENCY_POSIX) >= 0, + "Call to PDCprop_set_obj_consistency_semantics succeeded", + "Call to PDCprop_set_obj_consistency_semantics failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + // When use POSIX consistency, we do not need to explicitly call wait() + // PDCregion_transfer_wait(transfer_request); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + // When use POSIX consistency, we do not need to explicitly call wait() + // PDCregion_transfer_wait(transfer_request); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/data_rw_test.c b/src/tests/misc/data_rw_test.c similarity index 97% rename from src/tests/data_rw_test.c rename to src/tests/misc/data_rw_test.c index e79517170..ae264c1b4 100644 --- a/src/tests/data_rw_test.c +++ b/src/tests/misc/data_rw_test.c @@ -163,7 +163,7 @@ test1d(char *obj_name) // Query the created object PDC_Client_query_metadata_name_timestep(obj_name, 0, &metadata); if (metadata == NULL) { - LOG_ERROR("Error getting metadata from server!\n"); + LOG_ERROR("Error getting metadata from server\n"); exit(-1); } @@ -232,7 +232,7 @@ test1d(char *obj_name) is_correct = data_verify(ndim, data_start, read_region.size, read_data, data_offset_real, data); if (is_correct != 1) - LOG_ERROR("proc %d: verification failed!\n", rank); + LOG_ERROR("proc %d: verification failed\n", rank); is_all_correct = is_correct; #ifdef ENABLE_MPI @@ -241,11 +241,11 @@ test1d(char *obj_name) #endif if (rank == 0) { - LOG_INFO("1D data verfication ..."); + LOG_INFO("1D data verfication..."); if (is_all_correct != size) - LOG_ERROR("FAILED!\n"); + LOG_ERROR("FAILED\n"); else - LOG_INFO("succeED!\n"); + LOG_INFO("succeED\n"); } free(data); @@ -287,7 +287,7 @@ test2d(char *obj_name) // Query the created object PDC_Client_query_metadata_name_timestep(obj_name, 0, &metadata); if (metadata == NULL) { - LOG_ERROR("Error getting metadata from server!\n"); + LOG_ERROR("Error getting metadata from server\n"); exit(-1); } @@ -410,7 +410,7 @@ test2d(char *obj_name) is_correct = data_verify(ndim, data_start, read_region.size, read_data_2d, data_offset_real, data_2d); if (is_correct != 1) - LOG_ERROR("proc %d: verification failed!\n", rank); + LOG_ERROR("proc %d: verification failed\n", rank); is_all_correct = is_correct; #ifdef ENABLE_MPI @@ -419,11 +419,11 @@ test2d(char *obj_name) #endif if (rank == 0) { - LOG_INFO("2D data verfication ..."); + LOG_INFO("2D data verfication..."); if (is_all_correct != size) - LOG_ERROR("FAILED!\n"); + LOG_ERROR("FAILED\n"); else - LOG_INFO("succeED!\n"); + LOG_INFO("succeED\n"); } free(data); @@ -484,7 +484,7 @@ test3d(char *obj_name) // Query the created object PDC_Client_query_metadata_name_timestep(obj_name, 0, &metadata); if (metadata == NULL) { - LOG_ERROR("Error getting metadata from server!\n"); + LOG_ERROR("Error getting metadata from server\n"); exit(-1); } @@ -745,7 +745,7 @@ test3d(char *obj_name) is_correct = data_verify(ndim, data_start, read_region.size, read_data_3d, data_offset_real, data_3d); if (is_correct != 1) - LOG_ERROR("proc %d: verification failed!\n", rank); + LOG_ERROR("proc %d: verification failed\n", rank); is_all_correct = is_correct; @@ -755,11 +755,11 @@ test3d(char *obj_name) #endif if (rank == 0) { - LOG_INFO("3D data verfication ..."); + LOG_INFO("3D data verfication..."); if (is_all_correct != size) - LOG_ERROR("FAILED!\n"); + LOG_ERROR("FAILED\n"); else - LOG_INFO("succeED!\n"); + LOG_INFO("succeED\n"); } free(data); diff --git a/src/tests/dt_conv.c b/src/tests/misc/dt_conv.c similarity index 100% rename from src/tests/dt_conv.c rename to src/tests/misc/dt_conv.c diff --git a/src/tests/gen_fastbit_idx.c b/src/tests/misc/gen_fastbit_idx.c similarity index 85% rename from src/tests/gen_fastbit_idx.c rename to src/tests/misc/gen_fastbit_idx.c index 9e07151cd..3868d7602 100644 --- a/src/tests/gen_fastbit_idx.c +++ b/src/tests/misc/gen_fastbit_idx.c @@ -19,10 +19,9 @@ main(int argc, char **argv) pdcid_t pdc, id; float preload_value = -2000000000.0; - if (argc < 2) { - LOG_ERROR("Please enter var name as input!\n"); - fflush(stdout); - } + if (argc < 2) + LOG_ERROR("Please enter var name as input\n"); + var_name = argv[1]; pdc = PDCinit("pdc"); @@ -30,7 +29,7 @@ main(int argc, char **argv) // Query the created object PDC_Client_query_metadata_name_timestep(var_name, 0, &meta); if (meta == NULL || meta->obj_id == 0) { - LOG_ERROR("Error with [%s] metadata!\n", var_name); + LOG_ERROR("Error with [%s] metadata\n", var_name); goto done; } id = meta->obj_id; diff --git a/src/tests/hash_table.c b/src/tests/misc/hash_table.c similarity index 93% rename from src/tests/hash_table.c rename to src/tests/misc/hash_table.c index 1e856c487..f8465da8b 100644 --- a/src/tests/hash_table.c +++ b/src/tests/misc/hash_table.c @@ -83,7 +83,6 @@ main(int argc, char *argv[]) hash_value_metadata_t *lookup_value = NULL; int lookup_key; - /* int *value1, *value2; */ int ret = EXIT_SUCCESS; (void)argc; @@ -95,9 +94,6 @@ main(int argc, char *argv[]) key1 = (int *)malloc(sizeof(int)); key2 = (int *)malloc(sizeof(int)); - /* value1 = (int *) malloc(sizeof(int)); */ - /* value2 = (int *) malloc(sizeof(int)); */ - value1 = (hash_value_metadata_t *)malloc(sizeof(hash_value_metadata_t)); value2 = (hash_value_metadata_t *)malloc(sizeof(hash_value_metadata_t)); @@ -130,17 +126,17 @@ main(int argc, char *argv[]) lookup_value->test = "World"; } else { - LOG_INFO("Object with lookup_key=%d not found!\n", lookup_key); + LOG_INFO("Object with lookup_key=%d not found\n", lookup_key); } - LOG_INFO("New value after change!\n"); + LOG_INFO("New value after change\n"); lookup_value = hg_hash_table_lookup(hash_table, &lookup_key); if (lookup_value != NULL) { LOG_INFO("Found in hash table with obj_id=%d, obj_name=%s, test=%s\n", lookup_value->obj_id, lookup_value->obj_name, lookup_value->test); } else { - LOG_INFO("Object with lookup_key=%d not found!\n", lookup_key); + LOG_INFO("Object with lookup_key=%d not found\n", lookup_key); } hg_hash_table_free(hash_table); diff --git a/src/tests/idioms_ci_test.c b/src/tests/misc/idioms_ci_test.c similarity index 87% rename from src/tests/idioms_ci_test.c rename to src/tests/misc/idioms_ci_test.c index cd8d63ba3..1826d3f7c 100644 --- a/src/tests/idioms_ci_test.c +++ b/src/tests/misc/idioms_ci_test.c @@ -30,8 +30,7 @@ #include #include #include "pdc.h" -#include "pdc_client_connect.h" -#include "string_utils.h" +#include "test_helper.h" dart_object_ref_type_t ref_type = REF_PRIMARY_ID; dart_hash_algo_t hash_algo = DART_HASH; @@ -56,31 +55,21 @@ print_usage(char *name) perr_t prepare_container(pdcid_t *pdc, pdcid_t *cont_prop, pdcid_t *cont, pdcid_t *obj_prop, int world_rank) { - perr_t ret_value = FAIL; + perr_t ret_value = SUCCEED; + int rank = world_rank; // create a pdc - *pdc = PDCinit("pdc"); - + TASSERT((*pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - *cont_prop = PDCprop_create(PDC_CONT_CREATE, *pdc); - if (*cont_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create container property!\n", world_rank); - goto done; - } + TASSERT((*cont_prop = PDCprop_create(PDC_CONT_CREATE, *pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - *cont = PDCcont_create("c1", *cont_prop); - if (*cont <= 0) { - LOG_ERROR("[Client %d] Fail to create container!\n", world_rank); - goto done; - } + TASSERT((*cont = PDCcont_create("c1", *cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); // create an object property - *obj_prop = PDCprop_create(PDC_OBJ_CREATE, *pdc); - if (*obj_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create object property!\n", world_rank); - goto done; - } + TASSERT((*obj_prop = PDCprop_create(PDC_OBJ_CREATE, *pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); - ret_value = SUCCEED; done: return ret_value; } @@ -302,14 +291,6 @@ search_through_index(int world_rank, int world_size, int (*validator)(int r, int step_failed = 2; } break; - // case 3: - // // infix string query - // if (PDC_Client_search_obj_ref_through_dart(hash_algo, "*09*=\"*09*\"", ref_type, &nres, - // &pdc_ids) < 0) { - // LOG_ERROR("Failed to query kvtag [%s] with rank %d\n", "*09*=*09*", world_rank); - // step_failed = 3; - // } - // break; case 4: // exact integer query if (PDC_Client_search_obj_ref_through_dart(hash_algo, "intkey=109", ref_type, &nres, &pdc_ids) < @@ -341,6 +322,7 @@ main(int argc, char *argv[]) pdcid_t pdc, cont_prop, cont, obj_prop; int world_size, world_rank, i; double stime, total_time; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -348,18 +330,16 @@ main(int argc, char *argv[]) MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); #endif - // prepare container - if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, world_rank) < 0) { - println("Failed to prepare container"); - goto done; - } + int rank = world_rank; - if (world_rank == 0) { - println("Initialization Done!"); - } + // prepare container + if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, world_rank) < 0) + PGOTO_ERROR(FAIL, "Failed to prepare container"); - // No need to create any object for testing only the index. + if (world_rank == 0) + LOG_INFO("Initialization Done\n"); + // No need to create any object for testing only the index. #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); stime = MPI_Wtime(); @@ -383,11 +363,9 @@ main(int argc, char *argv[]) // perform the same query, there should be no result. // we are performing 1000 insertion operations for string value and 1000 times for numerical values. - perr_t ret_value = insert_index_records(world_rank, world_size); - if (ret_value == FAIL) { - LOG_ERROR("CLIENT %d failed to insert index records\n", world_rank); - } - assert(ret_value == SUCCEED); + ret_value = insert_index_records(world_rank, world_size); + if (ret_value == FAIL) + PGOTO_ERROR(FAIL, "CLIENT %d failed to insert index records\n", world_rank); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -462,47 +440,19 @@ main(int argc, char *argv[]) 1000.0 * world_size / total_time); } -done: // close a container - if (PDCcont_close(cont) < 0) { - if (world_rank == 0) { - LOG_ERROR("Failed to close container c1\n"); - } - } - else { - if (world_rank == 0) - LOG_INFO("Successfully closed container c1\n"); - } - + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close an object property - if (PDCprop_close(obj_prop) < 0) { - if (world_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (world_rank == 0) - LOG_INFO("Successfully closed object property\n"); - } - + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - if (world_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (world_rank == 0) - LOG_INFO("Successfully closed container property\n"); - } - + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - if (world_rank == 0) - LOG_ERROR("Failed to close PDC\n"); - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/import_vpic.c b/src/tests/misc/import_vpic.c similarity index 93% rename from src/tests/import_vpic.c rename to src/tests/misc/import_vpic.c index efa6f25ac..2746f96cb 100644 --- a/src/tests/import_vpic.c +++ b/src/tests/misc/import_vpic.c @@ -63,21 +63,21 @@ main(int argc, char *argv[]) file_id = H5Fopen(file_name, H5F_ACC_RDONLY, fapl); if (file_id < 0) { - LOG_ERROR("Error opening file [%s]!\n", file_name); + LOG_ERROR("Error opening file [%s]\n", file_name); goto done; } group_name = "Step#0"; group_id = H5Gopen(file_id, group_name, H5P_DEFAULT); if (group_id < 0) { - LOG_ERROR("Error opening group [%s]!\n", group_name); + LOG_ERROR("Error opening group [%s]\n", group_name); goto done; } for (i = 0; i < NVAR; i++) { dset_ids[i] = H5Dopen(group_id, dset_names[i], H5P_DEFAULT); if (dset_ids[i] < 0) { - LOG_ERROR("Error opening dataset [%s]!\n", dset_names[i]); + LOG_ERROR("Error opening dataset [%s]\n", dset_names[i]); goto done; } } @@ -130,7 +130,7 @@ main(int argc, char *argv[]) ret = PDC_Client_query_metadata_name_timestep(dset_names[i], 0, &obj_meta); #endif if (ret != SUCCEED || obj_meta == NULL || obj_meta->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); exit(-1); } @@ -143,7 +143,7 @@ main(int argc, char *argv[]) memspace = H5Screate_simple(1, &elem_count, NULL); H5Sselect_hyperslab(filespace, H5S_SELECT_SET, &elem_offset, NULL, &elem_count, NULL); if (elem_offset + elem_count > dims[0]) { - LOG_ERROR("%d ERROR - off %llu count %llu\n", my_rank, elem_offset, elem_count); + LOG_ERROR("%d error - off %llu count %llu\n", my_rank, elem_offset, elem_count); } hg_ret = H5Dread(dset_ids[i], H5T_NATIVE_FLOAT, memspace, filespace, H5P_DEFAULT, data); H5Sclose(memspace); @@ -153,7 +153,7 @@ main(int argc, char *argv[]) ret = PDC_Client_write(obj_meta, &obj_region, data); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_write!\n"); + LOG_ERROR("Error with PDC_Client_write\n"); exit(-1); } @@ -169,7 +169,6 @@ main(int argc, char *argv[]) if (my_rank == 0) LOG_INFO("\n\nFinished import object %s\n\n", dset_names[i]); - fflush(stdout); } // End for i H5Pclose(fapl); diff --git a/src/tests/init_only.c b/src/tests/misc/init_only.c similarity index 96% rename from src/tests/init_only.c rename to src/tests/misc/init_only.c index 691b57f35..a1e2cea62 100644 --- a/src/tests/init_only.c +++ b/src/tests/misc/init_only.c @@ -36,7 +36,7 @@ main(int argc, char **argv) if (cont <= 0) LOG_ERROR("Failed to create container"); - LOG_INFO("PROC[%d] FINISHED!\n", rank); + LOG_INFO("PROC[%d] FINISHED\n", rank); // close a container if (PDCcont_close(cont) < 0) diff --git a/src/tests/list_all.c b/src/tests/misc/list_all.c similarity index 99% rename from src/tests/list_all.c rename to src/tests/misc/list_all.c index 5532153e5..1ba23e454 100644 --- a/src/tests/list_all.c +++ b/src/tests/misc/list_all.c @@ -112,7 +112,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDCinit("pdc"); @@ -186,10 +185,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to create %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } LOG_INFO("Listing all objects\n"); PDC_Client_list_all(&n_obj, &out); diff --git a/src/tests/llsm_idioms_bench.c b/src/tests/misc/llsm_idioms_bench.c similarity index 93% rename from src/tests/llsm_idioms_bench.c rename to src/tests/misc/llsm_idioms_bench.c index 8f447f5d5..8fb8dff18 100644 --- a/src/tests/llsm_idioms_bench.c +++ b/src/tests/misc/llsm_idioms_bench.c @@ -17,7 +17,7 @@ int assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) { if (rank > size || my_count == NULL || my_start == NULL) { - LOG_ERROR("assign_work_to_rank(): Error with input!\n"); + LOG_ERROR("assign_work_to_rank(): Error with input\n"); return -1; } if (nwork < size) { @@ -84,7 +84,7 @@ prepare_container(pdcid_t *pdc, pdcid_t *cont_prop, pdcid_t *cont, pdcid_t *obj_ // create an object property *obj_prop = PDCprop_create(PDC_OBJ_CREATE, *pdc); if (*obj_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create object property!\n", my_rank); + LOG_ERROR("[Client %d] Fail to create object property\n", my_rank); goto done; } @@ -111,7 +111,7 @@ create_objects(pdcid_t **obj_ids, int my_csv_rows, int csv_expand_factor, pdcid_ (*obj_ids)[obj_created] = obj_id; if ((*obj_ids)[obj_created] <= 0) { - LOG_ERROR("[Client %d] Fail to create object!\n", my_rank); + LOG_ERROR("[Client %d] Fail to create object\n", my_rank); goto done; } @@ -309,7 +309,6 @@ read_csv_from_buffer(char *data, char ***csv_header, char ****csv_data, int *num line = strtok(NULL, "\n"); if (line == NULL) { LOG_ERROR("Error reading data from CSV\n"); - // free(buffer); return -1; } if (data_line_count % proc_num == my_rank) { @@ -406,6 +405,7 @@ main(int argc, char *argv[]) int nres, ntotal; int * my_cnt_round; int * total_cnt_round; + int ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -416,7 +416,7 @@ main(int argc, char *argv[]) if (argc < 8) { if (my_rank == 0) print_usage(argv[0]); - goto done; + PGOTO_DONE(FAIL); } n_obj = atoi(argv[1]); round = atoi(argv[2]); @@ -431,10 +431,8 @@ main(int argc, char *argv[]) int bypass_query = query_type == -1 ? 1 : 0; // prepare container - if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) { - println("Failed to prepare container"); - goto done; - } + if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) + PGOTO_ERROR(FAIL, "Failed to prepare container"); // ********************** Read and Broadcast first few rows of CSV file ********************** char * data = NULL; @@ -483,13 +481,11 @@ main(int argc, char *argv[]) total_time = MPI_Wtime() - stime; #endif - if (my_rank == 0) { - println("[Object Creation] Rank %d/%d: Created %d objects, time: %.5f ms", my_rank, proc_num, - obj_created, total_time * 1000.0); - } - - // ********************** Add tags to objects ********************** + if (my_rank == 0) + LOG_INFO("[Object Creation] Rank %d/%d: Created %d objects, time: %.5f ms\n", my_rank, proc_num, + obj_created, total_time * 1000.0); + // ********************** Add tags to objects ********************** #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); stime = MPI_Wtime(); @@ -504,13 +500,13 @@ main(int argc, char *argv[]) #endif if (my_rank == 0) { - println("[Tag Creation] Rank %d/%d: Added %d tags for %d objects, time: %.5f ms", my_rank, proc_num, - tags_added, obj_created, total_time * 1000.0); + LOG_INFO("[Tag Creation] Rank %d/%d: Added %d tags for %d objects, time: %.5f ms\n", my_rank, + proc_num, tags_added, obj_created, total_time * 1000.0); } if (bypass_query) { if (my_rank == 0) { - println("Rank %d: All queries are bypassed.", my_rank); + LOG_INFO("Rank %d: All queries are bypassed\n", my_rank); report_avg_server_profiling_rst(); } goto done; @@ -524,8 +520,7 @@ main(int argc, char *argv[]) for (comm_type = 1; comm_type >= 0; comm_type--) { for (query_type = 0; query_type < 4; query_type++) { - perr_t ret_value; - int round_total = 0; + int round_total = 0; for (iter = -1; iter < iter_round; iter++) { // -1 is for warm up #ifdef ENABLE_MPI if (iter == 0) { @@ -550,16 +545,16 @@ main(int argc, char *argv[]) query_type_str = "SUFFIX"; else if (query_type == 3) query_type_str = "INFIX"; - println("[%s Client %s Query with%sINDEX] %d rounds (%d) within %.5f ms", - comm_type == 0 ? "Single" : "Multi", query_type_str, - is_using_dart == 0 ? " NO " : " DART ", round, round_total, total_time * 1000.0); + LOG_INFO("[%s Client %s Query with%sINDEX] %d rounds (%d) within %.5f ms\n", + comm_type == 0 ? "Single" : "Multi", query_type_str, + is_using_dart == 0 ? " NO " : " DART ", round, round_total, total_time * 1000.0); } #endif } // end query type } // end comm type if (my_rank == 0) { - println("Rank %d: All queries are done.", my_rank); + LOG_INFO("Rank %d: All queries are done\n", my_rank); report_avg_server_profiling_rst(); } @@ -579,11 +574,10 @@ main(int argc, char *argv[]) #endif if (my_rank == 0) { - println("[TAG Deletion] Rank %d/%d: Deleted %d kvtag from %d objects, time: %.5f ms", my_rank, - proc_num, tags_deleted, obj_created, total_time * 1000.0); + LOG_INFO("[TAG Deletion] Rank %d/%d: Deleted %d kvtag from %d objects, time: %.5f ms\n", my_rank, + proc_num, tags_deleted, obj_created, total_time * 1000.0); } -done: // close a container if (PDCcont_close(cont) < 0) { if (my_rank == 0) { @@ -621,9 +615,10 @@ main(int argc, char *argv[]) LOG_ERROR("Failed to close PDC\n"); } +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } \ No newline at end of file diff --git a/src/tests/pdc_init.c b/src/tests/misc/pdc_init.c similarity index 85% rename from src/tests/pdc_init.c rename to src/tests/misc/pdc_init.c index 4403516f3..c5f15825b 100644 --- a/src/tests/pdc_init.c +++ b/src/tests/misc/pdc_init.c @@ -26,13 +26,14 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) { pdcid_t pdc; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; // create a pdc #ifdef ENABLE_MPI @@ -41,14 +42,12 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif - pdc = PDCinit("pdc"); - LOG_INFO("generated new pdc\n"); - + // create pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/producer_waitall.c b/src/tests/misc/producer_waitall.c similarity index 100% rename from src/tests/producer_waitall.c rename to src/tests/misc/producer_waitall.c diff --git a/src/tests/read_write_col_perf.c b/src/tests/misc/read_write_col_perf.c similarity index 99% rename from src/tests/read_write_col_perf.c rename to src/tests/misc/read_write_col_perf.c index d9d0d0ee1..cec102f72 100644 --- a/src/tests/read_write_col_perf.c +++ b/src/tests/misc/read_write_col_perf.c @@ -123,7 +123,7 @@ main(int argc, char **argv) if (rank == 0) { LOG_INFO("number of dimensions in this test is %d\n", ndim); LOG_INFO("data size = %llu\n", (long long unsigned)data_size); - LOG_ERROR("First dim has size %" PRIu64 "\n", dims[0]); + LOG_INFO("First dim has size %" PRIu64 "\n", dims[0]); if (ndim >= 2) { LOG_INFO("second dim has size %" PRIu64 "\n", dims[1]); } diff --git a/src/tests/read_write_perf.c b/src/tests/misc/read_write_perf.c similarity index 100% rename from src/tests/read_write_perf.c rename to src/tests/misc/read_write_perf.c diff --git a/src/tests/misc/vpicio.c b/src/tests/misc/vpicio.c new file mode 100644 index 000000000..58c59caa7 --- /dev/null +++ b/src/tests/misc/vpicio.c @@ -0,0 +1,434 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define NPARTICLES 8388608 + +double +uniform_random_number() +{ + return (((double)rand()) / ((double)(RAND_MAX))); +} + +void +print_usage() +{ + LOG_JUST_PRINT("Usage: srun -n ./vpicio #particles\n"); +} + +int +main(int argc, char **argv) +{ + int rank = 0, size = 1; + pdcid_t pdc_id, cont_prop, cont_id; + pdcid_t obj_prop_xx, obj_prop_yy, obj_prop_zz, obj_prop_pxx, obj_prop_pyy, obj_prop_pzz, obj_prop_id11, + obj_prop_id22; + pdcid_t obj_xx, obj_yy, obj_zz, obj_pxx, obj_pyy, obj_pzz, obj_id11, obj_id22; + pdcid_t region_x, region_y, region_z, region_px, region_py, region_pz, region_id1, region_id2; + pdcid_t region_xx, region_yy, region_zz, region_pxx, region_pyy, region_pzz, region_id11, region_id22; + perr_t ret_value = TSUCCEED; +#ifdef ENABLE_MPI + MPI_Comm comm; +#else + int comm = 1; +#endif + float * x, *y, *z; + float * px, *py, *pz; + int * id1, *id2; + int x_dim = 64; + int y_dim = 64; + int z_dim = 64; + uint64_t numparticles, i; + uint64_t dims[1]; + int ndim = 1; + uint64_t *offset; + uint64_t *offset_remote; + uint64_t *mysize; + double t0, t1; + + pdcid_t transfer_request_x, transfer_request_y, transfer_request_z, transfer_request_px, + transfer_request_py, transfer_request_pz, transfer_request_id1, transfer_request_id2; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + MPI_Comm_dup(MPI_COMM_WORLD, &comm); +#endif + + numparticles = NPARTICLES; + if (argc == 2) { + numparticles = atoll(argv[1]); + if (rank == 0) + LOG_INFO("Writing %" PRIu64 " number of particles with %d clients.\n", numparticles, size); + } + + dims[0] = numparticles * size; + + x = (float *)malloc(numparticles * sizeof(float)); + y = (float *)malloc(numparticles * sizeof(float)); + z = (float *)malloc(numparticles * sizeof(float)); + + px = (float *)malloc(numparticles * sizeof(float)); + py = (float *)malloc(numparticles * sizeof(float)); + pz = (float *)malloc(numparticles * sizeof(float)); + + id1 = (int *)malloc(numparticles * sizeof(int)); + id2 = (int *)malloc(numparticles * sizeof(int)); + + // create a pdc + TASSERT((pdc_id = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + TASSERT((cont_id = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); + // create an object property + TASSERT((obj_prop_xx = PDCprop_create(PDC_OBJ_CREATE, pdc_id)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop_xx, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_xx, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop_xx, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop_xx, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop_xx, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop_xx, "VPICIO") >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop_xx, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + TASSERT((obj_prop_yy = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_yy, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_zz = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_zz, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_pxx = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_pxx, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_pyy = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_pyy, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_pzz = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_pzz, PDC_FLOAT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_id11 = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_id11, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT((obj_prop_id22 = PDCprop_obj_dup(obj_prop_xx)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); + TASSERT(PDCprop_set_obj_type(obj_prop_id22, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + for (i = 0; i < numparticles; i++) { + id1[i] = i; + id2[i] = i * 2; + x[i] = uniform_random_number() * x_dim; + y[i] = uniform_random_number() * y_dim; + z[i] = ((float)id1[i] / numparticles) * z_dim; + px[i] = uniform_random_number() * x_dim; + py[i] = uniform_random_number() * y_dim; + pz[i] = ((float)id2[i] / numparticles) * z_dim; + } + + offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + offset_remote = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + offset[0] = 0; + offset_remote[0] = rank * numparticles; + mysize[0] = numparticles; + + // create regions + TASSERT((region_x = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_y = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_z = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_px = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_py = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id1 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id2 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + TASSERT((region_xx = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_yy = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_zz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pxx = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pyy = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_pzz = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id11 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((region_id22 = PDCregion_create(ndim, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t0 = MPI_Wtime(); +#endif + + TASSERT((obj_xx = PDCobj_create_mpi(cont_id, "obj-var-xx", obj_prop_xx, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_yy = PDCobj_create_mpi(cont_id, "obj-var-yy", obj_prop_yy, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_zz = PDCobj_create_mpi(cont_id, "obj-var-zz", obj_prop_zz, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_pxx = PDCobj_create_mpi(cont_id, "obj-var-pxx", obj_prop_pxx, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_pyy = PDCobj_create_mpi(cont_id, "obj-var-pyy", obj_prop_pyy, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_pzz = PDCobj_create_mpi(cont_id, "obj-var-pzz", obj_prop_pzz, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_id11 = PDCobj_create_mpi(cont_id, "id11", obj_prop_id11, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + TASSERT((obj_id22 = PDCobj_create_mpi(cont_id, "id22", obj_prop_id22, 0, comm)) != 0, + "Call to PDCobj_create_mpi succeeded", "Call to PDCobj_create_mpi failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t1 = MPI_Wtime(); + if (rank == 0) + LOG_INFO("Obj create time: %.5e\n", t1 - t0); +#endif + + TASSERT((transfer_request_x = PDCregion_transfer_create(&x[0], PDC_WRITE, obj_xx, region_x, region_xx)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_y = PDCregion_transfer_create(&y[0], PDC_WRITE, obj_yy, region_y, region_yy)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_z = PDCregion_transfer_create(&z[0], PDC_WRITE, obj_zz, region_z, region_zz)) != + 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_px = + PDCregion_transfer_create(&px[0], PDC_WRITE, obj_pxx, region_px, region_pxx)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_py = + PDCregion_transfer_create(&py[0], PDC_WRITE, obj_pyy, region_py, region_pyy)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_pz = + PDCregion_transfer_create(&pz[0], PDC_WRITE, obj_pzz, region_pz, region_pzz)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_id1 = + PDCregion_transfer_create(&id1[0], PDC_WRITE, obj_id11, region_id1, region_id11)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT((transfer_request_id2 = + PDCregion_transfer_create(&id2[0], PDC_WRITE, obj_id22, region_id2, region_id22)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t0 = MPI_Wtime(); + if (rank == 0) + LOG_INFO("Transfer create time: %.5e\n", t0 - t1); +#endif + + TASSERT(PDCregion_transfer_start(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_start(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t1 = MPI_Wtime(); + if (rank == 0) + LOG_INFO("Transfer start time: %.5e\n", t1 - t0); +#endif + + TASSERT(PDCregion_transfer_wait(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_wait(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t0 = MPI_Wtime(); + if (rank == 0) + LOG_INFO("Transfer wait time: %.5e\n", t0 - t1); +#endif + + TASSERT(PDCregion_transfer_close(transfer_request_x) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_y) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_z) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_px) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_py) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_pz) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_id1) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request_id2) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + PDC_timing_report("write"); +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); + t1 = MPI_Wtime(); + if (rank == 0) + LOG_INFO("Transfer close time: %.5e\n", t1 - t0); +#endif + + TASSERT(PDCobj_close(obj_xx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_yy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_zz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pxx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pyy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_pzz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_id11) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_id22) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_xx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_yy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_zz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_pxx) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_pyy) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_pzz) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_id11) >= 0, "Call to PDCobj_close succeeded", + "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj_prop_id22) >= 0, "Call to PDCobj_close succeeded", + "Call to PDCobj_close failed"); + TASSERT(PDCregion_close(region_x) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_y) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_z) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_px) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_py) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id1) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id2) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_xx) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_yy) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_zz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pxx) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pyy) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_pzz) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id11) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(region_id22) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close a container + TASSERT(PDCcont_close(cont_id) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCclose(pdc_id) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(offset); + free(offset_remote); + free(mysize); + free(x); + free(y); + free(z); + free(px); + free(py); + free(pz); + free(id1); + free(id2); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/vpicio_mts.c b/src/tests/misc/vpicio_mts.c similarity index 100% rename from src/tests/vpicio_mts.c rename to src/tests/misc/vpicio_mts.c diff --git a/src/tests/obj/create_obj.c b/src/tests/obj/create_obj.c new file mode 100644 index 000000000..8de720ced --- /dev/null +++ b/src/tests/obj/create_obj.c @@ -0,0 +1,86 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, obj1, obj2; + int rank = 0; + char cont_name[128], obj_name1[128], obj_name2[128]; + int ret_value = TSUCCEED; + + // create a pdc +#ifdef ENABLE_MPI + int size; + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + // close first object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close second object + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/obj/create_obj_coll.c b/src/tests/obj/create_obj_coll.c new file mode 100644 index 000000000..cdcf8cbb4 --- /dev/null +++ b/src/tests/obj/create_obj_coll.c @@ -0,0 +1,109 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + pdcid_t obj1, obj2, open11, open12, open21; + int rank = 0, size = 1; + char cont_name[128], obj_name1[128], obj_name2[128]; + int ret_value = TSUCCEED; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create first object + sprintf(obj_name1, "o1"); +#ifdef ENABLE_MPI + TASSERT((obj1 = PDCobj_create_mpi(cont, obj_name1, obj_prop, 0, MPI_COMM_WORLD)) != 0, + "Call to PDCobj_create succeeded", "Call to PDCobj_create failed"); +#else + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); +#endif + LOG_INFO("Checkpoint 1 rank %d\n", rank); + // create second object + sprintf(obj_name2, "o2"); +#ifdef ENABLE_MPI + TASSERT((obj2 = PDCobj_create_mpi(cont, obj_name2, obj_prop, 0, MPI_COMM_WORLD)) != 0, + "Call to PDCobj_create succeeded", "Call to PDCobj_create failed"); +#else + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); +#endif + LOG_INFO("Checkpoint 2 rank %d\n", rank); + // open first object twice + TASSERT((open11 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((open12 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // open second object once + TASSERT((open21 = PDCobj_open(obj_name2, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // open second object twice + TASSERT((open21 = PDCobj_open(obj_name2, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open11) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open12) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open21) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/create_obj_scale.c b/src/tests/obj/create_obj_scale.c similarity index 61% rename from src/tests/create_obj_scale.c rename to src/tests/obj/create_obj_scale.c index f618fae3e..131d84a94 100644 --- a/src/tests/create_obj_scale.c +++ b/src/tests/obj/create_obj_scale.c @@ -32,6 +32,7 @@ #include #include "pdc.h" #include "pdc_client_connect.h" +#include "test_helper.h" static char * rand_string(char *str, size_t size) @@ -62,9 +63,11 @@ main(int argc, char **argv) int count = -1; int i; pdcid_t pdc, cont_prop, cont, obj_prop; - uint64_t dims[3] = {100, 200, 700}; - pdcid_t test_obj = -1; - int use_name = -1; + uint64_t dims[3] = {100, 200, 700}; + pdcid_t test_obj = -1; + int use_name = -1; + int ret_value = TSUCCEED; + perr_t err; struct timeval ht_total_start; struct timeval ht_total_end; @@ -96,60 +99,52 @@ main(int argc, char **argv) LOG_ERROR("Unknown option `-%c'.\n", i); else LOG_ERROR("Unknown option character `\\x%x'.\n", i); - return 1; + TGOTO_DONE(FAIL); + break; default: print_usage(); -#ifdef ENABLE_MPI - MPI_Finalize(); - return 1; -#endif + TGOTO_DONE(TFAIL); + break; } if (count == -1) { print_usage(); -#ifdef ENABLE_MPI - MPI_Finalize(); - return 1; -#endif + TGOTO_DONE(TFAIL); } count /= size; if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc - pdc = PDCinit("pdc"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); - + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create_col("c1", cont_prop); - if (cont <= 0) - LOG_ERROR("Failed to create container"); + TASSERT((cont = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); char *cont_tags = "cont_tags0=123"; if (rank == 0) { - PDC_Client_add_tags_to_container(cont, cont_tags); + TASSERT(PDC_Client_add_tags_to_container(cont, cont_tags) >= 0, + "Call to PDC_Client_add_tags_to_container succeeded", + "Call to PDC_Client_add_tags_to_container failed"); } // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) - LOG_ERROR("Failed to create object property"); - - PDCprop_set_obj_type(obj_prop, PDC_INT); - PDCprop_set_obj_dims(obj_prop, 3, dims); + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); env_str = getenv("PDC_OBJ_NAME"); if (env_str != NULL) { use_name = atoi(env_str); } - if (rank == 0) { LOG_INFO("Using %s\n", name_mode[use_name + 1]); } @@ -166,32 +161,37 @@ main(int argc, char **argv) if (use_name == -1) { sprintf(obj_name, "%s", rand_string(tmp_str, 16)); - PDCprop_set_obj_time_step(obj_prop, rank); + TASSERT(PDCprop_set_obj_time_step(obj_prop, rank) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } else if (use_name == 1) { sprintf(obj_name, "%s", obj_prefix[0]); - PDCprop_set_obj_time_step(obj_prop, i + rank * count); + TASSERT(PDCprop_set_obj_time_step(obj_prop, i + rank * count) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } else if (use_name == 4) { sprintf(obj_name, "%s", obj_prefix[i % 4]); - PDCprop_set_obj_time_step(obj_prop, i / 4 + rank * count); + TASSERT(PDCprop_set_obj_time_step(obj_prop, i / 4 + rank * count) >= 0, + "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); } - else { - LOG_ERROR("Unsupported name choice\n"); - goto done; - } - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_app_name(obj_prop, "test_app"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); + else + TGOTO_ERROR(TFAIL, "Unsupported name choice"); + + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "test_app") >= 0, + "Call to PDCprop_set_obj_app_name succeeded", "Call to PDCprop_set_obj_app_name failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); if (count < 20) { LOG_INFO("[%d] create obj with name %s\n", rank, obj_name); } - test_obj = PDCobj_create(cont, obj_name, obj_prop); - if (test_obj == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", obj_name); - exit(-1); - } + TASSERT((test_obj = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); // Print progress int progress_factor = count < 10 ? 1 : 10; @@ -200,10 +200,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("%10d created ... %.5e s\n", i * size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif @@ -217,26 +215,21 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to create %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } -done: + // close object + TASSERT(PDCobj_close(test_obj) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); // close a container - if (PDCcont_close(cont) < 0) - LOG_ERROR("Failed to close container c1\n"); - + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); - - if (PDCclose(pdc) < 0) - LOG_ERROR("Failed to close PDC\n"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/delete_obj.c b/src/tests/obj/delete_obj.c similarity index 98% rename from src/tests/delete_obj.c rename to src/tests/obj/delete_obj.c index 235b44bf1..7410ba716 100644 --- a/src/tests/delete_obj.c +++ b/src/tests/obj/delete_obj.c @@ -104,7 +104,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Delete %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDCinit("pdc"); @@ -131,10 +130,8 @@ main(int argc, char **argv) use_name = atoi(env_str); } - if (rank == 0) { + if (rank == 0) LOG_INFO("Using %s\n", name_mode[use_name + 1]); - fflush(stdout); - } srand(rank + 1); diff --git a/src/tests/delete_obj_scale.c b/src/tests/obj/delete_obj_scale.c similarity index 97% rename from src/tests/delete_obj_scale.c rename to src/tests/obj/delete_obj_scale.c index 6cdb54eb3..abec7c9e0 100644 --- a/src/tests/delete_obj_scale.c +++ b/src/tests/obj/delete_obj_scale.c @@ -30,8 +30,6 @@ #include #include #include "pdc.h" -#include "pdc_client_server_common.h" -#include "pdc_client_connect.h" static char * rand_string(char *str, size_t size) @@ -107,7 +105,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDCinit("pdc"); @@ -179,7 +176,6 @@ main(int argc, char **argv) ht_total_sec = ht_total_elapsed / 1000000.0; LOG_INFO("%10d deleted ... %.2fs\n", i * size, ht_total_sec); - fflush(stdout); } } #ifdef ENABLE_MPI @@ -190,10 +186,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to create %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } done: // close a container diff --git a/src/tests/obj_buf.c b/src/tests/obj/obj_buf.c similarity index 51% rename from src/tests/obj_buf.c rename to src/tests/obj/obj_buf.c index f342f70e1..04a1d0589 100644 --- a/src/tests/obj_buf.c +++ b/src/tests/obj/obj_buf.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) @@ -34,7 +35,7 @@ main(int argc, char **argv) int rank = 0, size = 1; int myArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; void ** rbuf; - int ret_value = 0; + int ret_value = TSUCCEED; char cont_name[128], obj_name1[128]; #ifdef ENABLE_MPI @@ -44,91 +45,41 @@ main(int argc, char **argv) #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - PDCprop_set_obj_buf(obj_prop, myArray); + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_buf(obj_prop, myArray) >= 0, "Call to PDCprop_set_obj_buf succeeded", + "Call to PDCprop_set_obj_buf failed"); // create object sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj1", "Call to PDCobj_create failed for obj1"); // set and retrieve the object buffer - - rbuf = PDCobj_buf_retrieve(obj1); - LOG_ERROR("First number to retrieve is: %d\n", *((int *)*rbuf)); + TASSERT((rbuf = PDCobj_buf_retrieve(obj1)) != NULL, "Call to PDCobj_buf_retrieve succeeded", + "Call to PDCobj_buf_retrieve failed"); + LOG_INFO("First number to retrieve is: %d\n", *((int *)*rbuf)); // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); // close object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property\n"); - } + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/create_obj.c b/src/tests/obj/obj_del.c similarity index 51% rename from src/tests/create_obj.c rename to src/tests/obj/obj_del.c index 350819200..e8e13120e 100644 --- a/src/tests/create_obj.c +++ b/src/tests/obj/obj_del.c @@ -28,12 +28,13 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) { pdcid_t pdc, cont_prop, cont, obj_prop, obj1, obj2; - int ret_value = 0; + int ret_value = TSUCCEED; int rank = 0; char cont_name[128], obj_name1[128], obj_name2[128]; // create a pdc @@ -44,94 +45,47 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create first object sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj1", "Call to PDCobj_create failed for obj1"); // create second object sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj2", "Call to PDCobj_create failed for obj2"); + + // delete objects + TASSERT(PDCobj_del(obj1) >= 0, "Call to PDCobj_del succeeded for obj1", + "Call to PDCobj_del failed for obj1"); + TASSERT(PDCobj_del(obj2) >= 0, "Call to PDCobj_del succeeded for obj2", + "Call to PDCobj_del failed for obj2"); + // close first object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded for obj1", + "Call to PDCobj_close failed for obj1"); // close second object - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded for obj2", + "Call to PDCobj_close failed for obj2"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/obj_dim.c b/src/tests/obj/obj_dim.c similarity index 100% rename from src/tests/obj_dim.c rename to src/tests/obj/obj_dim.c diff --git a/src/tests/obj_get_data.c b/src/tests/obj/obj_get_data.c similarity index 52% rename from src/tests/obj_get_data.c rename to src/tests/obj/obj_get_data.c index 92195194e..506e19360 100644 --- a/src/tests/obj_get_data.c +++ b/src/tests/obj/obj_get_data.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" #define BUF_LEN 16 @@ -49,70 +50,39 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); memset(data, 1, BUF_LEN * sizeof(double)); sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_put_data(obj_name1, (void *)data, BUF_LEN * sizeof(double), cont); - if (obj1 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name1); - } - else { - LOG_ERROR("Failed to put data into object"); - ret_value = 1; - } + TASSERT((obj1 = PDCobj_put_data(obj_name1, (void *)data, BUF_LEN * sizeof(double), cont)) > 0, + "Call to DCobj_put_data succeeded", "Call to DCobj_put_data failed"); memset(data, 2, BUF_LEN * sizeof(double)); sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_put_data(obj_name2, (void *)data, BUF_LEN * sizeof(double), cont); - if (obj2 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name2); - } - else { - LOG_ERROR("Failed to put data into object"); - ret_value = 1; - } + TASSERT((obj2 = PDCobj_put_data(obj_name2, (void *)data, BUF_LEN * sizeof(double), cont)) > 0, + "Call to DCobj_put_data succeeded", "Call to DCobj_put_data failed"); memset(data, 0, BUF_LEN * sizeof(double)); - error_code = PDCobj_get_data(obj1, (void *)(data), BUF_LEN * sizeof(double)); - if (error_code != SUCCEED) { - LOG_ERROR("Failed to get obj 1 data\n"); - ret_value = 1; - } + TASSERT(PDCobj_get_data(obj1, (void *)(data), BUF_LEN * sizeof(double)) >= 0, + "Call to PDCobj_get_data succeeded", "Call to PDCobj_get_data failed"); + for (i = 0; i < BUF_LEN * sizeof(double); ++i) { if (data[i] != 1) { - LOG_ERROR("wrong value at obj 1\n"); + LOG_ERROR("Wrong value at obj 1\n"); ret_value = 1; break; } } memset(data, 0, BUF_LEN * sizeof(double)); - error_code = PDCobj_get_data(obj2, (void *)(data), BUF_LEN * sizeof(double)); - if (error_code != SUCCEED) { - LOG_ERROR("Failed to get obj 1 data\n"); - ret_value = 1; - } + TASSERT(PDCobj_get_data(obj2, (void *)(data), BUF_LEN * sizeof(double)) >= 0, + "Call to PDCobj_get_data succeeded", "Call to PDCobj_get_data failed"); for (i = 0; i < BUF_LEN * sizeof(double); ++i) { if (data[i] != 2) { LOG_ERROR("wrong value at obj 2\n"); @@ -122,42 +92,16 @@ main(int argc, char **argv) } // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/obj/obj_info.c b/src/tests/obj/obj_info.c new file mode 100644 index 000000000..ecbeeb7ed --- /dev/null +++ b/src/tests/obj/obj_info.c @@ -0,0 +1,134 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + perr_t ret; + pdcid_t obj1, obj2; + struct pdc_obj_info *obj1_info, *obj2_info; + char cont_name[128], obj_name1[128], obj_name2[128]; + + int rank = 0, size = 1; + int ret_value = 0; + + size_t ndim = 3; + uint64_t dims[3]; + dims[0] = 64; + dims[1] = 3; + dims[2] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, ndim, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_DOUBLE) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + TASSERT((obj1_info = PDCobj_get_info(obj1)) != NULL, "Call to PDCobj_get_info succeeded", + "Call to PDCobj_get_info failed"); + TASSERT((obj2_info = PDCobj_get_info(obj2)) != NULL, "Call to PDCobj_get_info succeeded", + "Call to PDCobj_get_info failed"); + TASSERT(strcmp(obj1_info->name, obj_name1) == 0, "obj1 name matched", "obj1 name did NOT match"); + + TASSERT(obj1_info->obj_pt->type == PDC_DOUBLE, "Type is properly inherited from object property", + "Type is NOT properly inherited from object property"); + TASSERT(obj1_info->obj_pt->ndim == ndim, + "Number of dimensions is properly inherited from object property", + "Number of dimensions is NOT properly inherited from object property"); + TASSERT(obj1_info->obj_pt->dims[0] == dims[0], + "First dimension is properly inherited from object property", + "First dimension is NOT properly inherited from object property"); + TASSERT(obj1_info->obj_pt->dims[1] == dims[1], + "Second dimension is properly inherited from object property", + "Second dimension is NOT properly inherited from object property"); + TASSERT(obj1_info->obj_pt->dims[2] == dims[2], + "Third dimension is properly inherited from object property", + "Third dimension is NOT properly inherited from object property"); + + TASSERT(strcmp(obj2_info->name, obj_name2) == 0, "obj2 name matched", "obj2 name did NOT match"); + + TASSERT(obj2_info->obj_pt->type == PDC_DOUBLE, "Type is properly inherited from object property", + "Type is NOT properly inherited from object property"); + TASSERT(obj2_info->obj_pt->ndim == ndim, + "Number of dimensions is properly inherited from object property", + "Number of dimensions is NOT properly inherited from object property"); + TASSERT(obj2_info->obj_pt->dims[0] == dims[0], + "First dimension is properly inherited from object property", + "First dimension is NOT properly inherited from object property"); + TASSERT(obj2_info->obj_pt->dims[1] == dims[1], + "Second dimension is properly inherited from object property", + "Second dimension is NOT properly inherited from object property"); + TASSERT(obj2_info->obj_pt->dims[2] == dims[2], + "Third dimension is properly inherited from object property", + "Third dimension is NOT properly inherited from object property"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/obj/obj_iter.c b/src/tests/obj/obj_iter.c new file mode 100644 index 000000000..4609e1caf --- /dev/null +++ b/src/tests/obj/obj_iter.c @@ -0,0 +1,133 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, obj1, obj2, obj3; + int rank = 0, size = 1; + obj_handle * oh; + struct pdc_obj_info *info; + int ret_value = TSUCCEED; + char cont_name[128], obj_name1[128], obj_name2[128], obj_name3[128]; + + size_t ndim = 3; + uint64_t dims[3]; + dims[0] = 64; + dims[1] = 3; + dims[2] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, ndim, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_DOUBLE) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj1", "Call to PDCobj_create failed for obj1"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj2", "Call to PDCobj_create failed for obj2"); + // create third object + sprintf(obj_name3, "o3_%d", rank); + obj3 = PDCobj_create(cont, obj_name3, obj_prop); + if (obj3 > 0) { + LOG_INFO("Create an object o3\n"); + } + else { + LOG_ERROR("Failed to create object"); + ret_value = 1; + } + // start object iteration + oh = PDCobj_iter_start(cont); + while (!PDCobj_iter_null(oh)) { + info = PDCobj_iter_get_info(oh); + TASSERT(info->obj_pt->type == PDC_DOUBLE, "Type is properly inherited from object property", + "Type is NOT properly inherited from object property"); + TASSERT(info->obj_pt->ndim == ndim, "Number of dimensions is properly inherited from object property", + "Number of dimensions is NOT properly inherited from object property"); + TASSERT(info->obj_pt->dims[0] == dims[0], + "First dimension is properly inherited from object property", + "First dimension is NOT properly inherited from object property"); + TASSERT(info->obj_pt->dims[1] == dims[1], + "Second dimension is properly inherited from object property", + "Second dimension is NOT properly inherited from object property"); + TASSERT(info->obj_pt->dims[2] == dims[2], + "Third dimension is properly inherited from object property", + "Third dimension is NOT properly inherited from object property"); + + oh = PDCobj_iter_next(oh, cont); + } + + // close first object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded for obj1", + "Call to PDCobj_close failed for obj1"); + // close second object + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded for obj2", + "Call to PDCobj_close failed for obj2"); + // close third object + TASSERT(PDCobj_close(obj3) >= 0, "Call to PDCobj_close succeeded for obj3", + "Call to PDCobj_close failed for obj3"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + + return ret_value; +} diff --git a/src/tests/obj_life.c b/src/tests/obj/obj_life.c similarity index 61% rename from src/tests/obj_life.c rename to src/tests/obj/obj_life.c index 0c2cf23ed..b2b4e125a 100644 --- a/src/tests/obj_life.c +++ b/src/tests/obj/obj_life.c @@ -26,13 +26,14 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) { - pdcid_t pdc, cont_prop, cont /*, obj1*/; - // struct PDC_obj_prop *op; - int rank = 0, size = 1; + pdcid_t pdc, cont_prop, cont; + int rank = 0, size = 1; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -40,49 +41,23 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif // create a pdc - pdc = PDCinit("pdc"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - return 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create("c1", cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - return 1; - } + TASSERT((cont = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - return 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - return 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - return 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/obj_map.c b/src/tests/obj/obj_map.c similarity index 99% rename from src/tests/obj_map.c rename to src/tests/obj/obj_map.c index 6332500fb..365c217fa 100644 --- a/src/tests/obj_map.c +++ b/src/tests/obj/obj_map.c @@ -169,7 +169,6 @@ main(int argc, char **argv) ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; LOG_INFO("Total map overhead : %.5e\n", ht_total_sec); - fflush(stdout); gettimeofday(&ht_total_start, 0); diff --git a/src/tests/obj_put_data.c b/src/tests/obj/obj_put_data.c similarity index 52% rename from src/tests/obj_put_data.c rename to src/tests/obj/obj_put_data.c index 2893a3da7..6416b7744 100644 --- a/src/tests/obj_put_data.c +++ b/src/tests/obj/obj_put_data.c @@ -26,6 +26,7 @@ #include #include #include "pdc.h" +#include "test_helper.h" #define BUF_LEN 16 @@ -48,86 +49,34 @@ main(int argc, char **argv) MPI_Comm_size(MPI_COMM_WORLD, &size); #endif // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_put_data(obj_name1, (void *)data, BUF_LEN * sizeof(double), cont); - if (obj1 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name1); - } - else { - LOG_ERROR("Failed to put data into object"); - ret_value = 1; - } + TASSERT((obj1 = PDCobj_put_data(obj_name1, (void *)data, BUF_LEN * sizeof(double), cont)) > 0, + "Call to DCobj_put_data succeeded", "Call to DCobj_put_data failed"); sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_put_data(obj_name2, (void *)data, BUF_LEN * sizeof(double), cont); - if (obj2 > 0) { - LOG_INFO("Rank %d Put data to %s\n", rank, obj_name2); - } - else { - LOG_ERROR("Failed to put data into object"); - ret_value = 1; - } + TASSERT((obj2 = PDCobj_put_data(obj_name2, (void *)data, BUF_LEN * sizeof(double), cont)) > 0, + "Call to DCobj_put_data succeeded", "Call to DCobj_put_data failed"); // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/obj/obj_round_robin_io.c b/src/tests/obj/obj_round_robin_io.c new file mode 100644 index 000000000..b6836fd98 --- /dev/null +++ b/src/tests/obj/obj_round_robin_io.c @@ -0,0 +1,268 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + pdcid_t obj1, obj2; + int rank = 0, size = 1, i, j, ret, target_rank; + int ret_value = TSUCCEED; + char cont_name[128], obj_name1[128], obj_name2[128]; + + size_t ndim; + uint64_t dims[3]; + + uint64_t *offset; + uint64_t *mysize; + + pdc_var_type_t var_type = PDC_UNKNOWN; + size_t type_size = 1; + + uint64_t my_data_size; + + char *mydata, *data_read; + + pdcid_t local_region, global_region; + pdcid_t transfer_request; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + if (!strcmp(argv[1], "float")) { + var_type = PDC_FLOAT; + type_size = sizeof(float); + } + else if (!strcmp(argv[1], "int")) { + var_type = PDC_INT; + type_size = sizeof(int); + } + else if (!strcmp(argv[1], "double")) { + var_type = PDC_DOUBLE; + type_size = sizeof(double); + } + else if (!strcmp(argv[1], "char")) { + var_type = PDC_CHAR; + type_size = sizeof(char); + } + else if (!strcmp(argv[1], "uint")) { + var_type = PDC_UINT; + type_size = sizeof(unsigned); + } + else if (!strcmp(argv[1], "int64")) { + var_type = PDC_INT64; + type_size = sizeof(int64_t); + } + else if (!strcmp(argv[1], "uint64")) { + var_type = PDC_UINT64; + type_size = sizeof(uint64_t); + } + else if (!strcmp(argv[1], "int16")) { + var_type = PDC_INT16; + type_size = sizeof(int16_t); + } + else if (!strcmp(argv[1], "int8")) { + var_type = PDC_INT8; + type_size = sizeof(int8_t); + } + + ndim = atoi(argv[2]); + + dims[0] = rank * 2 + 16; + dims[1] = rank * 3 + 16; + dims[2] = rank * 5 + 16; + my_data_size = 1; + + for (i = 0; i < (int)ndim; ++i) + my_data_size *= dims[i]; + + mydata = (char *)malloc(my_data_size * type_size); + + offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + mysize = (uint64_t *)malloc(sizeof(uint64_t)); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + mysize[0] = my_data_size; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c"); + TASSERT((cont = PDCcont_create_col(cont_name, cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_dims(obj_prop, ndim, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, var_type) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) + mydata[i * type_size + j] = (char)(i * type_size + j + rank); + } + + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_WRITE, obj1, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // create second object + sprintf(obj_name2, "o2_%d", rank); + obj2 = PDCobj_create(cont, obj_name2, obj_prop); + + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) + mydata[i * type_size + j] = (char)(i * type_size + j + rank * 5 + 3); + } + + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_WRITE, obj2, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close created objects + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + +// Wait for all processes to finish their object creation +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + for (i = 1; i < size; ++i) { + target_rank = (rank + i) % size; + sprintf(obj_name1, "o1_%d", target_rank); + TASSERT((obj1 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + sprintf(obj_name2, "o2_%d", target_rank); + TASSERT((obj2 = PDCobj_open(obj_name2, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + + dims[0] = target_rank * 2 + 16; + dims[1] = target_rank * 3 + 16; + dims[2] = target_rank * 5 + 16; + my_data_size = 1; + for (j = 0; j < (int)ndim; ++j) { + my_data_size *= dims[j]; + } + + mysize[0] = my_data_size; + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + data_read = (char *)malloc(my_data_size * type_size); + + TASSERT((transfer_request = + PDCregion_transfer_create(data_read, PDC_READ, obj2, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (j = 0; j < (int)(my_data_size * type_size); ++j) { + if (data_read[j] != (char)(j + target_rank * 5 + 3)) { + TGOTO_ERROR(TFAIL, "Rank %d, i = %d, j = %d, wrong value %d!=%d", rank, i, j, data_read[j], + (char)(j + target_rank * 5 + 3)); + } + } + + free(data_read); + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + } + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(mydata); + free(offset); + free(mysize); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/obj/obj_round_robin_io_all.c b/src/tests/obj/obj_round_robin_io_all.c new file mode 100644 index 000000000..418f685aa --- /dev/null +++ b/src/tests/obj/obj_round_robin_io_all.c @@ -0,0 +1,328 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define WRITE_REQ_SIZE 2 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + pdcid_t obj1, obj2, *obj1_list, *obj2_list; + int rank = 0, size = 1, i, j, ret, target_rank; + int ret_value = 0; + char cont_name[128], obj_name1[128], obj_name2[128]; + // struct pdc_obj_info *obj1_info, *obj2_info; + + size_t ndim; + uint64_t dims[3]; + + uint64_t *offset; + uint64_t *mysize; + + pdc_var_type_t var_type = PDC_UNKNOWN; + size_t type_size = 1; + + uint64_t my_data_size; + + char **mydata, **data_read; + + pdcid_t local_region, global_region; + pdcid_t *transfer_request; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + if (!strcmp(argv[1], "float")) { + var_type = PDC_FLOAT; + type_size = sizeof(float); + } + else if (!strcmp(argv[1], "int")) { + var_type = PDC_INT; + type_size = sizeof(int); + } + else if (!strcmp(argv[1], "double")) { + var_type = PDC_DOUBLE; + type_size = sizeof(double); + } + else if (!strcmp(argv[1], "char")) { + var_type = PDC_CHAR; + type_size = sizeof(char); + } + else if (!strcmp(argv[1], "uint")) { + var_type = PDC_UINT; + type_size = sizeof(unsigned); + } + else if (!strcmp(argv[1], "int64")) { + var_type = PDC_INT64; + type_size = sizeof(int64_t); + } + else if (!strcmp(argv[1], "uint64")) { + var_type = PDC_UINT64; + type_size = sizeof(uint64_t); + } + else if (!strcmp(argv[1], "int16")) { + var_type = PDC_INT16; + type_size = sizeof(int16_t); + } + else if (!strcmp(argv[1], "int8")) { + var_type = PDC_INT8; + type_size = sizeof(int8_t); + } + + ndim = atoi(argv[2]); + + dims[0] = rank * 2 + 16; + dims[1] = rank * 3 + 16; + dims[2] = rank * 5 + 16; + my_data_size = 1; + for (i = 0; i < (int)ndim; ++i) { + my_data_size *= dims[i]; + } + + mydata = (char **)malloc(2 * sizeof(char *)); + mydata[0] = (char *)malloc(my_data_size * type_size); + mydata[1] = (char *)malloc(my_data_size * type_size); + + offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + mysize = (uint64_t *)malloc(sizeof(uint64_t)); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + mysize[0] = my_data_size; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c"); + TASSERT((cont = PDCcont_create_col(cont_name, cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, var_type) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, ndim, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) + mydata[0][i * type_size + j] = (char)(i * type_size + j + rank); + } + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) + mydata[1][i * type_size + j] = (char)(i * type_size + j + rank * 5 + 3); + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * size * 2); + + TASSERT((transfer_request[0] = + PDCregion_transfer_create(mydata[0], PDC_WRITE, obj1, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + TASSERT((transfer_request[1] = + PDCregion_transfer_create(mydata[1], PDC_WRITE, obj2, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start_all(transfer_request, WRITE_REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request, WRITE_REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + TASSERT(PDCregion_transfer_close(transfer_request[0]) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request[1]) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close created objects + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + +// Wait for all processes to finish their object creation +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + data_read = (char **)malloc(sizeof(char *) * (size - 1) * 2); + obj1_list = (pdcid_t *)malloc(sizeof(pdcid_t) * (size - 1) * 2); + obj2_list = (pdcid_t *)malloc(sizeof(pdcid_t) * (size - 1) * 2); + + for (i = 1; i < size; ++i) { + target_rank = (rank + i) % size; + sprintf(obj_name1, "o1_%d", target_rank); + TASSERT((obj1_list[i - 1] = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + + dims[0] = target_rank * 2 + 16; + dims[1] = target_rank * 3 + 16; + dims[2] = target_rank * 5 + 16; + my_data_size = 1; + for (j = 0; j < (int)ndim; ++j) { + my_data_size *= dims[j]; + } + + mysize[0] = my_data_size; + TASSERT((local_region = PDCregion_create(1, offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, dims)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + data_read[(i - 1)] = (char *)malloc(my_data_size * type_size); + + transfer_request[(i - 1)] = + PDCregion_transfer_create(data_read[(i - 1)], PDC_READ, obj2, local_region, global_region); + if (transfer_request[(i - 1)] == 0) { + LOG_ERROR("PDCregion_transfer_create for read obj2 failed\n"); + ret_value = 1; + } + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + sprintf(obj_name2, "o2_%d", target_rank); + obj2_list[i - 1] = PDCobj_open(obj_name2, pdc); + if (obj2_list[i - 1] == 0) { + LOG_ERROR("Rank %d fail to open object %s\n", rank, obj_name2); + ret_value = 1; + } + else { + LOG_INFO("Rank %d opened object %s\n", rank, obj_name2); + } + + mysize[0] = my_data_size; + local_region = PDCregion_create(1, offset, mysize); + global_region = PDCregion_create(ndim, offset, dims); + data_read[(i - 1) + size - 1] = (char *)malloc(my_data_size * type_size); + + TASSERT((transfer_request[(i - 1) + size - 1] = PDCregion_transfer_create( + data_read[(i - 1) + size - 1], PDC_READ, obj2, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + TASSERT(PDCregion_transfer_start_all(transfer_request, (size - 1) * 2) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request, (size - 1) * 2) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + + for (i = 1; i < size; ++i) { + target_rank = (rank + i) % size; + + TASSERT(PDCregion_transfer_close(transfer_request[i - 1]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + TASSERT(PDCregion_transfer_close(transfer_request[i - 1] + size - 1) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + + for (j = 0; j < (int)(my_data_size * type_size); ++j) { + if (data_read[(i - 1)][j] != (char)(j + target_rank)) { + TGOTO_ERROR(TFAIL, "Rank %d, i = %d, j = %d, wrong value %d!=%d\n", rank, i, j, + data_read[(i - 1)][j], (char)(j + target_rank)); + } + } + + for (j = 0; j < (int)(my_data_size * type_size); ++j) { + if (data_read[(i - 1) + size - 1][j] != (char)(j + target_rank * 5 + 3)) { + TGOTO_ERROR(TFAIL, "Rank %d, i = %d, j = %d, wrong value %d!=%d", rank, i, j, + data_read[(i - 1) + size - 1][j], (char)(j + target_rank * 5 + 3)); + } + } + + free(data_read[(i - 1)]); + free(data_read[(i - 1) + size - 1]); + + TASSERT(PDCobj_close(obj1_list[i - 1]) >= 0, "Call to PDCobj_close succeeded", + "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2_list[i - 1]) >= 0, "Call to PDCobj_close succeeded", + "Call to PDCobj_close failed"); + } + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + LOG_INFO("Total number of read request = %d\n", (size - 1) * 2); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(transfer_request); + free(obj1_list); + free(obj2_list); + free(data_read); + free(mydata[0]); + free(mydata[1]); + free(mydata); + free(offset); + free(mysize); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/obj/obj_tags.c b/src/tests/obj/obj_tags.c new file mode 100644 index 000000000..1675f05a3 --- /dev/null +++ b/src/tests/obj/obj_tags.c @@ -0,0 +1,144 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + perr_t ret; + pdcid_t obj1, obj2; + int ret_value = TSUCCEED; + + int rank = 0, size = 1; + + size_t ndim = 3; + uint64_t dims[3]; + dims[0] = 64; + dims[1] = 3; + dims[2] = 4; + char tag_value[128], tag_value2[128], *tag_value_ret; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdc_var_type_t value_type; + psize_t value_size; + + strcpy(tag_value, "some tag value"); + strcpy(tag_value2, "some tag value 2 is longer"); + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, ndim, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_DOUBLE) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj1", "Call to PDCobj_create failed for obj1"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, + "Call to PDCobj_create succeeded for obj2", "Call to PDCobj_create failed for obj2"); + + // put tags in obj1 + TASSERT(PDCobj_put_tag(obj1, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1) >= 0, + "Call to PDCobj_put_tag succeeded for obj1", "Call to PDCobj_put_tag failed for obj1"); + TASSERT(PDCobj_put_tag(obj1, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1) >= 0, + "Call to PDCobj_put_tag succeeded for obj1", "Call to PDCobj_put_tag failed for obj1"); + + // put tags in obj2 + TASSERT(PDCobj_put_tag(obj2, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1) >= 0, + "Call to PDCobj_put_tag succeeded for obj2", "Call to PDCobj_put_tag failed for obj2"); + TASSERT(PDCobj_put_tag(obj2, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1) >= 0, + "Call to PDCobj_put_tag succeeded for obj2", "Call to PDCobj_put_tag failed for obj2"); + + // get tags in obj1 + TASSERT(PDCobj_get_tag(obj1, "some tag", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj1", "Call to PDCobj_get_tag failed for obj1"); + if (strcmp(tag_value, tag_value_ret) != 0) { + LOG_ERROR("Wrong tag value at object 1, expected = %s, get %s\n", tag_value, tag_value_ret); + PGOTO_DONE(TFAIL); + } + TASSERT(PDCobj_get_tag(obj1, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj1", "Call to PDCobj_get_tag failed for obj1"); + if (strcmp(tag_value2, tag_value_ret) != 0) { + LOG_ERROR("Wrong tag value 2 at object 1, expected = %s, get %s\n", tag_value2, tag_value_ret); + PGOTO_DONE(TFAIL); + } + + // get tags in obj2 + TASSERT(PDCobj_get_tag(obj2, "some tag", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj2", "Call to PDCobj_get_tag failed for obj2"); + if (strcmp(tag_value, tag_value_ret) != 0) { + LOG_ERROR("Wrong tag value at object 2, expected = %s, get %s\n", tag_value, tag_value_ret); + PGOTO_DONE(TFAIL); + } + TASSERT(PDCobj_get_tag(obj2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj2", "Call to PDCobj_get_tag failed for obj2"); + if (strcmp(tag_value2, tag_value_ret) != 0) { + LOG_ERROR("Wrong tag value 2 at object 2, expected = %s, get %s\n", tag_value2, tag_value_ret); + PGOTO_DONE(TFAIL); + } + + // close objects + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded for obj1", + "Call to PDCobj_close failed for obj1"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded for obj2", + "Call to PDCobj_close failed for obj2"); + // close container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close properties + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/open_existing_obj.c b/src/tests/obj/open_existing_obj.c similarity index 100% rename from src/tests/open_existing_obj.c rename to src/tests/obj/open_existing_obj.c diff --git a/src/tests/obj/open_obj.c b/src/tests/obj/open_obj.c new file mode 100644 index 000000000..53f0151fc --- /dev/null +++ b/src/tests/obj/open_obj.c @@ -0,0 +1,94 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop; + pdcid_t obj1, obj2, open11, open12, open21; + int rank = 0, size = 1; + int ret_value = 0; + char cont_name[128], obj_name1[128], obj_name2[128]; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // open first object twice + TASSERT((open11 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + TASSERT((open12 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + LOG_INFO("Rank [%d]: Re-open object o1\n", rank); + // open second object once + TASSERT((open21 = PDCobj_open(obj_name2, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open11) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open12) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(open21) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/open_obj_round_robin.c b/src/tests/obj/open_obj_round_robin.c similarity index 96% rename from src/tests/open_obj_round_robin.c rename to src/tests/obj/open_obj_round_robin.c index bee7592a9..3a13d8d16 100644 --- a/src/tests/open_obj_round_robin.c +++ b/src/tests/obj/open_obj_round_robin.c @@ -59,7 +59,7 @@ main(int argc, char **argv) LOG_INFO("Rank %d Create a container property\n", rank); } else { - LOG_ERROR("Rank %d Fail to create container property!\n", rank); + LOG_ERROR("Rank %d Fail to create container property\n", rank); ret_value = 1; } // create a container @@ -70,7 +70,7 @@ main(int argc, char **argv) LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); } else { - LOG_ERROR("Rank %d Fail to create container!\n", rank); + LOG_ERROR("Rank %d Fail to create container\n", rank); ret_value = 1; } // create an object property @@ -79,7 +79,7 @@ main(int argc, char **argv) LOG_INFO("Rank %d Create an object property\n", rank); } else { - LOG_ERROR("Rank %d Fail to create object property!\n", rank); + LOG_ERROR("Rank %d Fail to create object property\n", rank); ret_value = 1; } ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); @@ -100,7 +100,7 @@ main(int argc, char **argv) LOG_INFO("Rank %d Create an object %s\n", rank, obj_name1); } else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); + LOG_ERROR("Rank %d Fail to create object\n", rank); ret_value = 1; } @@ -111,7 +111,7 @@ main(int argc, char **argv) LOG_INFO("Rank %d Create an object %s\n", rank, obj_name2); } else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); + LOG_ERROR("Rank %d Fail to create object\n", rank); ret_value = 1; } diff --git a/src/tests/read_obj.c b/src/tests/obj/read_obj.c similarity index 52% rename from src/tests/read_obj.c rename to src/tests/obj/read_obj.c index 73f6198f2..1e751c29a 100644 --- a/src/tests/read_obj.c +++ b/src/tests/obj/read_obj.c @@ -7,8 +7,7 @@ #include #include #include "pdc.h" -#include "pdc_client_connect.h" -#include "pdc_client_server_common.h" +#include "test_helper.h" void print_usage() @@ -23,7 +22,7 @@ main(int argc, char **argv) uint64_t size_MB, size_B; perr_t ret; int ndim = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Comm comm; #else @@ -59,11 +58,10 @@ main(int argc, char **argv) if (argc != 4) { print_usage(); - ret_value = 1; #ifdef ENABLE_MPI MPI_Finalize(); #endif - return ret_value; + TGOTO_DONE(TFAIL); } sprintf(obj_name, "%s_%d", argv[1], rank); @@ -112,40 +110,36 @@ main(int argc, char **argv) size_B = size_MB * 1048576; // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont <= 0) { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } + TASSERT((cont = PDCcont_create_col(cont_name, cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); dims[0] = size_B; my_data_size = size_B / size; LOG_INFO("my_data_size at rank %d is %llu\n", rank, (long long unsigned)my_data_size); mydata = (char *)malloc(my_data_size * type_size); - PDCprop_set_obj_type(obj_prop, var_type); - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); + TASSERT(PDCprop_set_obj_type(obj_prop, var_type) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); // Create a object #ifdef ENABLE_MPI @@ -154,10 +148,8 @@ main(int argc, char **argv) global_obj = PDCobj_create(cont, obj_name, obj_prop); #endif - if (global_obj <= 0) { - LOG_ERROR("Error creating an object [%s], exit...\n", obj_name); - ret_value = 1; - } + if (global_obj <= 0) + TGOTO_ERROR(TFAIL, "Error creating an object [%s]\n", obj_name); offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); local_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); @@ -166,84 +158,59 @@ main(int argc, char **argv) local_offset[0] = 0; mysize[0] = my_data_size; - local_region = PDCregion_create(ndim, local_offset, mysize); - global_region = PDCregion_create(ndim, offset, mysize); + TASSERT((local_region = PDCregion_create(ndim, local_offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); for (i = 0; i < (int)my_data_size; i++) { for (j = 0; j < (int)type_size; ++j) { mydata[i * type_size + j] = i; } } - transfer_request = PDCregion_transfer_create(mydata, PDC_WRITE, global_obj, local_region, global_region); - if (transfer_request == 0) { - LOG_ERROR("PDCregion_transfer_create failed"); - ret_value = 1; - } + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_WRITE, global_obj, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif gettimeofday(&pdc_timer_start, 0); - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_closefailed"); - ret_value = 1; - } + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif gettimeofday(&pdc_timer_end, 0); write_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to process write data with %d ranks: %.5e\n", size, write_time); - fflush(stdout); - } - transfer_request = PDCregion_transfer_create(mydata, PDC_READ, global_obj, local_region, global_region); - if (transfer_request == 0) { - LOG_INFO("PDCregion_transfer_create failed"); - ret_value = 1; - } + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_READ, global_obj, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif - gettimeofday(&pdc_timer_start, 0); - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } + gettimeofday(&pdc_timer_start, 0); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); for (i = 0; i < (int)my_data_size; i++) { for (j = 0; j < (int)type_size; ++j) { if (mydata[i * type_size + j] != (char)i) { - LOG_ERROR("Wrong value detected %d != %d!\n", mydata[i * type_size + j], i); + LOG_ERROR("Wrong value detected %d != %d\n", mydata[i * type_size + j], i); ret_value = 1; i = my_data_size; break; @@ -254,45 +221,28 @@ main(int argc, char **argv) #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); #endif + gettimeofday(&pdc_timer_end, 0); write_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to process read data with %d ranks: %.5e\n", size, write_time); - fflush(stdout); - } free(offset); free(local_offset); free(mysize); free(mydata); - if (PDCobj_close(global_obj) < 0) { - LOG_ERROR("Failed to close global obj"); - ret_value = 1; - } + TASSERT(PDCobj_close(global_obj) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container"); - ret_value = 1; - } - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/obj/read_obj_shared.c b/src/tests/obj/read_obj_shared.c new file mode 100644 index 000000000..f617e12f9 --- /dev/null +++ b/src/tests/obj/read_obj_shared.c @@ -0,0 +1,255 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +void +print_usage() +{ + LOG_JUST_PRINT("Usage: srun -n ./write_obj obj_name size_MB type\n"); +} + +int +main(int argc, char **argv) +{ + int rank = 0, size = 1; + uint64_t size_MB, size_B; + perr_t ret; + int ndim = 1; + int ret_value = TSUCCEED; +#ifdef ENABLE_MPI + MPI_Comm comm; +#else + int comm = 1; +#endif + pdcid_t global_obj = 0; + pdcid_t local_region, global_region; + pdcid_t pdc, cont_prop, cont, obj_prop; + + uint64_t *offset, *local_offset; + uint64_t *mysize; + int i, j; + char * mydata; + char obj_name[128], cont_name[128]; + + uint64_t my_data_size; + uint64_t dims[1]; + + pdc_var_type_t var_type = PDC_UNKNOWN; + size_t type_size = 1; + + pdcid_t transfer_request; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + MPI_Comm_dup(MPI_COMM_WORLD, &comm); +#endif + + if (argc != 4) { + print_usage(); +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + TGOTO_DONE(TFAIL); + } + + sprintf(obj_name, "%s", argv[1]); + size_MB = atoi(argv[2]); + + if (!strcmp(argv[3], "float")) { + var_type = PDC_FLOAT; + type_size = sizeof(float); + } + else if (!strcmp(argv[3], "int")) { + var_type = PDC_INT; + type_size = sizeof(int); + } + else if (!strcmp(argv[3], "double")) { + var_type = PDC_DOUBLE; + type_size = sizeof(double); + } + else if (!strcmp(argv[3], "char")) { + var_type = PDC_CHAR; + type_size = sizeof(char); + } + else if (!strcmp(argv[3], "uint")) { + var_type = PDC_UINT; + type_size = sizeof(unsigned); + } + else if (!strcmp(argv[3], "int64")) { + var_type = PDC_INT64; + type_size = sizeof(int64_t); + } + else if (!strcmp(argv[3], "uint64")) { + var_type = PDC_UINT64; + type_size = sizeof(uint64_t); + } + else if (!strcmp(argv[3], "int16")) { + var_type = PDC_INT16; + type_size = sizeof(int16_t); + } + else if (!strcmp(argv[3], "int8")) { + var_type = PDC_INT8; + type_size = sizeof(int8_t); + } + + LOG_INFO("Writing a %" PRIu64 " MB object [%s] with %d clients.\n", size_MB, obj_name, size); + // size_B = 1; + size_B = size_MB * 1048576; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + /* sprintf(cont_name, "c%d", rank); */ + sprintf(cont_name, "c"); + TASSERT((cont = PDCcont_create_col(cont_name, cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + dims[0] = size_B; + my_data_size = size_B / size; + LOG_INFO("my_data_size at rank %d is %llu\n", rank, (long long unsigned)my_data_size); + + mydata = (char *)malloc(my_data_size * type_size); + + TASSERT(PDCprop_set_obj_type(obj_prop, var_type) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // Create a object +#ifdef ENABLE_MPI + TASSERT((global_obj = PDCobj_create_mpi(cont, obj_name, obj_prop, 0, comm)) != 0, + "Call to PDCobj_create succeeded", "Call to PDCobj_create failed"); +#else + TASSERT((global_obj = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); +#endif + + if (global_obj <= 0) { + LOG_ERROR("Error creating an object [%s], exit...\n", obj_name); + ret_value = 1; + } + + offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + local_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); + + offset[0] = rank * my_data_size; + local_offset[0] = 0; + mysize[0] = my_data_size; + LOG_INFO("Rank %d offset = %llu, length = %llu, unit size = %ld\n", rank, offset[0], mysize[0], + type_size); + + TASSERT((local_region = PDCregion_create(ndim, local_offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) { + mydata[i * type_size + j] = i; + } + } + + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_WRITE, global_obj, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCobj_close(global_obj) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + // Now we start the read part for the object just written + offset[0] = rank * my_data_size; + local_offset[0] = 0; + mysize[0] = my_data_size; + LOG_INFO("rank %d offset = %llu, length = %llu, unit size = %ld\n", rank, offset[0], mysize[0], + type_size); + + TASSERT((local_region = PDCregion_create(ndim, local_offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((global_region = PDCregion_create(ndim, offset, mysize)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((global_obj = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + memset(mydata, 0, my_data_size * type_size); + + TASSERT((transfer_request = + PDCregion_transfer_create(mydata, PDC_READ, global_obj, local_region, global_region)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); +#ifdef ENABLE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < (int)my_data_size; i++) { + for (j = 0; j < (int)type_size; ++j) { + if (mydata[i * type_size + j] != (char)i) { + TGOTO_ERROR(TFAIL, "Wrong value detected %d != %d\n", mydata[i * type_size + j], i); + } + } + } + + TASSERT(PDCobj_close(global_obj) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCregion_close(local_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(global_region) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(mydata); + free(offset); + free(local_offset); + free(mysize); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + + return ret_value; +} diff --git a/src/tests/search_obj.c b/src/tests/obj/search_obj.c similarity index 98% rename from src/tests/search_obj.c rename to src/tests/obj/search_obj.c index 77c21f351..97b908908 100644 --- a/src/tests/search_obj.c +++ b/src/tests/obj/search_obj.c @@ -189,7 +189,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Searching %d objects per MPI rank\n", count); - fflush(stdout); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -215,10 +214,8 @@ main(int argc, char **argv) ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("searched %10d ... %.5e\n", i * size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -233,10 +230,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to partial query %d obj/rank with %d ranks: %.5e\n\n\n", count, size, ht_total_sec); - fflush(stdout); - } // close a container if (PDCcont_close(cont) < 0) diff --git a/src/tests/search_obj_scale.c b/src/tests/obj/search_obj_scale.c similarity index 98% rename from src/tests/search_obj_scale.c rename to src/tests/obj/search_obj_scale.c index 47cab7cf7..c3b5934a5 100644 --- a/src/tests/search_obj_scale.c +++ b/src/tests/obj/search_obj_scale.c @@ -109,7 +109,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Creating %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDCinit("pdc"); @@ -181,7 +180,6 @@ main(int argc, char **argv) ht_total_sec = ht_total_elapsed / 1000000.0; LOG_INFO("%10d queried ... %.5es\n", i * size, ht_total_sec); - fflush(stdout); } } #ifdef ENABLE_MPI @@ -192,10 +190,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to create %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } done: diff --git a/src/tests/stat_obj.c b/src/tests/obj/stat_obj.c similarity index 98% rename from src/tests/stat_obj.c rename to src/tests/obj/stat_obj.c index fe13ac434..6426c8250 100644 --- a/src/tests/stat_obj.c +++ b/src/tests/obj/stat_obj.c @@ -183,7 +183,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Stating %d objects per MPI rank\n", count); - fflush(stdout); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -206,10 +205,8 @@ main(int argc, char **argv) ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("stated %10d ... %.5e\n", i * size, ht_total_sec); - fflush(stdout); - } #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -224,10 +221,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to stat %d obj/rank with %d ranks: %.5e\n", count, size, ht_total_sec); - fflush(stdout); - } // close a container if (PDCcont_close(cont) < 0) diff --git a/src/tests/update_obj.c b/src/tests/obj/update_obj.c similarity index 98% rename from src/tests/update_obj.c rename to src/tests/obj/update_obj.c index fc68f1177..cb0c0640f 100644 --- a/src/tests/update_obj.c +++ b/src/tests/obj/update_obj.c @@ -98,7 +98,6 @@ main(int argc, char **argv) if (rank == 0) LOG_INFO("Update/Delete %d objects per MPI rank\n", count); - fflush(stdout); // create a pdc pdc = PDCinit("pdc"); @@ -212,7 +211,6 @@ main(int argc, char **argv) ht_total_sec = ht_total_elapsed / 1000000.0; LOG_INFO("updated %10d ... %.5e\n", i * size, ht_total_sec); - fflush(stdout); } } } @@ -224,10 +222,8 @@ main(int argc, char **argv) ht_total_elapsed = (ht_total_end.tv_sec - ht_total_start.tv_sec) * 1000000LL + ht_total_end.tv_usec - ht_total_start.tv_usec; ht_total_sec = ht_total_elapsed / 1000000.0; - if (rank == 0) { + if (rank == 0) LOG_INFO("Time to update %d obj/rank with %d ranks: %.5e\n\n\n", count, size, ht_total_sec); - fflush(stdout); - } // close a container if (PDCcont_close(cont) < 0) diff --git a/src/tests/write_obj_shared.c b/src/tests/obj/write_obj_shared.c similarity index 99% rename from src/tests/write_obj_shared.c rename to src/tests/obj/write_obj_shared.c index 51125a1bd..bc2fb18da 100644 --- a/src/tests/write_obj_shared.c +++ b/src/tests/obj/write_obj_shared.c @@ -208,10 +208,8 @@ main(int argc, char **argv) gettimeofday(&pdc_timer_end, 0); write_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); - if (rank == 0) { + if (rank == 0) LOG_ERROR("Time to lock and release data with %d ranks: %.5e\n", size, write_time); - fflush(stdout); - } done: if (PDCobj_close(global_obj) < 0) { LOG_ERROR("Failed to close global obj\n"); diff --git a/src/tests/obj_del.c b/src/tests/obj_del.c deleted file mode 100644 index 7b544847d..000000000 --- a/src/tests/obj_del.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, obj1, obj2; - int ret_value = 0; - int rank = 0; - char cont_name[128], obj_name1[128], obj_name2[128]; - // create a pdc -#ifdef ENABLE_MPI - int size; - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - if (PDCobj_del(obj1) != SUCCEED) { - LOG_ERROR("Failed to delete object"); - } - - if (PDCobj_del(obj2) != SUCCEED) { - LOG_ERROR("Failed to delete object"); - } - - // close first object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - // close second object - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/obj_info.c b/src/tests/obj_info.c deleted file mode 100644 index e2a6e8bfa..000000000 --- a/src/tests/obj_info.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - perr_t ret; - pdcid_t obj1, obj2; - struct pdc_obj_info *obj1_info, *obj2_info; - char cont_name[128], obj_name1[128], obj_name2[128]; - - int rank = 0, size = 1; - int ret_value = 0; - - size_t ndim = 3; - uint64_t dims[3]; - dims[0] = 64; - dims[1] = 3; - dims[2] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - ret = PDCprop_set_obj_type(obj_prop, PDC_DOUBLE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - obj1_info = PDCobj_get_info(obj1); - obj2_info = PDCobj_get_info(obj2); - if (strcmp(obj1_info->name, obj_name1) != 0) { - LOG_ERROR("Object 1 name is wrong\n"); - ret_value = 1; - } - - if (obj1_info->obj_pt->type != PDC_DOUBLE) { - LOG_ERROR("Type is not properly inherited from object property.\n"); - ret_value = 1; - } - - if (obj1_info->obj_pt->ndim != ndim) { - LOG_ERROR("Number of dimensions is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj1_info->obj_pt->dims[0] != dims[0]) { - LOG_ERROR("First dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj1_info->obj_pt->dims[1] != dims[1]) { - LOG_ERROR("Second dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj1_info->obj_pt->dims[2] != dims[2]) { - LOG_ERROR("Third dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - - if (strcmp(obj2_info->name, obj_name2) != 0) { - LOG_ERROR("Object 2 name is wrong\n"); - ret_value = 1; - } - - if (obj2_info->obj_pt->type != PDC_DOUBLE) { - LOG_ERROR("Type is not properly inherited from object property.\n"); - ret_value = 1; - } - - if (obj2_info->obj_pt->ndim != ndim) { - LOG_ERROR("Number of dimensions is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj2_info->obj_pt->dims[0] != dims[0]) { - LOG_ERROR("First dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj2_info->obj_pt->dims[1] != dims[1]) { - LOG_ERROR("Second dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (obj2_info->obj_pt->dims[2] != dims[2]) { - LOG_ERROR("Third dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property\n"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/obj_iter.c b/src/tests/obj_iter.c deleted file mode 100644 index 8a14dbf39..000000000 --- a/src/tests/obj_iter.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, obj1, obj2, obj3; - int rank = 0, size = 1; - obj_handle * oh; - struct pdc_obj_info *info; - int ret_value = 0, ret; - char cont_name[128], obj_name1[128], obj_name2[128], obj_name3[128]; - - size_t ndim = 3; - uint64_t dims[3]; - dims[0] = 64; - dims[1] = 3; - dims[2] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - ret = PDCprop_set_obj_type(obj_prop, PDC_DOUBLE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create third object - sprintf(obj_name3, "o3_%d", rank); - obj3 = PDCobj_create(cont, obj_name3, obj_prop); - if (obj3 > 0) { - LOG_INFO("Create an object o3\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // start object iteration - oh = PDCobj_iter_start(cont); - - while (!PDCobj_iter_null(oh)) { - info = PDCobj_iter_get_info(oh); - if (info->obj_pt->type != PDC_DOUBLE) { - LOG_ERROR("Type is not properly inherited from object property.\n"); - ret_value = 1; - } - if (info->obj_pt->ndim != ndim) { - LOG_ERROR("Number of dimensions is not properly inherited from object property.\n"); - ret_value = 1; - } - if (info->obj_pt->dims[0] != dims[0]) { - LOG_ERROR("First dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (info->obj_pt->dims[1] != dims[1]) { - LOG_ERROR("Second dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - if (info->obj_pt->dims[2] != dims[2]) { - LOG_ERROR("Third dimension is not properly inherited from object property.\n"); - ret_value = 1; - } - - oh = PDCobj_iter_next(oh, cont); - } - - // close first object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - // close second object - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - // close third object - if (PDCobj_close(obj3) < 0) { - LOG_ERROR("Failed to close object o3\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o3\n"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property\n"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - - return ret_value; -} diff --git a/src/tests/obj_round_robin_io.c b/src/tests/obj_round_robin_io.c deleted file mode 100644 index e539d9b75..000000000 --- a/src/tests/obj_round_robin_io.c +++ /dev/null @@ -1,416 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - pdcid_t obj1, obj2; - int rank = 0, size = 1, i, j, ret, target_rank; - int ret_value = 0; - char cont_name[128], obj_name1[128], obj_name2[128]; - // struct pdc_obj_info *obj1_info, *obj2_info; - - size_t ndim; - uint64_t dims[3]; - - uint64_t *offset; - uint64_t *mysize; - - pdc_var_type_t var_type = PDC_UNKNOWN; - size_t type_size = 1; - - uint64_t my_data_size; - - char *mydata, *data_read; - - pdcid_t local_region, global_region; - pdcid_t transfer_request; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - if (!strcmp(argv[1], "float")) { - var_type = PDC_FLOAT; - type_size = sizeof(float); - } - else if (!strcmp(argv[1], "int")) { - var_type = PDC_INT; - type_size = sizeof(int); - } - else if (!strcmp(argv[1], "double")) { - var_type = PDC_DOUBLE; - type_size = sizeof(double); - } - else if (!strcmp(argv[1], "char")) { - var_type = PDC_CHAR; - type_size = sizeof(char); - } - else if (!strcmp(argv[1], "uint")) { - var_type = PDC_UINT; - type_size = sizeof(unsigned); - } - else if (!strcmp(argv[1], "int64")) { - var_type = PDC_INT64; - type_size = sizeof(int64_t); - } - else if (!strcmp(argv[1], "uint64")) { - var_type = PDC_UINT64; - type_size = sizeof(uint64_t); - } - else if (!strcmp(argv[1], "int16")) { - var_type = PDC_INT16; - type_size = sizeof(int16_t); - } - else if (!strcmp(argv[1], "int8")) { - var_type = PDC_INT8; - type_size = sizeof(int8_t); - } - - ndim = atoi(argv[2]); - - dims[0] = rank * 2 + 16; - dims[1] = rank * 3 + 16; - dims[2] = rank * 5 + 16; - my_data_size = 1; - for (i = 0; i < (int)ndim; ++i) { - my_data_size *= dims[i]; - } - - mydata = (char *)malloc(my_data_size * type_size); - - offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - mysize = (uint64_t *)malloc(sizeof(uint64_t)); - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - mysize[0] = my_data_size; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Rank %d Create a container property\n", rank); - } - else { - LOG_ERROR("Rank %d fail to create container property!\n", rank); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c"); - cont = PDCcont_create_col(cont_name, cont_prop); - // cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); - } - else { - LOG_ERROR("Rank %d fail to create container!\n", rank); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Rank %d Create an object property\n", rank); - } - else { - LOG_ERROR("Rank %d fail to create object property!\n", rank); - ret_value = 1; - } - - ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - PDCprop_set_obj_type(obj_prop, var_type); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - - // create first object - sprintf(obj_name1, "o1_%d", rank); - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Rank %d Create an object %s\n", rank, obj_name1); - } - else { - LOG_ERROR("Rank %d fail to create object\n", rank); - ret_value = 1; - } - for (i = 0; i < (int)my_data_size; i++) { - for (j = 0; j < (int)type_size; ++j) { - mydata[i * type_size + j] = (char)(i * type_size + j + rank); - } - } - transfer_request = PDCregion_transfer_create(mydata, PDC_WRITE, obj1, local_region, global_region); - if (transfer_request == 0) { - LOG_ERROR("PDCregion_transfer_create failed"); - ret_value = 1; - } - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - if (obj2 > 0) { - LOG_INFO("Rank %d Create an object %s\n", rank, obj_name2); - } - else { - LOG_ERROR("Rank %d fail to create object!\n", rank); - ret_value = 1; - } - for (i = 0; i < (int)my_data_size; i++) { - for (j = 0; j < (int)type_size; ++j) { - mydata[i * type_size + j] = (char)(i * type_size + j + rank * 5 + 3); - } - } - transfer_request = PDCregion_transfer_create(mydata, PDC_WRITE, obj2, local_region, global_region); - if (transfer_request == 0) { - LOG_ERROR("PDCregion_transfer_create failed"); - ret_value = 1; - } - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - // close created objects - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Rank %d fail to close object o1_%d %d\n", rank, rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o1_%d\n", rank, rank); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Rank %d fail to close object o2_%d\n", rank, rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o2_%d\n", rank, rank); - } -// Wait for all processes to finish their object creation -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - for (i = 1; i < size; ++i) { - target_rank = (rank + i) % size; - sprintf(obj_name1, "o1_%d", target_rank); - obj1 = PDCobj_open(obj_name1, pdc); - if (obj1 == 0) { - LOG_ERROR("Rank %d fail to open object %s\n", rank, obj_name1); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Opened object %s\n", rank, obj_name1); - } - sprintf(obj_name2, "o2_%d", target_rank); - obj2 = PDCobj_open(obj_name2, pdc); - if (obj2 == 0) { - LOG_ERROR("Rank %d fail to open object %s\n", rank, obj_name2); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object %s\n", rank, obj_name2); - } - - dims[0] = target_rank * 2 + 16; - dims[1] = target_rank * 3 + 16; - dims[2] = target_rank * 5 + 16; - my_data_size = 1; - for (j = 0; j < (int)ndim; ++j) { - my_data_size *= dims[j]; - } - - mysize[0] = my_data_size; - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - data_read = (char *)malloc(my_data_size * type_size); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj2, local_region, global_region); - if (transfer_request == 0) { - LOG_ERROR("PDCregion_transfer_create for read obj2 failed\n"); - ret_value = 1; - } - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - for (j = 0; j < (int)(my_data_size * type_size); ++j) { - if (data_read[j] != (char)(j + target_rank * 5 + 3)) { - LOG_ERROR("rank %d, i = %d, j = %d, wrong value %d!=%d\n", rank, i, j, data_read[j], - (char)(j + target_rank * 5 + 3)); - ret_value = 1; - break; - } - } - - free(data_read); - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Rank %d fail to close object %s\n", rank, obj_name1); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object %s\n", rank, obj_name1); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Rank %d fail to close object %s\n", rank, obj_name2); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object %s\n", rank, obj_name2); - } - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Rank %d fail to close container\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container c\n", rank); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Rank %d fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object property\n", rank); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Rank %d fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container property\n", rank); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Rank %d fail to close PDC\n", rank); - ret_value = 1; - } - - free(mydata); - free(offset); - free(mysize); -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/obj_round_robin_io_all.c b/src/tests/obj_round_robin_io_all.c deleted file mode 100644 index 4e18a18d1..000000000 --- a/src/tests/obj_round_robin_io_all.c +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -#define WRITE_REQ_SIZE 2 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - pdcid_t obj1, obj2, *obj1_list, *obj2_list; - int rank = 0, size = 1, i, j, ret, target_rank; - int ret_value = 0; - char cont_name[128], obj_name1[128], obj_name2[128]; - // struct pdc_obj_info *obj1_info, *obj2_info; - - size_t ndim; - uint64_t dims[3]; - - uint64_t *offset; - uint64_t *mysize; - - pdc_var_type_t var_type = PDC_UNKNOWN; - size_t type_size = 1; - - uint64_t my_data_size; - - char **mydata, **data_read; - - pdcid_t local_region, global_region; - pdcid_t *transfer_request; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - if (!strcmp(argv[1], "float")) { - var_type = PDC_FLOAT; - type_size = sizeof(float); - } - else if (!strcmp(argv[1], "int")) { - var_type = PDC_INT; - type_size = sizeof(int); - } - else if (!strcmp(argv[1], "double")) { - var_type = PDC_DOUBLE; - type_size = sizeof(double); - } - else if (!strcmp(argv[1], "char")) { - var_type = PDC_CHAR; - type_size = sizeof(char); - } - else if (!strcmp(argv[1], "uint")) { - var_type = PDC_UINT; - type_size = sizeof(unsigned); - } - else if (!strcmp(argv[1], "int64")) { - var_type = PDC_INT64; - type_size = sizeof(int64_t); - } - else if (!strcmp(argv[1], "uint64")) { - var_type = PDC_UINT64; - type_size = sizeof(uint64_t); - } - else if (!strcmp(argv[1], "int16")) { - var_type = PDC_INT16; - type_size = sizeof(int16_t); - } - else if (!strcmp(argv[1], "int8")) { - var_type = PDC_INT8; - type_size = sizeof(int8_t); - } - - ndim = atoi(argv[2]); - - dims[0] = rank * 2 + 16; - dims[1] = rank * 3 + 16; - dims[2] = rank * 5 + 16; - my_data_size = 1; - for (i = 0; i < (int)ndim; ++i) { - my_data_size *= dims[i]; - } - - mydata = (char **)malloc(2 * sizeof(char *)); - mydata[0] = (char *)malloc(my_data_size * type_size); - mydata[1] = (char *)malloc(my_data_size * type_size); - - offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - mysize = (uint64_t *)malloc(sizeof(uint64_t)); - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - mysize[0] = my_data_size; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Rank %d Create a container property\n", rank); - } - else { - LOG_ERROR("Rank %d fail to create container property\n", rank); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c"); - cont = PDCcont_create_col(cont_name, cont_prop); - // cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container %s\n", rank, cont_name); - } - else { - LOG_ERROR("Rank %d fail to create container\n", rank); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Rank %d Create an object property\n", rank); - } - else { - LOG_ERROR("Rank %d fail to create object property\n", rank); - ret_value = 1; - } - - ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - PDCprop_set_obj_type(obj_prop, var_type); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj time step"); - ret_value = 1; - } - - // create first object - sprintf(obj_name1, "o1_%d", rank); - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Rank %d Create an object %s\n", rank, obj_name1); - } - else { - LOG_ERROR("Rank %d fail to create object\n", rank); - ret_value = 1; - } - for (i = 0; i < (int)my_data_size; i++) { - for (j = 0; j < (int)type_size; ++j) { - mydata[0][i * type_size + j] = (char)(i * type_size + j + rank); - } - } - for (i = 0; i < (int)my_data_size; i++) { - for (j = 0; j < (int)type_size; ++j) { - mydata[1][i * type_size + j] = (char)(i * type_size + j + rank * 5 + 3); - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * size * 2); - - transfer_request[0] = PDCregion_transfer_create(mydata[0], PDC_WRITE, obj1, local_region, global_region); - if (transfer_request[0] == 0) { - LOG_ERROR("PDCregion_transfer_create failed"); - ret_value = 1; - } - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - if (obj2 > 0) { - LOG_INFO("Rank %d Create an object %s\n", rank, obj_name2); - } - else { - LOG_ERROR("Rank %d fail to create object!\n", rank); - ret_value = 1; - } - - transfer_request[1] = PDCregion_transfer_create(mydata[1], PDC_WRITE, obj2, local_region, global_region); - if (transfer_request[1] == 0) { - LOG_ERROR("PDCregion_transfer_create failed"); - ret_value = 1; - } - ret = PDCregion_transfer_start_all(transfer_request, WRITE_REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait_all(transfer_request, WRITE_REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request[0]); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request[1]); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - // close created objects - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Rank %d fail to close object o1_%d\n", rank, rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o1_%d\n", rank, rank); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Rank %d fail to close object o2_%d\n", rank, rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o2_%d\n", rank, rank); - } -// Wait for all processes to finish their object creation -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - - data_read = (char **)malloc(sizeof(char *) * (size - 1) * 2); - obj1_list = (pdcid_t *)malloc(sizeof(pdcid_t) * (size - 1) * 2); - obj2_list = (pdcid_t *)malloc(sizeof(pdcid_t) * (size - 1) * 2); - - for (i = 1; i < size; ++i) { - target_rank = (rank + i) % size; - sprintf(obj_name1, "o1_%d", target_rank); - obj1_list[i - 1] = PDCobj_open(obj_name1, pdc); - if (obj1_list[i - 1] == 0) { - LOG_ERROR("Rank %d fail to open object %s\n", rank, obj_name1); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Opened object %s\n", rank, obj_name1); - } - - dims[0] = target_rank * 2 + 16; - dims[1] = target_rank * 3 + 16; - dims[2] = target_rank * 5 + 16; - my_data_size = 1; - for (j = 0; j < (int)ndim; ++j) { - my_data_size *= dims[j]; - } - - mysize[0] = my_data_size; - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - data_read[(i - 1)] = (char *)malloc(my_data_size * type_size); - - transfer_request[(i - 1)] = - PDCregion_transfer_create(data_read[(i - 1)], PDC_READ, obj2, local_region, global_region); - if (transfer_request[(i - 1)] == 0) { - LOG_ERROR("PDCregion_transfer_create for read obj2 failed\n"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - sprintf(obj_name2, "o2_%d", target_rank); - obj2_list[i - 1] = PDCobj_open(obj_name2, pdc); - if (obj2_list[i - 1] == 0) { - LOG_ERROR("Rank %d fail to open object %s\n", rank, obj_name2); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object %s\n", rank, obj_name2); - } - - mysize[0] = my_data_size; - local_region = PDCregion_create(1, offset, mysize); - global_region = PDCregion_create(ndim, offset, dims); - data_read[(i - 1) + size - 1] = (char *)malloc(my_data_size * type_size); - - transfer_request[(i - 1) + size - 1] = PDCregion_transfer_create( - data_read[(i - 1) + size - 1], PDC_READ, obj2, local_region, global_region); - if (transfer_request[(i - 1) + size - 1] == 0) { - LOG_ERROR("PDCregion_transfer_create for read obj2 failed\n"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - } - - ret = PDCregion_transfer_start_all(transfer_request, (size - 1) * 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_start_all for region"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait_all(transfer_request, (size - 1) * 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region_transfer_wait_all for region"); - ret_value = 1; - } - - for (i = 1; i < size; ++i) { - target_rank = (rank + i) % size; - ret = PDCregion_transfer_close(transfer_request[(i - 1)]); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - ret = PDCregion_transfer_close(transfer_request[(i - 1) + size - 1]); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_close failed"); - ret_value = 1; - } - - for (j = 0; j < (int)(my_data_size * type_size); ++j) { - if (data_read[(i - 1)][j] != (char)(j + target_rank)) { - LOG_ERROR("rank %d, i = %d, j = %d, wrong value %d!=%d\n", rank, i, j, data_read[(i - 1)][j], - (char)(j + target_rank)); - ret_value = 1; - break; - } - } - - for (j = 0; j < (int)(my_data_size * type_size); ++j) { - if (data_read[(i - 1) + size - 1][j] != (char)(j + target_rank * 5 + 3)) { - LOG_ERROR("rank %d, i = %d, j = %d, wrong value %d!=%d\n", rank, i, j, - data_read[(i - 1) + size - 1][j], (char)(j + target_rank * 5 + 3)); - ret_value = 1; - break; - } - } - free(data_read[(i - 1)]); - free(data_read[(i - 1) + size - 1]); - if (PDCobj_close(obj1_list[i - 1]) < 0) { - LOG_ERROR("Rank %d fail to close object\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object\n", rank); - } - if (PDCobj_close(obj2_list[i - 1]) < 0) { - LOG_ERROR("Rank %d fail to close object\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object\n", rank); - } - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Rank %d fail to close container c\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container c\n", rank); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Rank %d fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object property\n", rank); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Rank %d fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container property\n", rank); - } - - LOG_INFO("total number of read request = %d\n", (size - 1) * 2); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Rank %d fail to close PDC\n", rank); - ret_value = 1; - } - - free(transfer_request); - free(obj1_list); - free(obj2_list); - free(data_read); - free(mydata[0]); - free(mydata[1]); - free(mydata); - free(offset); - free(mysize); -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/obj_tags.c b/src/tests/obj_tags.c deleted file mode 100644 index 97161b84a..000000000 --- a/src/tests/obj_tags.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - perr_t ret; - pdcid_t obj1, obj2; - int ret_value = 0; - - int rank = 0, size = 1; - - size_t ndim = 3; - uint64_t dims[3]; - dims[0] = 64; - dims[1] = 3; - dims[2] = 4; - char tag_value[128], tag_value2[128], *tag_value_ret; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdc_var_type_t value_type; - psize_t value_size; - - strcpy(tag_value, "some tag value"); - strcpy(tag_value2, "some tag value 2 is longer"); - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_ERROR("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_ERROR("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_ERROR("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_ERROR("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_dims(obj_prop, ndim, dims); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj dim"); - ret_value = 1; - } - ret = PDCprop_set_obj_type(obj_prop, PDC_DOUBLE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_ERROR("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_ERROR("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - ret = PDCobj_put_tag(obj1, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at object 1\n"); - ret_value = 1; - } - ret = PDCobj_put_tag(obj1, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at object 1\n"); - ret_value = 1; - } - - ret = PDCobj_put_tag(obj2, "some tag", tag_value, PDC_STRING, strlen(tag_value) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at object 2\n"); - ret_value = 1; - } - - ret = PDCobj_put_tag(obj2, "some tag 2", tag_value2, PDC_STRING, strlen(tag_value2) + 1); - if (ret != SUCCEED) { - LOG_ERROR("Put tag failed at object 2\n"); - ret_value = 1; - } - - ret = PDCobj_get_tag(obj1, "some tag", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at object 1\n"); - ret_value = 1; - } - - if (strcmp(tag_value, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at object 1, expected = %s, get %s\n", tag_value, tag_value_ret); - ret_value = 1; - } - - ret = PDCobj_get_tag(obj1, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at object 1\n"); - ret_value = 1; - } - - if (strcmp(tag_value2, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value 2 at object 1, expected = %s, get %s\n", tag_value2, tag_value_ret); - ret_value = 1; - } - - ret = PDCobj_get_tag(obj2, "some tag", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at object 2\n"); - ret_value = 1; - } - - if (strcmp(tag_value, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value at object 2, expected = %s, get %s\n", tag_value, tag_value_ret); - ret_value = 1; - } - - ret = PDCobj_get_tag(obj2, "some tag 2", (void **)&tag_value_ret, &value_type, &value_size); - if (ret != SUCCEED) { - LOG_ERROR("Get tag failed at object 2\n"); - ret_value = 1; - } - - if (strcmp(tag_value2, tag_value_ret) != 0) { - LOG_ERROR("Wrong tag value 2 at object 2, expected = %s, get %s\n", tag_value2, tag_value_ret); - ret_value = 1; - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1\n"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2\n"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1\n"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1\n"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property\n"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property\n"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/open_obj.c b/src/tests/open_obj.c deleted file mode 100644 index 3558c0ebb..000000000 --- a/src/tests/open_obj.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include "pdc.h" - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop; - pdcid_t obj1, obj2, open11, open12, open21; - int rank = 0, size = 1; - int ret_value = 0; - char cont_name[128], obj_name1[128], obj_name2[128]; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Rank %d Create a container property\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create container property!\n", rank); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Rank %d Create a container c1\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create container!\n", rank); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Rank %d Create an object property\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object property!\n", rank); - ret_value = 1; - } - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Rank %d Create an object o1\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Rank %d Create an object o2\n", rank); - } - else { - LOG_ERROR("Rank %d Fail to create object!\n", rank); - ret_value = 1; - } - - // open first object twice - open11 = PDCobj_open(obj_name1, pdc); - if (open11 == 0) { - LOG_ERROR("Rank %d Fail to open object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o1\n", rank); - } - open12 = PDCobj_open(obj_name1, pdc); - if (open12 == 0) { - LOG_ERROR("Rank %d Fail to open object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o1\n", rank); - } - // open second object once - open21 = PDCobj_open(obj_name2, pdc); - if (open21 == 0) { - LOG_ERROR("Rank %d Fail to open object o2\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Open object o2\n", rank); - } - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Rank %d Fail to close object o1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o1\n", rank); - } - if (PDCobj_close(open11) < 0) { - LOG_ERROR("Rank %d Fail to close object open11\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open11\n", rank); - } - if (PDCobj_close(open12) < 0) { - LOG_ERROR("Rank %d Fail to close object open12\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open12\n", rank); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Rank %d Fail to close object o2\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object o2\n", rank); - } - if (PDCobj_close(open21) < 0) { - LOG_ERROR("Rank %d Fail to close object open21\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object open21\n", rank); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Rank %d Fail to close container c1\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container c1\n", rank); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Rank %d Fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed object property\n", rank); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Rank %d Fail to close property\n", rank); - ret_value = 1; - } - else { - LOG_INFO("Rank %d Successfully closed container property\n", rank); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Rank %d Fail to close PDC\n", rank); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/create_prop.c b/src/tests/prop/create_prop.c similarity index 100% rename from src/tests/create_prop.c rename to src/tests/prop/create_prop.c diff --git a/src/tests/dup_prop.c b/src/tests/prop/dup_prop.c similarity index 61% rename from src/tests/dup_prop.c rename to src/tests/prop/dup_prop.c index 54dcd0e15..ea4af5238 100644 --- a/src/tests/dup_prop.c +++ b/src/tests/prop/dup_prop.c @@ -26,13 +26,14 @@ #include #include #include "pdc.h" +#include "test_helper.h" int main(int argc, char **argv) { pdcid_t pdc, create_prop1, create_prop2, dup_prop; int rank = 0, size = 1; - int ret_value = 0; + int ret_value = TSUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -41,50 +42,27 @@ main(int argc, char **argv) #endif // create a pdc - pdc = PDCinit("pdc"); + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create an object property - create_prop1 = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (create_prop1 <= 0) { - LOG_ERROR("Failed to create"); - ret_value = 1; - } + TASSERT((create_prop1 = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create another object property - create_prop2 = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (create_prop2 <= 0) { - LOG_ERROR("Failed to create"); - ret_value = 1; - } + TASSERT((create_prop2 = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); - dup_prop = PDCprop_obj_dup(create_prop2); - if (PDCprop_close(dup_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed first property\n"); - } + TASSERT((dup_prop = PDCprop_obj_dup(create_prop2)) != 0, "Call to PDCprop_obj_dup succeeded", + "Call to PDCprop_obj_dup failed"); - if (PDCprop_close(create_prop1) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed first property\n"); - } + TASSERT(PDCprop_close(create_prop1) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed for first property"); + TASSERT(PDCprop_close(create_prop2) >= 0, "Call to PDCprop_close succeeded", + "Call to PDCprop_close failed for second property"); - if (PDCprop_close(create_prop2) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed second property\n"); - } // close a pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif diff --git a/src/tests/set_prop.c b/src/tests/prop/set_prop.c similarity index 100% rename from src/tests/set_prop.c rename to src/tests/prop/set_prop.c diff --git a/src/tests/query_data.c b/src/tests/query/query_data.c similarity index 98% rename from src/tests/query_data.c rename to src/tests/query/query_data.c index 22db011a7..03bd169ff 100644 --- a/src/tests/query_data.c +++ b/src/tests/query/query_data.c @@ -97,7 +97,6 @@ main(int argc, char **argv) // Create a object with only rank 0 if (rank == 0) { LOG_INFO("Creating an object with name [%s]\n", obj_name); - fflush(stdout); obj_id = PDCobj_create(cont, obj_name, obj_prop); if (obj_id <= 0) { LOG_ERROR("Error getting an object id of %s from server, exit...\n", "DataServerTestBin"); @@ -112,7 +111,7 @@ main(int argc, char **argv) // Query the created object PDC_Client_query_metadata_name_timestep(obj_name, 0, &metadata, &metadata_server_id); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); ret_value = 1; } @@ -143,7 +142,6 @@ main(int argc, char **argv) if (rank == 0) { LOG_INFO("Time to write data with %d ranks: %.5e\n", size, ht_total_sec); - fflush(stdout); } // Construct query constraints diff --git a/src/tests/query_metadata_agg.c b/src/tests/query/query_metadata_agg.c similarity index 96% rename from src/tests/query_metadata_agg.c rename to src/tests/query/query_metadata_agg.c index a1ac2228c..329cafc83 100644 --- a/src/tests/query_metadata_agg.c +++ b/src/tests/query/query_metadata_agg.c @@ -58,8 +58,6 @@ main(int argc, const char *argv[]) // Create a object with only rank 0 if (rank == 0) { - - /* fflush(stdout); */ test_obj = PDCobj_create(cont, obj_name, obj_prop); if (test_obj <= 0) { LOG_ERROR("Error getting an object id of %s from server, exit...\n", "DataServerTestBin"); @@ -76,7 +74,7 @@ main(int argc, const char *argv[]) pdc_metadata_t *metadata; PDC_Client_query_metadata_name_timestep_agg(obj_name, 0, &metadata); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("Proc %d: Error with metadata!\n", rank); + LOG_ERROR("Proc %d: Error with metadata\n", rank); exit(-1); } diff --git a/src/tests/query_vpic.c b/src/tests/query/query_vpic.c similarity index 95% rename from src/tests/query_vpic.c rename to src/tests/query/query_vpic.c index 35853e995..91173434e 100644 --- a/src/tests/query_vpic.c +++ b/src/tests/query/query_vpic.c @@ -28,7 +28,7 @@ main(void) PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -71,7 +71,7 @@ main(void) LOG_ERROR("Error with result %" PRIu64 ": %.5e\n", i, energy_data[i]); } } - LOG_INFO("Verified: all correct!\n"); + LOG_INFO("Verified: all correct\n"); PDCquery_free_all(q); PDCselection_free(&sel); diff --git a/src/tests/query_vpic_bin_sds1_nopreload.c b/src/tests/query/query_vpic_bin_sds1_nopreload.c similarity index 95% rename from src/tests/query_vpic_bin_sds1_nopreload.c rename to src/tests/query/query_vpic_bin_sds1_nopreload.c index 0e9ba53fa..6d9674c48 100644 --- a/src/tests/query_vpic_bin_sds1_nopreload.c +++ b/src/tests/query/query_vpic_bin_sds1_nopreload.c @@ -30,21 +30,21 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; PDC_Client_query_metadata_name_timestep("y", 0, &y_meta); if (y_meta == NULL || y_meta->obj_id == 0) { - LOG_ERROR("Error with y metadata!\n"); + LOG_ERROR("Error with y metadata\n"); goto done; } y_id = y_meta->obj_id; PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -96,8 +96,6 @@ main(void) gettimeofday(&pdc_timer_end, 0); get_data_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); LOG_INFO("Get data time: %.5e\n", get_data_time); - - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_bin_sds1_preload.c b/src/tests/query/query_vpic_bin_sds1_preload.c similarity index 95% rename from src/tests/query_vpic_bin_sds1_preload.c rename to src/tests/query/query_vpic_bin_sds1_preload.c index 50aa09e1e..45686c9ff 100644 --- a/src/tests/query_vpic_bin_sds1_preload.c +++ b/src/tests/query/query_vpic_bin_sds1_preload.c @@ -35,21 +35,21 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; PDC_Client_query_metadata_name_timestep("y", 0, &y_meta); if (y_meta == NULL || y_meta->obj_id == 0) { - LOG_ERROR("Error with y metadata!\n"); + LOG_ERROR("Error with y metadata\n"); goto done; } y_id = y_meta->obj_id; PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -109,8 +109,6 @@ main(void) gettimeofday(&pdc_timer_end, 0); get_data_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); LOG_INFO("Get data time: %.5e\n", get_data_time); - - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_bin_sds_nopreload.c b/src/tests/query/query_vpic_bin_sds_nopreload.c similarity index 94% rename from src/tests/query_vpic_bin_sds_nopreload.c rename to src/tests/query/query_vpic_bin_sds_nopreload.c index 7738e8e40..9cd9bccf2 100644 --- a/src/tests/query_vpic_bin_sds_nopreload.c +++ b/src/tests/query/query_vpic_bin_sds_nopreload.c @@ -36,7 +36,7 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; @@ -45,7 +45,7 @@ main(void) PDC_Client_query_metadata_name_timestep("y", 0, &y_meta); if (y_meta == NULL || y_meta->obj_id == 0) { - LOG_ERROR("Error with y metadata!\n"); + LOG_ERROR("Error with y metadata\n"); goto done; } y_id = y_meta->obj_id; @@ -54,7 +54,7 @@ main(void) PDC_Client_query_metadata_name_timestep("z", 0, &z_meta); if (z_meta == NULL || z_meta->obj_id == 0) { - LOG_ERROR("Error with z metadata!\n"); + LOG_ERROR("Error with z metadata\n"); goto done; } z_id = z_meta->obj_id; @@ -63,7 +63,7 @@ main(void) PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -115,8 +115,6 @@ main(void) gettimeofday(&pdc_timer_end, 0); get_data_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); LOG_INFO("Get data time: %.5e\n", get_data_time); - - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_bin_sds_preload.c b/src/tests/query/query_vpic_bin_sds_preload.c similarity index 96% rename from src/tests/query_vpic_bin_sds_preload.c rename to src/tests/query/query_vpic_bin_sds_preload.c index 86bb3b55e..21daf9e9a 100644 --- a/src/tests/query_vpic_bin_sds_preload.c +++ b/src/tests/query/query_vpic_bin_sds_preload.c @@ -34,21 +34,21 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; PDC_Client_query_metadata_name_timestep("y", 0, &y_meta); if (y_meta == NULL || y_meta->obj_id == 0) { - LOG_ERROR("Error with y metadata!\n"); + LOG_ERROR("Error with y metadata\n"); goto done; } y_id = y_meta->obj_id; PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -111,8 +111,6 @@ main(void) gettimeofday(&pdc_timer_end, 0); get_data_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); LOG_INFO("Get data time: %.5e\n", get_data_time); - - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_create_data.c b/src/tests/query/query_vpic_create_data.c similarity index 97% rename from src/tests/query_vpic_create_data.c rename to src/tests/query/query_vpic_create_data.c index 71598eaa6..64bbd124d 100644 --- a/src/tests/query_vpic_create_data.c +++ b/src/tests/query/query_vpic_create_data.c @@ -77,8 +77,7 @@ main(int argc, char **argv) MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); #else - LOG_INFO("MPI NOT Enabled!\n"); - fflush(stdout); + LOG_INFO("MPI NOT Enabled\n"); #endif if (argc > 1) @@ -174,7 +173,7 @@ main(int argc, char **argv) ret = PDC_Client_query_metadata_name_timestep(obj_names[i], 0, &obj_metas[i]); #endif if (ret != SUCCEED || obj_metas[i] == NULL || obj_metas[i]->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); exit(-1); } } @@ -202,7 +201,7 @@ main(int argc, char **argv) for (i = 0; i < write_var; i++) { ret = PDC_Client_write(obj_metas[i], &obj_regions[i], mydata[i]); if (ret != SUCCEED) { - LOG_ERROR("Error with PDC_Client_iwrite!\n"); + LOG_ERROR("Error with PDC_Client_iwrite\n"); goto done; } } @@ -216,7 +215,6 @@ main(int argc, char **argv) total_size = nparticles * 4.0 * write_var * size / 1048576.0; if (rank == 0) { LOG_INFO("Write %f MB data with %d ranks\nTotal write time: %.2f\n", total_size, size, write_time); - fflush(stdout); } done: diff --git a/src/tests/query_vpic_exyz_nopreload.c b/src/tests/query/query_vpic_exyz_nopreload.c similarity index 94% rename from src/tests/query_vpic_exyz_nopreload.c rename to src/tests/query/query_vpic_exyz_nopreload.c index 50f1bf301..a5dcb0859 100644 --- a/src/tests/query_vpic_exyz_nopreload.c +++ b/src/tests/query/query_vpic_exyz_nopreload.c @@ -42,13 +42,13 @@ main(int argc, char **argv) z_hi = atof(argv[8]); } else { - LOG_ERROR("Not sufficient query conditions!\n"); + LOG_ERROR("Not sufficient query conditions\n"); } // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; @@ -56,7 +56,7 @@ main(int argc, char **argv) PDC_Client_query_metadata_name_timestep("y", 0, &y_meta); if (y_meta == NULL || y_meta->obj_id == 0) { - LOG_ERROR("Error with y metadata!\n"); + LOG_ERROR("Error with y metadata\n"); goto done; } y_id = y_meta->obj_id; @@ -64,7 +64,7 @@ main(int argc, char **argv) PDC_Client_query_metadata_name_timestep("z", 0, &z_meta); if (z_meta == NULL || z_meta->obj_id == 0) { - LOG_ERROR("Error with z metadata!\n"); + LOG_ERROR("Error with z metadata\n"); goto done; } z_id = z_meta->obj_id; @@ -72,7 +72,7 @@ main(int argc, char **argv) PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -139,7 +139,6 @@ main(int argc, char **argv) break; } } - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_exyz_preload.c b/src/tests/query/query_vpic_exyz_preload.c similarity index 95% rename from src/tests/query_vpic_exyz_preload.c rename to src/tests/query/query_vpic_exyz_preload.c index b0d38208e..9d812a3c9 100644 --- a/src/tests/query_vpic_exyz_preload.c +++ b/src/tests/query/query_vpic_exyz_preload.c @@ -43,7 +43,7 @@ main(int argc, char **argv) z_hi = atof(argv[8]); } else { - LOG_ERROR("Not sufficient query conditions!\n"); + LOG_ERROR("Not sufficient query conditions\n"); } pdc = PDCinit("pdc"); @@ -51,14 +51,14 @@ main(int argc, char **argv) // Query the created object PDC_Client_query_metadata_name_timestep("x", 0, &x_meta); if (x_meta == NULL || x_meta->obj_id == 0) { - LOG_ERROR("Error with x metadata!\n"); + LOG_ERROR("Error with x metadata\n"); goto done; } x_id = x_meta->obj_id; PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -110,8 +110,6 @@ main(int argc, char **argv) gettimeofday(&pdc_timer_end, 0); get_data_time = PDC_get_elapsed_time_double(&pdc_timer_start, &pdc_timer_end); LOG_INFO("Get data time: %.5e\n", get_data_time); - - fflush(stdout); } PDCselection_free(&sel); diff --git a/src/tests/query_vpic_multi.c b/src/tests/query/query_vpic_multi.c similarity index 95% rename from src/tests/query_vpic_multi.c rename to src/tests/query/query_vpic_multi.c index 03991643d..9b67ee671 100644 --- a/src/tests/query_vpic_multi.c +++ b/src/tests/query/query_vpic_multi.c @@ -32,7 +32,7 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -70,9 +70,8 @@ main(void) LOG_ERROR("Error with result %" PRIu64 ": %.5e\n", i, energy_data[i]); } } - LOG_INFO("Verified: all correct!\n"); + LOG_INFO("Verified: all correct\n"); PDCselection_free(&sel); - fflush(stdout); sleep(5); } diff --git a/src/tests/query_vpic_multi_nopreload.c b/src/tests/query/query_vpic_multi_nopreload.c similarity index 95% rename from src/tests/query_vpic_multi_nopreload.c rename to src/tests/query/query_vpic_multi_nopreload.c index 7ed287a2e..fb39198e8 100644 --- a/src/tests/query_vpic_multi_nopreload.c +++ b/src/tests/query/query_vpic_multi_nopreload.c @@ -32,7 +32,7 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -70,9 +70,8 @@ main(void) LOG_ERROR("Error with result %" PRIu64 ": %.5e\n", i, energy_data[i]); } } - LOG_INFO("Verified: all correct!\n"); + LOG_INFO("Verified: all correct\n"); PDCselection_free(&sel); - fflush(stdout); sleep(5); } diff --git a/src/tests/query_vpic_multi_nopreload1.c b/src/tests/query/query_vpic_multi_nopreload1.c similarity index 95% rename from src/tests/query_vpic_multi_nopreload1.c rename to src/tests/query/query_vpic_multi_nopreload1.c index a56e7ba3a..ac78c7ec1 100644 --- a/src/tests/query_vpic_multi_nopreload1.c +++ b/src/tests/query/query_vpic_multi_nopreload1.c @@ -32,7 +32,7 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -70,9 +70,8 @@ main(void) LOG_ERROR("Error with result %" PRIu64 ": %.5e\n", i, energy_data[i]); } } - LOG_INFO("Verified: all correct!\n"); + LOG_INFO("Verified: all correct\n"); PDCselection_free(&sel); - fflush(stdout); sleep(5); } diff --git a/src/tests/query_vpic_multi_preload.c b/src/tests/query/query_vpic_multi_preload.c similarity index 95% rename from src/tests/query_vpic_multi_preload.c rename to src/tests/query/query_vpic_multi_preload.c index 03991643d..9b67ee671 100644 --- a/src/tests/query_vpic_multi_preload.c +++ b/src/tests/query/query_vpic_multi_preload.c @@ -32,7 +32,7 @@ main(void) // Query the created object PDC_Client_query_metadata_name_timestep("Energy", 0, &energy_meta); if (energy_meta == NULL || energy_meta->obj_id == 0) { - LOG_ERROR("Error with energy metadata!\n"); + LOG_ERROR("Error with energy metadata\n"); goto done; } energy_id = energy_meta->obj_id; @@ -70,9 +70,8 @@ main(void) LOG_ERROR("Error with result %" PRIu64 ": %.5e\n", i, energy_data[i]); } } - LOG_INFO("Verified: all correct!\n"); + LOG_INFO("Verified: all correct\n"); PDCselection_free(&sel); - fflush(stdout); sleep(5); } diff --git a/src/tests/read_obj_shared.c b/src/tests/read_obj_shared.c deleted file mode 100644 index f75eb6c51..000000000 --- a/src/tests/read_obj_shared.c +++ /dev/null @@ -1,306 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#include "pdc_timing.h" - -void -print_usage() -{ - LOG_JUST_PRINT("Usage: srun -n ./write_obj obj_name size_MB type\n"); -} - -int -main(int argc, char **argv) -{ - int rank = 0, size = 1; - uint64_t size_MB, size_B; - perr_t ret; - int ndim = 1; - int ret_value = 0; -#ifdef ENABLE_MPI - MPI_Comm comm; -#else - int comm = 1; -#endif - pdcid_t global_obj = 0; - pdcid_t local_region, global_region; - pdcid_t pdc, cont_prop, cont, obj_prop; - - uint64_t *offset, *local_offset; - uint64_t *mysize; - int i, j; - char * mydata; - char obj_name[128], cont_name[128]; - - uint64_t my_data_size; - uint64_t dims[1]; - - pdc_var_type_t var_type = PDC_UNKNOWN; - size_t type_size = 1; - - pdcid_t transfer_request; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); - MPI_Comm_dup(MPI_COMM_WORLD, &comm); -#endif - - if (argc != 4) { - print_usage(); - ret_value = 1; -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; - } - - sprintf(obj_name, "%s", argv[1]); - - size_MB = atoi(argv[2]); - - if (!strcmp(argv[3], "float")) { - var_type = PDC_FLOAT; - type_size = sizeof(float); - } - else if (!strcmp(argv[3], "int")) { - var_type = PDC_INT; - type_size = sizeof(int); - } - else if (!strcmp(argv[3], "double")) { - var_type = PDC_DOUBLE; - type_size = sizeof(double); - } - else if (!strcmp(argv[3], "char")) { - var_type = PDC_CHAR; - type_size = sizeof(char); - } - else if (!strcmp(argv[3], "uint")) { - var_type = PDC_UINT; - type_size = sizeof(unsigned); - } - else if (!strcmp(argv[3], "int64")) { - var_type = PDC_INT64; - type_size = sizeof(int64_t); - } - else if (!strcmp(argv[3], "uint64")) { - var_type = PDC_UINT64; - type_size = sizeof(uint64_t); - } - else if (!strcmp(argv[3], "int16")) { - var_type = PDC_INT16; - type_size = sizeof(int16_t); - } - else if (!strcmp(argv[3], "int8")) { - var_type = PDC_INT8; - type_size = sizeof(int8_t); - } - - LOG_INFO("Writing a %" PRIu64 " MB object [%s] with %d clients.\n", size_MB, obj_name, size); - // size_B = 1; - size_B = size_MB * 1048576; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - /* sprintf(cont_name, "c%d", rank); */ - sprintf(cont_name, "c"); - cont = PDCcont_create_col(cont_name, cont_prop); - if (cont <= 0) { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - dims[0] = size_B; - my_data_size = size_B / size; - LOG_INFO("my_data_size at rank %d is %llu\n", rank, (long long unsigned)my_data_size); - - mydata = (char *)malloc(my_data_size * type_size); - - PDCprop_set_obj_type(obj_prop, var_type); - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // Create a object -#ifdef ENABLE_MPI - global_obj = PDCobj_create_mpi(cont, obj_name, obj_prop, 0, comm); -#else - global_obj = PDCobj_create(cont, obj_name, obj_prop); -#endif - - if (global_obj <= 0) { - LOG_ERROR("Error creating an object [%s], exit...\n", obj_name); - ret_value = 1; - } - - offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - local_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - - offset[0] = rank * my_data_size; - local_offset[0] = 0; - mysize[0] = my_data_size; - LOG_INFO("rank %d offset = %llu, length = %llu, unit size = %ld\n", rank, offset[0], mysize[0], - type_size); - - local_region = PDCregion_create(ndim, local_offset, mysize); - global_region = PDCregion_create(ndim, offset, mysize); - - for (i = 0; i < (int)my_data_size; i++) { - for (j = 0; j < (int)type_size; ++j) { - mydata[i * type_size + j] = i; - } - } - transfer_request = PDCregion_transfer_create(mydata, PDC_WRITE, global_obj, local_region, global_region); - if (transfer_request == 0) { - LOG_ERROR("PDCregion_transfer_create failed\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to PDCregion_transfer_start"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_wait failed"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - - if (PDCobj_close(global_obj) < 0) { - LOG_ERROR("Failed to close global obj"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - - // Now we start the read part for the object just written - offset[0] = rank * my_data_size; - local_offset[0] = 0; - mysize[0] = my_data_size; - LOG_INFO("rank %d offset = %llu, length = %llu, unit size = %ld\n", rank, offset[0], mysize[0], - type_size); - - local_region = PDCregion_create(ndim, local_offset, mysize); - global_region = PDCregion_create(ndim, offset, mysize); - - global_obj = PDCobj_open(obj_name, pdc); - memset(mydata, 0, my_data_size * type_size); - - transfer_request = PDCregion_transfer_create(mydata, PDC_READ, global_obj, local_region, global_region); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_create failed\n"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to PDCregion_transfer_start"); - ret_value = 1; - } - - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("PDCregion_transfer_wait failed"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - - for (i = 0; i < (int)my_data_size; i++) { - - for (j = 0; j < (int)type_size; ++j) { - if (mydata[i * type_size + j] != (char)i) { - LOG_ERROR("Wrong value detected %d != %d!\n", mydata[i * type_size + j], i); - ret_value = 1; - i = my_data_size; - break; - } - } - } - - if (PDCobj_close(global_obj) < 0) { - LOG_ERROR("Failed to close global obj\n"); - ret_value = 1; - } - - if (PDCregion_close(local_region) < 0) { - LOG_ERROR("Failed to close local region\n"); - ret_value = 1; - } - if (PDCregion_close(global_region) < 0) { - LOG_ERROR("Failed to close global region\n"); - ret_value = 1; - } - - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container\n"); - ret_value = 1; - } - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC\n"); - ret_value = 1; - } - free(mydata); - free(offset); - free(local_offset); - free(mysize); - -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - - return ret_value; -} diff --git a/src/tests/create_region.c b/src/tests/region/create_region.c similarity index 100% rename from src/tests/create_region.c rename to src/tests/region/create_region.c diff --git a/src/tests/region_obj_map_overlap_3D.c b/src/tests/region/region_obj_map_overlap_3D.c similarity index 81% rename from src/tests/region_obj_map_overlap_3D.c rename to src/tests/region/region_obj_map_overlap_3D.c index fbc96c9ac..c909754a2 100644 --- a/src/tests/region_obj_map_overlap_3D.c +++ b/src/tests/region/region_obj_map_overlap_3D.c @@ -76,35 +76,35 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_buf(obj_prop, obj_data); @@ -118,20 +118,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -156,11 +156,11 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 8; @@ -179,18 +179,18 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -226,18 +226,18 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local regio\nn"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -267,19 +267,19 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } offset[0] = 0; @@ -315,66 +315,66 @@ main(int argc, char **argv) } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); free(obj_data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region/region_transfer.c b/src/tests/region/region_transfer.c new file mode 100644 index 000000000..2e8d25ac6 --- /dev/null +++ b/src/tests/region/region_transfer.c @@ -0,0 +1,170 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3], local_offset[1]; + uint64_t dims[1]; + local_offset[0] = 0; + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = PDC_SIZE_UNLIMITED; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + // write transfer request + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT((reg = PDCregion_create(1, local_offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, sizeof(int) * BUF_LEN); + + // read transfer request + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + PGOTO_ERROR(FAIL, "Wrong value %d!=%d", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_2D.c b/src/tests/region/region_transfer_2D.c new file mode 100644 index 000000000..4eb7da696 --- /dev/null +++ b/src/tests/region/region_transfer_2D.c @@ -0,0 +1,176 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = 0; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[2]; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 4; + dims[1] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d_2d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to (PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d_2d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d_2d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) { + data[i] = i; + } + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_2D_partial.c b/src/tests/region/region_transfer_2D_partial.c similarity index 99% rename from src/tests/region_transfer_2D_partial.c rename to src/tests/region/region_transfer_2D_partial.c index d10c3ee27..0ea3f1912 100644 --- a/src/tests/region_transfer_2D_partial.c +++ b/src/tests/region/region_transfer_2D_partial.c @@ -190,7 +190,7 @@ main(int argc, char **argv) for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i * 2 + 1) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i * 2 + 1); + LOG_ERROR("Wrong value %d!=%d\n", data_read[i], i * 2 + 1); ret_value = 1; break; } diff --git a/src/tests/region/region_transfer_2D_skewed.c b/src/tests/region/region_transfer_2D_skewed.c new file mode 100644 index 000000000..47e27e969 --- /dev/null +++ b/src/tests/region/region_transfer_2D_skewed.c @@ -0,0 +1,244 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 1024 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i, value; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[2]; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 32; + dims[1] = 32; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // Testing first object + offset[0] = 0; + offset[1] = 0; + offset_length[0] = dims[0] / 4; + offset_length[1] = dims[1]; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = dims[0] / 2; + offset[1] = dims[1] / 2; + offset_length[0] = dims[0] / 2; + offset_length[1] = dims[1] / 2; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset[1] = 0; + offset_length[0] = dims[0] / 4; + offset_length[1] = dims[1]; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = dims[0] / 2; + offset[1] = dims[1] / 2; + offset_length[0] = dims[0] / 2; + offset_length[1] = dims[1] / 2; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN / 4; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // Testing second object + memset(data_read, 0, sizeof(int) * BUF_LEN); + offset[0] = dims[0] / 2; + offset[1] = dims[1] / 2; + offset_length[0] = dims[0] / 2; + offset_length[1] = dims[1] / 2; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = dims[0] / 2; + offset[1] = dims[1] / 2; + offset_length[0] = dims[0] / 2; + offset_length[1] = dims[0] / 2; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj2, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset[1] = 0; + offset_length[0] = dims[0] / 4; + offset_length[1] = dims[1]; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = dims[0] / 2; + offset[1] = dims[1] / 2; + offset_length[0] = dims[0] / 2; + offset_length[1] = dims[1] / 2; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj2, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN / 4; ++i) { + value = (BUF_LEN / 2 + offset_length[1]) + (i / offset_length[1]) * dims[1] + i % offset_length[1]; + if (data_read[i] != value) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[i], value); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_3D.c b/src/tests/region/region_transfer_3D.c new file mode 100644 index 000000000..0622714d3 --- /dev/null +++ b/src/tests/region/region_transfer_3D.c @@ -0,0 +1,176 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 256 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1; + char cont_name[128], obj_name1[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = 0; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[3]; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 16; + dims[1] = 4; + dims[2] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = BUF_LEN / 16; + offset_length[1] = 4; + offset_length[2] = 4; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) { + data[i] = i; + } + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = BUF_LEN / 16; + offset_length[1] = 4; + offset_length[2] = 4; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[i], i); + } + + // close regions + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_3D_partial.c b/src/tests/region/region_transfer_3D_partial.c similarity index 96% rename from src/tests/region_transfer_3D_partial.c rename to src/tests/region/region_transfer_3D_partial.c index 007e48027..7a859b856 100644 --- a/src/tests/region_transfer_3D_partial.c +++ b/src/tests/region/region_transfer_3D_partial.c @@ -75,7 +75,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -94,7 +94,7 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -126,7 +126,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -188,7 +188,7 @@ main(int argc, char **argv) for (i = 0; i < BUF_LEN / 8; ++i) { if (data_read[i] != (BUF_LEN / 8 + i) * 4 + 3) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], (BUF_LEN / 8 + i) * 4 + 3); + LOG_ERROR("Wrong value %d!=%d\n", data_read[i], (BUF_LEN / 8 + i) * 4 + 3); ret_value = 1; break; } @@ -243,7 +243,7 @@ main(int argc, char **argv) } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { diff --git a/src/tests/region_transfer_3D_skewed.c b/src/tests/region/region_transfer_3D_skewed.c similarity index 97% rename from src/tests/region_transfer_3D_skewed.c rename to src/tests/region/region_transfer_3D_skewed.c index 4c0a56b89..cf833f09a 100644 --- a/src/tests/region_transfer_3D_skewed.c +++ b/src/tests/region/region_transfer_3D_skewed.c @@ -110,7 +110,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -120,7 +120,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // Testing the first object @@ -194,7 +194,7 @@ main(int argc, char **argv) ((i % (offset_length[1] * offset_length[2])) / offset_length[2]) * dims[2] + i % offset_length[2]; if (data_read[value] != i) { - LOG_ERROR("wrong value %d!=%d, value = %d\n", data_read[value], i, (int)value); + LOG_ERROR("Wrong value %d!=%d, value = %d\n", data_read[value], i, (int)value); ret_value = 1; break; } @@ -282,7 +282,7 @@ main(int argc, char **argv) ((i % (offset_length[1] * offset_length[2])) / offset_length[2]) * dims[2] + i % offset_length[2]; if (data_read[i] != (int)value) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], (int)value); + LOG_ERROR("Wrong value %d!=%d\n", data_read[i], (int)value); ret_value = 1; break; } @@ -328,7 +328,7 @@ main(int argc, char **argv) } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { diff --git a/src/tests/region_transfer_all.c b/src/tests/region/region_transfer_all.c similarity index 84% rename from src/tests/region_transfer_all.c rename to src/tests/region/region_transfer_all.c index 7a384dc9e..85cee2081 100644 --- a/src/tests/region_transfer_all.c +++ b/src/tests/region/region_transfer_all.c @@ -88,7 +88,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -98,7 +98,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -107,13 +107,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, 1, dims); @@ -156,7 +156,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -168,7 +168,7 @@ main(int argc, char **argv) LOG_INFO("Create local region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } @@ -179,7 +179,7 @@ main(int argc, char **argv) LOG_INFO("Create global region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (j = 0; j < OBJ_NUM; ++j) { @@ -196,7 +196,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -204,7 +204,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -212,7 +212,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -225,7 +225,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -235,7 +235,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -243,24 +243,24 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -277,7 +277,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -285,7 +285,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -293,7 +293,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -306,7 +306,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -316,7 +316,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -324,7 +324,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -332,11 +332,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -351,44 +351,44 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data[0]); free(data_read[0]); @@ -398,7 +398,7 @@ main(int argc, char **argv) free(transfer_request); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region/region_transfer_all_2D.c b/src/tests/region/region_transfer_all_2D.c new file mode 100644 index 000000000..6ce4899c6 --- /dev/null +++ b/src/tests/region/region_transfer_all_2D.c @@ -0,0 +1,315 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 256 +#define OBJ_NUM 13 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j; + int ret_value = TSUCCEED; + int **data, **data_read; + + uint64_t offset[2], offset_length[2]; + uint64_t dims[2]; + int start_method = 1; + int wait_method = 1; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + if (argc >= 2) { + start_method = atoi(argv[1]); + } + if (argc >= 3) { + wait_method = atoi(argv[2]); + } + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + dims[0] = BUF_LEN / 4; + dims[1] = 4; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i; + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = BUF_LEN / 4; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data[0]); + free(data_read[0]); + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_all_3D.c b/src/tests/region/region_transfer_all_3D.c new file mode 100644 index 000000000..2c1a14968 --- /dev/null +++ b/src/tests/region/region_transfer_all_3D.c @@ -0,0 +1,291 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 +#define OBJ_NUM 17 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j; + int ret_value = TSUCCEED; + int **data, **data_read; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[3]; + + int start_method = 1; + int wait_method = 1; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + if (argc >= 2) { + start_method = atoi(argv[1]); + } + if (argc >= 3) { + wait_method = atoi(argv[2]); + } + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + dims[0] = BUF_LEN / 16; + dims[1] = 4; + dims[2] = 4; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = BUF_LEN / 16; + offset_length[1] = 4; + offset_length[2] = 4; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i; + } + + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + for (i = 0; i < OBJ_NUM; i += 2) { + TASSERT(PDCregion_transfer_wait(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_wait succeeded", "Call to PDCregion_transfer_wait failed"); + } + for (i = 1; i < OBJ_NUM; i += 2) { + TASSERT(PDCregion_transfer_wait(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_wait succeeded", "Call to PDCregion_transfer_wait failed"); + } + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = BUF_LEN / 16; + offset_length[1] = 4; + offset_length[2] = 4; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + for (i = 0; i < OBJ_NUM; i += 2) { + TASSERT(PDCregion_transfer_wait(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_wait succeeded", "Call to PDCregion_transfer_wait failed"); + } + for (i = 1; i < OBJ_NUM; i += 2) { + TASSERT(PDCregion_transfer_wait(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_wait succeeded", "Call to PDCregion_transfer_wait failed"); + } + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data[0]); + free(data_read[0]); + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_all_append.c b/src/tests/region/region_transfer_all_append.c new file mode 100644 index 000000000..dbbec89f4 --- /dev/null +++ b/src/tests/region/region_transfer_all_append.c @@ -0,0 +1,574 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 64 +#define OBJ_NUM 17 +#define REQ_SIZE 8 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j; + int ret_value = TSUCCEED; + + uint64_t offset[1], offset_length[1]; + uint64_t dims[1]; + + int **data, **data_read; + int start_method = 1; + int wait_method = 1; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + if (argc >= 2) { + start_method = atoi(argv[1]); + } + if (argc >= 3) { + wait_method = atoi(argv[2]); + } + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + if (rank == 0) + LOG_INFO("testing region_transfer_all_append, start_method = %d, wait_method = %d\n", start_method, + wait_method); + + dims[0] = BUF_LEN; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i; + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = j * (BUF_LEN / REQ_SIZE); + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = j * (BUF_LEN / REQ_SIZE); + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + if (rank == 0) + LOG_INFO("Test 1 done\n"); + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); + } + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + // Now we rewrite the whole object and check its values. + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i + 84441111 * j + 3; + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close objects + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i + 84441111 * j + 3) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], 84441111 * j + 3); + } + } + + // close container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_all_append_2D.c b/src/tests/region/region_transfer_all_append_2D.c new file mode 100644 index 000000000..d69d59f6a --- /dev/null +++ b/src/tests/region/region_transfer_all_append_2D.c @@ -0,0 +1,586 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define DIM0 77 +#define DIM1 32 +#define BUF_LEN (DIM0 * DIM1) +#define OBJ_NUM 1 +#define REQ_SIZE 8 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j, x, y, s, b; + int ret_value = TSUCCEED; + + uint64_t offset[2], offset_length[2]; + uint64_t dims[2]; + + int **data, **data_read; + int start_method = 1; + int wait_method = 1; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + if (argc >= 2) { + start_method = atoi(argv[1]); + } + if (argc >= 3) { + wait_method = atoi(argv[2]); + } + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + dims[0] = DIM0; + dims[1] = DIM1; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i; + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = 0; + offset_length[0] = DIM0; + offset[1] = j * DIM1 / REQ_SIZE; + offset_length[1] = DIM1 / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = 0; + offset_length[0] = DIM0; + offset[1] = j * DIM1 / REQ_SIZE; + offset_length[1] = DIM1 / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = DIM0; + offset_length[1] = DIM1; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + x = i % DIM1; + y = i / DIM1; + s = DIM1 / REQ_SIZE; + b = s * DIM0; + if (data_read[j][i] != (x / s) * b + y * s + x % s) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], (x / s) * b + y * s + x % s); + } + } + + // Now we rewrite the whole object and check its values. + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i + 84441111 * j + 3; + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = DIM0; + offset_length[1] = DIM1; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset_length[0] = DIM0; + offset_length[1] = DIM1; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i + 84441111 * j + 3) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], 84441111 * j + 3); + } + } + + // close container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_all_append_3D.c b/src/tests/region/region_transfer_all_append_3D.c new file mode 100644 index 000000000..e50bcd362 --- /dev/null +++ b/src/tests/region/region_transfer_all_append_3D.c @@ -0,0 +1,607 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define DIM0 34 +#define DIM1 13 +#define DIM2 24 +#define BUF_LEN (DIM0 * DIM1 * DIM2) +#define OBJ_NUM 11 +// DIM2 must divide REQ_SIZE +#define REQ_SIZE 8 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j, x, y, z, s, b; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[3]; + + int **data, **data_read; + int start_method = 1; + int wait_method = 1; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + if (argc >= 2) { + start_method = atoi(argv[1]); + } + if (argc >= 3) { + wait_method = atoi(argv[2]); + } + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + dims[0] = DIM0; + dims[1] = DIM1; + dims[2] = DIM2; + + // create a pdc + pdc = PDCinit("pdc"); + LOG_INFO("create a new pdc\n"); + + // create a container property + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i; + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = 0; + offset_length[0] = DIM0; + offset[1] = 0; + offset_length[1] = DIM1; + offset[2] = j * DIM2 / REQ_SIZE; + offset_length[2] = DIM2 / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / REQ_SIZE; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + for (j = 0; j < REQ_SIZE; ++j) { + offset[0] = 0; + offset_length[0] = DIM0; + offset[1] = 0; + offset_length[1] = DIM1; + offset[2] = j * DIM2 / REQ_SIZE; + offset_length[2] = DIM2 / REQ_SIZE; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( + data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", + "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + } + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); + int request_size = 0; + for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + for (j = 0; j < REQ_SIZE; ++j) { + TASSERT(PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], i); + } + } + + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = DIM0; + offset[1] = 0; + offset_length[1] = DIM1; + offset[2] = 0; + offset_length[2] = DIM2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + x = i % DIM2; + y = (i % (DIM1 * DIM2)) / DIM2; + z = i / (DIM1 * DIM2); + s = DIM2 / REQ_SIZE; + b = s * DIM0 * DIM1; + if (data_read[j][i] != (x / s) * b + z * s * DIM1 + y * s + x % s) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], + (x / s) * b + z * s * DIM1 + y * s + x % s); + } + } + + // Now we rewrite the whole object and check its values. + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) + data[j][i] = i + 84441111 * j + 3; + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = DIM0; + offset_length[1] = DIM1; + offset_length[2] = DIM2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // open object + for (i = 0; i < OBJ_NUM; ++i) { + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_open(obj_name, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset[1] = 0; + offset[2] = 0; + offset_length[0] = DIM0; + offset_length[1] = DIM1; + offset_length[2] = DIM2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + if (start_method) { + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_start_all succeeded", + "Call to PDCregion_transfer_start_all failed"); + } + else { + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_start(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_start succeeded", "Call to PDCregion_transfer_start failed"); + } + } + if (wait_method == 1) { + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + } + else if (wait_method == 0) { + pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + int request_size = 0; + for (i = 0; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + request_size = 0; + for (i = 1; i < OBJ_NUM; i += 2) { + transfer_request_all[request_size] = transfer_request[i]; + request_size++; + } + + TASSERT(PDCregion_transfer_wait_all(transfer_request_all, request_size) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", + "Call to PDCregion_transfer_wait_all failed"); + + free(transfer_request_all); + } + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i + 84441111 * j + 3) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[j][i], 84441111 * j + 3); + } + } + + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_all_fold.c b/src/tests/region/region_transfer_all_fold.c similarity index 100% rename from src/tests/region_transfer_all_fold.c rename to src/tests/region/region_transfer_all_fold.c diff --git a/src/tests/region/region_transfer_all_split_wait.c b/src/tests/region/region_transfer_all_split_wait.c new file mode 100644 index 000000000..b583a20c2 --- /dev/null +++ b/src/tests/region/region_transfer_all_split_wait.c @@ -0,0 +1,245 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 4096 +#define OBJ_NUM 20 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t *obj; + char cont_name[128], obj_name[128]; + pdcid_t *transfer_request; + + int rank = 0, size = 1, i, j; + int ret_value = 0; + int **data, **data_read; + + uint64_t offset[1], offset_length[1]; + uint64_t dims[1]; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + data = (int **)malloc(sizeof(int *) * OBJ_NUM); + data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); + data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); + + for (i = 1; i < OBJ_NUM; ++i) { + data[i] = data[i - 1] + BUF_LEN; + data_read[i] = data_read[i - 1] + BUF_LEN; + } + + dims[0] = BUF_LEN; + + // create a pdc + pdc = PDCinit("pdc"); + LOG_INFO("create a new pdc\n"); + + // create a container property + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create many objects + obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + for (i = 0; i < OBJ_NUM; ++i) { + switch (i % 4) { + case 0: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 1: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + case 2: { + TASSERT(PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL) >= 0, + "Call to PDCprop_set_obj_transfer_region_type succeeded", + "Call to PDCprop_set_obj_transfer_region_type failed"); + break; + } + default: { + break; + } + } + sprintf(obj_name, "o%d_%d", i, rank); + TASSERT((obj[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + } + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + data[j][i] = i; + } + } + transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); + + // Place a transfer request for every objects + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_start_all(transfer_request + OBJ_NUM / 2, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request + OBJ_NUM / 4, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM / 4) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request + OBJ_NUM * 3 / 4, OBJ_NUM / 4) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, + "Call to PDCregion_transfer_close succeeded", "Call to PDCregion_transfer_close failed"); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + memset(data_read[i], 0, sizeof(int) * BUF_LEN); + TASSERT((transfer_request[i] = + PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + } + + TASSERT(PDCregion_transfer_start_all(transfer_request, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_start_all(transfer_request + OBJ_NUM / 2, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_start_all succeeded", "Call to PDCregion_transfer_start_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request + OBJ_NUM / 4, OBJ_NUM / 2) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request, OBJ_NUM / 4) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + TASSERT(PDCregion_transfer_wait_all(transfer_request + OBJ_NUM * 3 / 4, OBJ_NUM / 4) >= 0, + "Call to PDCregion_transfer_wait_all succeeded", "Call to PDCregion_transfer_wait_all failed"); + + for (i = 0; i < OBJ_NUM; ++i) { + TASSERT(PDCregion_transfer_close(transfer_request[i]) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + } + + // close object + for (i = 0; i < OBJ_NUM; ++i) + TASSERT(PDCobj_close(obj[i]) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + + // Check if data written previously has been correctly read. + for (j = 0; j < OBJ_NUM; ++j) { + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[j][i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[j][i], i); + } + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data[0]); + free(data_read[0]); + free(data); + free(data_read); + free(obj); + free(transfer_request); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_all_test.c b/src/tests/region/region_transfer_all_test.c similarity index 81% rename from src/tests/region_transfer_all_test.c rename to src/tests/region/region_transfer_all_test.c index c40447b71..f3a1b4d36 100644 --- a/src/tests/region_transfer_all_test.c +++ b/src/tests/region/region_transfer_all_test.c @@ -78,7 +78,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -88,7 +88,7 @@ main(int argc, char **argv) LOG_ERROR("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -97,13 +97,13 @@ main(int argc, char **argv) LOG_ERROR("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, 1, dims); @@ -121,7 +121,7 @@ main(int argc, char **argv) LOG_ERROR("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -133,7 +133,7 @@ main(int argc, char **argv) LOG_INFO("Create local region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } @@ -144,7 +144,7 @@ main(int argc, char **argv) LOG_ERROR("Create global region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (j = 0; j < OBJ_NUM; ++j) { @@ -161,18 +161,18 @@ main(int argc, char **argv) ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -184,72 +184,72 @@ main(int argc, char **argv) ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - zv("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data[0]); free(data_read[0]); @@ -259,11 +259,11 @@ main(int argc, char **argv) free(transfer_request); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed PDC"); + LOG_INFO("Successfully closed PDC\n"); } #ifdef ENABLE_MPI MPI_Finalize(); diff --git a/src/tests/region/region_transfer_merge.c b/src/tests/region/region_transfer_merge.c new file mode 100644 index 000000000..df1a2b6e6 --- /dev/null +++ b/src/tests/region/region_transfer_merge.c @@ -0,0 +1,194 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[1]; + + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 2; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = BUF_LEN / 2; + offset_length[0] = BUF_LEN / 2; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = + PDCregion_transfer_create(data + offset[0], PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_overlap.c b/src/tests/region/region_transfer_overlap.c similarity index 77% rename from src/tests/region_transfer_overlap.c rename to src/tests/region/region_transfer_overlap.c index 3facad7cf..a179eb5fa 100644 --- a/src/tests/region_transfer_overlap.c +++ b/src/tests/region/region_transfer_overlap.c @@ -71,35 +71,35 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, 1, dims); @@ -112,20 +112,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -146,11 +146,11 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 2; @@ -165,18 +165,18 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -197,26 +197,26 @@ main(int argc, char **argv) for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN / 4) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i + BUF_LEN / 4); + LOG_ERROR("Wrong value %d!=%d\n", data_read[i], i + BUF_LEN / 4); ret_value = 1; break; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Write the same object again. This time we test writing a region contained in the previously written @@ -240,19 +240,19 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Read the region that has been just written. offset[0] = 0; @@ -273,71 +273,71 @@ main(int argc, char **argv) for (i = 0; i < BUF_LEN / 2; ++i) { if (data_read[i] != i + BUF_LEN / 8 + BUF_LEN) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i + BUF_LEN / 8 + BUF_LEN); + LOG_ERROR("wrong value %d!=%d\n", data_read[i], i + BUF_LEN / 8 + BUF_LEN); ret_value = 1; break; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region/region_transfer_overlap_2D.c b/src/tests/region/region_transfer_overlap_2D.c new file mode 100644 index 000000000..cc610dbf5 --- /dev/null +++ b/src/tests/region/region_transfer_overlap_2D.c @@ -0,0 +1,270 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[2]; + + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 4; + dims[1] = 4; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + offset[0] = BUF_LEN / 8; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = + PDCregion_transfer_create(data + BUF_LEN / 2, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = BUF_LEN / 16; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < BUF_LEN / 2; ++i) { + if (data_read[i] != i + BUF_LEN / 4) + TGOTO_ERROR(TFAIL, "i = %d, wrong value %d!=%d", i, data_read[i], i + BUF_LEN / 4); + } + + if (ret_value == 0) + LOG_INFO("Successfuly verified read 0\n"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // Partial write for a region that has been written before + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = BUF_LEN / 32; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i + BUF_LEN; + + TASSERT((transfer_request = + PDCregion_transfer_create(data + BUF_LEN / 8, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = BUF_LEN / 32; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < BUF_LEN / 2; ++i) { + if (data_read[i] != i + BUF_LEN + BUF_LEN / 8) + TGOTO_ERROR(TFAIL, "i = %d, wrong value %d!=%d", i, data_read[i], i + BUF_LEN + BUF_LEN / 8); + } + + if (ret_value == 0) + LOG_INFO("Successfuly verified read 1\n"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region/region_transfer_overlap_3D.c b/src/tests/region/region_transfer_overlap_3D.c new file mode 100644 index 000000000..6447ccae0 --- /dev/null +++ b/src/tests/region/region_transfer_overlap_3D.c @@ -0,0 +1,284 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[3]; + + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN / 4; + dims[1] = 2; + dims[2] = 2; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = BUF_LEN / 8; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = + PDCregion_transfer_create(data + BUF_LEN / 2, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = BUF_LEN / 16; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < BUF_LEN / 2; ++i) { + if (data_read[i] != i + BUF_LEN / 4) + TGOTO_ERROR(TFAIL, "i = %d, wrong value %d!=%d", i, data_read[i], i + BUF_LEN / 4); + } + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = BUF_LEN / 32; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i + BUF_LEN; + + TASSERT((transfer_request = + PDCregion_transfer_create(data + BUF_LEN / 8, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + offset[0] = BUF_LEN / 32; + offset_length[0] = BUF_LEN / 8; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + for (i = 0; i < BUF_LEN / 2; ++i) { + if (data_read[i] != i + BUF_LEN / 8 + BUF_LEN) + TGOTO_ERROR(TFAIL, "i = %d, wrong value %d!=%d", i, data_read[i], i + BUF_LEN / 8 + BUF_LEN); + } + + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + + free(data); + free(data_read); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_partial.c b/src/tests/region/region_transfer_partial.c similarity index 94% rename from src/tests/region_transfer_partial.c rename to src/tests/region/region_transfer_partial.c index 9519135b1..071122ccc 100644 --- a/src/tests/region_transfer_partial.c +++ b/src/tests/region/region_transfer_partial.c @@ -73,7 +73,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -83,7 +83,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -92,13 +92,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, 1, dims); @@ -114,7 +114,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -124,7 +124,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -225,7 +225,7 @@ main(int argc, char **argv) } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { @@ -233,7 +233,7 @@ main(int argc, char **argv) } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { diff --git a/src/tests/region_transfer_query.c b/src/tests/region/region_transfer_query.c similarity index 83% rename from src/tests/region_transfer_query.c rename to src/tests/region/region_transfer_query.c index 017f8c0cc..a9a762015 100644 --- a/src/tests/region_transfer_query.c +++ b/src/tests/region/region_transfer_query.c @@ -74,7 +74,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -84,7 +84,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -93,7 +93,7 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -115,7 +115,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -126,7 +126,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(1, offset, offset_length); @@ -134,7 +134,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { @@ -145,17 +145,17 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } @@ -181,58 +181,58 @@ main(int argc, char **argv) PDCselection_free(&sel); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj_id) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_transfer_read_only.c b/src/tests/region/region_transfer_read_only.c similarity index 78% rename from src/tests/region_transfer_read_only.c rename to src/tests/region/region_transfer_read_only.c index feef7707a..d9324d712 100644 --- a/src/tests/region_transfer_read_only.c +++ b/src/tests/region/region_transfer_read_only.c @@ -65,7 +65,7 @@ main(int argc, char **argv) LOG_INFO("Open a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } @@ -76,7 +76,7 @@ main(int argc, char **argv) LOG_INFO("Open an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -86,7 +86,7 @@ main(int argc, char **argv) LOG_INFO("Open an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create third object @@ -96,7 +96,7 @@ main(int argc, char **argv) LOG_INFO("Open an object o3\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -109,12 +109,12 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } // Check if data written previously has been correctly read. @@ -127,23 +127,23 @@ main(int argc, char **argv) } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Read the second object @@ -156,7 +156,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(2, offset, offset_length); @@ -164,7 +164,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } memset(data_read, 0, BUF_LEN); @@ -172,12 +172,12 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } // Check if data written previously has been correctly read. @@ -190,23 +190,23 @@ main(int argc, char **argv) } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Read the third object @@ -221,7 +221,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(3, offset, offset_length); @@ -229,7 +229,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } memset(data_read, 0, BUF_LEN); @@ -237,12 +237,12 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } // Check if data written previously has been correctly read. @@ -255,58 +255,58 @@ main(int argc, char **argv) } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } if (PDCobj_close(obj3) < 0) { - LOG_ERROR("Failed to close object o3"); + LOG_ERROR("Failed to close object o3\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o3"); + LOG_INFO("Successfully closed object o3\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } free(data_read); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_transfer_set_dims.c b/src/tests/region/region_transfer_set_dims.c similarity index 83% rename from src/tests/region_transfer_set_dims.c rename to src/tests/region/region_transfer_set_dims.c index d397006c8..802459227 100644 --- a/src/tests/region_transfer_set_dims.c +++ b/src/tests/region/region_transfer_set_dims.c @@ -89,7 +89,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -99,7 +99,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -108,7 +108,7 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -157,7 +157,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -169,7 +169,7 @@ main(int argc, char **argv) LOG_INFO("Create local region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } @@ -180,7 +180,7 @@ main(int argc, char **argv) LOG_INFO("Create global region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (j = 0; j < OBJ_NUM; ++j) { @@ -197,7 +197,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -205,7 +205,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -213,7 +213,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -226,7 +226,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -236,7 +236,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -244,24 +244,24 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -278,7 +278,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -286,7 +286,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -294,7 +294,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -307,7 +307,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -317,7 +317,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -325,7 +325,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -341,19 +341,19 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } dims[0] = BUF_LEN * 2; @@ -386,25 +386,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -412,7 +412,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -420,7 +420,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -433,7 +433,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -443,7 +443,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -451,7 +451,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -469,25 +469,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -495,7 +495,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -503,7 +503,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -516,7 +516,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -526,7 +526,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -534,7 +534,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -542,11 +542,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -569,7 +569,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -610,25 +610,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -636,7 +636,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -644,7 +644,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -657,7 +657,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -667,7 +667,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -675,7 +675,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -683,11 +683,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -705,27 +705,27 @@ main(int argc, char **argv) // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data[0]); free(data_read[0]); @@ -735,7 +735,7 @@ main(int argc, char **argv) free(transfer_request); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_transfer_set_dims_2D.c b/src/tests/region/region_transfer_set_dims_2D.c similarity index 83% rename from src/tests/region_transfer_set_dims_2D.c rename to src/tests/region/region_transfer_set_dims_2D.c index 350f40852..e48a09444 100644 --- a/src/tests/region_transfer_set_dims_2D.c +++ b/src/tests/region/region_transfer_set_dims_2D.c @@ -92,7 +92,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -102,7 +102,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -111,13 +111,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, ndim, dims); @@ -150,7 +150,7 @@ main(int argc, char **argv) } } if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } @@ -160,7 +160,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -174,7 +174,7 @@ main(int argc, char **argv) LOG_INFO("Create local region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } @@ -187,7 +187,7 @@ main(int argc, char **argv) LOG_INFO("Create global region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (j = 0; j < OBJ_NUM; ++j) { @@ -204,7 +204,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -212,7 +212,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -220,7 +220,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -233,7 +233,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -243,7 +243,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -251,24 +251,24 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -285,7 +285,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -293,7 +293,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -301,7 +301,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -314,7 +314,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -324,7 +324,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -332,7 +332,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -348,19 +348,19 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } dims[0] = DIM0 * 2; @@ -373,7 +373,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { PDCobj_get_dims(obj[i], &ndim, &new_dims); if (new_dims[0] != DIM0 * 2 || new_dims[1] != DIM1) { - LOG_ERROR("wrong dimension reported after reset for rank %d\n", rank); + LOG_ERROR("Wrong dimension reported after reset for rank %d\n", rank); ret_value = 1; } free(new_dims); @@ -394,25 +394,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -420,7 +420,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -428,7 +428,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -441,7 +441,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -451,7 +451,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -459,7 +459,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -477,25 +477,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -503,7 +503,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -511,7 +511,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -524,7 +524,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -534,7 +534,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -542,7 +542,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -550,11 +550,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -577,7 +577,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -619,25 +619,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -645,7 +645,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -653,7 +653,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -666,7 +666,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -676,7 +676,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -684,7 +684,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -692,11 +692,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -715,27 +715,27 @@ main(int argc, char **argv) // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data[0]); free(data_read[0]); @@ -745,7 +745,7 @@ main(int argc, char **argv) free(transfer_request); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_transfer_set_dims_3D.c b/src/tests/region/region_transfer_set_dims_3D.c similarity index 84% rename from src/tests/region_transfer_set_dims_3D.c rename to src/tests/region/region_transfer_set_dims_3D.c index dff1e7bb9..289ca716f 100644 --- a/src/tests/region_transfer_set_dims_3D.c +++ b/src/tests/region/region_transfer_set_dims_3D.c @@ -94,7 +94,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -104,7 +104,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -113,13 +113,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_dims(obj_prop, ndim, dims); @@ -152,7 +152,7 @@ main(int argc, char **argv) } } if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } @@ -162,7 +162,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -178,7 +178,7 @@ main(int argc, char **argv) LOG_INFO("Create local region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } @@ -193,7 +193,7 @@ main(int argc, char **argv) LOG_INFO("Create global region\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (j = 0; j < OBJ_NUM; ++j) { @@ -210,7 +210,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -218,7 +218,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -226,7 +226,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -239,7 +239,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -249,7 +249,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -257,24 +257,24 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -293,7 +293,7 @@ main(int argc, char **argv) if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -301,7 +301,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -309,7 +309,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -322,7 +322,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -332,7 +332,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -340,7 +340,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -356,19 +356,19 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } dims[0] = DIM0 * 2; @@ -405,25 +405,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -431,7 +431,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -439,7 +439,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -452,7 +452,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -462,7 +462,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -470,7 +470,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -490,25 +490,25 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -516,7 +516,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -524,7 +524,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -537,7 +537,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -547,7 +547,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -555,7 +555,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -563,11 +563,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -590,7 +590,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } } @@ -635,19 +635,19 @@ main(int argc, char **argv) } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } if (start_method) { @@ -661,7 +661,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_start(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } } @@ -669,7 +669,7 @@ main(int argc, char **argv) if (wait_method == 1) { ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } } @@ -682,7 +682,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } request_size = 0; @@ -692,7 +692,7 @@ main(int argc, char **argv) } ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } free(transfer_request_all); @@ -700,7 +700,7 @@ main(int argc, char **argv) for (i = 0; i < OBJ_NUM; ++i) { ret = PDCregion_transfer_close(transfer_request[i]); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } } @@ -708,11 +708,11 @@ main(int argc, char **argv) // close object for (i = 0; i < OBJ_NUM; ++i) { if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } } @@ -731,27 +731,27 @@ main(int argc, char **argv) // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data[0]); free(data_read[0]); @@ -761,7 +761,7 @@ main(int argc, char **argv) free(transfer_request); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region_transfer_skewed.c b/src/tests/region/region_transfer_skewed.c similarity index 80% rename from src/tests/region_transfer_skewed.c rename to src/tests/region/region_transfer_skewed.c index c045d715d..1a2926aec 100644 --- a/src/tests/region_transfer_skewed.c +++ b/src/tests/region/region_transfer_skewed.c @@ -64,29 +64,29 @@ main(int argc, char **argv) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) { - LOG_INFO("Create a container property"); + LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container sprintf(cont_name, "c%d", rank); cont = PDCcont_create(cont_name, cont_prop); if (cont > 0) { - LOG_INFO("Create a container c1"); + LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop > 0) { - LOG_INFO("Create an object property"); + LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } @@ -105,20 +105,20 @@ main(int argc, char **argv) sprintf(obj_name1, "o1_%d", rank); obj1 = PDCobj_create(cont, obj_name1, obj_prop); if (obj1 > 0) { - LOG_INFO("Create an object o1"); + LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object sprintf(obj_name2, "o2_%d", rank); obj2 = PDCobj_create(cont, obj_name2, obj_prop); if (obj2 > 0) { - LOG_INFO("Create an object o2"); + LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -140,19 +140,19 @@ main(int argc, char **argv) PDCregion_transfer_close(transfer_request); if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = BUF_LEN / 2; @@ -178,59 +178,59 @@ main(int argc, char **argv) } } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully local region"); + LOG_INFO("successfully local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); free(data_read); diff --git a/src/tests/region/region_transfer_status.c b/src/tests/region/region_transfer_status.c new file mode 100644 index 000000000..7140b6bb0 --- /dev/null +++ b/src/tests/region/region_transfer_status.c @@ -0,0 +1,204 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2; + char cont_name[128], obj_name1[128], obj_name2[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = 0; + + pdc_transfer_status_t completed; + + uint64_t offset[3], offset_length[3], local_offset[1]; + uint64_t dims[1]; + local_offset[0] = 0; + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to (PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + for (i = 0; i < BUF_LEN; ++i) { + data[i] = i; + } + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + + while (1) { + TASSERT(PDCregion_transfer_status(transfer_request, &completed) >= 0, + "Call to region_transfer_status succeeded", "Call to region_transfer_status failed"); + if (completed == PDC_TRANSFER_STATUS_COMPLETE) + break; + else if (completed == PDC_TRANSFER_STATUS_NOT_FOUND) + TGOTO_ERROR(FAIL, "Transfer request status not found"); + sleep(1); + } + + TASSERT(PDCregion_transfer_status(transfer_request, &completed) >= 0, + "Call to region_transfer_status succeeded", "Call to region_transfer_status failed"); + if (completed != PDC_TRANSFER_STATUS_NOT_FOUND) + TGOTO_ERROR(TFAIL, "Transfer request status wrong value"); + + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + TASSERT((reg = PDCregion_create(1, local_offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + + while (1) { + TASSERT(PDCregion_transfer_status(transfer_request, &completed) >= 0, + "Call to region_transfer_status succeeded", "Call to region_transfer_status failed"); + if (completed != PDC_TRANSFER_STATUS_PENDING) + break; + else if (completed == PDC_TRANSFER_STATUS_NOT_FOUND) + TGOTO_ERROR(TFAIL, "Transfer request status not found"); + sleep(1); + } + + TASSERT(PDCregion_transfer_status(transfer_request, &completed) >= 0, + "Call to region_transfer_status succeeded", "Call to region_transfer_status failed"); + if (completed != PDC_TRANSFER_STATUS_NOT_FOUND) + TGOTO_ERROR(TFAIL, "Transfer request status wrong value"); + + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d\n", data_read[i], i); + } + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + free(data); + free(data_read); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer_write_only.c b/src/tests/region/region_transfer_write_only.c similarity index 75% rename from src/tests/region_transfer_write_only.c rename to src/tests/region/region_transfer_write_only.c index 759e063cc..bf7c22c0b 100644 --- a/src/tests/region_transfer_write_only.c +++ b/src/tests/region/region_transfer_write_only.c @@ -66,7 +66,7 @@ main(int argc, char **argv) LOG_INFO("Create a container property\n"); } else { - LOG_ERROR("Failed to create container property"); + LOG_ERROR("Failed to create container property\n"); ret_value = 1; } // create a container @@ -76,7 +76,7 @@ main(int argc, char **argv) LOG_INFO("Create a container c1\n"); } else { - LOG_ERROR("Failed to create container"); + LOG_ERROR("Failed to create container\n"); ret_value = 1; } // create an object property @@ -85,13 +85,13 @@ main(int argc, char **argv) LOG_INFO("Create an object property\n"); } else { - LOG_ERROR("Failed to create object property"); + LOG_ERROR("Failed to create object property\n"); ret_value = 1; } ret = PDCprop_set_obj_type(obj_prop, PDC_INT); if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); + LOG_ERROR("Failed to set obj type\n"); ret_value = 1; } PDCprop_set_obj_user_id(obj_prop, getuid()); @@ -108,7 +108,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o1\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create second object @@ -121,7 +121,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o2\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } // create third object @@ -135,7 +135,7 @@ main(int argc, char **argv) LOG_INFO("Create an object o3\n"); } else { - LOG_ERROR("Failed to create object"); + LOG_ERROR("Failed to create object\n"); ret_value = 1; } @@ -146,7 +146,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(1, offset, offset_length); @@ -154,7 +154,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { @@ -165,33 +165,33 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } offset[0] = 0; @@ -201,7 +201,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(1, offset, offset_length); @@ -209,7 +209,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { @@ -220,33 +220,33 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Write the second object offset[0] = 0; @@ -259,7 +259,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(2, offset, offset_length); @@ -267,7 +267,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { @@ -278,33 +278,33 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // Write the third object @@ -319,7 +319,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } reg_global = PDCregion_create(3, offset, offset_length); @@ -327,7 +327,7 @@ main(int argc, char **argv) LOG_INFO("Create an region o1\n"); } else { - LOG_ERROR("Failed to create region"); + LOG_ERROR("Failed to create region\n"); ret_value = 1; } for (i = 0; i < BUF_LEN; ++i) { @@ -338,85 +338,85 @@ main(int argc, char **argv) ret = PDCregion_transfer_start(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); + LOG_ERROR("Failed to region transfer start\n"); ret_value = 1; } ret = PDCregion_transfer_wait(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); + LOG_ERROR("Failed to region transfer wait\n"); ret_value = 1; } ret = PDCregion_transfer_close(transfer_request); if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); + LOG_ERROR("Failed to region transfer close\n"); ret_value = 1; } if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); + LOG_ERROR("Failed to close local region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed local region"); + LOG_INFO("successfully closed local region\n"); } if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); + LOG_ERROR("Failed to close global region\n"); ret_value = 1; } else { - LOG_INFO("successfully closed global region"); + LOG_INFO("successfully closed global region\n"); } // close object if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); + LOG_ERROR("Failed to close object o1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o1"); + LOG_INFO("Successfully closed object o1\n"); } if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); + LOG_ERROR("Failed to close object o2\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } if (PDCobj_close(obj3) < 0) { - LOG_ERROR("Failed to close object o3"); + LOG_ERROR("Failed to close object o3\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object o2"); + LOG_INFO("Successfully closed object o2\n"); } // close a container if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); + LOG_ERROR("Failed to close container c1\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container c1"); + LOG_INFO("Successfully closed container c1\n"); } // close a object property if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed object property"); + LOG_INFO("Successfully closed object property\n"); } // close a container property if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); + LOG_ERROR("Failed to close property\n"); ret_value = 1; } else { - LOG_INFO("Successfully closed container property"); + LOG_INFO("Successfully closed container property\n"); } free(data); // close pdc if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); + LOG_ERROR("Failed to close PDC\n"); ret_value = 1; } #ifdef ENABLE_MPI diff --git a/src/tests/region/region_transfer_write_read.c b/src/tests/region/region_transfer_write_read.c new file mode 100644 index 000000000..6b678632c --- /dev/null +++ b/src/tests/region/region_transfer_write_read.c @@ -0,0 +1,334 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +#define BUF_LEN 128 + +int +main(int argc, char **argv) +{ + pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; + perr_t ret; + pdcid_t obj1, obj2, obj3; + char cont_name[128], obj_name1[128], obj_name2[128], obj_name3[128]; + pdcid_t transfer_request; + + int rank = 0, size = 1, i; + int ret_value = TSUCCEED; + + uint64_t offset[3], offset_length[3]; + uint64_t dims[3]; + offset[0] = 0; + offset[1] = 2; + offset[2] = 5; + offset_length[0] = BUF_LEN; + offset_length[1] = 3; + offset_length[2] = 5; + + int *data = (int *)malloc(sizeof(int) * BUF_LEN); + int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); + dims[0] = BUF_LEN; + +#ifdef ENABLE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + sprintf(cont_name, "c%d", rank); + TASSERT((cont = PDCcont_create(cont_name, cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create an object property + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + + TASSERT(PDCprop_set_obj_type(obj_prop, PDC_INT) >= 0, "Call to PDCprop_set_obj_type succeeded", + "Call to PDCprop_set_obj_type failed"); + TASSERT(PDCprop_set_obj_user_id(obj_prop, getuid()) >= 0, "Call to PDCprop_set_obj_user_id succeeded", + "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_time_step(obj_prop, 0) >= 0, "Call to PDCprop_set_obj_time_step succeeded", + "Call to PDCprop_set_obj_time_step failed"); + TASSERT(PDCprop_set_obj_app_name(obj_prop, "DataServerTest") >= 0, + "Call to PDCprop_set_obj_user_id succeeded", "Call to PDCprop_set_obj_user_id failed"); + TASSERT(PDCprop_set_obj_tags(obj_prop, "tag0=1") >= 0, "Call to PDCprop_set_obj_tags succeeded", + "Call to PDCprop_set_obj_tags failed"); + + // create first object + dims[0] = BUF_LEN; + TASSERT(PDCprop_set_obj_dims(obj_prop, 1, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_create(cont, obj_name1, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create second object + dims[0] = BUF_LEN / 4; + dims[1] = 4; + TASSERT(PDCprop_set_obj_dims(obj_prop, 2, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_create(cont, obj_name2, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + // create third object + dims[0] = BUF_LEN / 4; + dims[1] = 2; + dims[2] = 2; + TASSERT(PDCprop_set_obj_dims(obj_prop, 3, dims) >= 0, "Call to PDCprop_set_obj_dims succeeded", + "Call to PDCprop_set_obj_dims failed"); + sprintf(obj_name3, "o3_%d", rank); + TASSERT((obj3 = PDCobj_create(cont, obj_name3, obj_prop)) != 0, "Call to PDCobj_create succeeded", + "Call to PDCobj_create failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // Write the second object + offset[0] = 0; + offset_length[0] = BUF_LEN / 4; + offset[1] = 0; + offset_length[1] = 4; + + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj2, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // Write the third object + offset[0] = 0; + offset_length[0] = BUF_LEN / 4; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + for (i = 0; i < BUF_LEN; ++i) + data[i] = i; + + TASSERT((transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj3, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // close object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj3) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close a object property + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close a container property + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + + free(data); + + // create first object + sprintf(obj_name1, "o1_%d", rank); + TASSERT((obj1 = PDCobj_open(obj_name1, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // create second object + sprintf(obj_name2, "o2_%d", rank); + TASSERT((obj2 = PDCobj_open(obj_name2, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + // create third object + sprintf(obj_name3, "o3_%d", rank); + TASSERT((obj3 = PDCobj_open(obj_name3, pdc)) != 0, "Call to PDCobj_open succeeded", + "Call to PDCobj_open failed"); + + offset[0] = 0; + offset_length[0] = BUF_LEN; + TASSERT((reg = PDCregion_create(1, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(1, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // Read the second object + offset[0] = 0; + offset_length[0] = BUF_LEN / 4; + offset[1] = 0; + offset_length[1] = 4; + TASSERT((reg = PDCregion_create(2, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(2, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj2, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + + // Read the third object + offset[0] = 0; + offset_length[0] = BUF_LEN / 4; + offset[1] = 0; + offset_length[1] = 2; + offset[2] = 0; + offset_length[2] = 2; + + TASSERT((reg = PDCregion_create(3, offset, offset_length)) != 0, "Call to PDCregion_create succeeded", + "Call to PDCregion_create failed"); + TASSERT((reg_global = PDCregion_create(3, offset, offset_length)) != 0, + "Call to PDCregion_create succeeded", "Call to PDCregion_create failed"); + + memset(data_read, 0, BUF_LEN); + + TASSERT((transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj3, reg, reg_global)) != 0, + "Call to PDCregion_transfer_create succeeded", "Call to PDCregion_transfer_create failed"); + TASSERT(PDCregion_transfer_start(transfer_request) >= 0, "Call to PDCregion_transfer_start succeeded", + "Call to PDCregion_transfer_start failed"); + TASSERT(PDCregion_transfer_wait(transfer_request) >= 0, "Call to PDCregion_transfer_wait succeeded", + "Call to PDCregion_transfer_wait failed"); + + // Check if data written previously has been correctly read. + for (i = 0; i < BUF_LEN; ++i) { + if (data_read[i] != i) + TGOTO_ERROR(TFAIL, "Wrong value %d!=%d", data_read[i], i); + } + + TASSERT(PDCregion_transfer_close(transfer_request) >= 0, "Call to PDCregion_transfer_close succeeded", + "Call to PDCregion_transfer_close failed"); + + // close regions + TASSERT(PDCregion_close(reg) >= 0, "Call to PDCregion_close succeeded", "Call to PDCregion_close failed"); + TASSERT(PDCregion_close(reg_global) >= 0, "Call to PDCregion_close succeeded", + "Call to PDCregion_close failed"); + // close objects + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + TASSERT(PDCobj_close(obj3) >= 0, "Call to PDCobj_close succeeded", "Call to PDCobj_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: +#ifdef ENABLE_MPI + MPI_Finalize(); +#endif + return ret_value; +} diff --git a/src/tests/region_transfer.c b/src/tests/region_transfer.c deleted file mode 100644 index 76642a58b..000000000 --- a/src/tests/region_transfer.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3], local_offset[1]; - uint64_t dims[1]; - local_offset[0] = 0; - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = PDC_SIZE_UNLIMITED; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - reg = PDCregion_create(1, local_offset, offset_length); - reg_global = PDCregion_create(1, offset, offset_length); - - memset(data_read, 0, sizeof(int) * BUF_LEN); - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d", data_read[i], i); - ret_value = 1; - break; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_2D.c b/src/tests/region_transfer_2D.c deleted file mode 100644 index 4cf3b23dc..000000000 --- a/src/tests/region_transfer_2D.c +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[2]; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 4; - dims[1] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d_2d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d_2d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d_2d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_2D_skewed.c b/src/tests/region_transfer_2D_skewed.c deleted file mode 100644 index e952ba210..000000000 --- a/src/tests/region_transfer_2D_skewed.c +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 1024 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i, value; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[2]; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 32; - dims[1] = 32; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // Testing first object - offset[0] = 0; - offset[1] = 0; - offset_length[0] = dims[0] / 4; - offset_length[1] = dims[1]; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = dims[0] / 2; - offset[1] = dims[1] / 2; - offset_length[0] = dims[0] / 2; - offset_length[1] = dims[1] / 2; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = dims[0] / 4; - offset_length[1] = dims[1]; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = dims[0] / 2; - offset[1] = dims[1] / 2; - offset_length[0] = dims[0] / 2; - offset_length[1] = dims[1] / 2; - reg_global = PDCregion_create(2, offset, offset_length); - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN / 4; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - // Testing second object - memset(data_read, 0, sizeof(int) * BUF_LEN); - offset[0] = dims[0] / 2; - offset[1] = dims[1] / 2; - offset_length[0] = dims[0] / 2; - offset_length[1] = dims[1] / 2; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = dims[0] / 2; - offset[1] = dims[1] / 2; - offset_length[0] = dims[0] / 2; - offset_length[1] = dims[0] / 2; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj2, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = dims[0] / 4; - offset_length[1] = dims[1]; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = dims[0] / 2; - offset[1] = dims[1] / 2; - offset_length[0] = dims[0] / 2; - offset_length[1] = dims[1] / 2; - reg_global = PDCregion_create(2, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj2, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN / 4; ++i) { - value = (BUF_LEN / 2 + offset_length[1]) + (i / offset_length[1]) * dims[1] + i % offset_length[1]; - if (data_read[i] != (int)value) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], (int)value); - ret_value = 1; - break; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_3D.c b/src/tests/region_transfer_3D.c deleted file mode 100644 index 56c836f2d..000000000 --- a/src/tests/region_transfer_3D.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 256 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[3]; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 16; - dims[1] = 4; - dims[2] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 3, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = BUF_LEN / 16; - offset_length[1] = 4; - offset_length[2] = 4; - reg_global = PDCregion_create(3, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = BUF_LEN / 16; - offset_length[1] = 4; - offset_length[2] = 4; - reg_global = PDCregion_create(3, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_2D.c b/src/tests/region_transfer_all_2D.c deleted file mode 100644 index d27f6ec95..000000000 --- a/src/tests/region_transfer_all_2D.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 256 -#define OBJ_NUM 13 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j; - int ret_value = 0; - int **data, **data_read; - - uint64_t offset[2], offset_length[2]; - uint64_t dims[2]; - int start_method = 1; - int wait_method = 1; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - if (argc >= 2) { - start_method = atoi(argv[1]); - } - if (argc >= 3) { - wait_method = atoi(argv[2]); - } - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - dims[0] = BUF_LEN / 4; - dims[1] = 4; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - /* case 3: { */ - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - /* break; */ - /* } */ - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset_length[0] = BUF_LEN / 4; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data[0]); - free(data_read[0]); - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_3D.c b/src/tests/region_transfer_all_3D.c deleted file mode 100644 index 358c7c30e..000000000 --- a/src/tests/region_transfer_all_3D.c +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 -#define OBJ_NUM 17 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j; - int ret_value = 0; - int **data, **data_read; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[3]; - - int start_method = 1; - int wait_method = 1; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - if (argc >= 2) { - start_method = atoi(argv[1]); - } - if (argc >= 3) { - wait_method = atoi(argv[2]); - } - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - dims[0] = BUF_LEN / 16; - dims[1] = 4; - dims[2] = 4; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 3, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - /* case 3: { */ - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - /* break; */ - /* } */ - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = BUF_LEN / 16; - offset_length[1] = 4; - offset_length[2] = 4; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - for (i = 0; i < OBJ_NUM; i += 2) { - ret = PDCregion_transfer_wait(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - for (i = 1; i < OBJ_NUM; i += 2) { - ret = PDCregion_transfer_wait(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = BUF_LEN / 16; - offset_length[1] = 4; - offset_length[2] = 4; - reg_global = PDCregion_create(3, offset, offset_length); - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - for (i = 0; i < OBJ_NUM; i += 2) { - ret = PDCregion_transfer_wait(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - for (i = 1; i < OBJ_NUM; i += 2) { - ret = PDCregion_transfer_wait(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data[0]); - free(data_read[0]); - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_append.c b/src/tests/region_transfer_all_append.c deleted file mode 100644 index efd5b9d60..000000000 --- a/src/tests/region_transfer_all_append.c +++ /dev/null @@ -1,795 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 64 -#define OBJ_NUM 17 -#define REQ_SIZE 8 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j; - int ret_value = 0; - - uint64_t offset[1], offset_length[1]; - uint64_t dims[1]; - - int **data, **data_read; - int start_method = 1; - int wait_method = 1; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - if (argc >= 2) { - start_method = atoi(argv[1]); - } - if (argc >= 3) { - wait_method = atoi(argv[2]); - } - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - if (rank == 0) - LOG_INFO("testing region_transfer_all_append, start_method = %d, wait_method = %d\n", start_method, - wait_method); - - dims[0] = BUF_LEN; - - // create a pdc - pdc = PDCinit("pdc"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont <= 0) { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - /* case 3: { */ - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - /* break; */ - /* } */ - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] <= 0) { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - if (reg <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = j * (BUF_LEN / REQ_SIZE); - offset_length[0] = BUF_LEN / REQ_SIZE; - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - if (rank == 0) - LOG_INFO("Test 0 done\n"); - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] <= 0) { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = j * (BUF_LEN / REQ_SIZE); - offset_length[0] = BUF_LEN / REQ_SIZE; - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - } - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - - if (rank == 0) - LOG_INFO("Test 1 done\n"); - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] <= 0) { - LOG_ERROR("Failed to open object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - if (rank == 0) - LOG_INFO("Test 2 done\n"); - - // Now we rewrite the whole object and check its values. - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] <= 0) { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i + 84441111 * j + 3; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - - if (rank == 0) - LOG_INFO("Test 3 done\n"); - - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] <= 0) { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global <= 0) { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - /* else { */ - - /* } */ - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - /* else { */ - - /* } */ - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i + 84441111 * j + 3) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], 84441111 * j + 3); - ret_value = 1; - break; - } - } - } - - if (rank == 0) - LOG_INFO("Test 4 done\n"); - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - /* else { */ - - /* } */ - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - /* else { */ - - /* } */ - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - /* else { */ - - /* } */ - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } - - if (rank == 0) { - if (ret_value == 0) - LOG_INFO("Test succeed!\n"); - else - LOG_ERROR("ErROR: Test failed!\n"); - } - -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_append_2D.c b/src/tests/region_transfer_all_append_2D.c deleted file mode 100644 index 17dd253af..000000000 --- a/src/tests/region_transfer_all_append_2D.c +++ /dev/null @@ -1,847 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define DIM0 77 -#define DIM1 32 -#define BUF_LEN (DIM0 * DIM1) -#define OBJ_NUM 1 -#define REQ_SIZE 8 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j, x, y, s, b; - int ret_value = 0; - - uint64_t offset[2], offset_length[2]; - uint64_t dims[2]; - - int **data, **data_read; - int start_method = 1; - int wait_method = 1; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - if (argc >= 2) { - start_method = atoi(argv[1]); - } - if (argc >= 3) { - wait_method = atoi(argv[2]); - } - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - dims[0] = DIM0; - dims[1] = DIM1; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - /* case 3: { */ - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - /* break; */ - /* } */ - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = 0; - offset_length[0] = DIM0; - offset[1] = j * DIM1 / REQ_SIZE; - offset_length[1] = DIM1 / REQ_SIZE; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - } - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = 0; - offset_length[0] = DIM0; - offset[1] = j * DIM1 / REQ_SIZE; - offset_length[1] = DIM1 / REQ_SIZE; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = DIM0; - offset_length[1] = DIM1; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - x = i % DIM1; - y = i / DIM1; - s = DIM1 / REQ_SIZE; - b = s * DIM0; - if (data_read[j][i] != (x / s) * b + y * s + x % s) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], (x / s) * b + y * s + x % s); - ret_value = 1; - } - } - } - - // Now we rewrite the whole object and check its values. - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i + 84441111 * j + 3; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = DIM0; - offset_length[1] = DIM1; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully global region"); - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset_length[0] = DIM0; - offset_length[1] = DIM1; - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully global region"); - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i + 84441111 * j + 3) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], 84441111 * j + 3); - ret_value = 1; - break; - } - } - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_append_3D.c b/src/tests/region_transfer_all_append_3D.c deleted file mode 100644 index bbdfb62a0..000000000 --- a/src/tests/region_transfer_all_append_3D.c +++ /dev/null @@ -1,871 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define DIM0 34 -#define DIM1 13 -#define DIM2 24 -#define BUF_LEN (DIM0 * DIM1 * DIM2) -#define OBJ_NUM 11 -// DIM2 must divide REQ_SIZE -#define REQ_SIZE 8 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j, x, y, z, s, b; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[3]; - - int **data, **data_read; - int start_method = 1; - int wait_method = 1; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - if (argc >= 2) { - start_method = atoi(argv[1]); - } - if (argc >= 3) { - wait_method = atoi(argv[2]); - } - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - dims[0] = DIM0; - dims[1] = DIM1; - dims[2] = DIM2; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 3, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - /* case 3: { */ - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - /* break; */ - /* } */ - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = 0; - offset_length[0] = DIM0; - offset[1] = 0; - offset_length[1] = DIM1; - offset[2] = j * DIM2 / REQ_SIZE; - offset_length[2] = DIM2 / REQ_SIZE; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data[i] + j * BUF_LEN / REQ_SIZE, PDC_WRITE, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - } - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / REQ_SIZE; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - for (j = 0; j < REQ_SIZE; ++j) { - offset[0] = 0; - offset_length[0] = DIM0; - offset[1] = 0; - offset_length[1] = DIM1; - offset[2] = j * DIM2 / REQ_SIZE; - offset_length[2] = DIM2 / REQ_SIZE; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - transfer_request[i * REQ_SIZE + j] = PDCregion_transfer_create( - data_read[i] + j * BUF_LEN / REQ_SIZE, PDC_READ, obj[i], reg, reg_global); - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - } - } - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM * REQ_SIZE; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM * REQ_SIZE); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM * REQ_SIZE); - int request_size = 0; - for (i = 0; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM * REQ_SIZE; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - for (j = 0; j < REQ_SIZE; ++j) { - ret = PDCregion_transfer_close(transfer_request[i * REQ_SIZE + j]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - offset[0] = 0; - offset_length[0] = DIM0; - offset[1] = 0; - offset_length[1] = DIM1; - offset[2] = 0; - offset_length[2] = DIM2; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - x = i % DIM2; - y = (i % (DIM1 * DIM2)) / DIM2; - z = i / (DIM1 * DIM2); - s = DIM2 / REQ_SIZE; - b = s * DIM0 * DIM1; - if (data_read[j][i] != (x / s) * b + z * s * DIM1 + y * s + x % s) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], - (x / s) * b + z * s * DIM1 + y * s + x % s); - ret_value = 1; - break; - } - } - } - - // Now we rewrite the whole object and check its values. - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i + 84441111 * j + 3; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = DIM0; - offset_length[1] = DIM1; - offset_length[2] = DIM2; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully global region"); - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // open object - for (i = 0; i < OBJ_NUM; ++i) { - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_open(obj_name, pdc); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset[1] = 0; - offset[2] = 0; - offset_length[0] = DIM0; - offset_length[1] = DIM1; - offset_length[2] = DIM2; - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - - if (start_method) { - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - else { - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_start(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - } - } - if (wait_method == 1) { - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - } - else if (wait_method == 0) { - pdcid_t *transfer_request_all = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - int request_size = 0; - for (i = 0; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - request_size = 0; - for (i = 1; i < OBJ_NUM; i += 2) { - transfer_request_all[request_size] = transfer_request[i]; - request_size++; - } - ret = PDCregion_transfer_wait_all(transfer_request_all, request_size); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - free(transfer_request_all); - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully global region"); - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i + 84441111 * j + 3) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], 84441111 * j + 3); - ret_value = 1; - break; - } - } - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_all_split_wait.c b/src/tests/region_transfer_all_split_wait.c deleted file mode 100644 index 15732a9fb..000000000 --- a/src/tests/region_transfer_all_split_wait.c +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 4096 -#define OBJ_NUM 20 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t *obj; - char cont_name[128], obj_name[128]; - pdcid_t *transfer_request; - - int rank = 0, size = 1, i, j; - int ret_value = 0; - int **data, **data_read; - - uint64_t offset[1], offset_length[1]; - uint64_t dims[1]; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - - data = (int **)malloc(sizeof(int *) * OBJ_NUM); - data_read = (int **)malloc(sizeof(int *) * OBJ_NUM); - data[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - data_read[0] = (int *)malloc(sizeof(int) * BUF_LEN * OBJ_NUM); - - for (i = 1; i < OBJ_NUM; ++i) { - data[i] = data[i - 1] + BUF_LEN; - data_read[i] = data_read[i - 1] + BUF_LEN; - } - - dims[0] = BUF_LEN; - - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create many objects - obj = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - for (i = 0; i < OBJ_NUM; ++i) { - switch (i % 4) { - case 0: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_STATIC); - break; - } - case 1: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_OBJ_STATIC); - break; - } - case 2: { - ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); - break; - } - case 3: { - /* ret = PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_DYNAMIC); */ - break; - } - default: { - } - } - sprintf(obj_name, "o%d_%d", i, rank); - obj[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj[i] > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create local region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create global region\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - data[j][i] = i; - } - } - transfer_request = (pdcid_t *)malloc(sizeof(pdcid_t) * OBJ_NUM); - - // Place a transfer request for every objects - for (i = 0; i < OBJ_NUM; ++i) { - transfer_request[i] = PDCregion_transfer_create(data[i], PDC_WRITE, obj[i], reg, reg_global); - } - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_start_all(transfer_request + OBJ_NUM / 2, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request + OBJ_NUM / 4, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM / 4); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request + OBJ_NUM * 3 / 4, OBJ_NUM / 4); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg_global = PDCregion_create(1, offset, offset_length); - - for (i = 0; i < OBJ_NUM; ++i) { - memset(data_read[i], 0, sizeof(int) * BUF_LEN); - transfer_request[i] = PDCregion_transfer_create(data_read[i], PDC_READ, obj[i], reg, reg_global); - } - ret = PDCregion_transfer_start_all(transfer_request, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_start_all(transfer_request + OBJ_NUM / 2, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request + OBJ_NUM / 4, OBJ_NUM / 2); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request, OBJ_NUM / 4); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_wait_all(transfer_request + OBJ_NUM * 3 / 4, OBJ_NUM / 4); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - for (i = 0; i < OBJ_NUM; ++i) { - ret = PDCregion_transfer_close(transfer_request[i]); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - } - - // close object - for (i = 0; i < OBJ_NUM; ++i) { - if (PDCobj_close(obj[i]) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - } - - // Check if data written previously has been correctly read. - for (j = 0; j < OBJ_NUM; ++j) { - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[j][i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[j][i], i); - ret_value = 1; - break; - } - } - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data[0]); - free(data_read[0]); - free(data); - free(data_read); - free(obj); - free(transfer_request); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_merge.c b/src/tests/region_transfer_merge.c deleted file mode 100644 index 323899e68..000000000 --- a/src/tests/region_transfer_merge.c +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[1]; - - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 2; - reg = PDCregion_create(1, offset, offset_length); - reg_global = PDCregion_create(1, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = BUF_LEN / 2; - offset_length[0] = BUF_LEN / 2; - reg_global = PDCregion_create(1, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data + offset[0], PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg_global = PDCregion_create(1, offset, offset_length); - - memset(data_read, 0, BUF_LEN); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d!\n", data_read[i], i); - ret_value = 1; - break; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_overlap_2D.c b/src/tests/region_transfer_overlap_2D.c deleted file mode 100644 index ef5437b6c..000000000 --- a/src/tests/region_transfer_overlap_2D.c +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[2]; - - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 4; - dims[1] = 4; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 2, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg = PDCregion_create(2, offset, offset_length); - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = BUF_LEN / 8; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data + BUF_LEN / 2, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = BUF_LEN / 16; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - memset(data_read, 0, BUF_LEN); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - for (i = 0; i < BUF_LEN / 2; ++i) { - if (data_read[i] != i + BUF_LEN / 4) { - LOG_ERROR("i = %d, wrong value %d!=%d!\n", i, data_read[i], i + BUF_LEN / 4); - ret_value = 1; - break; - } - } - if (ret_value == 0) { - LOG_INFO("successfuly verified read 0\n"); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - // Partial write for a region that has been written before - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg = PDCregion_create(2, offset, offset_length); - offset[0] = BUF_LEN / 32; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i + BUF_LEN; - } - - transfer_request = PDCregion_transfer_create(data + BUF_LEN / 8, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = BUF_LEN / 32; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg_global = PDCregion_create(2, offset, offset_length); - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 4; - reg = PDCregion_create(2, offset, offset_length); - - memset(data_read, 0, BUF_LEN); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - for (i = 0; i < BUF_LEN / 2; ++i) { - if (data_read[i] != i + BUF_LEN + BUF_LEN / 8) { - LOG_ERROR("i = %d, wrong value %d!=%d!\n", i, data_read[i], i + BUF_LEN + BUF_LEN / 8); - ret_value = 1; - break; - } - } - if (ret_value == 0) { - LOG_INFO("successfuly verified read 1\n"); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_overlap_3D.c b/src/tests/region_transfer_overlap_3D.c deleted file mode 100644 index 6e58dc053..000000000 --- a/src/tests/region_transfer_overlap_3D.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[3]; - - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN / 4; - dims[1] = 2; - dims[2] = 2; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 3, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - reg_global = PDCregion_create(3, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = BUF_LEN / 8; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg_global = PDCregion_create(3, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data + BUF_LEN / 2, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - offset[0] = BUF_LEN / 16; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg_global = PDCregion_create(3, offset, offset_length); - - memset(data_read, 0, BUF_LEN); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - for (i = 0; i < BUF_LEN / 2; ++i) { - if (data_read[i] != i + BUF_LEN / 4) { - LOG_ERROR("i = %d, wrong value %d!=%d\n", i, data_read[i], i + BUF_LEN / 4); - ret_value = 1; - break; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - offset[0] = BUF_LEN / 32; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg_global = PDCregion_create(3, offset, offset_length); - - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i + BUF_LEN; - } - - transfer_request = PDCregion_transfer_create(data + BUF_LEN / 8, PDC_WRITE, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - offset[0] = BUF_LEN / 32; - offset_length[0] = BUF_LEN / 8; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg_global = PDCregion_create(3, offset, offset_length); - - memset(data_read, 0, BUF_LEN); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - PDCregion_transfer_wait(transfer_request); - - PDCregion_transfer_close(transfer_request); - - for (i = 0; i < BUF_LEN / 2; ++i) { - if (data_read[i] != i + BUF_LEN / 8 + BUF_LEN) { - LOG_ERROR("i = %d, wrong value %d!=%d\n", i, data_read[i], i + BUF_LEN / 8 + BUF_LEN); - ret_value = 1; - break; - } - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_status.c b/src/tests/region_transfer_status.c deleted file mode 100644 index 6544ee322..000000000 --- a/src/tests/region_transfer_status.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2; - char cont_name[128], obj_name1[128], obj_name2[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - pdc_transfer_status_t completed; - - uint64_t offset[3], offset_length[3], local_offset[1]; - uint64_t dims[1]; - local_offset[0] = 0; - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_dims(obj_prop, 1, dims); - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - PDCregion_transfer_start(transfer_request); - - while (1) { - PDCregion_transfer_status(transfer_request, &completed); - if (completed == PDC_TRANSFER_STATUS_COMPLETE) { - break; - } - else if (completed == PDC_TRANSFER_STATUS_NOT_FOUND) { - LOG_ERROR("transfer request status not found"); - ret_value = 1; - break; - } - sleep(1); - } - PDCregion_transfer_status(transfer_request, &completed); - if (completed != PDC_TRANSFER_STATUS_NOT_FOUND) { - LOG_ERROR("transfer request status wrong value"); - ret_value = 1; - } - - PDCregion_transfer_wait(transfer_request); - PDCregion_transfer_close(transfer_request); - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - reg = PDCregion_create(1, local_offset, offset_length); - reg_global = PDCregion_create(1, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - PDCregion_transfer_start(transfer_request); - - while (1) { - PDCregion_transfer_status(transfer_request, &completed); - if (completed != PDC_TRANSFER_STATUS_PENDING) { - break; - } - else if (completed == PDC_TRANSFER_STATUS_NOT_FOUND) { - LOG_ERROR("transfer request status not found"); - ret_value = 1; - break; - } - sleep(1); - } - - PDCregion_transfer_status(transfer_request, &completed); - if (completed != PDC_TRANSFER_STATUS_NOT_FOUND) { - LOG_ERROR("transfer request status wrong value"); - ret_value = 1; - } - - PDCregion_transfer_wait(transfer_request); - PDCregion_transfer_close(transfer_request); - - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d @ line\n", data_read[i], i); - ret_value = 1; - break; - } - } - - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - free(data_read); - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/region_transfer_write_read.c b/src/tests/region_transfer_write_read.c deleted file mode 100644 index dcf5a3507..000000000 --- a/src/tests/region_transfer_write_read.c +++ /dev/null @@ -1,646 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" -#define BUF_LEN 128 - -int -main(int argc, char **argv) -{ - pdcid_t pdc, cont_prop, cont, obj_prop, reg, reg_global; - perr_t ret; - pdcid_t obj1, obj2, obj3; - char cont_name[128], obj_name1[128], obj_name2[128], obj_name3[128]; - pdcid_t transfer_request; - - int rank = 0, size = 1, i; - int ret_value = 0; - - uint64_t offset[3], offset_length[3]; - uint64_t dims[3]; - offset[0] = 0; - offset[1] = 2; - offset[2] = 5; - offset_length[0] = BUF_LEN; - offset_length[1] = 3; - offset_length[2] = 5; - - int *data = (int *)malloc(sizeof(int) * BUF_LEN); - int *data_read = (int *)malloc(sizeof(int) * BUF_LEN); - dims[0] = BUF_LEN; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); -#endif - // create a pdc - pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop > 0) { - LOG_INFO("Create a container property\n"); - } - else { - LOG_ERROR("Failed to create container property"); - ret_value = 1; - } - // create a container - sprintf(cont_name, "c%d", rank); - cont = PDCcont_create(cont_name, cont_prop); - if (cont > 0) { - LOG_INFO("Create a container c1\n"); - } - else { - LOG_ERROR("Failed to create container"); - ret_value = 1; - } - // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop > 0) { - LOG_INFO("Create an object property\n"); - } - else { - LOG_ERROR("Failed to create object property"); - ret_value = 1; - } - - ret = PDCprop_set_obj_type(obj_prop, PDC_INT); - if (ret != SUCCEED) { - LOG_ERROR("Failed to set obj type"); - ret_value = 1; - } - PDCprop_set_obj_user_id(obj_prop, getuid()); - PDCprop_set_obj_time_step(obj_prop, 0); - PDCprop_set_obj_app_name(obj_prop, "DataServerTest"); - PDCprop_set_obj_tags(obj_prop, "tag0=1"); - - // create first object - dims[0] = BUF_LEN; - PDCprop_set_obj_dims(obj_prop, 1, dims); - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_create(cont, obj_name1, obj_prop); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - dims[0] = BUF_LEN / 4; - dims[1] = 4; - PDCprop_set_obj_dims(obj_prop, 2, dims); - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_create(cont, obj_name2, obj_prop); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create third object - dims[0] = BUF_LEN / 4; - dims[1] = 2; - dims[2] = 2; - PDCprop_set_obj_dims(obj_prop, 3, dims); - sprintf(obj_name3, "o3_%d", rank); - obj3 = PDCobj_create(cont, obj_name3, obj_prop); - if (obj3 > 0) { - LOG_INFO("Create an object o3\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - reg = PDCregion_create(1, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(1, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj1, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - // Write the second object - offset[0] = 0; - offset_length[0] = BUF_LEN / 4; - offset[1] = 0; - offset_length[1] = 4; - - reg = PDCregion_create(2, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj2, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // Write the third object - offset[0] = 0; - offset_length[0] = BUF_LEN / 4; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - for (i = 0; i < BUF_LEN; ++i) { - data[i] = i; - } - - transfer_request = PDCregion_transfer_create(data, PDC_WRITE, obj3, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - if (PDCobj_close(obj3) < 0) { - LOG_ERROR("Failed to close object o3"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close a container - if (PDCcont_close(cont) < 0) { - LOG_ERROR("Failed to close container c1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container c1"); - } - // close a object property - if (PDCprop_close(obj_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object property"); - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed container property"); - } - free(data); - - // create first object - sprintf(obj_name1, "o1_%d", rank); - obj1 = PDCobj_open(obj_name1, pdc); - if (obj1 > 0) { - LOG_INFO("Create an object o1\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create second object - sprintf(obj_name2, "o2_%d", rank); - obj2 = PDCobj_open(obj_name2, pdc); - if (obj2 > 0) { - LOG_INFO("Create an object o2\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - // create third object - sprintf(obj_name3, "o3_%d", rank); - obj3 = PDCobj_open(obj_name3, pdc); - if (obj3 > 0) { - LOG_INFO("Create an object o3\n"); - } - else { - LOG_ERROR("Failed to create object"); - ret_value = 1; - } - - offset[0] = 0; - offset_length[0] = BUF_LEN; - - reg = PDCregion_create(1, offset, offset_length); - reg_global = PDCregion_create(1, offset, offset_length); - - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj1, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - // Read the second object - offset[0] = 0; - offset_length[0] = BUF_LEN / 4; - offset[1] = 0; - offset_length[1] = 4; - reg = PDCregion_create(2, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(2, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - memset(data_read, 0, BUF_LEN); - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj2, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // Read the third object - offset[0] = 0; - offset_length[0] = BUF_LEN / 4; - offset[1] = 0; - offset_length[1] = 2; - offset[2] = 0; - offset_length[2] = 2; - reg = PDCregion_create(3, offset, offset_length); - if (reg > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - reg_global = PDCregion_create(3, offset, offset_length); - if (reg_global > 0) { - LOG_INFO("Create an region o1\n"); - } - else { - LOG_ERROR("Failed to create region"); - ret_value = 1; - } - memset(data_read, 0, BUF_LEN); - transfer_request = PDCregion_transfer_create(data_read, PDC_READ, obj3, reg, reg_global); - - ret = PDCregion_transfer_start(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer start"); - ret_value = 1; - } - ret = PDCregion_transfer_wait(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer wait"); - ret_value = 1; - } - // Check if data written previously has been correctly read. - for (i = 0; i < BUF_LEN; ++i) { - if (data_read[i] != i) { - LOG_ERROR("wrong value %d!=%d\n", data_read[i], i); - ret_value = 1; - break; - } - } - ret = PDCregion_transfer_close(transfer_request); - if (ret != SUCCEED) { - LOG_ERROR("Failed to region transfer close"); - ret_value = 1; - } - if (PDCregion_close(reg) < 0) { - LOG_ERROR("Failed to close local region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed local region"); - } - - if (PDCregion_close(reg_global) < 0) { - LOG_ERROR("Failed to close global region"); - ret_value = 1; - } - else { - LOG_INFO("successfully closed global region"); - } - - // close object - if (PDCobj_close(obj1) < 0) { - LOG_ERROR("Failed to close object o1"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o1"); - } - if (PDCobj_close(obj2) < 0) { - LOG_ERROR("Failed to close object o2"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - if (PDCobj_close(obj3) < 0) { - LOG_ERROR("Failed to close object o3"); - ret_value = 1; - } - else { - LOG_INFO("Successfully closed object o2"); - } - // close pdc - if (PDCclose(pdc) < 0) { - LOG_ERROR("Failed to close PDC"); - ret_value = 1; - } -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - return ret_value; -} diff --git a/src/tests/run_multiple_mpi_test.sh b/src/tests/run_multiple_mpi_test.sh index 957473fa8..70c3002ae 100644 --- a/src/tests/run_multiple_mpi_test.sh +++ b/src/tests/run_multiple_mpi_test.sh @@ -47,6 +47,6 @@ done ret="$?" # and shutdown the SERVER before exiting echo "Close server" -echo "$mpi_cmd -n 1 $extra_cmd ./close_server" -$mpi_cmd -n 1 $extra_cmd ./close_server +echo "$mpi_cmd -n $n_servers $extra_cmd ./close_server" +$mpi_cmd -n $n_servers $extra_cmd ./close_server exit $ret diff --git a/src/tests/tags/kvtag_add_get.c b/src/tests/tags/kvtag_add_get.c new file mode 100644 index 000000000..37511f615 --- /dev/null +++ b/src/tests/tags/kvtag_add_get.c @@ -0,0 +1,127 @@ +/* + * Copyright Notice for + * Proactive Data Containers (PDC) Software Library and Utilities + * ----------------------------------------------------------------------------- + + *** Copyright Notice *** + + * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the + * University of California, through Lawrence Berkeley National Laboratory, + * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF + * Group (subject to receipt of any required approvals from the U.S. Dept. of + * Energy). All rights reserved. + + * If you have questions about your rights to use or distribute this software, + * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. + + * NOTICE. This Software was developed under funding from the U.S. Department of + * Energy and the U.S. Government consequently retains certain rights. As such, the + * U.S. Government has been granted for itself and others acting on its behalf a + * paid-up, nonexclusive, irrevocable, worldwide license in the Software to + * reproduce, distribute copies to the public, prepare derivative works, and + * perform publicly and display publicly, and to permit other to do so. + */ + +#include +#include +#include +#include +#include +#include "pdc.h" +#include "test_helper.h" + +int +main() +{ + pdcid_t pdc, cont_prop, cont, obj_prop1, obj_prop2, obj1, obj2; + pdc_kvtag_t kvtag1, kvtag2, kvtag3; + char * v1 = "value1"; + int v2 = 2; + double v3 = 3.45; + pdc_var_type_t type1, type2, type3; + void * value1, *value2, *value3; + psize_t value_size; + int ret_value = SUCCEED; + int rank = 0; + + // create a pdc + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); + // create a container property + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create a container + TASSERT((cont = PDCcont_create("c1", cont_prop)) != 0, "Call to PDCcont_create succeeded", + "Call to PDCcont_create failed"); + // create object properties + TASSERT((obj_prop1 = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + TASSERT((obj_prop2 = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); + // create first object + TASSERT((obj1 = PDCobj_create(cont, "o1", obj_prop1)) != 0, "Call to PDCobj_create succeeded for obj1", + "Call to PDCobj_create failed for obj1"); + // create second object + TASSERT((obj2 = PDCobj_create(cont, "o2", obj_prop2)) != 0, "Call to PDCobj_create succeeded for obj2", + "Call to PDCobj_create failed for obj2"); + + kvtag1.name = "key1string"; + kvtag1.value = (void *)v1; + kvtag1.type = PDC_STRING; + kvtag1.size = strlen(v1) + 1; + + kvtag2.name = "key2int"; + kvtag2.value = (void *)&v2; + kvtag2.type = PDC_INT; + kvtag2.size = sizeof(int); + + kvtag3.name = "key3double"; + kvtag3.value = (void *)&v3; + kvtag3.type = PDC_DOUBLE; + kvtag3.size = sizeof(double); + + // puts tags for obj1 + TASSERT(PDCobj_put_tag(obj1, kvtag1.name, kvtag1.value, kvtag1.type, kvtag1.size) >= 0, + "Call to PDCobj_put_tag succeeded for obj1", "Call to PDCobj_put_tag failed for obj1"); + TASSERT(PDCobj_put_tag(obj1, kvtag2.name, kvtag2.value, kvtag2.type, kvtag2.size) >= 0, + "Call to PDCobj_put_tag succeeded for obj1", "Call to PDCobj_put_tag failed for obj1"); + // put tag for obj2 + TASSERT(PDCobj_put_tag(obj2, kvtag3.name, kvtag3.value, kvtag3.type, kvtag3.size) >= 0, + "Call to PDCobj_put_tag succeeded for obj2", "Call to PDCobj_put_tag failed for obj2"); + // get tag for obj1 + TASSERT(PDCobj_get_tag(obj1, kvtag1.name, (void *)&value1, (void *)&type1, (void *)&value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj1", "Call to PDCobj_get_tag failed for obj1"); + // get tags for obj2 + TASSERT(PDCobj_get_tag(obj2, kvtag1.name, (void *)&value2, (void *)&type2, (void *)&value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj2", "Call to PDCobj_get_tag failed for obj2"); + TASSERT(PDCobj_get_tag(obj2, kvtag3.name, (void *)&value3, (void *)&type3, (void *)&value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj2", "Call to PDCobj_get_tag failed for obj2"); + // delete tag for obj1 + TASSERT(PDCobj_del_tag(obj1, kvtag1.name) >= 0, "Call to PDCobj_del_tag succeeded", + "Call to PDCobj_del_tag failed"); + + v1 = "New Value After Delete"; + kvtag1.value = (void *)v1; + kvtag1.type = PDC_STRING; + kvtag1.size = strlen(v1) + 1; + TASSERT(PDCobj_put_tag(obj1, kvtag1.name, kvtag1.value, kvtag1.type, kvtag1.size) >= 0, + "Call to PDCobj_put_tag succeeded for obj1", "Call to PDCobj_put_tag failed for obj1"); + TASSERT(PDCobj_get_tag(obj1, kvtag1.name, (void *)&value1, (void *)&type1, (void *)&value_size) >= 0, + "Call to PDCobj_get_tag succeeded for obj1", "Call to PDCobj_get_tag failed for obj1"); + // close first object + TASSERT(PDCobj_close(obj1) >= 0, "Call to PDCobj_close succeeded for obj1", + "Call to PDCobj_close failed for obj1"); + // close second object + TASSERT(PDCobj_close(obj2) >= 0, "Call to PDCobj_close succeeded for obj2", + "Call to PDCobj_close failed for obj2"); + // close a container + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); + // close properties + TASSERT(PDCprop_close(obj_prop1) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCprop_close(obj_prop2) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); + // close pdc + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + +done: + return ret_value; +} diff --git a/src/tests/kvtag_add_get_benchmark.c b/src/tests/tags/kvtag_add_get_benchmark.c similarity index 97% rename from src/tests/kvtag_add_get_benchmark.c rename to src/tests/tags/kvtag_add_get_benchmark.c index e7d7bd196..11e888403 100644 --- a/src/tests/kvtag_add_get_benchmark.c +++ b/src/tests/tags/kvtag_add_get_benchmark.c @@ -64,7 +64,7 @@ int assign_work_to_rank(uint64_t rank, uint64_t size, uint64_t nwork, uint64_t *my_count, uint64_t *my_start) { if (rank > size || my_count == NULL || my_start == NULL) { - LOG_ERROR("assign_work_to_rank(): Error with input!\n"); + LOG_ERROR("assign_work_to_rank(): Error with input\n"); return -1; } if (nwork < size) { @@ -337,6 +337,7 @@ main(int argc, char *argv[]) uint64_t total_object_count = 0, total_tag_count = 0, total_query_count = 0; void ** query_rst_cache; uint64_t *value_size; + int ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -359,14 +360,13 @@ main(int argc, char *argv[]) if (n_obj_incr > n_obj) { if (my_rank == 0) LOG_ERROR("n_obj_incr cannot be larger than n_obj! Exiting...\n"); - goto done; + PGOTO_DONE(FAIL); } if (n_query > n_obj_incr) { - if (my_rank == 0) { + if (my_rank == 0) LOG_ERROR("n_query cannot be larger than n_obj_incr! Exiting...\n"); - } - goto done; + PGOTO_DONE(FAIL); } if (my_rank == 0) @@ -380,7 +380,6 @@ main(int argc, char *argv[]) char **tag_values = gen_strings(n_attr, n_attr_len); do { - k++; #ifdef ENABLE_MPI @@ -461,7 +460,6 @@ main(int argc, char *argv[]) check_and_release_query_result(my_query, my_obj, my_obj_s, n_attr, tag_values, query_rst_cache, obj_ids); - fflush(stdout); my_obj_s += n_obj_incr; my_query_s += n_obj_incr; @@ -469,14 +467,14 @@ main(int argc, char *argv[]) } while (total_object_count < n_obj); if (my_rank == 0) { - LOG_ERROR("Final Report: \n"); + LOG_INFO("Final Report: \n"); LOG_INFO("[Final Report 1] Servers: %" PRIu64 " , Clients: %" PRIu64 " , C/S ratio: %.5e \n", n_servers, n_clients, (double)n_clients / (double)n_servers); LOG_INFO("[Final Report 2] Iterations: %" PRIu64 " , Objects: %" PRIu64 " , Tags/Object: %" PRIu64 " , Queries/Iteration: " "%" PRIu64 " , \n", k, total_object_count, n_attr, n_query); - LOG_INFO("[Final Report 3] Object throughput: %.5e , Tag Throughput: %.5e , Query Throughput: %.5e ,", + LOG_INFO("[Final Report 3] Object throughput: %.5e , Tag Throughput: %.5e , Query Throughput: %.5e\n", (double)total_object_count / total_object_time, (double)(total_object_count * n_attr) / total_tag_time, (double)(total_query_count * n_attr) / total_query_time); @@ -488,14 +486,10 @@ main(int argc, char *argv[]) free(tag_values); free(obj_ids); - // FIXME: the following is currently commented off to reduce node hours taken by time-consuming resource - // releasing procedure. - // closePDC(pdc, cont_prop, cont, obj_prop); - done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/kvtag_add_get_scale.c b/src/tests/tags/kvtag_add_get_scale.c similarity index 92% rename from src/tests/kvtag_add_get_scale.c rename to src/tests/tags/kvtag_add_get_scale.c index 9c1bad2b2..aec25090a 100644 --- a/src/tests/kvtag_add_get_scale.c +++ b/src/tests/tags/kvtag_add_get_scale.c @@ -34,7 +34,7 @@ int assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) { if (rank > size || my_count == NULL || my_start == NULL) { - LOG_INFO("assign_work_to_rank(): Error with input!\n"); + LOG_INFO("assign_work_to_rank(): Error with input\n"); return -1; } if (nwork < size) { @@ -78,6 +78,8 @@ main(int argc, char *argv[]) void ** values; pdc_var_type_t value_type; size_t value_size; + int ret_value = SUCCEED; + #ifdef ENABLE_MPI MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &proc_num); @@ -86,7 +88,7 @@ main(int argc, char *argv[]) if (argc < 4) { if (my_rank == 0) print_usage(argv[0]); - goto done; + PGOTO_DONE(FAIL); } n_obj = atoi(argv[1]); n_add_tag = atoi(argv[2]); @@ -95,7 +97,7 @@ main(int argc, char *argv[]) if (n_add_tag > n_obj || n_query > n_obj) { if (my_rank == 0) LOG_ERROR("n_add_tag or n_query larger than n_obj! Exiting...\n"); - goto done; + PGOTO_DONE(FAIL); } assign_work_to_rank(my_rank, proc_num, n_add_tag, &my_add_tag, &my_add_tag_s); @@ -115,17 +117,17 @@ main(int argc, char *argv[]) // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); + PGOTO_ERROR(FAIL, "Failed to create container property"); // create a container cont = PDCcont_create("c1", cont_prop); if (cont <= 0) - LOG_ERROR("Failed to create container"); + PGOTO_ERROR(FAIL, "Failed to create container"); // create an object property obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop <= 0) - LOG_ERROR("Failed to create object property"); + PGOTO_ERROR(FAIL, "Failed to create object property"); // Create a number of objects, add at least one tag to that object obj_ids = (pdcid_t *)calloc(my_obj, sizeof(pdcid_t)); @@ -139,7 +141,7 @@ main(int argc, char *argv[]) sprintf(obj_name, "obj%d", my_obj_s + i); obj_ids[i] = PDCobj_create(cont, obj_name, obj_prop); if (obj_ids[i] <= 0) - LOG_ERROR("Failed to create object"); + PGOTO_ERROR(FAIL, "Failed to create object"); if (i > 0 && i % obj_1percent == 0) { #ifdef ENABLE_MPI @@ -178,7 +180,7 @@ main(int argc, char *argv[]) for (i = 0; i < my_add_tag; i++) { v = i + my_add_tag_s; if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); if (i % tag_1percent == 0) { #ifdef ENABLE_MPI @@ -212,7 +214,7 @@ main(int argc, char *argv[]) for (i = 0; i < my_query; i++) { if (PDCobj_get_tag(obj_ids[i], kvtag.name, (void *)&values[i], (void *)&value_type, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o%d\n", i + my_query_s); + PGOTO_ERROR(FAIL, "Failed to get a kvtag from o%d\n", i + my_query_s); if (i % query_1percent == 0) { #ifdef ENABLE_MPI @@ -237,17 +239,14 @@ main(int argc, char *argv[]) LOG_INFO("Total time to retrieve 1 tag from %11d objects: %7.2f , throughput %10.2f \n", n_query, total_time, n_query / total_time); - fflush(stdout); - for (i = 0; i < my_query; i++) { if (*(int *)(values[i]) != i + my_add_tag_s) - LOG_ERROR("Error with retrieved tag from o%d\n", i + my_query_s); + PGOTO_ERROR(FAIL, "Error with retrieved tag from o%d", i + my_query_s); free(values[i]); } free(values); if (my_rank == 0) { LOG_INFO("Done checking values\n"); - fflush(stdout); } done: @@ -255,5 +254,5 @@ main(int argc, char *argv[]) MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/kvtag_affix_query_scale.c b/src/tests/tags/kvtag_affix_query_scale.c similarity index 78% rename from src/tests/kvtag_affix_query_scale.c rename to src/tests/tags/kvtag_affix_query_scale.c index 7470fc742..c153650fb 100644 --- a/src/tests/kvtag_affix_query_scale.c +++ b/src/tests/tags/kvtag_affix_query_scale.c @@ -37,7 +37,7 @@ int assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) { if (rank > size || my_count == NULL || my_start == NULL) { - LOG_ERROR("assign_work_to_rank(): Error with input!\n"); + LOG_ERROR("assign_work_to_rank(): Error with input\n"); return -1; } if (nwork < size) { @@ -90,23 +90,17 @@ prepare_container(pdcid_t *pdc, pdcid_t *cont_prop, pdcid_t *cont, pdcid_t *obj_ // create a container property *cont_prop = PDCprop_create(PDC_CONT_CREATE, *pdc); - if (*cont_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create container property\n", my_rank); - goto done; - } + if (*cont_prop <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create container property", my_rank); // create a container *cont = PDCcont_create("c1", *cont_prop); - if (*cont <= 0) { - LOG_ERROR("[Client %d] Fail to create container!\n", my_rank); - goto done; - } + if (*cont <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create container", my_rank); // create an object property *obj_prop = PDCprop_create(PDC_OBJ_CREATE, *pdc); - if (*obj_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create object property!\n", my_rank); - goto done; - } + if (*obj_prop <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create object property", my_rank); ret_value = SUCCEED; done: @@ -123,10 +117,8 @@ creating_objects(pdcid_t **obj_ids, int my_obj, int my_obj_s, pdcid_t cont, pdci for (int i = 0; i < my_obj; i++) { sprintf(obj_name, "obj%" PRId64 "%d", timestamp, my_obj_s + i); (*obj_ids)[i] = PDCobj_create(cont, obj_name, obj_prop); - if ((*obj_ids)[i] <= 0) { - LOG_ERROR("[Client %d] Fail to create object!\n", my_rank); - goto done; - } + if ((*obj_ids)[i] <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create object", my_rank); } ret_value = SUCCEED; done: @@ -146,6 +138,7 @@ main(int argc, char *argv[]) int nres, ntotal; int * my_cnt_round; int * total_cnt_round; + int ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -168,22 +161,21 @@ main(int argc, char *argv[]) int bypass_query = query_type == -1 ? 1 : 0; // prepare container - if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) { - println("Failed to prepare container"); - goto done; - } + if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) + PGOTO_ERROR(FAIL, "Failed to prepare container"); + // Create a number of objects, add at least one tag to that object assign_work_to_rank(my_rank, proc_num, n_obj, &my_obj, &my_obj_s); if (my_rank == 0) { - println("Each client will create about %d obj", my_obj); + LOG_INFO("Each client will create about %d obj\n", my_obj); } // creating objects creating_objects(&obj_ids, my_obj, my_obj_s, cont, obj_prop, my_rank); if (my_rank == 0) - println("All clients created %d objects", n_obj); + LOG_INFO("All clients created %d objects\n", n_obj); dart_object_ref_type_t ref_type = REF_PRIMARY_ID; dart_hash_algo_t hash_algo = DART_HASH; @@ -212,30 +204,25 @@ main(int argc, char *argv[]) kvtag.size = (strlen(tag_value) + 1) * sizeof(char); pdcid_t meta_id = PDC_obj_get_info(obj_ids[i])->obj_info_pub->meta_id; if (is_using_dart) { - if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); if (PDC_Client_insert_obj_ref_into_dart(hash_algo, kvtag.name, kvtag.value, kvtag.size, - kvtag.type, ref_type, meta_id) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + kvtag.type, ref_type, meta_id) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); } else { - if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); } free(kvtag.name); free(kvtag.value); - // TODO: this is for checking the correctness of the query results. - // my_cnt_round[iter]++; + // TODO: Check correctness of the query results. } // TODO: why n_obj has to be larger than 1000? - if (my_rank == 0 /*&& n_obj > 1000 */) { - println("Rank %d: Added %d kvtag to the %d / %d th object, I'm applying selectivity %d to %d " - "objects.\n", - my_rank, round, i + 1, my_obj_after_selectivity, selectivity, my_obj); - } + if (my_rank == 0 /*&& n_obj > 1000 */) + LOG_INFO("Rank %d: Added %d kvtag to the %d / %d th object, I'm applying selectivity %d to %d " + "objects.\n", + my_rank, round, i + 1, my_obj_after_selectivity, selectivity, my_obj); } #ifdef ENABLE_MPI @@ -244,24 +231,22 @@ main(int argc, char *argv[]) #endif if (my_rank == 0) { - println("[TAG Creation] Rank %d: Added %d kvtag to %d objects, time: %.5f ms", my_rank, round, my_obj, - total_time * 1000.0); + LOG_INFO("[TAG Creation] Rank %d: Added %d kvtag to %d objects, time: %.5f ms\n", my_rank, round, + my_obj, total_time * 1000.0); } #ifdef ENABLE_MPI - // TODO: This is for checking the correctness of the query results. - // for (i = 0; i < round; i++) - // MPI_Allreduce(&my_cnt_round[i], &total_cnt_round[i], 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + // TODO: Check correctness of the query results MPI_Barrier(MPI_COMM_WORLD); #endif if (bypass_query) { if (my_rank == 0) { - println("Rank %d: All queries are bypassed.", my_rank); + LOG_INFO("Rank %d: All queries are bypassed\n", my_rank); report_avg_server_profiling_rst(); } - goto done; + PGOTO_DONE(SUCCEED); } // For the queries, we issue #round queries. @@ -274,8 +259,7 @@ main(int argc, char *argv[]) for (comm_type = 1; comm_type >= 0; comm_type--) { for (query_type = 0; query_type < 4; query_type++) { - perr_t ret_value; - int round_total = 0; + int round_total = 0; for (iter = -1; iter < iter_round; iter++) { // -1 is for warm up #ifdef ENABLE_MPI if (iter == 0) { @@ -329,10 +313,8 @@ main(int argc, char *argv[]) ret_value = PDC_Client_query_kvtag(&kvtag, &nres, &pdc_ids); #endif } - if (ret_value < 0) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d\n", kvtag.name, my_rank); - break; - } + if (ret_value < 0) + PGOTO_ERROR(FAIL, "Failed to query kvtag [%s] with rank %d", kvtag.name, my_rank); // TODO: Check correctness of query results @@ -354,16 +336,16 @@ main(int argc, char *argv[]) query_type_str = "SUFFIX"; else if (query_type == 3) query_type_str = "INFIX"; - println("[%s Client %s Query with%sINDEX] %d rounds with %d results, time: %.5f ms", - comm_type == 0 ? "Single" : "Multi", query_type_str, - is_using_dart == 0 ? " NO " : " DART ", round, round_total, total_time * 1000.0); + LOG_INFO("[%s Client %s Query with%sINDEX] %d rounds with %d results, time: %.5f ms\n", + comm_type == 0 ? "Single" : "Multi", query_type_str, + is_using_dart == 0 ? " NO " : " DART ", round, round_total, total_time * 1000.0); } #endif } // end query type } // end comm type if (my_rank == 0) { - println("Rank %d: All queries are done.", my_rank); + LOG_INFO("Rank %d: All queries are done\n", my_rank); report_avg_server_profiling_rst(); } @@ -403,51 +385,36 @@ main(int argc, char *argv[]) total_time = MPI_Wtime() - stime; #endif if (my_rank == 0) { - println("[TAG Deletion] Rank %d: Deleted %d kvtag from %d objects, time: %.5f ms", my_rank, round, - my_obj, total_time * 1000.0); + LOG_INFO("[TAG Deletion] Rank %d: Deleted %d kvtag from %d objects, time: %.5f ms\n", my_rank, round, + my_obj, total_time * 1000.0); } -done: // close a container - if (PDCcont_close(cont) < 0) { - if (my_rank == 0) { - LOG_ERROR("Failed to close container c1\n"); - } - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed container c1\n"); - } + if (PDCcont_close(cont) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close container c1"); + else if (my_rank == 0) + LOG_INFO("Successfully closed container c1\n"); // close an object property - if (PDCprop_close(obj_prop) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed object property\n"); - } + if (PDCprop_close(obj_prop) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close property"); + else if (my_rank == 0) + LOG_INFO("Successfully closed object property\n"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed container property\n"); - } + if (PDCprop_close(cont_prop) < 0 && my_rank == 0) + LOG_ERROR("Failed to close property"); + else if (my_rank == 0) + LOG_INFO("Successfully closed container property\n"); // close pdc - if (PDCclose(pdc) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close PDC\n"); - } + if (PDCclose(pdc) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close PDC\n"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/kvtag_get.c b/src/tests/tags/kvtag_get.c similarity index 69% rename from src/tests/kvtag_get.c rename to src/tests/tags/kvtag_get.c index e66d98c23..0569b8c43 100644 --- a/src/tests/kvtag_get.c +++ b/src/tests/tags/kvtag_get.c @@ -28,7 +28,6 @@ #include #include #include "pdc.h" -#include "pdc_client_connect.h" int main() @@ -37,74 +36,75 @@ main() pdc_kvtag_t * value1, *value2, *value3; pdc_var_type_t type1, type2, type3; psize_t value_size; + int ret_value = SUCCEED; // create a pdc pdc = PDCinit("pdc"); - LOG_INFO("create a new pdc\n"); + LOG_INFO("Created a new pdc\n"); // create a container property cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); if (cont_prop > 0) - LOG_INFO("Create a container property\n"); + LOG_INFO("Created a container property\n"); else - LOG_ERROR("Failed to create container property"); + PGOTO_ERROR(FAIL, "Failed to create container property"); // create a container cont = PDCcont_create("c1", cont_prop); if (cont > 0) - LOG_INFO("Create a container c1\n"); + LOG_INFO("Created a container c1\n"); else - LOG_ERROR("Failed to create container"); + PGOTO_ERROR(FAIL, "Failed to create container"); // create an object property obj_prop1 = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop1 > 0) - LOG_INFO("Create an object property\n"); + LOG_INFO("Created an object property\n"); else - LOG_ERROR("Failed to create object property"); + PGOTO_ERROR(FAIL, "Failed to create object property"); obj_prop2 = PDCprop_create(PDC_OBJ_CREATE, pdc); if (obj_prop2 > 0) - LOG_INFO("Create an object property\n"); + LOG_INFO("Created an object property\n"); else - LOG_ERROR("Failed to create object property"); + PGOTO_ERROR(FAIL, "Failed to create object property"); // create first object obj1 = PDCobj_create(cont, "o1", obj_prop1); if (obj1 > 0) - LOG_INFO("Create an object o1\n"); + LOG_INFO("Created an object o1\n"); else - LOG_ERROR("Failed to create object"); + PGOTO_ERROR(FAIL, "Failed to create object"); // create second object obj2 = PDCobj_create(cont, "o2", obj_prop2); if (obj2 > 0) - LOG_INFO("Create an object o2\n"); + LOG_INFO("Created an object o2\n"); else - LOG_ERROR("Failed to create object"); + PGOTO_ERROR(FAIL, "Failed to create object"); if (PDCobj_get_tag(obj1, "key1string", (void *)&value1, (void *)&type1, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o1\n"); + PGOTO_ERROR(FAIL, "Failed to get a kvtag from o1"); else - LOG_INFO("successfully retrieved a kvtag [%s] = [%s] from o1\n", value1->name, (char *)value1->value); + LOG_INFO("Successfully retrieved a kvtag [%s] = [%s] from o1\n", value1->name, (char *)value1->value); if (PDCobj_get_tag(obj2, "key2int", (void *)&value2, (void *)&type2, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o2\n"); + PGOTO_ERROR(FAIL, "Failed to get a kvtag from o2"); else - LOG_INFO("successfully retrieved a kvtag [%s] = [%d] from o2\n", value2->name, *(int *)value2->value); + LOG_INFO("Successfully retrieved a kvtag [%s] = [%d] from o2\n", value2->name, *(int *)value2->value); if (PDCobj_get_tag(obj2, "key3double", (void *)&value3, (void *)&type3, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o2\n"); + PGOTO_ERROR(FAIL, "Failed to get a kvtag from o2"); else - LOG_INFO("successfully retrieved a kvtag [%s] = [%f] from o2\n", value3->name, + LOG_INFO("Successfully retrieved a kvtag [%s] = [%f] from o2\n", value3->name, *(double *)value3->value); PDC_free_kvtag(&value1); if (PDCobj_get_tag(obj1, "key1string", (void *)&value1, (void *)&type1, (void *)&value_size) < 0) - LOG_ERROR("Failed to get a kvtag from o1\n"); + PGOTO_ERROR(FAIL, "Failed to get a kvtag from o1"); else - LOG_INFO("successfully retrieved a kvtag [%s] = [%s] from o1\n", value1->name, (char *)value1->value); + LOG_INFO("Successfully retrieved a kvtag [%s] = [%s] from o1\n", value1->name, (char *)value1->value); PDC_free_kvtag(&value1); PDC_free_kvtag(&value2); @@ -112,41 +112,42 @@ main() // close first object if (PDCobj_close(obj1) < 0) - LOG_ERROR("Failed to close object o1\n"); + PGOTO_ERROR(FAIL, "Failed to close object o1"); else LOG_INFO("Successfully closed object o1\n"); // close second object if (PDCobj_close(obj2) < 0) - LOG_ERROR("Failed to close object o2\n"); + PGOTO_ERROR(FAIL, "Failed to close object o2"); else LOG_INFO("Successfully closed object o2\n"); // close a container if (PDCcont_close(cont) < 0) - LOG_ERROR("Failed to close container c1\n"); + PGOTO_ERROR(FAIL, "Failed to close container c1"); else LOG_INFO("Successfully closed container c1\n"); // close a container property if (PDCprop_close(obj_prop1) < 0) - LOG_ERROR("Failed to close property"); + PGOTO_ERROR(FAIL, "Failed to close property"); else LOG_INFO("Successfully closed object property\n"); if (PDCprop_close(obj_prop2) < 0) - LOG_ERROR("Failed to close property"); + PGOTO_ERROR(FAIL, "Failed to close property"); else LOG_INFO("Successfully closed object property\n"); if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); + PGOTO_ERROR(FAIL, "Failed to close property"); else LOG_INFO("Successfully closed container property\n"); // close pdc if (PDCclose(pdc) < 0) - LOG_ERROR("Failed to close PDC\n"); + PGOTO_ERROR(FAIL, "Failed to close PDC"); - return 0; +done: + return ret_value; } diff --git a/src/tests/kvtag_query.c b/src/tests/tags/kvtag_query.c similarity index 63% rename from src/tests/kvtag_query.c rename to src/tests/tags/kvtag_query.c index 3f11bae79..8470d6f6d 100644 --- a/src/tests/kvtag_query.c +++ b/src/tests/tags/kvtag_query.c @@ -28,13 +28,13 @@ #include #include #include "pdc.h" -#include "pdc_client_connect.h" +#include "test_helper.h" int assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) { if (rank > size || my_count == NULL || my_start == NULL) { - LOG_ERROR("assign_work_to_rank(): Error with input!\n"); + LOG_ERROR("assign_work_to_rank(): Error with input\n"); return -1; } if (nwork < size) { @@ -82,23 +82,24 @@ main(int argc, char *argv[]) pdcid_t pdc, cont_prop, cont, obj_prop; pdcid_t * obj_ids; int n_obj, n_add_tag, my_obj, my_obj_s, my_add_tag, my_add_tag_s; - int proc_num = 1, my_rank = 0, i, v, iter, round, selectivity, is_using_dart; + int proc_num = 1, rank = 0, i, v, iter, round, selectivity, is_using_dart; char obj_name[128]; double stime, total_time; pdc_kvtag_t kvtag; uint64_t * pdc_ids; int nres, ntotal; + int ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &proc_num); - MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); #endif if (argc < 5) { - if (my_rank == 0) + if (rank == 0) print_usage(argv[0]); - goto done; + PGOTO_DONE(ret_value); } n_obj = atoi(argv[1]); round = atoi(argv[2]); @@ -107,39 +108,28 @@ main(int argc, char *argv[]) n_add_tag = n_obj * selectivity / 100; // create a pdc - pdc = PDCinit("pdc"); - + TASSERT((pdc = PDCinit("pdc")) != 0, "Call to PDCinit succeeded", "Call to PDCinit failed"); // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc); - if (cont_prop <= 0) - LOG_ERROR("Failed to create container property"); - + TASSERT((cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // create a container - cont = PDCcont_create("c1", cont_prop); - if (cont <= 0) - LOG_ERROR("Failed to create container"); - + TASSERT((cont = PDCcont_create_col("c1", cont_prop)) != 0, "Call to PDCcont_create_col succeeded", + "Call to PDCcont_create_col failed"); // create an object property - obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc); - if (obj_prop <= 0) - LOG_ERROR("Failed to create object property"); - + TASSERT((obj_prop = PDCprop_create(PDC_OBJ_CREATE, pdc)) != 0, "Call to PDCprop_create succeeded", + "Call to PDCprop_create failed"); // Create a number of objects, add at least one tag to that object - assign_work_to_rank(my_rank, proc_num, n_obj, &my_obj, &my_obj_s); - if (my_rank == 0) - LOG_INFO("I will create %d obj\n", my_obj); + assign_work_to_rank(rank, proc_num, n_obj, &my_obj, &my_obj_s); obj_ids = (pdcid_t *)calloc(my_obj, sizeof(pdcid_t)); for (i = 0; i < my_obj; i++) { sprintf(obj_name, "obj%d", my_obj_s + i); - obj_ids[i] = PDCobj_create(cont, obj_name, obj_prop); - if (obj_ids[i] <= 0) - LOG_ERROR("Failed to create object"); + TASSERT((obj_ids[i] = PDCobj_create(cont, obj_name, obj_prop)) != 0, + "Call to PDCobj_create succeeded", "Call to PDCobj_create failed"); } - if (my_rank == 0) + if (rank == 0) LOG_INFO("Created %d objects\n", n_obj); - fflush(stdout); char *attr_name_per_rank = gen_random_strings(1, 6, 8, 26)[0]; // Add tags @@ -155,28 +145,22 @@ main(int argc, char *argv[]) dart_object_ref_type_t ref_type = REF_PRIMARY_ID; dart_hash_algo_t hash_algo = DART_HASH; - assign_work_to_rank(my_rank, proc_num, n_add_tag, &my_add_tag, &my_add_tag_s); + assign_work_to_rank(rank, proc_num, n_add_tag, &my_add_tag, &my_add_tag_s); // This is for adding #rounds tags to the objects. for (i = 0; i < my_add_tag; i++) { for (iter = 0; iter < round; iter++) { v = iter; sprintf(value, "%d", v); - if (is_using_dart) { - if (PDC_Client_insert_obj_ref_into_dart(hash_algo, kvtag.name, value, strlen(value), - PDC_STRING, ref_type, (uint64_t)obj_ids[i]) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } - } - else { - /* println("Rank %d: [%s] [%d], len %d\n", my_rank, kvtag.name, v, kvtag.size); */ - if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } - } + if (is_using_dart && + PDC_Client_insert_obj_ref_into_dart(hash_algo, kvtag.name, value, strlen(value), PDC_STRING, + ref_type, (uint64_t)obj_ids[i]) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d\n", i + my_obj_s); + else if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d\n", i + my_obj_s); } - if (my_rank == 0) - println("Rank %d: Added %d kvtag to the %d th object\n", my_rank, round, i); + if (rank == 0) + LOG_JUST_PRINT("Rank %d: Added %d kvtag to the %d th object\n", rank, round, i); } #ifdef ENABLE_MPI @@ -199,22 +183,23 @@ main(int argc, char *argv[]) sprintf(value, "%ld", v); sprintf(exact_query, "%s=%s", kvtag.name, value); #ifdef ENABLE_MPI - PDC_Client_search_obj_ref_through_dart_mpi(hash_algo, exact_query, ref_type, &nres, &pdc_ids, - MPI_COMM_WORLD); + if (PDC_Client_search_obj_ref_through_dart_mpi(hash_algo, exact_query, ref_type, &nres, &pdc_ids, + MPI_COMM_WORLD) < 0) { #else - PDC_Client_search_obj_ref_through_dart(hash_algo, exact_query, ref_type, &nres, &pdc_ids); + if (PDC_Client_search_obj_ref_through_dart(hash_algo, exact_query, ref_type, &nres, &pdc_ids) < + 0) { #endif + PGOTO_ERROR(TFAIL, "Failed to PDC_Client_search_obj_ref_through_dart_mpi\n", kvtag.name, + rank); + } } else { - /* println("Rank %d: round %d, query kvtag [%s] [%d]\n", my_rank, round, kvtag.name, - * *((int*)kvtag.value)); */ #ifdef ENABLE_MPI if (PDC_Client_query_kvtag_mpi(&kvtag, &nres, &pdc_ids, MPI_COMM_WORLD) < 0) { #else if (PDC_Client_query_kvtag(&kvtag, &nres, &pdc_ids) < 0) { #endif - LOG_ERROR("Failed to query kvtag [%s] with rank %d\n", kvtag.name, my_rank); - break; + PGOTO_ERROR(TFAIL, "Failed to query kvtag [%s] with rank %d\n", kvtag.name, rank); } } } @@ -224,36 +209,25 @@ main(int argc, char *argv[]) MPI_Reduce(&nres, &ntotal, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); total_time = MPI_Wtime() - stime; - if (my_rank == 0) - println("Total time to query %d objects with tag: %.5f", ntotal, total_time); + if (rank == 0) + LOG_INFO("Total time to query %d objects with tag: %.5f\n", ntotal, total_time); #else - println("Query found %d objects", nres); + LOG_INFO("Query found %d objects\n", nres); #endif // close a container - if (PDCcont_close(cont) < 0) - LOG_ERROR("Failed to close container c1\n"); - else - LOG_INFO("Successfully closed container c1\n"); - + TASSERT(PDCcont_close(cont) >= 0, "Call to PDCcont_close succeeded", "Call to PDCcont_close failed"); // close an object property - if (PDCprop_close(obj_prop) < 0) - LOG_ERROR("Failed to close property"); - else - LOG_INFO("Successfully closed object property\n"); - + TASSERT(PDCprop_close(obj_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close a container property - if (PDCprop_close(cont_prop) < 0) - LOG_ERROR("Failed to close property"); - else - LOG_INFO("Successfully closed container property\n"); + TASSERT(PDCprop_close(cont_prop) >= 0, "Call to PDCprop_close succeeded", "Call to PDCprop_close failed"); // close pdc - if (PDCclose(pdc) < 0) - LOG_ERROR("Failed to close PDC\n"); + TASSERT(PDCclose(pdc) >= 0, "Call to PDCclose succeeded", "Call to PDCclose failed"); + done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/kvtag_range_query_scale.c b/src/tests/tags/kvtag_range_query_scale.c similarity index 74% rename from src/tests/kvtag_range_query_scale.c rename to src/tests/tags/kvtag_range_query_scale.c index 61bec3292..da9cec14d 100644 --- a/src/tests/kvtag_range_query_scale.c +++ b/src/tests/tags/kvtag_range_query_scale.c @@ -32,13 +32,14 @@ #include "pdc_client_connect.h" #include "string_utils.h" -int +perr_t assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) { - if (rank > size || my_count == NULL || my_start == NULL) { - LOG_ERROR("assign_work_to_rank(): Error with input!\n"); - return -1; - } + perr_t ret_value = SUCCEED; + + if (rank > size || my_count == NULL || my_start == NULL) + PGOTO_ERROR(FAIL, "Error with input"); + if (nwork < size) { if (rank < nwork) *my_count = 1; @@ -57,7 +58,8 @@ assign_work_to_rank(int rank, int size, int nwork, int *my_count, int *my_start) } } - return 1; +done: + return ret_value; } void @@ -83,31 +85,24 @@ print_usage(char *name) perr_t prepare_container(pdcid_t *pdc, pdcid_t *cont_prop, pdcid_t *cont, pdcid_t *obj_prop, int my_rank) { - perr_t ret_value = FAIL; + perr_t ret_value = SUCCEED; // create a pdc *pdc = PDCinit("pdc"); // create a container property *cont_prop = PDCprop_create(PDC_CONT_CREATE, *pdc); - if (*cont_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create container property!\n", my_rank); - goto done; - } + if (*cont_prop <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create container property", my_rank); // create a container *cont = PDCcont_create("c1", *cont_prop); - if (*cont <= 0) { - LOG_ERROR("[Client %d] Fail to create container!\n", my_rank); - goto done; - } + if (*cont <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create container", my_rank); // create an object property *obj_prop = PDCprop_create(PDC_OBJ_CREATE, *pdc); - if (*obj_prop <= 0) { - LOG_ERROR("[Client %d] Fail to create object property!\n", my_rank); - goto done; - } + if (*obj_prop <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create object property", my_rank); - ret_value = SUCCEED; done: return ret_value; } @@ -115,19 +110,16 @@ prepare_container(pdcid_t *pdc, pdcid_t *cont_prop, pdcid_t *cont, pdcid_t *obj_ perr_t creating_objects(pdcid_t **obj_ids, int my_obj, int my_obj_s, pdcid_t cont, pdcid_t obj_prop, int my_rank) { - perr_t ret_value = FAIL; + perr_t ret_value = SUCCEED; char obj_name[128]; int64_t timestamp = get_timestamp_ms(); *obj_ids = (pdcid_t *)calloc(my_obj, sizeof(pdcid_t)); for (int i = 0; i < my_obj; i++) { sprintf(obj_name, "obj%" PRId64 "%d", timestamp, my_obj_s + i); (*obj_ids)[i] = PDCobj_create(cont, obj_name, obj_prop); - if ((*obj_ids)[i] <= 0) { - LOG_ERROR("[Client %d] Fail to create object!\n", my_rank); - goto done; - } + if ((*obj_ids)[i] <= 0) + PGOTO_ERROR(FAIL, "[Client %d] Failed to create object", my_rank); } - ret_value = SUCCEED; done: return ret_value; } @@ -145,6 +137,7 @@ main(int argc, char *argv[]) int nres, ntotal; int * my_cnt_round; int * total_cnt_round; + int ret_value = SUCCEED; #ifdef ENABLE_MPI MPI_Init(&argc, &argv); @@ -155,7 +148,7 @@ main(int argc, char *argv[]) if (argc < 7) { if (my_rank == 0) print_usage(argv[0]); - goto done; + PGOTO_DONE(FAIL); } n_obj = atoi(argv[1]); round = atoi(argv[2]); @@ -167,17 +160,16 @@ main(int argc, char *argv[]) int bypass_query = query_type == -1 ? 1 : 0; // prepare container - if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) { - LOG_ERROR("Failed to prepare container"); - goto done; - } + if (prepare_container(&pdc, &cont_prop, &cont, &obj_prop, my_rank) < 0) + PGOTO_ERROR(FAIL, "Failed to prepare container"); // Create a number of objects, add at least one tag to that object - assign_work_to_rank(my_rank, proc_num, n_obj, &my_obj, &my_obj_s); - - if (my_rank == 0) { - LOG_INFO("Each client will create about %d obj", my_obj); + if (assign_work_to_rank(my_rank, proc_num, n_obj, &my_obj, &my_obj_s) != SUCCEED) { + PGOTO_ERROR(FAIL, "Failed to assign_work_to_rank"); } + if (my_rank == 0) + LOG_INFO("Each client will create about %d objects", my_obj); + // creating objects creating_objects(&obj_ids, my_obj, my_obj_s, cont, obj_prop, my_rank); @@ -207,30 +199,25 @@ main(int argc, char *argv[]) snprintf(attr_name, 63, "attr_name"); kvtag.name = strdup(attr_name); kvtag.value = malloc(sizeof(int64_t)); - if (kvtag.value == NULL) { - LOG_ERROR("Failed to allocate tag_value\n"); - goto done; - } + if (kvtag.value == NULL) + PGOTO_ERROR(FAIL, "Failed to allocate tag_value"); int64_t iter_val = iter; memcpy(kvtag.value, &iter_val, sizeof(int64_t)); kvtag.type = PDC_INT64; kvtag.size = get_size_by_class_n_type(kvtag.value, 1, PDC_CLS_ITEM, PDC_INT64); pdcid_t meta_id = PDC_obj_get_info(obj_ids[i])->obj_info_pub->meta_id; if (is_using_dart) { - if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); // NOTE: object ID is a local ID, we need to get the global object metadata ID if (PDC_Client_insert_obj_ref_into_dart(hash_algo, kvtag.name, kvtag.value, kvtag.size, - kvtag.type, ref_type, meta_id) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + kvtag.type, ref_type, meta_id) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); total_insert++; } else { - if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) { - LOG_ERROR("Failed to add a kvtag to o%d\n", i + my_obj_s); - } + if (PDCobj_put_tag(obj_ids[i], kvtag.name, kvtag.value, kvtag.type, kvtag.size) < 0) + PGOTO_ERROR(FAIL, "Failed to add a kvtag to o%d", i + my_obj_s); } free(kvtag.name); free(kvtag.value); @@ -239,9 +226,10 @@ main(int argc, char *argv[]) } // TODO: why n_obj has to be larger than 1000? if (my_rank == 0 /*&& n_obj > 1000 */) { - println("Rank %d: Added %d kvtag to the %d / %d th object, I'm applying selectivity %d to %d " - "objects.\n", - my_rank, round, i + 1, my_obj_after_selectivity, selectivity, my_obj); + LOG_JUST_PRINT( + "Rank %d: Added %d kvtag to the %d / %d th object, I'm applying selectivity %d to %d\n" + "objects.\n", + my_rank, round, i + 1, my_obj_after_selectivity, selectivity, my_obj); } } @@ -251,8 +239,9 @@ main(int argc, char *argv[]) #endif if (my_rank == 0) { - println("[TAG Creation] Rank %d: Added %d kvtag to %d objects, time: %.5f ms, dart_insert_count=%d", - my_rank, round, my_obj, total_time * 1000.0, get_dart_insert_count()); + LOG_JUST_PRINT( + "[TAG Creation] Rank %d: Added %d kvtag to %d objects, time: %.5f ms, dart_insert_count=%d\n", + my_rank, round, my_obj, total_time * 1000.0, get_dart_insert_count()); } #ifdef ENABLE_MPI @@ -265,24 +254,22 @@ main(int argc, char *argv[]) if (bypass_query) { if (my_rank == 0) { - println("Rank %d: All queries are bypassed.", my_rank); + LOG_JUST_PRINT("Rank %d: All queries are bypassed\n", my_rank); report_avg_server_profiling_rst(); } - goto done; + PGOTO_DONE(SUCCEED); } // For the queries, we issue #round queries. // The selectivity of each exact query should be #selectivity / 100 * #n_obj. // Namely, if you have 1M objects, selectivity is 10, then each query should return 100K objects. int iter_round = round; - if (comm_type == 0 && is_using_dart == 0) { + if (comm_type == 0 && is_using_dart == 0) iter_round = 2; - } for (comm_type = 1; comm_type >= 0; comm_type--) { for (query_type = 4; query_type < 6; query_type++) { - perr_t ret_value; - int round_total = 0; + int round_total = 0; for (iter = -1; iter < iter_round; iter++) { // -1 is for warm up #ifdef ENABLE_MPI if (iter == 0) { @@ -329,9 +316,6 @@ main(int argc, char *argv[]) else { kvtag.name = output.key_query; kvtag.value = output.value_query; - /* LOG_ERROR(" Rank %d: key [%s] value [%s]\n", my_rank, kvtag.name, - * kvtag.value); */ - #ifdef ENABLE_MPI ret_value = (comm_type == 0) ? PDC_Client_query_kvtag(&kvtag, &nres, &pdc_ids) @@ -340,18 +324,14 @@ main(int argc, char *argv[]) ret_value = PDC_Client_query_kvtag(&kvtag, &nres, &pdc_ids); #endif } - if (ret_value < 0) { - LOG_ERROR("Failed to query kvtag [%s] with rank %d\n", kvtag.name, my_rank); - break; - } + if (ret_value < 0) + PGOTO_ERROR(FAIL, "Failed to query kvtag [%s] with rank %d", kvtag.name, my_rank); // TODO: This is for checking the correctness of the query results. - if (iter >= 0) { - if (nres != total_cnt_round[iter]) - LOG_ERROR( - "Rank %d: query %d, comm %d, round %d - results %d do not match expected %d\n ", - my_rank, query_type, comm_type, iter, nres, total_cnt_round[iter]); - } + if (iter >= 0 && nres != total_cnt_round[iter]) + PGOTO_ERROR(FAIL, + "Rank %d: query %d, comm %d, round %d - results %d do not match expected %d", + my_rank, query_type, comm_type, iter, nres, total_cnt_round[iter]); round_total += nres; free(kvtag.name); @@ -369,21 +349,21 @@ main(int argc, char *argv[]) query_type_str = "EXACT"; else if (query_type == 5) query_type_str = "RANGE"; - println("[%s Client %s Query with%sINDEX] %d rounds with %d results, time: %.5f ms", - comm_type == 0 ? "Single" : "Multi", query_type_str, - is_using_dart == 0 ? " NO " : " DART ", round, round_total, total_time * 1000.0); + LOG_JUST_PRINT("[%s Client %s Query with%sINDEX] %d rounds with %d results, time: %.5f ms\n", + comm_type == 0 ? "Single" : "Multi", query_type_str, + is_using_dart == 0 ? " NO " : " DART ", round, round_total, + total_time * 1000.0); } #endif } // end query type } // end comm type if (my_rank == 0) { - println("Rank %d: All queries are done.", my_rank); + LOG_JUST_PRINT("Rank %d: All queries are done\n", my_rank); report_avg_server_profiling_rst(); } // delete all tags - #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); stime = MPI_Wtime(); @@ -397,10 +377,8 @@ main(int argc, char *argv[]) snprintf(attr_name, 63, "attr_name"); kvtag.name = strdup(attr_name); kvtag.value = malloc(sizeof(int64_t)); - if (kvtag.value == NULL) { - LOG_ERROR("Failed to allocate tag_value\n"); - goto done; - } + if (kvtag.value == NULL) + PGOTO_ERROR(FAIL, "Failed to allocate tag_value"); int64_t iter_val = iter; memcpy(kvtag.value, &iter_val, sizeof(int64_t)); kvtag.type = PDC_INT64; @@ -410,9 +388,8 @@ main(int argc, char *argv[]) PDC_Client_delete_obj_ref_from_dart(hash_algo, kvtag.name, (char *)kvtag.value, kvtag.size, kvtag.type, ref_type, meta_id); } - else { + else PDCobj_del_tag(obj_ids[i], kvtag.name); - } free(kvtag.name); free(kvtag.value); } @@ -422,52 +399,36 @@ main(int argc, char *argv[]) MPI_Barrier(MPI_COMM_WORLD); total_time = MPI_Wtime() - stime; #endif - if (my_rank == 0) { - println("[TAG Deletion] Rank %d: Deleted %d kvtag from %d objects, time: %.5f ms", my_rank, round, - my_obj, total_time * 1000.0); - } + if (my_rank == 0) + LOG_JUST_PRINT("[TAG Deletion] Rank %d: Deleted %d kvtag from %d objects, time: %.5f ms\n", my_rank, + round, my_obj, total_time * 1000.0); -done: // close a container - if (PDCcont_close(cont) < 0) { - if (my_rank == 0) { - LOG_ERROR("Failed to close container c1\n"); - } - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed container c1\n"); - } + if (PDCcont_close(cont) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close container c1"); + else if (my_rank == 0) + LOG_INFO("Successfully closed container c1\n"); // close an object property - if (PDCprop_close(obj_prop) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed object property\n"); - } + if (PDCprop_close(obj_prop) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close property"); + else if (my_rank == 0) + LOG_INFO("Successfully closed object property\n"); // close a container property - if (PDCprop_close(cont_prop) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close property"); - } - else { - if (my_rank == 0) - LOG_INFO("Successfully closed container property\n"); - } + if (PDCprop_close(cont_prop) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close property"); + else if (my_rank == 0) + LOG_INFO("Successfully closed container property\n"); // close pdc - if (PDCclose(pdc) < 0) { - if (my_rank == 0) - LOG_ERROR("Failed to close PDC\n"); - } + if (PDCclose(pdc) < 0 && my_rank == 0) + PGOTO_ERROR(FAIL, "Failed to close PDC"); +done: #ifdef ENABLE_MPI MPI_Finalize(); #endif - return 0; + return ret_value; } diff --git a/src/tests/pdc_transforms_lib.c b/src/tests/transform/pdc_transforms_lib.c similarity index 98% rename from src/tests/pdc_transforms_lib.c rename to src/tests/transform/pdc_transforms_lib.c index a3a65e299..4d3d08e97 100644 --- a/src/tests/pdc_transforms_lib.c +++ b/src/tests/transform/pdc_transforms_lib.c @@ -603,7 +603,7 @@ pdc_transform_increment(void *dataIn, PDC_var_type_t srcType, int ndim, uint64_t } break; default: - LOG_INFO("\n[TRANSFORM] Unable to increment values\n"); + LOG_ERROR("\n[TRANSFORM] Unable to increment values\n"); return -1; break; } @@ -650,9 +650,9 @@ pdc_transform_compress(void *dataIn, PDC_var_type_t srcType, int ndim, uint64_t csize = blosc_compress(clevel, doshuffle, typesize, nbytes, dataIn, destBuff, destsize); if (csize < 0) - LOG_INFO("[TRANSFORM] Error while compressing data (errcode: %ld)\n", csize); + LOG_ERROR("[TRANSFORM] Error while compressing data (errcode: %ld)\n", csize); if (csize == 0) - LOG_INFO("[TRANSFORM] Unable to compress data (errcode: %ld)\n", csize); + LOG_ERROR("[TRANSFORM] Unable to compress data (errcode: %ld)\n", csize); if (csize > 0) { LOG_INFO("[TRANSFORM] Data sucessfully compressed from %ld B to %ld B\n", nbytes, csize); @@ -688,8 +688,8 @@ pdc_transform_decompress(void *dataIn, PDC_var_type_t srcType, int ndim, uint64_ dsize = (size_t)blosc_decompress(dataIn, destBuff, destsize); if (dsize <= 0) - LOG_INFO("[TRANSFORM] Error while decompressing data (errcode: %zu)\n", dsize); + LOG_ERROR("[TRANSFORM] Error while decompressing data (errcode: %zu)\n", dsize); else - LOG_INFO("[TRANSFORM] Data sucessfully decompressed!\n"); + LOG_INFO("[TRANSFORM] Data sucessfully decompressed\n"); return dsize; } diff --git a/src/tests/vpicio.c b/src/tests/vpicio.c deleted file mode 100644 index f0bf64f92..000000000 --- a/src/tests/vpicio.c +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Copyright Notice for - * Proactive Data Containers (PDC) Software Library and Utilities - * ----------------------------------------------------------------------------- - - *** Copyright Notice *** - - * Proactive Data Containers (PDC) Copyright (c) 2017, The Regents of the - * University of California, through Lawrence Berkeley National Laboratory, - * UChicago Argonne, LLC, operator of Argonne National Laboratory, and The HDF - * Group (subject to receipt of any required approvals from the U.S. Dept. of - * Energy). All rights reserved. - - * If you have questions about your rights to use or distribute this software, - * please contact Berkeley Lab's Innovation & Partnerships Office at IPO@lbl.gov. - - * NOTICE. This Software was developed under funding from the U.S. Department of - * Energy and the U.S. Government consequently retains certain rights. As such, the - * U.S. Government has been granted for itself and others acting on its behalf a - * paid-up, nonexclusive, irrevocable, worldwide license in the Software to - * reproduce, distribute copies to the public, prepare derivative works, and - * perform publicly and display publicly, and to permit other to do so. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pdc.h" - -#define NPARTICLES 8388608 - -double -uniform_random_number() -{ - return (((double)rand()) / ((double)(RAND_MAX))); -} - -void -print_usage() -{ - LOG_JUST_PRINT("Usage: srun -n ./vpicio #particles\n"); -} - -int -main(int argc, char **argv) -{ - int rank = 0, size = 1; - pdcid_t pdc_id, cont_prop, cont_id; - pdcid_t obj_prop_xx, obj_prop_yy, obj_prop_zz, obj_prop_pxx, obj_prop_pyy, obj_prop_pzz, obj_prop_id11, - obj_prop_id22; - pdcid_t obj_xx, obj_yy, obj_zz, obj_pxx, obj_pyy, obj_pzz, obj_id11, obj_id22; - pdcid_t region_x, region_y, region_z, region_px, region_py, region_pz, region_id1, region_id2; - pdcid_t region_xx, region_yy, region_zz, region_pxx, region_pyy, region_pzz, region_id11, region_id22; - perr_t ret; -#ifdef ENABLE_MPI - MPI_Comm comm; -#else - int comm = 1; -#endif - float * x, *y, *z; - float * px, *py, *pz; - int * id1, *id2; - int x_dim = 64; - int y_dim = 64; - int z_dim = 64; - uint64_t numparticles, i; - uint64_t dims[1]; - int ndim = 1; - uint64_t *offset; - uint64_t *offset_remote; - uint64_t *mysize; - double t0, t1; - - pdcid_t transfer_request_x, transfer_request_y, transfer_request_z, transfer_request_px, - transfer_request_py, transfer_request_pz, transfer_request_id1, transfer_request_id2; - -#ifdef ENABLE_MPI - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &size); - MPI_Comm_dup(MPI_COMM_WORLD, &comm); -#endif - - numparticles = NPARTICLES; - if (argc == 2) { - numparticles = atoll(argv[1]); - if (rank == 0) - LOG_INFO("Writing %" PRIu64 " number of particles with %d clients.\n", numparticles, size); - } - - dims[0] = numparticles * size; - - x = (float *)malloc(numparticles * sizeof(float)); - y = (float *)malloc(numparticles * sizeof(float)); - z = (float *)malloc(numparticles * sizeof(float)); - - px = (float *)malloc(numparticles * sizeof(float)); - py = (float *)malloc(numparticles * sizeof(float)); - pz = (float *)malloc(numparticles * sizeof(float)); - - id1 = (int *)malloc(numparticles * sizeof(int)); - id2 = (int *)malloc(numparticles * sizeof(int)); - - // create a pdc - pdc_id = PDCinit("pdc"); - - // create a container property - cont_prop = PDCprop_create(PDC_CONT_CREATE, pdc_id); - if (cont_prop <= 0) { - LOG_ERROR("Failed to create container property"); - return 1; - } - // create a container - cont_id = PDCcont_create_col("c1", cont_prop); - if (cont_id <= 0) { - LOG_ERROR("Failed to create container"); - return 1; - } - // create an object property - obj_prop_xx = PDCprop_create(PDC_OBJ_CREATE, pdc_id); - - PDCprop_set_obj_transfer_region_type(obj_prop_xx, PDC_REGION_LOCAL); - PDCprop_set_obj_dims(obj_prop_xx, 1, dims); - PDCprop_set_obj_type(obj_prop_xx, PDC_FLOAT); - PDCprop_set_obj_time_step(obj_prop_xx, 0); - PDCprop_set_obj_user_id(obj_prop_xx, getuid()); - PDCprop_set_obj_app_name(obj_prop_xx, "VPICIO"); - PDCprop_set_obj_tags(obj_prop_xx, "tag0=1"); - - obj_prop_yy = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_yy, PDC_FLOAT); - - obj_prop_zz = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_zz, PDC_FLOAT); - - obj_prop_pxx = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_pxx, PDC_FLOAT); - - obj_prop_pyy = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_pyy, PDC_FLOAT); - - obj_prop_pzz = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_pzz, PDC_FLOAT); - - obj_prop_id11 = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_id11, PDC_INT); - - obj_prop_id22 = PDCprop_obj_dup(obj_prop_xx); - PDCprop_set_obj_type(obj_prop_id22, PDC_INT); - - for (i = 0; i < numparticles; i++) { - id1[i] = i; - id2[i] = i * 2; - x[i] = uniform_random_number() * x_dim; - y[i] = uniform_random_number() * y_dim; - z[i] = ((float)id1[i] / numparticles) * z_dim; - px[i] = uniform_random_number() * x_dim; - py[i] = uniform_random_number() * y_dim; - pz[i] = ((float)id2[i] / numparticles) * z_dim; - } - - offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - offset_remote = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - mysize = (uint64_t *)malloc(sizeof(uint64_t) * ndim); - offset[0] = 0; - offset_remote[0] = rank * numparticles; - mysize[0] = numparticles; - - // create a region - region_x = PDCregion_create(ndim, offset, mysize); - region_y = PDCregion_create(ndim, offset, mysize); - region_z = PDCregion_create(ndim, offset, mysize); - region_px = PDCregion_create(ndim, offset, mysize); - region_py = PDCregion_create(ndim, offset, mysize); - region_pz = PDCregion_create(ndim, offset, mysize); - region_id1 = PDCregion_create(ndim, offset, mysize); - region_id2 = PDCregion_create(ndim, offset, mysize); - - region_xx = PDCregion_create(ndim, offset_remote, mysize); - region_yy = PDCregion_create(ndim, offset_remote, mysize); - region_zz = PDCregion_create(ndim, offset_remote, mysize); - region_pxx = PDCregion_create(ndim, offset_remote, mysize); - region_pyy = PDCregion_create(ndim, offset_remote, mysize); - region_pzz = PDCregion_create(ndim, offset_remote, mysize); - region_id11 = PDCregion_create(ndim, offset_remote, mysize); - region_id22 = PDCregion_create(ndim, offset_remote, mysize); - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t0 = MPI_Wtime(); -#endif - obj_xx = PDCobj_create_mpi(cont_id, "obj-var-xx", obj_prop_xx, 0, comm); - if (obj_xx == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-xx"); - exit(-1); - } - - obj_yy = PDCobj_create_mpi(cont_id, "obj-var-yy", obj_prop_yy, 0, comm); - if (obj_yy == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-yy"); - exit(-1); - } - obj_zz = PDCobj_create_mpi(cont_id, "obj-var-zz", obj_prop_zz, 0, comm); - if (obj_zz == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-zz"); - exit(-1); - } - obj_pxx = PDCobj_create_mpi(cont_id, "obj-var-pxx", obj_prop_pxx, 0, comm); - if (obj_pxx == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-pxx"); - exit(-1); - } - obj_pyy = PDCobj_create_mpi(cont_id, "obj-var-pyy", obj_prop_pyy, 0, comm); - if (obj_pyy == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-pyy"); - exit(-1); - } - obj_pzz = PDCobj_create_mpi(cont_id, "obj-var-pzz", obj_prop_pzz, 0, comm); - if (obj_pzz == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj-var-pzz"); - exit(-1); - } - - obj_id11 = PDCobj_create_mpi(cont_id, "id11", obj_prop_id11, 0, comm); - if (obj_id11 == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj_id11"); - exit(-1); - } - obj_id22 = PDCobj_create_mpi(cont_id, "id22", obj_prop_id22, 0, comm); - if (obj_id22 == 0) { - LOG_ERROR("Error getting an object id of %s from server, exit...\n", "obj_id22"); - exit(-1); - } - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t1 = MPI_Wtime(); - if (rank == 0) { - LOG_INFO("Obj create time: %.5e\n", t1 - t0); - } -#endif - - transfer_request_x = PDCregion_transfer_create(&x[0], PDC_WRITE, obj_xx, region_x, region_xx); - if (transfer_request_x == 0) { - LOG_ERROR("Array x transfer request creation failed\n"); - return 1; - } - transfer_request_y = PDCregion_transfer_create(&y[0], PDC_WRITE, obj_yy, region_y, region_yy); - if (transfer_request_y == 0) { - LOG_ERROR("Array y transfer request creation failed\n"); - return 1; - } - transfer_request_z = PDCregion_transfer_create(&z[0], PDC_WRITE, obj_zz, region_z, region_zz); - if (transfer_request_z == 0) { - LOG_ERROR("Array z transfer request creation failed\n"); - return 1; - } - transfer_request_px = PDCregion_transfer_create(&px[0], PDC_WRITE, obj_pxx, region_px, region_pxx); - if (transfer_request_px == 0) { - LOG_ERROR("Array px transfer request creation failed\n"); - return 1; - } - transfer_request_py = PDCregion_transfer_create(&py[0], PDC_WRITE, obj_pyy, region_py, region_pyy); - if (transfer_request_py == 0) { - LOG_ERROR("Array py transfer request creation failed\n"); - return 1; - } - transfer_request_pz = PDCregion_transfer_create(&pz[0], PDC_WRITE, obj_pzz, region_pz, region_pzz); - if (transfer_request_pz == 0) { - LOG_ERROR("Array pz transfer request creation failed\n"); - return 1; - } - transfer_request_id1 = PDCregion_transfer_create(&id1[0], PDC_WRITE, obj_id11, region_id1, region_id11); - if (transfer_request_id1 == 0) { - LOG_ERROR("Array id1 transfer request creation failed\n"); - return 1; - } - transfer_request_id2 = PDCregion_transfer_create(&id2[0], PDC_WRITE, obj_id22, region_id2, region_id22); - if (transfer_request_id2 == 0) { - LOG_ERROR("Array id2 transfer request creation failed\n"); - return 1; - } - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t0 = MPI_Wtime(); - if (rank == 0) { - LOG_INFO("Transfer create time: %.5e\n", t0 - t1); - } -#endif - - ret = PDCregion_transfer_start(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_xx\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_yy\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_zz\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_pxx\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_pyy\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_pzz\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_id11\n"); - return 1; - } - ret = PDCregion_transfer_start(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("failed to start transfer for region_id22\n"); - return 1; - } - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t1 = MPI_Wtime(); - if (rank == 0) { - LOG_INFO("Transfer start time: %.5e\n", t1 - t0); - } -#endif - - ret = PDCregion_transfer_wait(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_xx\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_yy\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_zz\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_pxx\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_pyy\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_pzz\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_id11\n"); - return 1; - } - ret = PDCregion_transfer_wait(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("failed to transfer wait for region_id22\n"); - return 1; - } - -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t0 = MPI_Wtime(); - if (rank == 0) { - LOG_ERROR("Transfer wait time: %.5e\n", t0 - t1); - } -#endif - - ret = PDCregion_transfer_close(transfer_request_x); - if (ret != SUCCEED) { - LOG_ERROR("region xx transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_y); - if (ret != SUCCEED) { - LOG_ERROR("region yy transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_z); - if (ret != SUCCEED) { - LOG_ERROR("region zz transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_px); - if (ret != SUCCEED) { - LOG_ERROR("region pxx transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_py); - if (ret != SUCCEED) { - LOG_ERROR("region pyy transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_pz); - if (ret != SUCCEED) { - LOG_ERROR("region pzz transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_id1); - if (ret != SUCCEED) { - LOG_ERROR("region id11 transfer close failed\n"); - return 1; - } - ret = PDCregion_transfer_close(transfer_request_id2); - if (ret != SUCCEED) { - LOG_ERROR("region id22 transfer close failed\n"); - return 1; - } - - PDC_timing_report("write"); -#ifdef ENABLE_MPI - MPI_Barrier(MPI_COMM_WORLD); - t1 = MPI_Wtime(); - if (rank == 0) { - LOG_ERROR("Transfer close time: %.5e\n", t1 - t0); - } -#endif - - if (PDCobj_close(obj_xx) < 0) { - LOG_ERROR("Failed to close obj_xx\n"); - return 1; - } - - if (PDCobj_close(obj_yy) < 0) { - LOG_ERROR("Failed to close object obj_yy\n"); - return 1; - } - if (PDCobj_close(obj_zz) < 0) { - LOG_ERROR("Failed to close object obj_zz\n"); - return 1; - } - if (PDCobj_close(obj_pxx) < 0) { - LOG_ERROR("Failed to close object obj_pxx\n"); - return 1; - } - if (PDCobj_close(obj_pyy) < 0) { - LOG_ERROR("Failed to close object obj_pyy\n"); - return 1; - } - if (PDCobj_close(obj_pzz) < 0) { - LOG_ERROR("Failed to close object obj_pzz\n"); - return 1; - } - if (PDCobj_close(obj_id11) < 0) { - LOG_ERROR("Failed to close object obj_id11\n"); - return 1; - } - if (PDCobj_close(obj_id22) < 0) { - LOG_ERROR("Failed to close object obj_id22\n"); - return 1; - } - if (PDCprop_close(obj_prop_xx) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_xx\n"); - return 1; - } - if (PDCprop_close(obj_prop_yy) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_yy\n"); - return 1; - } - if (PDCprop_close(obj_prop_zz) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_zz\n"); - return 1; - } - if (PDCprop_close(obj_prop_pxx) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_pxx\n"); - return 1; - } - if (PDCprop_close(obj_prop_pyy) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_pyy\n"); - return 1; - } - if (PDCprop_close(obj_prop_pzz) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_pzz\n"); - return 1; - } - if (PDCprop_close(obj_prop_id11) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_id11\n"); - return 1; - } - if (PDCprop_close(obj_prop_id22) < 0) { - LOG_ERROR("Failed to close obj property obj_prop_id22\n"); - return 1; - } - if (PDCregion_close(region_x) < 0) { - LOG_ERROR("Failed to close region region_x\n"); - return 1; - } - if (PDCregion_close(region_y) < 0) { - LOG_ERROR("Failed to close region region_y\n"); - return 1; - } - if (PDCregion_close(region_z) < 0) { - LOG_ERROR("Failed to close region region_z\n"); - return 1; - } - if (PDCregion_close(region_px) < 0) { - LOG_ERROR("Failed to close region region_px\n"); - return 1; - } - if (PDCregion_close(region_py) < 0) { - LOG_ERROR("Failed to close region region_py\n"); - return 1; - } - if (PDCobj_close(region_pz) < 0) { - LOG_ERROR("Failed to close region region_pz\n"); - return 1; - } - if (PDCobj_close(region_id1) < 0) { - LOG_ERROR("Failed to close region region_id1\n"); - return 1; - } - if (PDCobj_close(region_id2) < 0) { - LOG_ERROR("Failed to close region region_id2\n"); - return 1; - } - if (PDCregion_close(region_xx) < 0) { - LOG_ERROR("Failed to close region region_xx\n"); - return 1; - } - if (PDCregion_close(region_yy) < 0) { - LOG_ERROR("Failed to close region region_yy\n"); - return 1; - } - if (PDCregion_close(region_zz) < 0) { - LOG_ERROR("Failed to close region region_zz\n"); - return 1; - } - if (PDCregion_close(region_pxx) < 0) { - LOG_ERROR("Failed to close region region_pxx\n"); - return 1; - } - if (PDCregion_close(region_pyy) < 0) { - LOG_ERROR("Failed to close region region_pyy\n"); - return 1; - } - if (PDCregion_close(region_pzz) < 0) { - LOG_ERROR("Failed to close region region_pzz\n"); - return 1; - } - if (PDCobj_close(region_id11) < 0) { - LOG_ERROR("Failed to close region region_id11\n"); - return 1; - } - if (PDCobj_close(region_id22) < 0) { - LOG_ERROR("Failed to close region region_id22\n"); - return 1; - } - // close a container - if (PDCcont_close(cont_id) < 0) { - LOG_ERROR("Failed to close container c1\n"); - return 1; - } - // close a container property - if (PDCprop_close(cont_prop) < 0) { - LOG_ERROR("Failed to close property"); - return 1; - } - if (PDCclose(pdc_id) < 0) { - LOG_ERROR("Failed to close PDC\n"); - return 1; - } - free(offset); - free(offset_remote); - free(mysize); - free(x); - free(y); - free(z); - free(px); - free(py); - free(pz); - free(id1); - free(id2); -#ifdef ENABLE_MPI - MPI_Finalize(); -#endif - - return 0; -} diff --git a/src/tools/hdf5_access_eqsim.c b/src/tools/hdf5_access_eqsim.c index efc39d8e9..c251c9582 100644 --- a/src/tools/hdf5_access_eqsim.c +++ b/src/tools/hdf5_access_eqsim.c @@ -8,6 +8,7 @@ #include "mpi.h" #include "hdf5.h" +#include "pdc_logger.h" int main(int argc, char **argv) @@ -43,7 +44,7 @@ main(int argc, char **argv) readt = ceil(1.0 * dims[0] / chunk_size[0]) * chunk_size[0] / devide_factor; if (rank == 0) - LOG_ERROR("Round %d, use chunk cache %d, devide factor %d\n", round, use_chunk_cache, devide_factor); + LOG_INFO("Round %d, use chunk cache %d, devide factor %d\n", round, use_chunk_cache, devide_factor); fapl = H5Pcreate(H5P_FILE_ACCESS); H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); @@ -95,7 +96,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: read metadata took %.4lf\n", r, t1 - t0); + LOG_INFO("Round %d: read metadata took %.4lf\n", r, t1 - t0); } H5Dclose(meta_dset); @@ -122,8 +123,8 @@ main(int argc, char **argv) data = (double *)malloc(sizeof(double) * size[0] * size[1] * size[2]); if (nproc <= 16) - LOG_ERROR("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], - offset[2], size[0], size[1], size[2]); + LOG_INFO("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], + offset[2], size[0], size[1], size[2]); for (r = 0; r < round; r++) { if (r == round - 1 && use_chunk_cache > 0) @@ -142,7 +143,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d, Read from HDF5 took %.4lf\n", r, t1 - t0); + LOG_INFO("Round %d, Read from HDF5 took %.4lf\n", r, t1 - t0); if (r != round - 1) { // leave dset open for following patterns @@ -184,11 +185,11 @@ main(int argc, char **argv) t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: Scanning data took %.4lf\n", r, t1 - t0); + LOG_INFO("Round %d: Scanning data took %.4lf\n", r, t1 - t0); } - LOG_ERROR("Rank %d: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", rank, cnt[0], cnt[1], cnt[2], cnt[3], - cnt[4], cnt[5], cnt[6], cnt[7], cnt[8], cnt[9]); + LOG_INFO("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n", cnt[0], cnt[1], cnt[2], cnt[3], cnt[4], cnt[5], + cnt[6], cnt[7], cnt[8], cnt[9]); MPI_Barrier(MPI_COMM_WORLD); //=============PATTERN 2=============== @@ -210,8 +211,8 @@ main(int argc, char **argv) mspace = H5Screate_simple(4, size, NULL); if (nproc <= 16) - LOG_ERROR("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], - offset[2], size[0], size[1], size[2]); + LOG_INFO("Offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], offset[2], + size[0], size[1], size[2]); if (rank == 0) opensees_data = (double *)malloc(sizeof(double) * dims[0] * opensees_size * opensees_size); @@ -233,7 +234,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: rank 0 read OpenSees 200x200m data took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: rank 0 read OpenSees 200x200m data took %.6lf\n", r, t1 - t0); } // End for round @@ -276,7 +277,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: all ranks read ssi_downsample data took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: all ranks read ssi_downsample data took %.6lf\n", r, t1 - t0); } // End for round @@ -319,7 +320,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: all ranks read rec_downsample data took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: all ranks read rec_downsample data took %.6lf\n", r, t1 - t0); } // End for round @@ -360,7 +361,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: rank 0 read 1 time-history took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: rank 0 read 1 time-history took %.6lf\n", r, t1 - t0); } // End for round diff --git a/src/tools/meta_json/metadata_json_importer.c b/src/tools/meta_json/metadata_json_importer.c index d937325de..4a75e938a 100644 --- a/src/tools/meta_json/metadata_json_importer.c +++ b/src/tools/meta_json/metadata_json_importer.c @@ -88,7 +88,7 @@ import_object_base(cJSON *name, cJSON *type, cJSON *full_path, MD_JSON_ARGS *md_ pdc_importer_args_t *pdc_args = (pdc_importer_args_t *)md_json_args->processor_args; if (cJSON_GetStringValue(name) == NULL) { - LOG_ERROR("Object name is NULL!\n"); + LOG_ERROR("Object name is NULL\n"); return -1; } char datetime_buff[15]; @@ -101,18 +101,18 @@ import_object_base(cJSON *name, cJSON *type, cJSON *full_path, MD_JSON_ARGS *md_ sprintf(object_name, "%s_%d%s", cJSON_GetStringValue(name), md_json_args->mpi_rank, datetime_buff); pdc_args->obj_id = PDCobj_create(pdc_args->cont, object_name, pdc_args->obj_prop); if (pdc_args->obj_id <= 0) { - LOG_ERROR("Failed to create object!\n"); + LOG_ERROR("Failed to create object\n"); return -1; } if (PDCobj_put_tag(pdc_args->obj_id, "obj_full_path", (void *)cJSON_GetStringValue(full_path), PDC_STRING, strlen(cJSON_GetStringValue(full_path)) + 1) != SUCCEED) { - LOG_ERROR("Failed to put tag!\n"); + LOG_ERROR("Failed to put tag\n"); return -1; } if (PDCobj_put_tag(pdc_args->obj_id, "obj_type", (void *)cJSON_GetStringValue(type), PDC_STRING, strlen(cJSON_GetStringValue(type)) + 1) != SUCCEED) { - LOG_ERROR("Failed to put tag!\n"); + LOG_ERROR("Failed to put tag\n"); return -1; } @@ -170,7 +170,7 @@ import_object_property(cJSON *name, cJSON *type, cJSON *cls, cJSON *value, MD_JS if (PDCobj_put_tag(pdc_args->obj_id, name->valuestring, (void *)&property_value, pdc_type, property_value_size) != SUCCEED) { - LOG_ERROR("Failed to add tag!\n"); + LOG_ERROR("Failed to add tag\n"); } end: diff --git a/src/tools/meta_json/metadata_json_printer.c b/src/tools/meta_json/metadata_json_printer.c index 1ccacd318..791d6e4d6 100644 --- a/src/tools/meta_json/metadata_json_printer.c +++ b/src/tools/meta_json/metadata_json_printer.c @@ -1,4 +1,5 @@ #include "metadata_json_printer.h" +#include "pdc_logger.h" int init_printer(MD_JSON_ARGS *md_json_args) @@ -64,4 +65,4 @@ create_md_json_printer() md_json_processor->complete_one_json_file = done_printing_one_json; md_json_processor->finalize_processor = finalize_printer; return md_json_processor; -} \ No newline at end of file +} diff --git a/src/tools/metadata_json_loader.c b/src/tools/metadata_json_loader.c index 77ba9859f..6f6c2e6af 100644 --- a/src/tools/metadata_json_loader.c +++ b/src/tools/metadata_json_loader.c @@ -135,7 +135,7 @@ parseJSON(const char *jsonString, void *args) int num_objects = cJSON_GetArraySize(objects); #ifdef JMD_VERBOSE - println("Start to import %d objects...\n", num_objects); + LOG_JUST_PRINT("Start to import %d objects...\n", num_objects); timer_start(&total_timer); #endif @@ -153,7 +153,7 @@ parseJSON(const char *jsonString, void *args) int object_creation_result = md_json_processor->process_object_base(name, type, full_path, md_json_args); if (object_creation_result != 0) { - println("Error: failed to create object %s\n", cJSON_GetStringValue(name)); + LOG_ERROR("Error: failed to create object %s\n", cJSON_GetStringValue(name)); continue; } int num_properties = parseProperties(properties, md_json_args); @@ -161,13 +161,13 @@ parseJSON(const char *jsonString, void *args) md_json_args->total_prop_count += num_properties; #ifdef JMD_VERBOSE timer_pause(&obj_timer); - println(" Imported object %s with %d properties in %.4f ms.\n", cJSON_GetStringValue(name), - num_properties, timer_delta_ms(&obj_timer)); + LOG_JUST_PRINT(" Imported object %s with %d properties in %.4f ms.\n", cJSON_GetStringValue(name), + num_properties, timer_delta_ms(&obj_timer)); #endif } md_json_args->total_obj_count += num_objects; #ifdef JMD_VERBOSE - println("Imported %d objects in %.4f ms.\n", num_objects, timer_delta_ms(&total_timer)); + LOG_JUST_PRINT("Imported %d objects in %.4f ms.\n", num_objects, timer_delta_ms(&total_timer)); md_json_processor->complete_one_json_file(md_json_args); #endif end: @@ -259,10 +259,7 @@ main(int argc, char **argv) // check the current working directory char cwd[768]; - if (getcwd(cwd, sizeof(cwd)) != NULL) { - // println("Current working dir: %s\n", cwd); - } - else { + if (getcwd(cwd, sizeof(cwd)) == NULL) { perror("getcwd() error"); return 1; } @@ -287,7 +284,7 @@ main(int argc, char **argv) MD_JSON_ARGS *md_json_args = (MD_JSON_ARGS *)malloc(sizeof(MD_JSON_ARGS)); // we initialize PDC in the function below if (md_json_processor->init_processor(md_json_args) < 0) { - println("Error: failed to initialize the JSON processor.\n"); + LOG_ERROR("Error: failed to initialize the JSON processor.\n"); return EXIT_FAILURE; } @@ -322,11 +319,10 @@ main(int argc, char **argv) num_files = md_json_args->processed_file_count; #endif - if (rank == 0) { - println("Processed %d files, imported %" PRIu64 " objects and %" PRIu64 - " attributes. Total duration: %.4f seconds.\n", - num_files, total_obj_count, total_prop_count, duration); - } + if (rank == 0) + LOG_JUST_PRINT("Processed %d files, imported %" PRIu64 " objects and %" PRIu64 + " attributes. Total duration: %.4f seconds.\n", + num_files, total_obj_count, total_prop_count, duration); md_json_processor->finalize_processor(md_json_args); diff --git a/src/tools/pdc_access_eqsim.c b/src/tools/pdc_access_eqsim.c index 2483665d3..902a46fce 100644 --- a/src/tools/pdc_access_eqsim.c +++ b/src/tools/pdc_access_eqsim.c @@ -74,8 +74,8 @@ main(int argc, char **argv) remote_reg = PDCregion_create(3, pdc_offset, pdc_size); if (nproc <= 16) - LOG_ERROR("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, pdc_offset[0], - pdc_offset[1], pdc_offset[2], pdc_size[0], pdc_size[1], pdc_size[2]); + LOG_INFO("Offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, pdc_offset[0], pdc_offset[1], + pdc_offset[2], pdc_size[0], pdc_size[1], pdc_size[2]); // Tag retrieval sprintf(tag_name, "%llu-%llu\n", pdc_offset[1], pdc_offset[2]); @@ -91,11 +91,11 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: tag retrival query took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: tag retrival query took %.6lf\n", r, t1 - t0); #endif if (value_size != 4 * sizeof(double)) - LOG_ERROR("Error: Round %d: tag retrival result size %llu / %llu \n", r, value_size, - 4 * sizeof(double)); + LOG_INFO("Error: Round %d: tag retrival result size %llu / %llu \n", r, value_size, + 4 * sizeof(double)); if (tag_value) free(tag_value); } @@ -119,7 +119,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: rank 0 read OpenSees 200x200m data from server took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: rank 0 read OpenSees 200x200m data from server took %.6lf\n", r, t1 - t0); #endif if (rank == 0) @@ -178,7 +178,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: all ranks read ssi_downsample data from server took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: all ranks read ssi_downsample data from server took %.6lf\n", r, t1 - t0); #endif for (i = 0; i < batchsize; i++) @@ -235,7 +235,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: all ranks read rec_downsample data from server took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: all ranks read rec_downsample data from server took %.6lf\n", r, t1 - t0); #endif for (i = 0; i < batchsize; i++) @@ -278,7 +278,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Round %d: rank 0 read single time series from server took %.6lf\n", r, t1 - t0); + LOG_INFO("Round %d: rank 0 read single time series from server took %.6lf\n", r, t1 - t0); #endif } // End for round diff --git a/src/tools/pdc_export.c b/src/tools/pdc_export.c index 335faf91a..bbe5039b4 100644 --- a/src/tools/pdc_export.c +++ b/src/tools/pdc_export.c @@ -216,7 +216,7 @@ main(int argc, char *argv[]) } } if (head == NULL) { - LOG_ERRO("Unable to open/locate checkpoint file(s).\n"); + LOG_ERROR("Unable to open/locate checkpoint file(s).\n"); return 1; } else { @@ -390,7 +390,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) FILE *file = fopen(filename, "r"); if (file == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file open FAILED [%s]!", pdc_server_rank_g, filename); + LOG_ERROR("Checkpoint file open FAILED [%s]\n", filename); ret_value = FAIL; continue; } @@ -499,7 +499,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) LOG_ERROR("Read failed for n_region\n"); } if (n_region < 0) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file region number ERROR!", pdc_server_rank_g); + LOG_ERROR("Checkpoint file region number error\n"); ret_value = FAIL; continue; } @@ -525,8 +525,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) LOG_ERROR("Read failed for region_list->region_hist->nbin\n"); } if (region_list->region_hist->nbin == 0) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file histogram size is 0!", - pdc_server_rank_g); + LOG_ERROR("Checkpoint file histogram size is 0\n"); } region_list->region_hist->range = @@ -647,9 +646,8 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) MetadataNode * cur_metadata_node = metadata_head; pdc_metadata_t *cur_metadata; hid_t file_id; - fflush(stdout); - hid_t group_id; - hid_t dset_id; + hid_t group_id; + hid_t dset_id; // iterate through each node while (cur_metadata_node != NULL) { cur_metadata = cur_metadata_node->metadata_ptr; diff --git a/src/tools/pdc_import.c b/src/tools/pdc_import.c index 0fb670df6..25488baad 100644 --- a/src/tools/pdc_import.c +++ b/src/tools/pdc_import.c @@ -109,9 +109,6 @@ main(int argc, char **argv) int displs[MAX_FILES]; int total_dset = 0; container_names = newList(); - /* char* summary_fname = "/global/cscratch1/sd/houhun/tag_size_summary.csv"; */ - - /* summary_fp_g = fopen(summary_fname, "a+"); */ // create a pdc pdc_id_g = PDCinit("pdc"); @@ -156,7 +153,6 @@ main(int argc, char **argv) fclose(filenames_fp); LOG_INFO("Running with %d clients, %d files\n", size, total_count); - fflush(stdout); } } if (argc > 2) { @@ -209,10 +205,9 @@ main(int argc, char **argv) #endif - LOG_INFO("Importer%2d: Importing %d files\n", rank, my_count); + LOG_INFO("Importing %d files\n", my_count); for (i = 0; i < my_count; i++) - LOG_INFO("Importer%2d: [%s] \n", rank, my_filenames[i]); - fflush(stdout); + LOG_INFO("[%s] \n", my_filenames[i]); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -223,12 +218,10 @@ main(int argc, char **argv) for (i = 0; i < my_count; i++) { filename = my_filenames[i]; - LOG_INFO("Importer%2d: processing [%s]\n", rank, my_filenames[i]); - fflush(stdout); + LOG_INFO("Processing [%s]\n", my_filenames[i]); file = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT); if (file < 0) { LOG_ERROR("Failed to open file [%s]\n", filename); - fflush(stdout); continue; } @@ -266,8 +259,6 @@ main(int argc, char **argv) } } - /* fclose(summary_fp_g); */ - done: #ifdef ENABLE_MPI MPI_Finalize(); @@ -281,7 +272,6 @@ main(int argc, char **argv) * This can be used as a model to implement different actions and * searches. */ - void scan_group(hid_t gid, int level, char *app_name) { @@ -303,11 +293,6 @@ scan_group(hid_t gid, int level, char *app_name) */ len = H5Iget_name(gid, group_name, MAX_NAME); - /* - * process the attributes of the group, if any. - */ - // scan_attrs(gid); - /* * Get all the members of the groups, one at a time. */ @@ -346,7 +331,7 @@ scan_group(hid_t gid, int level, char *app_name) cont_id_g = PDCcont_create(group_name, cont_prop_g); if (cont_id_g <= 0) LOG_ERROR("Failed to create container"); - LOG_INFO("Importer%2d: Created container [%s]\n", rank, group_name); + LOG_INFO("Created container [%s]\n", group_name); add(container_names, group_name); } dsid = H5Dopen(gid, memb_name, H5P_DEFAULT); @@ -359,7 +344,7 @@ scan_group(hid_t gid, int level, char *app_name) H5Tclose(typeid); break; default: - LOG_ERROR(" Unknown Object Type!\n"); + LOG_ERROR(" Unknown Object Type\n"); break; } } @@ -465,7 +450,6 @@ do_dset(hid_t did, char *name, char *app_name) buf = malloc(dset_size); H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf); - /* H5Pclose(pid); */ H5Tclose(tid); H5Sclose(sid); @@ -475,7 +459,6 @@ do_dset(hid_t did, char *name, char *app_name) scan_attrs(did, obj_id); - // pdc_metadata_t *meta = NULL; obj_region.ndim = ndim; for (i = 0; i < ndim; i++) { region_offset[i] = 0; @@ -502,7 +485,6 @@ do_dset(hid_t did, char *name, char *app_name) (write_timer_end_g.tv_nsec - write_timer_start_g.tv_nsec); // calculate duration in nanoseconds; LOG_INFO("Importer%2d: Finished written 100 objects, took %.2f, my total %d\n", rank, elapsed_time / 1e9, ndset_g); - fflush(stdout); clock_gettime(CLOCK_MONOTONIC, &write_timer_start_g); } @@ -530,27 +512,19 @@ do_dtype(hid_t tid, hid_t oid, int is_compound) hid_t atype, aspace, naive_type; H5T_class_t t_class, compound_class; t_class = H5Tget_class(tid); - if (t_class < 0) { - /* puts(" Invalid datatype.\n"); */ - } - else { + if (t_class >= 0) { attr_size = H5Tget_size(tid); /* * Each class has specific properties that can be * retrieved, e.g., attr_size, byte order, exponent, etc. */ if (t_class == H5T_INTEGER) { - /* puts(" 'H5T_INTEGER'."); */ return PDC_INT; - - /* display size, signed, endianess, etc. */ } else if (t_class == H5T_FLOAT) { - /* puts(" 'H5T_FLOAT'."); */ return PDC_FLOAT; } else if (t_class == H5T_STRING) { - /* puts(" 'H5T_STRING'."); */ return PDC_CHAR; } else if (t_class == H5T_COMPOUND) { diff --git a/src/tools/pdc_import_eqsim.c b/src/tools/pdc_import_eqsim.c index ca7e162c8..a2ddae19c 100644 --- a/src/tools/pdc_import_eqsim.c +++ b/src/tools/pdc_import_eqsim.c @@ -67,7 +67,6 @@ main(int argc, char **argv) offset[2] = chunk_size[2] * start_y[rank]; offset[3] = 0; - /* size[0] = chunk_size[0]; */ size[0] = dims[0]; size[1] = chunk_size[1]; size[2] = chunk_size[2]; @@ -80,7 +79,6 @@ main(int argc, char **argv) local_offset[2] = 0; local_offset[3] = 0; - /* local_size[0] = chunk_size[0]; */ local_size[0] = dims[0]; local_size[1] = chunk_size[1]; local_size[2] = chunk_size[2]; @@ -91,8 +89,8 @@ main(int argc, char **argv) data = (double *)malloc(sizeof(double) * local_size[0] * local_size[1] * local_size[2]); if (nproc <= 16) - LOG_ERROR("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], - offset[2], size[0], size[1], size[2]); + LOG_INFO("Offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], offset[2], + size[0], size[1], size[2]); #ifdef ENABLE_MPI t0 = MPI_Wtime(); @@ -104,7 +102,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Read from HDF5 took %.4lf\n", t1 - t0); + LOG_INFO("Read from HDF5 took %.4lf\n", t1 - t0); #endif H5Sclose(mspace); @@ -126,7 +124,7 @@ main(int argc, char **argv) pdc_dims[0] = dims[0]; pdc_dims[1] = max_start_x + chunk_size[1]; pdc_dims[2] = max_start_y + chunk_size[2]; - LOG_ERROR("Rank %d: create obj dims %llu %llu %llu\n", rank, pdc_dims[0], pdc_dims[1], pdc_dims[2]); + LOG_INFO("Create obj dims %llu %llu %llu\n", rank, pdc_dims[0], pdc_dims[1], pdc_dims[2]); for (i = 0; i < 3; i++) { pdc_offset[i] = (uint64_t)offset[i]; @@ -149,7 +147,6 @@ main(int argc, char **argv) PDCprop_set_obj_transfer_region_type(obj_prop, PDC_REGION_LOCAL); obj = PDCobj_create_mpi(cont, "run1", obj_prop, 0, MPI_COMM_WORLD); - /* obj = PDCobj_create(cont, "run1", obj_prop); */ if (obj <= 0) LOG_ERROR("Failed to create object"); @@ -167,7 +164,7 @@ main(int argc, char **argv) value_size = 4 * sizeof(double); if (PDCobj_put_tag(obj, tag_name, tag_value, PDC_DOUBLE, value_size) < 0) - LOG_ERROR("Rank %d fail to put tag!\n", rank); + LOG_ERROR("Failed to put tag\n", rank); #ifdef ENABLE_MPI MPI_Barrier(MPI_COMM_WORLD); @@ -183,7 +180,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Write data to server took %.4lf\n", t1 - t0); + LOG_INFO("Write data to server took %.4lf\n", t1 - t0); #endif free(data); diff --git a/src/tools/pdc_ls.c b/src/tools/pdc_ls.c index 798a2c679..c9fae337e 100644 --- a/src/tools/pdc_ls.c +++ b/src/tools/pdc_ls.c @@ -446,7 +446,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) FILE *file = fopen(filename, "r"); if (file == NULL) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file open FAILED [%s]!", pdc_server_rank_g, filename); + LOG_ERROR("Checkpoint file open FAILED [%s]", filename); ret_value = FAIL; continue; } @@ -493,7 +493,6 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) entry->bloom = NULL; entry->metadata = NULL; - /* LOG_ERROR("size of metadata: %lu\n", sizeof(pdc_metadata_t)); */ metadata = (pdc_metadata_t *)calloc(sizeof(pdc_metadata_t), count); for (i = 0; i < count; i++) { if (fread(metadata + i, sizeof(pdc_metadata_t), 1, file) != 1) { @@ -563,7 +562,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) LOG_ERROR("Read failed for n_region\n"); } if (n_region < 0) { - LOG_ERROR("==PDC_SERVER[%d] Checkpoint file region number ERROR!", pdc_server_rank_g); + LOG_ERROR("Checkpoint file region number error\n"); ret_value = FAIL; continue; } @@ -589,8 +588,7 @@ pdc_ls(FileNameNode *file_name_node, int argc, char *argv[]) LOG_ERROR("Read failed for region_list->region_hist->nbin\n"); } if (region_list->region_hist->nbin == 0) { - LOG_ERROR("==PDC_SERVER[%d]: Checkpoint file histogram size is 0!", - pdc_server_rank_g); + LOG_ERROR("Checkpoint file histogram size is 0\n"); } region_list->region_hist->range = diff --git a/src/tools/pdc_query_eqsim.c b/src/tools/pdc_query_eqsim.c index 4ef8ddfe6..233249255 100644 --- a/src/tools/pdc_query_eqsim.c +++ b/src/tools/pdc_query_eqsim.c @@ -92,8 +92,8 @@ main(int argc, char **argv) data = (double *)malloc(sizeof(double) * local_size[0] * local_size[1] * local_size[2]); if (nproc <= 16) - LOG_ERROR("Rank %d: offset %llu, %llu, %llu size %llu, %llu, %llu\n", rank, offset[0], offset[1], - offset[2], size[0], size[1], size[2]); + LOG_INFO("Offset %llu, %llu, %llu size %llu, %llu, %llu\n", offset[0], offset[1], offset[2], size[0], + size[1], size[2]); #ifdef ENABLE_MPI t0 = MPI_Wtime(); @@ -105,7 +105,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Read from HDF5 took %.4lf\n", t1 - t0); + LOG_INFO("Read from HDF5 took %.4lf\n", t1 - t0); #endif H5Sclose(mspace); @@ -158,14 +158,14 @@ main(int argc, char **argv) value_size = 4 * sizeof(double); if (PDCobj_put_tag(obj, tag_name, tag_value, PDC_DOUBLE, value_size) < 0) - LOG_ERROR("Rank %d fail to put tag\n", rank); + LOG_ERROR("Failed to put tag\n", rank); // Query the created object pdc_metadata_t *metadata; uint32_t metadata_server_id; PDC_Client_query_metadata_name_timestep("run1", 0, &metadata, &metadata_server_id); if (metadata == NULL || metadata->obj_id == 0) { - LOG_ERROR("Error with metadata!\n"); + LOG_ERROR("Error with metadata\n"); } int ndim = 3; @@ -185,7 +185,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Write data to server took %.4lf\n", t1 - t0); + LOG_INFO("Write data to server took %.4lf\n", t1 - t0); #endif // Construct query constraints @@ -206,7 +206,7 @@ main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); t1 = MPI_Wtime(); if (rank == 0) - LOG_ERROR("Query data took %.4lf\n", t1 - t0); + LOG_INFO("Query data took %.4lf\n", t1 - t0); #endif /* PDCselection_print(&sel); */ diff --git a/src/utils/pdc_interface.c b/src/utils/pdc_interface.c index 827ae4de6..be38eb8b4 100644 --- a/src/utils/pdc_interface.c +++ b/src/utils/pdc_interface.c @@ -27,6 +27,7 @@ #include "pdc_interface.h" #include "pdc_cont_pkg.h" #include "pdc_cont.h" +#include "pdc_timing.h" #include #include @@ -44,12 +45,12 @@ static PDC_type_t PDC_next_type = (PDC_type_t)PDC_NTYPES; struct _pdc_id_info * PDC_find_id(pdcid_t idid) { + FUNC_ENTER(NULL); + struct _pdc_id_info *ret_value = NULL; PDC_type_t type; struct PDC_id_type * type_ptr; - FUNC_ENTER(NULL); - /* Check arguments */ type = PDC_TYPE(idid); if (type <= PDC_BADID || type >= PDC_next_type) @@ -63,18 +64,17 @@ PDC_find_id(pdcid_t idid) PDC_LIST_SEARCH(ret_value, &type_ptr->ids, entry, id, idid); done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_register_type(PDC_type_t type_id, PDC_free_t free_func) { + FUNC_ENTER(NULL); + struct PDC_id_type *type_ptr = NULL; perr_t ret_value = SUCCEED; - FUNC_ENTER(NULL); - /* Sanity check */ assert(type_id > 0 && type_id < (int)PDC_MAX_NUM_TYPES); @@ -101,27 +101,27 @@ PDC_register_type(PDC_type_t type_id, PDC_free_t free_func) type_ptr->init_count++; done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDC_id_register(PDC_type_t type, void *object) { + FUNC_ENTER(NULL); + struct PDC_id_type * type_ptr; struct _pdc_id_info *id_ptr; pdcid_t new_id; pdcid_t ret_value = 0; - FUNC_ENTER(NULL); /* Check arguments */ if (type <= PDC_BADID || type >= PDC_next_type) - PGOTO_ERROR(ret_value, "invalid type number"); + PGOTO_ERROR(ret_value, "Invalid type number"); type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[type]; if (NULL == type_ptr || type_ptr->init_count <= 0) - PGOTO_ERROR(ret_value, "invalid type"); + PGOTO_ERROR(ret_value, "Invalid type"); if (NULL == (id_ptr = (struct _pdc_id_info *)PDC_malloc(sizeof(struct _pdc_id_info)))) - PGOTO_ERROR(ret_value, "memory allocation failed"); + PGOTO_ERROR(ret_value, "Memory allocation failed"); /* Create the struct & it's ID */ PDC_MUTEX_LOCK(type_ptr->ids); @@ -143,22 +143,21 @@ PDC_id_register(PDC_type_t type, void *object) ret_value = new_id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_dec_ref(pdcid_t id) { + FUNC_ENTER(NULL); + int ret_value = 0; struct _pdc_id_info *id_ptr; struct PDC_id_type * type_ptr; - FUNC_ENTER(NULL); - /* General lookup of the ID */ if (NULL == (id_ptr = PDC_find_id(id))) - PGOTO_ERROR(FAIL, "can't locate ID"); + PGOTO_ERROR(FAIL, "Cannot locate ID"); ret_value = hg_atomic_decr32(&(id_ptr->count)); if (ret_value == 0) { @@ -167,7 +166,7 @@ PDC_dec_ref(pdcid_t id) if (!type_ptr->free_func || (type_ptr->free_func)((void *)id_ptr->obj_ptr) >= 0) { /* check if list is empty before remove */ if (PDC_LIST_IS_EMPTY(&type_ptr->ids)) - PGOTO_ERROR(FAIL, "can't remove ID node"); + PGOTO_ERROR(FAIL, "Cannot remove ID node"); PDC_MUTEX_LOCK(type_ptr->ids); /* Remove the node from the type */ @@ -183,21 +182,20 @@ PDC_dec_ref(pdcid_t id) } done: - fflush(stdout); FUNC_LEAVE(ret_value); } pdcid_t PDC_find_byname(PDC_type_t type, const char *byname) { + FUNC_ENTER(NULL); + pdcid_t ret_value = 0; struct _pdc_id_info *id_ptr = NULL; struct PDC_id_type * type_ptr; - FUNC_ENTER(NULL); - if (type <= PDC_BADID || type >= PDC_next_type) - PGOTO_ERROR(0, "invalid type number"); + PGOTO_ERROR(0, "Invalid type number"); type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[type]; @@ -207,59 +205,60 @@ PDC_find_byname(PDC_type_t type, const char *byname) ret_value = id_ptr->id; done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_inc_ref(pdcid_t id) { + FUNC_ENTER(NULL); + int ret_value = 0; struct _pdc_id_info *id_ptr; - FUNC_ENTER(NULL); - /* General lookup of the ID */ if (NULL == (id_ptr = PDC_find_id(id))) - PGOTO_ERROR(0, "can't locate ID"); + PGOTO_ERROR(0, "Cannot locate ID"); /* Set return value */ ret_value = hg_atomic_incr32(&(id_ptr->count)); done: - fflush(stdout); FUNC_LEAVE(ret_value); } int PDC_id_list_null(PDC_type_t type) { + FUNC_ENTER(NULL); + perr_t ret_value = 0; struct PDC_id_type *type_ptr; - FUNC_ENTER(NULL); - if (type <= PDC_BADID || type >= PDC_next_type) - PGOTO_ERROR(FAIL, "invalid type number"); + PGOTO_ERROR(FAIL, "Invalid type number"); + if (pdc_id_list_g == NULL) + PGOTO_ERROR(FAIL, "pdc_id_list_g was NULL"); type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[type]; + if (type_ptr == NULL) + PGOTO_ERROR(FAIL, "type_ptr was NULL"); if (type_ptr->id_count != 0) ret_value = type_ptr->id_count; done: - fflush(stdout); FUNC_LEAVE(ret_value); } perr_t PDC_id_list_clear(PDC_type_t type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct PDC_id_type * type_ptr; struct _pdc_id_info *id_ptr; - FUNC_ENTER(NULL); - type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[type]; while (!PDC_LIST_IS_EMPTY(&type_ptr->ids)) { @@ -281,17 +280,18 @@ PDC_id_list_clear(PDC_type_t type) perr_t PDC_destroy_type(PDC_type_t type) { + FUNC_ENTER(NULL); + perr_t ret_value = SUCCEED; struct PDC_id_type *type_ptr = NULL; - FUNC_ENTER(NULL); - + if (pdc_id_list_g == NULL) + PGOTO_ERROR(FAIL, "pdc_id_list_g was NULL"); type_ptr = (pdc_id_list_g->PDC_id_type_list_g)[type]; if (type_ptr == NULL) - PGOTO_ERROR(FAIL, "type was not initialized correctly"); + PGOTO_ERROR(FAIL, "Type was not initialized correctly"); type_ptr = (struct PDC_id_type *)(intptr_t)PDC_free(type_ptr); done: - fflush(stdout); FUNC_LEAVE(ret_value); } diff --git a/src/utils/pdc_region_utils.c b/src/utils/pdc_region_utils.c index 32d1ddc9a..32a7d13d7 100644 --- a/src/utils/pdc_region_utils.c +++ b/src/utils/pdc_region_utils.c @@ -1,35 +1,43 @@ #include "pdc_region.h" +#include "pdc_timing.h" +#include "pdc_private.h" +#include "pdc_malloc.h" #include "pdc_logger.h" #include int check_overlap(int ndim, uint64_t *offset1, uint64_t *size1, uint64_t *offset2, uint64_t *size2) { + FUNC_ENTER(NULL); + int i; for (i = 0; i < ndim; ++i) { if (!((offset1[i] + size1[i] > offset2[i] && offset2[i] >= offset1[i]) || (offset2[i] + size2[i] > offset1[i] && offset1[i] >= offset2[i]))) { - return 0; + FUNC_LEAVE(0); } } - return 1; + + FUNC_LEAVE(1); } int PDC_region_overlap_detect(int ndim, uint64_t *offset1, uint64_t *size1, uint64_t *offset2, uint64_t *size2, uint64_t **output_offset, uint64_t **output_size) { + FUNC_ENTER(NULL); + + int ret_value = 0; int i; // First we check if two regions overlaps with each other. If any of the dimensions do not overlap, then // we are done. if (!check_overlap(ndim, offset1, size1, offset2, size2)) { *output_offset = NULL; *output_size = NULL; - LOG_DEBUG("PDC_region_overlap_detect, overlap detect failed\n"); - goto done; + PGOTO_DONE(ret_value); } // Overlapping exist. - *output_offset = (uint64_t *)malloc(sizeof(uint64_t) * ndim * 2); + *output_offset = (uint64_t *)PDC_malloc(sizeof(uint64_t) * ndim * 2); *output_size = *output_offset + ndim; for (i = 0; i < ndim; ++i) { output_offset[0][i] = offset2[i] < offset1[i] ? offset1[i] : offset2[i]; @@ -39,7 +47,7 @@ PDC_region_overlap_detect(int ndim, uint64_t *offset1, uint64_t *size1, uint64_t } done: - return 0; + FUNC_LEAVE(ret_value); } /* @@ -49,6 +57,8 @@ int memcpy_subregion(int ndim, uint64_t unit, pdc_access_t access_type, char *buf, uint64_t *size, char *sub_buf, uint64_t *sub_offset, uint64_t *sub_size) { + FUNC_ENTER(NULL); + uint64_t i, j; char * ptr, *target_buf, *src_buf; @@ -95,7 +105,7 @@ memcpy_subregion(int ndim, uint64_t unit, pdc_access_t access_type, char *buf, u } } - return 0; + FUNC_LEAVE(0); } /* @@ -105,6 +115,8 @@ int memcpy_overlap_subregion(int ndim, uint64_t unit, char *buf, uint64_t *offset, uint64_t *size, char *buf2, uint64_t *offset2, uint64_t *size2, uint64_t *overlap_offset, uint64_t *overlap_size) { + FUNC_ENTER(NULL); + uint64_t i, j; char * target_buf, *src_buf; @@ -148,19 +160,183 @@ memcpy_overlap_subregion(int ndim, uint64_t unit, char *buf, uint64_t *offset, u break; } } - return 0; + + FUNC_LEAVE(0); } // Check if the first region is fully contained in the second region. These two regions must overlap. int detect_region_contained(uint64_t *offset, uint64_t *size, uint64_t *offset2, uint64_t *size2, int ndim) { + FUNC_ENTER(NULL); + int i; for (i = 0; i < ndim; ++i) { if (offset[i] < offset2[i] || offset[i] + size[i] > offset2[i] + size2[i]) { - return 0; + FUNC_LEAVE(0); } } - return 1; + + FUNC_LEAVE(1); +} + +pbool_t +PDC_region_info_transfer_t_is_equal(const region_info_transfer_t *reg1, const region_info_transfer_t *reg2) +{ + FUNC_ENTER(NULL); + + pbool_t ret_value = true; + + if (reg1 == NULL && reg2 == NULL) + PGOTO_DONE(true); + if (reg1 == NULL || reg2 == NULL) + PGOTO_DONE(false); + + if (reg1->ndim != reg2->ndim) + PGOTO_DONE(false); + + for (int i = 0; i < reg1->ndim; i++) { + if (reg1->start[i] != reg2->start[i]) { + PGOTO_DONE(false); + } + if (reg1->count[i] != reg2->count[i]) { + PGOTO_DONE(false); + } + } + +done: + FUNC_LEAVE(ret_value); +} + +perr_t +PDC_copy_region_info_transfer_t(const region_info_transfer_t *src_reg, region_info_transfer_t *dest_reg) +{ + FUNC_ENTER(NULL); + + int ret_value = SUCCEED; + + if (src_reg == NULL) + PGOTO_ERROR(FAIL, "src_reg was NULL"); + if (dest_reg == NULL) + PGOTO_ERROR(FAIL, "dest_reg was NULL"); + + memcpy(dest_reg, src_reg, sizeof(region_info_transfer_t)); + +done: + FUNC_LEAVE(ret_value); +} + +uint64_t +PDC_get_region_desc_size_bytes(uint64_t *src_reg, int unit, int ndim) +{ + FUNC_ENTER(NULL); + + if (src_reg == NULL) + LOG_WARNING("src_reg was NULL\n"); + if (ndim == 0) + return 0; + + uint64_t region_size = 1; + + for (int i = 0; i < ndim; i++) { + region_size *= src_reg[i]; + } + + FUNC_LEAVE(region_size * unit); +} + +uint64_t +PDC_get_region_desc_size_from_bytes_to_elements(const uint64_t *src_reg, int unit, int ndim) +{ + FUNC_ENTER(NULL); + + if (src_reg == NULL) + LOG_WARNING("src_reg was NULL\n"); + + uint64_t total_elements = 1; + + for (int i = 0; i < ndim; i++) { + total_elements *= src_reg[i] / unit; + } + + FUNC_LEAVE(total_elements); +} + +uint64_t +PDC_get_region_desc_size(const uint64_t *src_reg, int ndim) +{ + FUNC_ENTER(NULL); + + if (src_reg == NULL) + LOG_WARNING("src_reg was NULL\n"); + if (ndim == 0) + return 0; + + uint64_t total_elements = 1; + for (int i = 0; i < ndim; i++) { + total_elements *= src_reg[i]; + } + + FUNC_LEAVE(total_elements); +} + +perr_t +PDC_copy_region_desc_bytes_to_elements(const uint64_t *src_reg, uint64_t *dest_reg, int unit, int ndim) +{ + FUNC_ENTER(NULL); + + int ret_value = SUCCEED; + + if (src_reg == NULL) + PGOTO_ERROR(FAIL, "src_reg was NULL"); + if (dest_reg == NULL) + PGOTO_ERROR(FAIL, "dest_reg was NULL"); + + for (int i = 0; i < ndim; i++) { + dest_reg[i] = src_reg[i] / unit; + } + +done: + FUNC_LEAVE(ret_value); } + +perr_t +PDC_copy_region_desc(const uint64_t *src_reg, uint64_t *dest_reg, int src_ndim, int dest_ndim) +{ + FUNC_ENTER(NULL); + + int ret_value = SUCCEED; + + if (src_ndim != dest_ndim) + LOG_WARNING("src_ndim was not equal to dest_ndim"); + if (src_reg == NULL) + PGOTO_ERROR(FAIL, "src_reg was NULL"); + if (dest_reg == NULL) + PGOTO_ERROR(FAIL, "dest_reg was NULL"); + + memcpy(dest_reg, src_reg, dest_ndim * sizeof(uint64_t)); + +done: + FUNC_LEAVE(ret_value); +} + +perr_t +PDC_copy_region_desc_elements_to_bytes(const uint64_t *src_reg, uint64_t *dest_reg, int unit, int dest_ndim) +{ + FUNC_ENTER(NULL); + + int ret_value = SUCCEED; + + if (src_reg == NULL) + PGOTO_ERROR(FAIL, "src_reg was NULL"); + if (dest_reg == NULL) + PGOTO_ERROR(FAIL, "dest_reg was NULL"); + + for (int i = 0; i < dest_ndim; i++) { + dest_reg[i] = src_reg[i] * unit; + } + +done: + FUNC_LEAVE(ret_value); +} \ No newline at end of file