This source file includes following definitions.
- comfail_errhandler
- timeout_errhandler
- op1_callbk
- errhandler_reg_callbk1
- test_error
1
2
3
4
5
6
7
8
9
10 #include <time.h>
11 #include "test_error.h"
12 #include "test_common.h"
13
14 #define MAX_ERR_HANDLERS 5
15 #define TEST_NOTIFY PMIX_ERR_TIMEOUT
16 static bool done;
17 static void comfail_errhandler(size_t evhdlr_registration_id,
18 pmix_status_t status,
19 const pmix_proc_t *source,
20 pmix_info_t info[], size_t ninfo,
21 pmix_info_t results[], size_t nresults,
22 pmix_event_notification_cbfunc_fn_t cbfunc,
23 void *cbdata)
24 {
25 TEST_ERROR(("comfail errhandler called for error status = %d ninfo = %lu",
26 status, (unsigned long)ninfo));
27 if (NULL != cbfunc) {
28 cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata);
29 }
30 }
31
32 static void timeout_errhandler(size_t evhdlr_registration_id,
33 pmix_status_t status,
34 const pmix_proc_t *source,
35 pmix_info_t info[], size_t ninfo,
36 pmix_info_t results[], size_t nresults,
37 pmix_event_notification_cbfunc_fn_t cbfunc,
38 void *cbdata)
39 {
40 TEST_ERROR(("timeout errhandler called for error status = %d ninfo = %d",
41 status, ninfo));
42 if (NULL != cbfunc) {
43 cbfunc(PMIX_SUCCESS, NULL, 0, NULL, NULL, cbdata);
44 }
45 }
46
47 static void op1_callbk(pmix_status_t status,
48 void *cbdata)
49 {
50 TEST_VERBOSE(( "op1_callbk CALLED WITH STATUS %d", status));
51 done = true;
52 }
53
54 static void errhandler_reg_callbk1 (pmix_status_t status,
55 size_t errhandler_ref,
56 void *cbdata)
57 {
58 size_t *ref = (size_t*) cbdata;
59 *ref = errhandler_ref;
60 TEST_VERBOSE(("PMIX client ERRHANDLER REGISTRATION CALLED WITH STATUS %d, ref=%lu",
61 status, *ref, (unsigned long)errhandler_ref));
62
63 }
64
65 int test_error(char *my_nspace, int my_rank, test_params params)
66 {
67 size_t errhandler_refs[MAX_ERR_HANDLERS];
68 struct timespec ts;
69 pmix_status_t status;
70 pmix_proc_t source;
71
72 TEST_VERBOSE(("test-error: running error handling test cases"));
73
74
75 status = PMIX_ERR_TIMEOUT;
76 PMIx_Register_event_handler(&status, 1, NULL, 0,
77 timeout_errhandler, errhandler_reg_callbk1, &errhandler_refs[0]);
78
79
80 status = PMIX_ERR_LOST_PEER_CONNECTION;
81 PMIx_Register_event_handler(&status, 1, NULL, 0,
82 comfail_errhandler, errhandler_reg_callbk1, &errhandler_refs[1]);
83
84 done = false;
85 (void)strncpy(source.nspace, my_nspace, PMIX_MAX_NSLEN);
86 source.rank = my_rank;
87
88 PMIx_Notify_event(TEST_NOTIFY,
89 &source, PMIX_RANGE_NAMESPACE,
90 NULL, 0,
91 op1_callbk, NULL);
92 while(!done) {
93 ts.tv_sec = 0;
94 ts.tv_nsec = 100000;
95 nanosleep(&ts, NULL);
96 }
97 done = false;
98
99 PMIx_Deregister_event_handler( errhandler_refs[0], op1_callbk, NULL);
100
101 while(!done) {
102 ts.tv_sec = 0;
103 ts.tv_nsec = 100000;
104 nanosleep(&ts, NULL);
105 }
106 done = false;
107 PMIx_Deregister_event_handler( errhandler_refs[1], op1_callbk, NULL);
108
109 while(!done) {
110 ts.tv_sec = 0;
111 ts.tv_nsec = 100000;
112 nanosleep(&ts, NULL);
113 }
114 return PMIX_SUCCESS;
115 }