summaryrefslogtreecommitdiffstats
path: root/src/H5ESpublic.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5ESpublic.h')
-rw-r--r--src/H5ESpublic.h70
1 files changed, 41 insertions, 29 deletions
diff --git a/src/H5ESpublic.h b/src/H5ESpublic.h
index 409282c..c8696b3 100644
--- a/src/H5ESpublic.h
+++ b/src/H5ESpublic.h
@@ -42,24 +42,49 @@
/* Asynchronous operation status */
typedef enum H5ES_status_t {
- H5ES_STATUS_IN_PROGRESS, /* Operation(s) have not yet completed */
- H5ES_STATUS_SUCCEED, /* Operation(s) have completed, successfully */
- H5ES_STATUS_FAIL /* An operation has completed, but failed */
+ H5ES_STATUS_IN_PROGRESS, /* Operation(s) have not yet completed */
+ H5ES_STATUS_SUCCEED, /* Operation(s) have completed, successfully */
+ H5ES_STATUS_CANCELED, /* Operation(s) has been canceled */
+ H5ES_STATUS_FAIL /* An operation has completed, but failed */
} H5ES_status_t;
+/* Information about operations in an event set */
+typedef struct H5ES_op_info_t {
+ /* API call info */
+ const char *api_name; /* Name of HDF5 API routine called */
+ char * api_args; /* "Argument string" for arguments to HDF5 API routine called */
+
+ /* Application info */
+ const char *app_file_name; /* Name of source file where the HDF5 API routine was called */
+ const char *app_func_name; /* Name of function where the HDF5 API routine was called */
+ unsigned app_line_num; /* Line # of source file where the HDF5 API routine was called */
+
+ /* Operation info */
+ uint64_t op_ins_count; /* Counter of operation's insertion into event set */
+ uint64_t op_ins_ts; /* Timestamp for when the operation was inserted into the event set */
+ uint64_t op_exec_ts; /* Timestamp for when the operation began execution */
+ uint64_t op_exec_time; /* Execution time for operation (in ns) */
+} H5ES_op_info_t;
+
//! <!-- [H5ES_err_info_t_snip] -->
/**
* Information about failed operations in event set
*/
typedef struct H5ES_err_info_t {
- /* Operation info */
- char * api_name; /**< Name of HDF5 API routine called */
- char * api_args; /**< "Argument string" for arguments to HDF5 API routine called */
+ /* API call info */
+ char *api_name; /**< Name of HDF5 API routine called */
+ char *api_args; /**< "Argument string" for arguments to HDF5 API routine called */
+
+ /* Application info */
char * app_file_name; /**< Name of source file where the HDF5 API routine was called */
char * app_func_name; /**< Name of function where the HDF5 API routine was called */
unsigned app_line_num; /**< Line # of source file where the HDF5 API routine was called */
- uint64_t op_ins_count; /**< Counter of operation's insertion into event set */
- uint64_t op_ins_ts; /**< Timestamp for when the operation was inserted into the event set */
+
+ /* Operation info */
+ uint64_t op_ins_count; /**< Counter of operation's insertion into event set */
+ uint64_t op_ins_ts; /**< Timestamp for when the operation was inserted into the event set */
+ uint64_t op_exec_ts; /**< Timestamp for when the operation began execution */
+ uint64_t op_exec_time; /**< Execution time for operation (in ns) */
/* Error info */
hid_t err_stack_id; /**< ID for error stack from failed operation */
@@ -67,25 +92,11 @@ typedef struct H5ES_err_info_t {
//! <!-- [H5ES_err_info_t_snip] -->
/*
-H5ES_op_info_t:
- const char *: API name (H5Dwrite_async, ...)
- const char *: Arg string
- const char *: Appl. source file name
- const char *: Appl. source function
- unsigned: Appl. source file line
- uint64_t: Insert Time Timestamp
- uint64_t: "event count" - n'th event inserted into event set
- uint64_t: Execution Time timestamp (*)
-
More Possible Info for H5ES_op_info_t:
Parent Operation's request token (*) -> "parent event count"? -- Could be
used to "prune" child operations from reported errors, with flag
to H5ESget_err_info?
-H5ES_err_info_t:
- H5ES_op_info_t: (above)
- hid_t: Error stack (*)
-
Possible debugging routines: (Should also be configured from Env Var)
H5ESdebug_signal(hid_t es_id, signal_t sig, uint64_t <event count>);
H5ESdebug_err_trace_log(hid_t es_id, const char *filename);
@@ -102,15 +113,12 @@ Possible debugging routines: (Should also be configured from Env Var)
How to Trace Async Operations?
<Example of stacking Logging VOL Connector w/Async VOL Connector>
-"Library / wrapper developer" version of API routines: (Auto-generated)
- H5Dwrite_async_wrap(const char *app_file, const char *app_func,
- unsigned app_line_num, dset_id, mem_type_id, mem_space_id, ..., es_id);
-
- vs.
-
- H5Dwrite_async(dset_id, mem_type_id, mem_space_id, ..., es_id);
*/
+typedef int (*H5ES_event_insert_func_t)(const H5ES_op_info_t *op_info, void *ctx);
+typedef int (*H5ES_event_complete_func_t)(const H5ES_op_info_t *op_info, H5ES_status_t status,
+ hid_t err_stack, void *ctx);
+
/********************/
/* Public Variables */
/********************/
@@ -170,6 +178,7 @@ H5_DLL hid_t H5EScreate(void);
*
*/
H5_DLL herr_t H5ESwait(hid_t es_id, uint64_t timeout, size_t *num_in_progress, hbool_t *err_occurred);
+H5_DLL herr_t H5EScancel(hid_t es_id, size_t *num_not_canceled, hbool_t *err_occurred);
/**
* \ingroup H5ES
@@ -260,6 +269,9 @@ H5_DLL herr_t H5ESget_err_count(hid_t es_id, size_t *num_errs);
*/
H5_DLL herr_t H5ESget_err_info(hid_t es_id, size_t num_err_info, H5ES_err_info_t err_info[],
size_t *err_cleared);
+H5_DLL herr_t H5ESfree_err_info(size_t num_err_info, H5ES_err_info_t err_info[]);
+H5_DLL herr_t H5ESregister_insert_func(hid_t es_id, H5ES_event_insert_func_t func, void *ctx);
+H5_DLL herr_t H5ESregister_complete_func(hid_t es_id, H5ES_event_complete_func_t func, void *ctx);
/**
* \ingroup H5ES