root/opal/mca/pmix/ext3x/ext3x.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2014-2018 Intel, Inc. All rights reserved.
   4  * Copyright (c) 2014-2015 Mellanox Technologies, Inc.
   5  *                         All rights reserved.
   6  * Copyright (c) 2016-2018 Research Organization for Information Science
   7  *                         and Technology (RIST).  All rights reserved.
   8  * Copyright (c) 2017      Los Alamos National Security, LLC. All rights
   9  *                         reserved.
  10  * $COPYRIGHT$
  11  *
  12  * Additional copyrights may follow
  13  *
  14  * $HEADER$
  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 /****  INTERNAL OBJECTS  ****/
  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 /****  CLIENT FUNCTIONS  ****/
 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 /****  TOOL FUNCTIONS  ****/
 263 OPAL_MODULE_DECLSPEC int ext3x_tool_init(opal_list_t *info);
 264 OPAL_MODULE_DECLSPEC int ext3x_tool_fini(void);
 265 
 266 /****  COMMON FUNCTIONS  ****/
 267 OPAL_MODULE_DECLSPEC int ext3x_store_local(const opal_process_name_t *proc,
 268                                              opal_value_t *val);
 269 
 270 /****  SERVER SOUTHBOUND FUNCTIONS  ****/
 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 /****  COMPONENT UTILITY FUNCTIONS  ****/
 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 /* MCA_PMIX_PMIX3X_H */

/* [<][>][^][v][top][bottom][index][help] */