diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2003-02-10 17:26:09 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2003-02-10 17:26:09 (GMT) |
commit | 24d8506dd564c5cc0fdebb5ebdfaec7bda5a7435 (patch) | |
tree | 6b2eb3bb1e782c40718204882428e6471b6281ac /src/H5Bprivate.h | |
parent | 738661ab9f409b8d961ba1402d6c4dd5f99ecb43 (diff) | |
download | hdf5-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.h | 33 |
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 |