mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r14085] Description:
Refactor H5HF_size() size statistics code for fractal heap to conform to how the rest of the fractal heap routines work. Tested on: FreeBSD/32 6.2 (duty) Mac OS X/32 10.4.10 (amazon)
This commit is contained in:
parent
7de10b4833
commit
665366d499
20
src/H5Goh.c
20
src/H5Goh.c
@ -260,6 +260,7 @@ herr_t
|
||||
H5O_group_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
|
||||
{
|
||||
H5O_linfo_t linfo; /* Link info message */
|
||||
H5HF_t *fheap = NULL; /* Fractal heap handle */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_group_bh_info, FAIL)
|
||||
@ -296,12 +297,27 @@ H5O_group_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
|
||||
|
||||
/* Get fractal heap size, if available */
|
||||
if(H5F_addr_defined(linfo.fheap_addr))
|
||||
if(H5HF_size(f, dxpl_id, linfo.fheap_addr, &bh_info->heap_size) < 0)
|
||||
if(H5F_addr_defined(linfo.fheap_addr)) {
|
||||
/* Open the fractal heap for links */
|
||||
if(NULL == (fheap = H5HF_open(f, dxpl_id, linfo.fheap_addr)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTOPENOBJ, FAIL, "unable to open fractal heap")
|
||||
|
||||
/* Get heap storage size */
|
||||
if(H5HF_size(fheap, dxpl_id, &bh_info->heap_size) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve fractal heap storage info")
|
||||
|
||||
/* Release the fractal heap */
|
||||
if(H5HF_close(fheap, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
fheap = NULL;
|
||||
} /* end if */
|
||||
} /* end else */
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(fheap && H5HF_close(fheap, dxpl_id) < 0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5O_group_bh_info() */
|
||||
|
||||
|
@ -128,8 +128,7 @@ H5_DLL herr_t H5HF_delete(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr);
|
||||
|
||||
/* Statistics routines */
|
||||
H5_DLL herr_t H5HF_stat_info(const H5HF_t *fh, H5HF_stat_t *stats);
|
||||
H5_DLL herr_t H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr,
|
||||
hsize_t *heap_size/*out*/);
|
||||
H5_DLL herr_t H5HF_size(const H5HF_t *fh, hid_t dxpl_id, hsize_t *heap_size/*out*/);
|
||||
|
||||
/* Debugging routines */
|
||||
#ifdef H5HF_DEBUGGING
|
||||
|
@ -124,9 +124,9 @@ H5HF_stat_info(const H5HF_t *fh, H5HF_stat_t *stats)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
|
||||
H5HF_size(const H5HF_t *fh, hid_t dxpl_id, hsize_t *heap_size)
|
||||
{
|
||||
H5HF_hdr_t *hdr = NULL; /* Fractal heap header */
|
||||
H5HF_hdr_t *hdr; /* Fractal heap header */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5HF_size, FAIL)
|
||||
@ -134,13 +134,11 @@ H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
|
||||
/*
|
||||
* Check arguments.
|
||||
*/
|
||||
HDassert(f);
|
||||
HDassert(H5F_addr_defined(fh_addr));
|
||||
HDassert(fh);
|
||||
HDassert(heap_size);
|
||||
|
||||
/* Lock the heap header into memory */
|
||||
if(NULL == (hdr = H5AC_protect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, NULL, NULL, H5AC_READ)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load fractal heap header")
|
||||
/* Get "convenience" pointer to fractal heap header */
|
||||
hdr = fh->hdr;
|
||||
|
||||
/* Add in values already known */
|
||||
*heap_size += hdr->heap_size; /* Heap header */
|
||||
@ -149,7 +147,7 @@ H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
|
||||
|
||||
/* Check for indirect blocks for managed objects */
|
||||
if(H5F_addr_defined(hdr->man_dtable.table_addr) && hdr->man_dtable.curr_root_rows != 0)
|
||||
if(H5HF_man_iblock_size(f, dxpl_id, hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, heap_size) < 0)
|
||||
if(H5HF_man_iblock_size(hdr->f, dxpl_id, hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, heap_size) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to get fractal heap storage info for indirect block")
|
||||
|
||||
/* Get B-tree storage for huge objects in fractal heap */
|
||||
@ -169,7 +167,7 @@ H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
|
||||
huge_bt2_class = H5HF_BT2_INDIR;
|
||||
|
||||
/* Get the B-tree storage for the appropriate class */
|
||||
if(H5B2_iterate_size(f, dxpl_id, huge_bt2_class, hdr->huge_bt2_addr, heap_size) < 0)
|
||||
if(H5B2_iterate_size(hdr->f, dxpl_id, huge_bt2_class, hdr->huge_bt2_addr, heap_size) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
|
||||
} /* end if */
|
||||
|
||||
@ -179,10 +177,6 @@ H5HF_size(H5F_t *f, hid_t dxpl_id, haddr_t fh_addr, hsize_t *heap_size)
|
||||
HGOTO_ERROR(H5E_FSPACE, H5E_CANTGET, FAIL, "can't retrieve FS meta storage info")
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(hdr && H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_HDR, fh_addr, hdr, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap header")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5HF_size() */
|
||||
|
||||
|
@ -1711,7 +1711,8 @@ done:
|
||||
herr_t
|
||||
H5O_attr_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
|
||||
{
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
H5HF_t *fheap = NULL; /* Fractal heap handle */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_attr_bh_info, FAIL)
|
||||
|
||||
@ -1739,13 +1740,28 @@ H5O_attr_bh_info(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5_ih_info_t *bh_info)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
|
||||
|
||||
/* Get storage size of fractal heap, if it's used */
|
||||
if(H5F_addr_defined(ainfo.fheap_addr))
|
||||
if(H5HF_size(f, dxpl_id, ainfo.fheap_addr, &(bh_info->heap_size)) < 0)
|
||||
if(H5F_addr_defined(ainfo.fheap_addr)) {
|
||||
/* Open the fractal heap for attributes */
|
||||
if(NULL == (fheap = H5HF_open(f, dxpl_id, ainfo.fheap_addr)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTOPENOBJ, FAIL, "unable to open fractal heap")
|
||||
|
||||
/* Get heap storage size */
|
||||
if(H5HF_size(fheap, dxpl_id, &(bh_info->heap_size)) < 0)
|
||||
HGOTO_ERROR(H5E_BTREE, H5E_CANTGET, FAIL, "can't retrieve B-tree storage info")
|
||||
|
||||
/* Release the fractal heap */
|
||||
if(H5HF_close(fheap, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
fheap = NULL;
|
||||
} /* end if */
|
||||
} /* end else */
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(fheap && H5HF_close(fheap, dxpl_id) < 0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5O_attr_bh_info() */
|
||||
|
||||
|
20
src/H5SM.c
20
src/H5SM.c
@ -2496,6 +2496,7 @@ herr_t
|
||||
H5SM_ih_size(H5F_t *f, hid_t dxpl_id, H5F_info_t *finfo)
|
||||
{
|
||||
H5SM_master_table_t *table = NULL; /* SOHM master table */
|
||||
H5HF_t *fheap = NULL; /* Fractal heap handle */
|
||||
unsigned u; /* Local index variable */
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
@ -2525,14 +2526,27 @@ H5SM_ih_size(H5F_t *f, hid_t dxpl_id, H5F_info_t *finfo)
|
||||
else if(table->indexes[u].index_type == H5SM_LIST)
|
||||
finfo->sohm.msgs_info.index_size += H5SM_LIST_SIZE(f, table->indexes[u].list_max);
|
||||
|
||||
/* Get heap storage size */
|
||||
if(H5F_addr_defined(table->indexes[u].heap_addr))
|
||||
if(H5HF_size(f, dxpl_id, table->indexes[u].heap_addr, &(finfo->sohm.msgs_info.heap_size)) < 0)
|
||||
/* Check for heap for this index */
|
||||
if(H5F_addr_defined(table->indexes[u].heap_addr)) {
|
||||
/* Open the fractal heap for this index */
|
||||
if(NULL == (fheap = H5HF_open(f, dxpl_id, table->indexes[u].heap_addr)))
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTOPENOBJ, FAIL, "unable to open fractal heap")
|
||||
|
||||
/* Get heap storage size */
|
||||
if(H5HF_size(fheap, dxpl_id, &(finfo->sohm.msgs_info.heap_size)) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't retrieve fractal heap storage info")
|
||||
|
||||
/* Release the fractal heap */
|
||||
if(H5HF_close(fheap, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
fheap = NULL;
|
||||
} /* end if */
|
||||
} /* end for */
|
||||
|
||||
done:
|
||||
/* Release resources */
|
||||
if(fheap && H5HF_close(fheap, dxpl_id) < 0)
|
||||
HDONE_ERROR(H5E_HEAP, H5E_CLOSEERROR, FAIL, "can't close fractal heap")
|
||||
if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
|
||||
HDONE_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "unable to close SOHM master table")
|
||||
|
||||
|
15
test/fheap.c
15
test/fheap.c
@ -2798,7 +2798,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
|
||||
/* Get an empty heap's size */
|
||||
empty_heap_size = 0;
|
||||
if(H5HF_size(f, dxpl, fh_addr, &empty_heap_size) < 0)
|
||||
if(H5HF_size(fh, dxpl, &empty_heap_size) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(empty_heap_size == 0)
|
||||
TEST_ERROR
|
||||
@ -2809,7 +2809,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
|
||||
/* Get the heap's size after inserting one object */
|
||||
one_heap_size = 0;
|
||||
if(H5HF_size(f, dxpl, fh_addr, &one_heap_size) < 0)
|
||||
if(H5HF_size(fh, dxpl, &one_heap_size) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(one_heap_size <= empty_heap_size)
|
||||
TEST_ERROR
|
||||
@ -2832,20 +2832,13 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
if(NULL == (f = H5I_object(file)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Check the heap's size */
|
||||
heap_size = 0;
|
||||
if(H5HF_size(f, dxpl, fh_addr, &heap_size) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(heap_size != one_heap_size)
|
||||
TEST_ERROR
|
||||
|
||||
/* Re-open the heap */
|
||||
if(NULL == (fh = H5HF_open(f, H5P_DATASET_XFER_DEFAULT, fh_addr)))
|
||||
FAIL_STACK_ERROR
|
||||
|
||||
/* Check the heap's size */
|
||||
heap_size = 0;
|
||||
if(H5HF_size(f, dxpl, fh_addr, &heap_size) < 0)
|
||||
if(H5HF_size(fh, dxpl, &heap_size) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(heap_size != one_heap_size)
|
||||
TEST_ERROR
|
||||
@ -2856,7 +2849,7 @@ test_size(hid_t fapl, H5HF_create_t *cparam)
|
||||
|
||||
/* Check the heap's size */
|
||||
heap_size = 0;
|
||||
if(H5HF_size(f, dxpl, fh_addr, &heap_size) < 0)
|
||||
if(H5HF_size(fh, dxpl, &heap_size) < 0)
|
||||
FAIL_STACK_ERROR
|
||||
if(heap_size != one_heap_size)
|
||||
TEST_ERROR
|
||||
|
Loading…
Reference in New Issue
Block a user