1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #ifndef MCA_PMIX_PMIX3X_H
18 #define MCA_PMIX_PMIX3X_H
19
20 #include "opal_config.h"
21
22 #ifdef HAVE_SYS_SOCKET_H
23 #include <sys/socket.h>
24 #endif
25 #ifdef HAVE_SYS_UN_H
26 #include <sys/un.h>
27 #endif
28
29 #include "opal/class/opal_list.h"
30 #include "opal/mca/mca.h"
31 #include "opal/mca/event/event.h"
32 #include "opal/util/proc.h"
33
34 #include "opal/mca/pmix/base/base.h"
35 #include "pmix_server.h"
36 #include "pmix_common.h"
37
38 BEGIN_C_DECLS
39
40 typedef struct {
41 opal_pmix_base_component_t super;
42 pmix_proc_t myproc;
43 opal_list_t jobids;
44 bool native_launch;
45 size_t evindex;
46 opal_list_t events;
47 int cache_size;
48 opal_list_t cache;
49 opal_list_t dmdx;
50 bool silence_warning;
51 } mca_pmix_ext3x_component_t;
52
53 OPAL_DECLSPEC extern mca_pmix_ext3x_component_t mca_pmix_ext3x_component;
54
55 OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_ext3x_module;
56
57
58 typedef struct {
59 opal_list_item_t super;
60 opal_jobid_t jobid;
61 char nspace[PMIX_MAX_NSLEN + 1];
62 } opal_ext3x_jobid_trkr_t;
63 OBJ_CLASS_DECLARATION(opal_ext3x_jobid_trkr_t);
64
65 typedef struct {
66 opal_list_item_t super;
67 opal_pmix_lock_t lock;
68 size_t index;
69 opal_pmix_notification_fn_t handler;
70 void *cbdata;
71 } opal_ext3x_event_t;
72 OBJ_CLASS_DECLARATION(opal_ext3x_event_t);
73
74 typedef struct {
75 opal_list_item_t super;
76 char *nspace;
77 pmix_modex_cbfunc_t cbfunc;
78 void *cbdata;
79 } opal_ext3x_dmx_trkr_t;
80 OBJ_CLASS_DECLARATION(opal_ext3x_dmx_trkr_t);
81
82 typedef struct {
83 opal_object_t super;
84 opal_event_t ev;
85 pmix_status_t status;
86 char *nspace;
87 pmix_proc_t p;
88 pmix_proc_t *procs;
89 size_t nprocs;
90 pmix_pdata_t *pdata;
91 size_t npdata;
92 pmix_proc_t *error_procs;
93 size_t nerror_procs;
94 pmix_info_t *info;
95 size_t ninfo;
96 pmix_app_t *apps;
97 size_t sz;
98 opal_pmix_lock_t lock;
99 opal_list_t *codes;
100 pmix_status_t *pcodes;
101 size_t ncodes;
102 pmix_query_t *queries;
103 size_t nqueries;
104 opal_ext3x_event_t *event;
105 opal_pmix_op_cbfunc_t opcbfunc;
106 opal_pmix_modex_cbfunc_t mdxcbfunc;
107 opal_pmix_value_cbfunc_t valcbfunc;
108 opal_pmix_lookup_cbfunc_t lkcbfunc;
109 opal_pmix_spawn_cbfunc_t spcbfunc;
110 opal_pmix_evhandler_reg_cbfunc_t evregcbfunc;
111 opal_pmix_info_cbfunc_t qcbfunc;
112 opal_pmix_setup_application_cbfunc_t setupcbfunc;
113 void *cbdata;
114 } ext3x_opcaddy_t;
115 OBJ_CLASS_DECLARATION(ext3x_opcaddy_t);
116
117 typedef struct {
118 opal_object_t super;
119 opal_list_t procs;
120 opal_list_t info;
121 opal_list_t apps;
122 pmix_op_cbfunc_t opcbfunc;
123 pmix_dmodex_response_fn_t dmdxfunc;
124 pmix_modex_cbfunc_t mdxcbfunc;
125 pmix_lookup_cbfunc_t lkupcbfunc;
126 pmix_spawn_cbfunc_t spwncbfunc;
127 pmix_info_cbfunc_t infocbfunc;
128 pmix_tool_connection_cbfunc_t toolcbfunc;
129 void *cbdata;
130 opal_pmix_release_cbfunc_t odmdxfunc;
131 void *ocbdata;
132 } ext3x_opalcaddy_t;
133 OBJ_CLASS_DECLARATION(ext3x_opalcaddy_t);
134
135 typedef struct {
136 opal_object_t super;
137 opal_event_t ev;
138 opal_pmix_lock_t lock;
139 const char *msg;
140 char *strings;
141 size_t id;
142 int status;
143 opal_process_name_t pname;
144 opal_jobid_t jobid;
145 const opal_process_name_t *source;
146 opal_pmix_data_range_t range;
147 bool nondefault;
148 size_t handler;
149 opal_value_t *val;
150 opal_list_t *event_codes;
151 opal_list_t *info;
152 opal_list_t results;
153 opal_pmix_notification_fn_t evhandler;
154 opal_pmix_evhandler_reg_cbfunc_t cbfunc;
155 opal_pmix_op_cbfunc_t opcbfunc;
156 pmix_event_notification_cbfunc_fn_t pmixcbfunc;
157 opal_pmix_value_cbfunc_t valcbfunc;
158 opal_pmix_lookup_cbfunc_t lkcbfunc;
159 void *cbdata;
160 } ext3x_threadshift_t;
161 OBJ_CLASS_DECLARATION(ext3x_threadshift_t);
162
163 #define OPAL_PMIX_OP_THREADSHIFT(e, fn, cb, cd) \
164 do { \
165 ext3x_threadshift_t *_cd; \
166 _cd = OBJ_NEW(ext3x_threadshift_t); \
167 _cd->handler = (e); \
168 _cd->opcbfunc = (cb); \
169 _cd->cbdata = (cd); \
170 opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \
171 -1, EV_WRITE, (fn), (_cd)); \
172 OPAL_POST_OBJECT(_cd); \
173 opal_event_active(&((_cd)->ev), EV_WRITE, 1); \
174 } while(0)
175
176 #define OPAL_PMIX_THREADSHIFT(e, i, eh, fn, cb, cd) \
177 do { \
178 ext3x_threadshift_t *_cd; \
179 _cd = OBJ_NEW(ext3x_threadshift_t); \
180 _cd->event_codes = (e); \
181 _cd->info = (i); \
182 _cd->evhandler = (eh); \
183 _cd->cbfunc = (cb); \
184 _cd->cbdata = (cd); \
185 opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \
186 -1, EV_WRITE, (fn), (_cd)); \
187 OPAL_POST_OBJECT(_cd); \
188 opal_event_active(&((_cd)->ev), EV_WRITE, 1); \
189 } while(0)
190
191 #define OPAL_PMIX_NOTIFY_THREADSHIFT(s, sr, r, i, fn, cb, cd) \
192 do { \
193 ext3x_threadshift_t *_cd; \
194 _cd = OBJ_NEW(ext3x_threadshift_t); \
195 _cd->status = (s); \
196 _cd->source = (sr); \
197 _cd->range = (r); \
198 _cd->info = (i); \
199 _cd->opcbfunc = (cb); \
200 _cd->cbdata = (cd); \
201 opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase, \
202 -1, EV_WRITE, (fn), (_cd)); \
203 OPAL_POST_OBJECT(_cd); \
204 opal_event_active(&((_cd)->ev), EV_WRITE, 1); \
205 } while(0)
206
207 #define OPAL_PMIX2X_THREADSHIFT(p, cb) \
208 do { \
209 opal_event_assign(&((p)->ev), opal_pmix_base.evbase, \
210 -1, EV_WRITE, (cb), (p)); \
211 OPAL_POST_OBJECT(p); \
212 opal_event_active(&((p)->ev), EV_WRITE, 1); \
213 } while(0)
214
215
216 OPAL_MODULE_DECLSPEC int ext3x_client_init(opal_list_t *ilist);
217 OPAL_MODULE_DECLSPEC int ext3x_client_finalize(void);
218 OPAL_MODULE_DECLSPEC int ext3x_initialized(void);
219 OPAL_MODULE_DECLSPEC int ext3x_abort(int flag, const char *msg,
220 opal_list_t *procs);
221 OPAL_MODULE_DECLSPEC int ext3x_commit(void);
222 OPAL_MODULE_DECLSPEC int ext3x_fence(opal_list_t *procs, int collect_data);
223 OPAL_MODULE_DECLSPEC int ext3x_fencenb(opal_list_t *procs, int collect_data,
224 opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
225 OPAL_MODULE_DECLSPEC int ext3x_put(opal_pmix_scope_t scope,
226 opal_value_t *val);
227 OPAL_MODULE_DECLSPEC int ext3x_get(const opal_process_name_t *proc, const char *key,
228 opal_list_t *info, opal_value_t **val);
229 OPAL_MODULE_DECLSPEC int ext3x_getnb(const opal_process_name_t *proc, const char *key,
230 opal_list_t *info,
231 opal_pmix_value_cbfunc_t cbfunc, void *cbdata);
232 OPAL_MODULE_DECLSPEC int ext3x_publish(opal_list_t *info);
233 OPAL_MODULE_DECLSPEC int ext3x_publishnb(opal_list_t *info,
234 opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
235 OPAL_MODULE_DECLSPEC int ext3x_lookup(opal_list_t *data, opal_list_t *info);
236 OPAL_MODULE_DECLSPEC int ext3x_lookupnb(char **keys, opal_list_t *info,
237 opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata);
238 OPAL_MODULE_DECLSPEC int ext3x_unpublish(char **keys, opal_list_t *info);
239 OPAL_MODULE_DECLSPEC int ext3x_unpublishnb(char **keys, opal_list_t *info,
240 opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
241 OPAL_MODULE_DECLSPEC int ext3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid);
242 OPAL_MODULE_DECLSPEC int ext3x_spawnnb(opal_list_t *job_info, opal_list_t *apps,
243 opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata);
244 OPAL_MODULE_DECLSPEC int ext3x_connect(opal_list_t *procs);
245 OPAL_MODULE_DECLSPEC int ext3x_connectnb(opal_list_t *procs,
246 opal_pmix_op_cbfunc_t cbfunc,
247 void *cbdata);
248 OPAL_MODULE_DECLSPEC int ext3x_disconnect(opal_list_t *procs);
249 OPAL_MODULE_DECLSPEC int ext3x_disconnectnb(opal_list_t *procs,
250 opal_pmix_op_cbfunc_t cbfunc,
251 void *cbdata);
252 OPAL_MODULE_DECLSPEC int ext3x_resolve_peers(const char *nodename, opal_jobid_t jobid,
253 opal_list_t *procs);
254 OPAL_MODULE_DECLSPEC int ext3x_resolve_nodes(opal_jobid_t jobid, char **nodelist);
255 OPAL_MODULE_DECLSPEC int ext3x_allocate(opal_pmix_alloc_directive_t directive,
256 opal_list_t *info,
257 opal_pmix_info_cbfunc_t cbfunc, void *cbdata);
258 OPAL_MODULE_DECLSPEC int ext3x_job_control(opal_list_t *targets,
259 opal_list_t *directives,
260 opal_pmix_info_cbfunc_t cbfunc, void *cbdata);
261
262
263 OPAL_MODULE_DECLSPEC int ext3x_tool_init(opal_list_t *info);
264 OPAL_MODULE_DECLSPEC int ext3x_tool_fini(void);
265
266
267 OPAL_MODULE_DECLSPEC int ext3x_store_local(const opal_process_name_t *proc,
268 opal_value_t *val);
269
270
271 OPAL_MODULE_DECLSPEC int ext3x_server_init(opal_pmix_server_module_t *module,
272 opal_list_t *info);
273 OPAL_MODULE_DECLSPEC int ext3x_server_finalize(void);
274 OPAL_MODULE_DECLSPEC int ext3x_server_gen_regex(const char *input, char **regex);
275 OPAL_MODULE_DECLSPEC int ext3x_server_gen_ppn(const char *input, char **ppn);
276 OPAL_MODULE_DECLSPEC int ext3x_server_register_nspace(opal_jobid_t jobid,
277 int nlocalprocs,
278 opal_list_t *info,
279 opal_pmix_op_cbfunc_t cbfunc,
280 void *cbdata);
281 OPAL_MODULE_DECLSPEC void ext3x_server_deregister_nspace(opal_jobid_t jobid,
282 opal_pmix_op_cbfunc_t cbfunc,
283 void *cbdata);
284 OPAL_MODULE_DECLSPEC int ext3x_server_register_client(const opal_process_name_t *proc,
285 uid_t uid, gid_t gid,
286 void *server_object,
287 opal_pmix_op_cbfunc_t cbfunc,
288 void *cbdata);
289 OPAL_MODULE_DECLSPEC void ext3x_server_deregister_client(const opal_process_name_t *proc,
290 opal_pmix_op_cbfunc_t cbfunc,
291 void *cbdata);
292 OPAL_MODULE_DECLSPEC int ext3x_server_setup_fork(const opal_process_name_t *proc, char ***env);
293 OPAL_MODULE_DECLSPEC int ext3x_server_dmodex(const opal_process_name_t *proc,
294 opal_pmix_modex_cbfunc_t cbfunc, void *cbdata);
295 OPAL_MODULE_DECLSPEC int ext3x_server_notify_event(int status,
296 const opal_process_name_t *source,
297 opal_list_t *info,
298 opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
299
300 OPAL_MODULE_DECLSPEC int ext3x_server_iof_push(const opal_process_name_t *source,
301 opal_pmix_iof_channel_t channel,
302 unsigned char *data, size_t nbytes);
303
304 OPAL_MODULE_DECLSPEC int ext3x_server_setup_application(opal_jobid_t jobid,
305 opal_list_t *info,
306 opal_pmix_setup_application_cbfunc_t cbfunc, void *cbdata);
307 OPAL_MODULE_DECLSPEC int ext3x_server_setup_local_support(opal_jobid_t jobid,
308 opal_list_t *info,
309 opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
310
311
312 OPAL_MODULE_DECLSPEC int opal_pmix_ext3x_check_evars(void);
313
314 OPAL_MODULE_DECLSPEC void ext3x_event_hdlr(size_t evhdlr_registration_id,
315 pmix_status_t status, const pmix_proc_t *source,
316 pmix_info_t info[], size_t ninfo,
317 pmix_info_t results[], size_t nresults,
318 pmix_event_notification_cbfunc_fn_t cbfunc,
319 void *cbdata);
320 OPAL_MODULE_DECLSPEC pmix_status_t ext3x_convert_opalrc(int rc);
321 OPAL_MODULE_DECLSPEC int ext3x_convert_rc(pmix_status_t rc);
322
323 OPAL_MODULE_DECLSPEC opal_vpid_t ext3x_convert_rank(pmix_rank_t rank);
324 OPAL_MODULE_DECLSPEC pmix_rank_t ext3x_convert_opalrank(opal_vpid_t vpid);
325
326 OPAL_MODULE_DECLSPEC opal_pmix_scope_t ext3x_convert_scope(pmix_scope_t scope);
327 OPAL_MODULE_DECLSPEC pmix_scope_t ext3x_convert_opalscope(opal_pmix_scope_t scope);
328
329 OPAL_MODULE_DECLSPEC pmix_data_range_t ext3x_convert_opalrange(opal_pmix_data_range_t range);
330 OPAL_MODULE_DECLSPEC opal_pmix_data_range_t ext3x_convert_range(pmix_data_range_t range);
331
332 OPAL_MODULE_DECLSPEC opal_pmix_persistence_t ext3x_convert_persist(pmix_persistence_t scope);
333 OPAL_MODULE_DECLSPEC pmix_persistence_t ext3x_convert_opalpersist(opal_pmix_persistence_t scope);
334
335 OPAL_MODULE_DECLSPEC void ext3x_value_load(pmix_value_t *v,
336 opal_value_t *kv);
337 OPAL_MODULE_DECLSPEC int ext3x_value_unload(opal_value_t *kv,
338 const pmix_value_t *v);
339
340 OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t ext3x_convert_allocdir(pmix_alloc_directive_t dir);
341
342 OPAL_MODULE_DECLSPEC char* ext3x_convert_jobid(opal_jobid_t jobid);
343
344 OPAL_MODULE_DECLSPEC int ext3x_convert_state(pmix_proc_state_t state);
345
346 OPAL_MODULE_DECLSPEC pmix_proc_state_t ext3x_convert_opalstate(int state);
347
348
349 END_C_DECLS
350
351 #endif