summaryrefslogtreecommitdiffstats
path: root/src/H5Oprivate.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/H5Oprivate.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/H5Oprivate.h')
-rw-r--r--src/H5Oprivate.h37
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