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/H5Oprivate.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/H5Oprivate.h')
-rw-r--r-- | src/H5Oprivate.h | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h index c384362..a8a68b8 100644 --- a/src/H5Oprivate.h +++ b/src/H5Oprivate.h @@ -84,7 +84,7 @@ typedef struct H5O_class_t { int id; /*message type ID on disk */ const char *name; /*for debugging */ size_t native_size; /*size of native message */ - void *(*decode)(H5F_t*, const uint8_t*, struct H5O_shared_t*); + void *(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*); herr_t (*encode)(H5F_t*, uint8_t*, const void*); void *(*copy)(const void*, void*); /*copy native value */ size_t (*raw_size)(H5F_t*, const void*);/*sizeof raw val */ @@ -92,7 +92,7 @@ typedef struct H5O_class_t { herr_t (*free)(void *); /*free main data struct */ herr_t (*get_share)(H5F_t*, const void*, struct H5O_shared_t*); herr_t (*set_share)(H5F_t*, void*, const struct H5O_shared_t*); - herr_t (*debug)(H5F_t*, const void*, FILE*, int, int); + herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int); } H5O_class_t; typedef struct H5O_mesg_t { @@ -115,7 +115,6 @@ typedef struct H5O_chunk_t { typedef struct H5O_t { H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */ /* first field in structure */ - hbool_t dirty; /*out of data wrt disk */ int version; /*version number */ int nlink; /*link count */ unsigned nmesgs; /*number of messages */ @@ -358,38 +357,34 @@ typedef struct H5O_fphdf5_t { #endif /* H5_HAVE_FPHDF5 */ /* General message operators */ -H5_DLL herr_t H5O_create(H5F_t *f, size_t size_hint, +H5_DLL herr_t H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, H5G_entry_t *ent/*out*/); -H5_DLL herr_t H5O_init(H5F_t *f, size_t size_hint, - H5G_entry_t *ent/*out*/, haddr_t header); H5_DLL herr_t H5O_open(H5G_entry_t *ent); H5_DLL herr_t H5O_close(H5G_entry_t *ent); -H5_DLL int H5O_link(H5G_entry_t *ent, int adjust); -H5_DLL int H5O_count(H5G_entry_t *ent, const H5O_class_t *type); +H5_DLL int H5O_link(H5G_entry_t *ent, int adjust, hid_t dxpl_id); +H5_DLL int H5O_count(H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id); H5_DLL htri_t H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, - int sequence); + int sequence, hid_t dxpl_id); H5_DLL void *H5O_read(H5G_entry_t *ent, const H5O_class_t *type, - int sequence, void *mesg); + int sequence, void *mesg, hid_t dxpl_id); H5_DLL int H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, - int overwrite, unsigned flags, unsigned update_time, const void *mesg); -H5_DLL H5O_t * H5O_protect(H5G_entry_t *ent); -H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, H5O_t *oh); -H5_DLL int H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type, + int overwrite, unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id); +H5_DLL H5O_t * H5O_protect(H5G_entry_t *ent, hid_t dxpl_id); +H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id); +H5_DLL int H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type, unsigned flags, const void *mesg); -H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force); +H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id); H5_DLL herr_t H5O_touch_oh(H5F_t *f, H5O_t *oh, hbool_t force); #ifdef H5O_ENABLE_BOGUS -H5_DLL herr_t H5O_bogus(H5G_entry_t *ent); +H5_DLL herr_t H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id); H5_DLL herr_t H5O_bogus_oh(H5F_t *f, H5O_t *oh); #endif /* H5O_ENABLE_BOGUS */ H5_DLL herr_t H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, - int sequence); + int sequence, hid_t dxpl_id); H5_DLL herr_t H5O_reset(const H5O_class_t *type, void *native); H5_DLL void *H5O_free(const H5O_class_t *type, void *mesg); H5_DLL void *H5O_copy(const H5O_class_t *type, const void *mesg, void *dst); -H5_DLL herr_t H5O_share(H5F_t *f, const H5O_class_t *type, const void *mesg, - H5HG_t *hobj/*out*/); -H5_DLL herr_t H5O_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent, +H5_DLL herr_t H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth); /* Layout operators */ @@ -403,6 +398,6 @@ H5_DLL herr_t H5O_efl_write(H5F_t *f, const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *buf); /* Fill value operators */ -H5_DLL herr_t H5O_fill_convert(void *_fill, H5T_t *type); +H5_DLL herr_t H5O_fill_convert(void *_fill, H5T_t *type, hid_t dxpl_id); #endif |