summaryrefslogtreecommitdiffstats
path: root/src/H5Bprivate.h
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2003-02-10 17:26:09 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2003-02-10 17:26:09 (GMT)
commit24d8506dd564c5cc0fdebb5ebdfaec7bda5a7435 (patch)
tree6b2eb3bb1e782c40718204882428e6471b6281ac /src/H5Bprivate.h
parent738661ab9f409b8d961ba1402d6c4dd5f99ecb43 (diff)
downloadhdf5-24d8506dd564c5cc0fdebb5ebdfaec7bda5a7435.zip
hdf5-24d8506dd564c5cc0fdebb5ebdfaec7bda5a7435.tar.gz
hdf5-24d8506dd564c5cc0fdebb5ebdfaec7bda5a7435.tar.bz2
[svn-r6387] Purpose:
Bug Fix Description: Metadata cache in parallel I/O can cause hangs in applications which perform independent I/O on chunked datasets, because the metadata cache can attempt to flush out dirty metadata from only a single process, instead of collectively from all processes. Solution: Pass a dataset transfer property list down from every API function which could possibly trigger metadata I/O. Then, split the metadata cache into two sets of entries to allow dirty metadata to be set aside when a hash table collision occurs during independent I/O. Platforms tested: Tested h5committest {arabica (fortran), eirene (fortran, C++) modi4 (parallel, fortran)} FreeBSD 4.7 (sleipnir) serial & parallel Misc. update: Updated release_docs/RELEASE
Diffstat (limited to 'src/H5Bprivate.h')
-rw-r--r--src/H5Bprivate.h33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/H5Bprivate.h b/src/H5Bprivate.h
index d22edcb..5c8ef1a 100644
--- a/src/H5Bprivate.h
+++ b/src/H5Bprivate.h
@@ -58,7 +58,7 @@ typedef enum H5B_iterate_t {
} H5B_iterate_t;
/* Define the operator callback function pointer for H5B_iterate() */
-typedef H5B_iterate_t (*H5B_operator_t)(H5F_t *f, void *_lt_key, haddr_t addr,
+typedef H5B_iterate_t (*H5B_operator_t)(H5F_t *f, hid_t, void *_lt_key, haddr_t addr,
void *_rt_key, void *_udata);
/*
@@ -74,13 +74,13 @@ typedef struct H5B_class_t {
H5B_subid_t id; /*id as found in file*/
size_t sizeof_nkey; /*size of native (memory) key*/
size_t (*get_sizeof_rkey)(H5F_t*, const void*); /*raw key size */
- herr_t (*new_node)(H5F_t*, H5B_ins_t, void*, void*, void*, haddr_t*);
- int (*cmp2)(H5F_t*, void*, void*, void*); /*compare 2 keys */
- int (*cmp3)(H5F_t*, void*, void*, void*); /*compare 3 keys */
- herr_t (*found)(H5F_t*, haddr_t, const void*, void*, const void*);
+ herr_t (*new_node)(H5F_t*, hid_t, H5B_ins_t, void*, void*, void*, haddr_t*);
+ int (*cmp2)(H5F_t*, hid_t, void*, void*, void*); /*compare 2 keys */
+ int (*cmp3)(H5F_t*, hid_t, void*, void*, void*); /*compare 3 keys */
+ herr_t (*found)(H5F_t*, hid_t, haddr_t, const void*, void*, const void*);
/* insert new data */
- H5B_ins_t (*insert)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
+ H5B_ins_t (*insert)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
void*, hbool_t*, haddr_t*);
/* min insert uses min leaf, not new(), similarily for max insert */
@@ -88,7 +88,7 @@ typedef struct H5B_class_t {
hbool_t follow_max;
/* remove existing data */
- H5B_ins_t (*remove)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
+ H5B_ins_t (*remove)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
hbool_t*);
/* encode, decode, debug key values */
@@ -112,7 +112,6 @@ typedef struct H5B_t {
/* first field in structure */
const H5B_class_t *type; /*type of tree */
size_t sizeof_rkey; /*size of raw (disk) key */
- hbool_t dirty; /*something in the tree is dirty */
int ndirty; /*num child ptrs to emit */
int level; /*node level */
haddr_t left; /*address of left sibling */
@@ -127,17 +126,17 @@ typedef struct H5B_t {
/*
* Library prototypes.
*/
-H5_DLL herr_t H5B_debug (H5F_t *f, haddr_t addr, FILE * stream,
- int indent, int fwidth, const H5B_class_t *type,
- void *udata);
-H5_DLL herr_t H5B_create (H5F_t *f, const H5B_class_t *type, void *udata,
+H5_DLL herr_t H5B_create (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
haddr_t *addr_p/*out*/);
-H5_DLL herr_t H5B_find (H5F_t *f, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_find (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
-H5_DLL herr_t H5B_insert (H5F_t *f, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_insert (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
const double split_ratios[], void *udata);
-H5_DLL herr_t H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr,
- void *udata);
-H5_DLL herr_t H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t
+H5_DLL herr_t H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
op, haddr_t addr, void *udata);
+H5_DLL herr_t H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+ void *udata);
+H5_DLL herr_t H5B_debug (H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+ int indent, int fwidth, const H5B_class_t *type,
+ void *udata);
#endif