diff options
Diffstat (limited to 'src/H5ESpublic.h')
-rw-r--r-- | src/H5ESpublic.h | 70 |
1 files changed, 41 insertions, 29 deletions
diff --git a/src/H5ESpublic.h b/src/H5ESpublic.h index 409282c..4cf71c5 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 */ + 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 */ + + /* 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 |