summaryrefslogtreecommitdiffstats
path: root/src/H5FPclient.c
diff options
context:
space:
mode:
authorBill Wendling <wendling@ncsa.uiuc.edu>2003-02-10 21:45:36 (GMT)
committerBill Wendling <wendling@ncsa.uiuc.edu>2003-02-10 21:45:36 (GMT)
commit83f20f35f7c32e394a721e867be79274f80fa39e (patch)
treeeaa05faa4b3b7c448087d70f760a45a7e98238cc /src/H5FPclient.c
parentcfd12267245eb154eba91ab5435acd694b694dd4 (diff)
downloadhdf5-83f20f35f7c32e394a721e867be79274f80fa39e.zip
hdf5-83f20f35f7c32e394a721e867be79274f80fa39e.tar.gz
hdf5-83f20f35f7c32e394a721e867be79274f80fa39e.tar.bz2
[svn-r6390] Purpose:
Update Description: Removed some obsolete fields - such as the AC_subst_t object ID - which isn't needed. Fixed so that there are fewer global variables. There are still some left, however. Modified the client and server code so that it handles read requests better. There were some flaws in how this was done before (it was calling H5FD_read() instead of just returning the status that it couldn't find the metadata in the cache). Platforms tested: Linux
Diffstat (limited to 'src/H5FPclient.c')
-rw-r--r--src/H5FPclient.c73
1 files changed, 47 insertions, 26 deletions
diff --git a/src/H5FPclient.c b/src/H5FPclient.c
index c0e83b7..e5df311 100644
--- a/src/H5FPclient.c
+++ b/src/H5FPclient.c
@@ -69,11 +69,12 @@ static herr_t H5FP_dump_to_file(H5FD_t *file, H5FP_read *sap_read);
*/
herr_t
H5FP_request_open(const char *mdata, int md_size, H5FP_obj_t obj_type,
- haddr_t maxaddr, unsigned *file_id, unsigned *req_id)
+ MPI_Offset maxaddr, unsigned *file_id, unsigned *req_id)
{
H5FP_request req;
MPI_Status mpi_status;
- int ret_value = SUCCEED, mrc;
+ int mrc, my_rank;
+ int ret_value = SUCCEED;
FUNC_ENTER_NOAPI(H5FP_request_open, FAIL);
@@ -84,7 +85,10 @@ H5FP_request_open(const char *mdata, int md_size, H5FP_obj_t obj_type,
HDmemset(&mpi_status, 0, sizeof(MPI_Status));
- if (H5FP_my_rank == H5FP_capt_rank) {
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
+ if ((unsigned)my_rank == H5FP_capt_rank) {
/*
* The captain process sends the information about the file to
* the SAP.
@@ -92,7 +96,7 @@ H5FP_request_open(const char *mdata, int md_size, H5FP_obj_t obj_type,
HDmemset(&req, 0, sizeof(req));
req.req_type = H5FP_REQ_OPEN;
req.req_id = H5FP_gen_request_id();
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
req.md_size = md_size;
req.obj_type = obj_type;
req.addr = maxaddr;
@@ -132,7 +136,8 @@ H5FP_request_lock(unsigned file_id, unsigned char *obj_oid,
H5FP_status_t *status)
{
H5FP_request req;
- int ret_value = SUCCEED, mrc;
+ int mrc, my_rank;
+ int ret_value = SUCCEED;
FUNC_ENTER_NOAPI(H5FP_request_lock, FAIL);
@@ -143,13 +148,16 @@ H5FP_request_lock(unsigned file_id, unsigned char *obj_oid,
HDmemset(&req, 0, sizeof(req));
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
*status = H5FP_STATUS_OK;
req.req_type = last ? H5FP_REQ_LOCK_END : H5FP_REQ_LOCK;
req.req_id = H5FP_gen_request_id();
req.file_id = file_id;
req.rw_lock = rw_lock;
req.md_size = 0;
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
H5FP_COPY_OID(req.oid, obj_oid);
if ((mrc = MPI_Send(&req, 1, H5FP_request_t, (int)H5FP_sap_rank,
@@ -200,8 +208,8 @@ H5FP_request_release_lock(unsigned file_id, unsigned char *obj_oid,
int last, unsigned *req_id, H5FP_status_t *status)
{
H5FP_request req;
+ int mrc, my_rank;
herr_t ret_value = SUCCEED;
- int mrc;
FUNC_ENTER_NOAPI(H5FP_request_release_lock, FAIL);
@@ -212,13 +220,16 @@ H5FP_request_release_lock(unsigned file_id, unsigned char *obj_oid,
HDmemset(&req, 0, sizeof(req));
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
*status = H5FP_STATUS_OK;
H5FP_COPY_OID(req.oid, obj_oid);
req.req_type = last ? H5FP_REQ_RELEASE_END : H5FP_REQ_RELEASE;
req.req_id = H5FP_gen_request_id();
req.file_id = file_id;
req.md_size = 0;
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
if ((mrc = MPI_Send(&req, 1, H5FP_request_t, (int)H5FP_sap_rank,
H5FP_TAG_REQUEST, H5FP_SAP_COMM)) != MPI_SUCCESS) {
@@ -269,30 +280,34 @@ done:
*/
herr_t
H5FP_request_read_metadata(H5FD_t *file, unsigned file_id, H5FD_mem_t mem_type,
- haddr_t addr, size_t size, uint8_t **buf,
- unsigned *req_id, H5FP_status_t *status)
+ MPI_Offset addr, size_t size, uint8_t **buf,
+ int *bytes_read, unsigned *req_id, H5FP_status_t *status)
{
H5FP_request req;
H5FP_read sap_read; /* metadata info read from the SAP's cache */
- herr_t ret_value = SUCCEED;
MPI_Status mpi_status;
- int mrc;
+ int mrc, my_rank;
+ herr_t ret_value = SUCCEED;
FUNC_ENTER_NOAPI(H5FP_request_read_metadata, FAIL);
/* check args */
assert(file);
assert(buf);
+ assert(bytes_read);
assert(req_id);
assert(status);
HDmemset(&req, 0, sizeof(req));
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
*status = H5FP_STATUS_OK;
req.req_type = H5FP_REQ_READ;
req.req_id = H5FP_gen_request_id();
req.file_id = file_id;
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
req.addr = addr;
if ((mrc = MPI_Send(&req, 1, H5FP_request_t, (int)H5FP_sap_rank,
@@ -310,6 +325,7 @@ H5FP_request_read_metadata(H5FD_t *file, unsigned file_id, H5FD_mem_t mem_type,
switch (sap_read.status) {
case H5FP_STATUS_OK:
/* use the info in the H5FP_read_t structure to update the metadata */
+ *status = H5FP_STATUS_OK;
HDmemset(&mpi_status, 0, sizeof(mpi_status));
if ((mrc = MPI_Recv(*buf, (int)size, MPI_BYTE, (int)H5FP_sap_rank,
@@ -317,6 +333,7 @@ H5FP_request_read_metadata(H5FD_t *file, unsigned file_id, H5FD_mem_t mem_type,
&mpi_status)) != MPI_SUCCESS)
HMPI_GOTO_ERROR(FAIL, "MPI_Recv failed", mrc);
+ *bytes_read = size;
break;
case H5FP_STATUS_DUMPING:
/*
@@ -327,22 +344,19 @@ H5FP_request_read_metadata(H5FD_t *file, unsigned file_id, H5FD_mem_t mem_type,
if (H5FP_dump_to_file(file, &sap_read) == FAIL)
HGOTO_ERROR(H5E_FPHDF5, H5E_WRITEERROR, FAIL,
"can't write metadata update to file");
-
/* FALLTHROUGH */
case H5FP_STATUS_MDATA_NOT_CACHED:
/*
* The metadata wasn't in the SAP's cache. Should read from disk
* now.
*/
- H5FD_read(file, mem_type, H5P_DATASET_XFER_DEFAULT, addr, size, buf);
+ *status = H5FP_STATUS_MDATA_NOT_CACHED;
break;
default:
*status = sap_read.status;
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTCHANGE, FAIL, "can't write metadata to server");
}
- *status = H5FP_STATUS_OK;
-
done:
*req_id = req.req_id;
FUNC_LEAVE_NOAPI(ret_value);
@@ -364,17 +378,16 @@ done:
* Modifications:
*/
herr_t
-H5FP_request_write_metadata(H5FD_t *file, unsigned file_id, uint8_t *obj_oid,
- H5AC_subid_t type_id, haddr_t addr, int mdata_size,
- const char *mdata, unsigned *req_id,
- H5FP_status_t *status)
+H5FP_request_write_metadata(H5FD_t *file, unsigned file_id, H5FD_mem_t mem_type,
+ uint8_t *obj_oid, MPI_Offset addr, int mdata_size,
+ const char *mdata, unsigned *req_id, H5FP_status_t *status)
{
H5FP_reply sap_reply;
H5FP_read sap_read; /* metadata info read from the SAP's cache */
MPI_Status mpi_status;
H5FP_request req;
+ int mrc, my_rank;
herr_t ret_value = SUCCEED;
- int mrc;
FUNC_ENTER_NOAPI(H5FP_request_change, FAIL);
@@ -387,12 +400,15 @@ H5FP_request_write_metadata(H5FD_t *file, unsigned file_id, uint8_t *obj_oid,
HDmemset(&req, 0, sizeof(req));
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
H5FP_COPY_OID(req.oid, obj_oid);
req.req_type = H5FP_REQ_WRITE;
req.req_id = H5FP_gen_request_id();
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
req.file_id = file_id;
- req.type_id = type_id;
+ req.mem_type = mem_type;
req.addr = addr;
req.md_size = mdata_size;
@@ -473,7 +489,8 @@ H5FP_request_close(H5FD_t *file, unsigned file_id, unsigned *req_id,
H5FP_read sap_read; /* metadata info read from the SAP's cache */
H5FP_request req;
MPI_Status mpi_status;
- int ret_value = SUCCEED, mrc;
+ int mrc, my_rank;
+ int ret_value = SUCCEED;
FUNC_ENTER_NOAPI(H5FP_request_close, FAIL);
@@ -484,10 +501,13 @@ H5FP_request_close(H5FD_t *file, unsigned file_id, unsigned *req_id,
HDmemset(&req, 0, sizeof(req));
+ if ((mrc = MPI_Comm_rank(H5FP_SAP_COMM, &my_rank)) != MPI_SUCCESS)
+ HMPI_GOTO_ERROR(FAIL, "MPI_Comm_rank failed", mrc);
+
req.req_type = H5FP_REQ_CLOSE;
req.req_id = H5FP_gen_request_id();
req.file_id = file_id;
- req.proc_rank = H5FP_my_rank;
+ req.proc_rank = my_rank;
if ((mrc = MPI_Send(&req, 1, H5FP_request_t, (int)H5FP_sap_rank,
H5FP_TAG_REQUEST, H5FP_SAP_COMM)) != MPI_SUCCESS)
@@ -577,6 +597,7 @@ H5FP_dump_to_file(H5FD_t *file, H5FP_read *sap_read)
/* check args */
assert(file);
+ assert(sap_read);
/*
* At this point, we've received a message saying that the SAP is