root/opal/mca/pmix/ext2x/ext2x.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      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_PMIX2X_H
  18 #define MCA_PMIX_PMIX2X_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 #ifdef OPAL_C_HAVE_VISIBILITY
  41 #define PMIX_HAVE_VISIBILITY 1
  42 #else
  43 #undef PMIX_HAVE_VISIBILITY
  44 #endif
  45 
  46 typedef struct {
  47   opal_pmix_base_component_t super;
  48   bool legacy_get;
  49   opal_list_t jobids;
  50   bool native_launch;
  51   size_t evindex;
  52   opal_list_t events;
  53   int cache_size;
  54   opal_list_t cache;
  55   opal_list_t dmdx;
  56   bool silence_warning;
  57 } mca_pmix_ext2x_component_t;
  58 
  59 OPAL_DECLSPEC extern mca_pmix_ext2x_component_t mca_pmix_ext2x_component;
  60 
  61 OPAL_DECLSPEC extern const opal_pmix_base_module_t opal_pmix_ext2x_module;
  62 
  63 /****  INTERNAL OBJECTS  ****/
  64 typedef struct {
  65     opal_list_item_t super;
  66     opal_jobid_t jobid;
  67     char nspace[PMIX_MAX_NSLEN + 1];
  68 } opal_ext2x_jobid_trkr_t;
  69 OBJ_CLASS_DECLARATION(opal_ext2x_jobid_trkr_t);
  70 
  71 typedef struct {
  72     opal_list_item_t super;
  73     opal_pmix_lock_t lock;
  74     size_t index;
  75     opal_pmix_notification_fn_t handler;
  76     void *cbdata;
  77 } opal_ext2x_event_t;
  78 OBJ_CLASS_DECLARATION(opal_ext2x_event_t);
  79 
  80 typedef struct {
  81     opal_list_item_t super;
  82     char *nspace;
  83     pmix_modex_cbfunc_t cbfunc;
  84     void *cbdata;
  85 } opal_ext2x_dmx_trkr_t;
  86 OBJ_CLASS_DECLARATION(opal_ext2x_dmx_trkr_t);
  87 
  88 typedef struct {
  89     opal_object_t super;
  90     opal_event_t ev;
  91     pmix_status_t status;
  92     char *nspace;
  93     pmix_proc_t p;
  94     pmix_proc_t *procs;
  95     size_t nprocs;
  96     pmix_pdata_t *pdata;
  97     size_t npdata;
  98     pmix_proc_t *error_procs;
  99     size_t nerror_procs;
 100     pmix_info_t *info;
 101     size_t ninfo;
 102     pmix_app_t *apps;
 103     size_t sz;
 104     opal_pmix_lock_t lock;
 105     opal_list_t *codes;
 106     pmix_status_t *pcodes;
 107     size_t ncodes;
 108     pmix_query_t *queries;
 109     size_t nqueries;
 110     opal_ext2x_event_t *event;
 111     opal_pmix_op_cbfunc_t opcbfunc;
 112     opal_pmix_modex_cbfunc_t mdxcbfunc;
 113     opal_pmix_value_cbfunc_t valcbfunc;
 114     opal_pmix_lookup_cbfunc_t lkcbfunc;
 115     opal_pmix_spawn_cbfunc_t spcbfunc;
 116     opal_pmix_evhandler_reg_cbfunc_t evregcbfunc;
 117     opal_pmix_info_cbfunc_t qcbfunc;
 118     void *cbdata;
 119 } ext2x_opcaddy_t;
 120 OBJ_CLASS_DECLARATION(ext2x_opcaddy_t);
 121 
 122 typedef struct {
 123     opal_object_t super;
 124     opal_list_t procs;
 125     opal_list_t info;
 126     opal_list_t apps;
 127     pmix_op_cbfunc_t opcbfunc;
 128     pmix_dmodex_response_fn_t dmdxfunc;
 129     pmix_modex_cbfunc_t mdxcbfunc;
 130     pmix_lookup_cbfunc_t lkupcbfunc;
 131     pmix_spawn_cbfunc_t spwncbfunc;
 132     pmix_info_cbfunc_t infocbfunc;
 133     pmix_tool_connection_cbfunc_t toolcbfunc;
 134     void *cbdata;
 135     opal_pmix_release_cbfunc_t odmdxfunc;
 136     void *ocbdata;
 137 } ext2x_opalcaddy_t;
 138 OBJ_CLASS_DECLARATION(ext2x_opalcaddy_t);
 139 
 140 typedef struct {
 141     opal_object_t super;
 142     opal_event_t ev;
 143     opal_pmix_lock_t lock;
 144     const char *msg;
 145     char *strings;
 146     size_t id;
 147     int status;
 148     opal_process_name_t pname;
 149     opal_jobid_t jobid;
 150     const opal_process_name_t *source;
 151     opal_pmix_data_range_t range;
 152     bool nondefault;
 153     size_t handler;
 154     opal_value_t *val;
 155     opal_list_t *event_codes;
 156     opal_list_t *info;
 157     opal_list_t results;
 158     opal_pmix_notification_fn_t evhandler;
 159     opal_pmix_evhandler_reg_cbfunc_t cbfunc;
 160     opal_pmix_op_cbfunc_t opcbfunc;
 161     pmix_event_notification_cbfunc_fn_t pmixcbfunc;
 162     opal_pmix_value_cbfunc_t valcbfunc;
 163     opal_pmix_lookup_cbfunc_t lkcbfunc;
 164     void *cbdata;
 165 } ext2x_threadshift_t;
 166 OBJ_CLASS_DECLARATION(ext2x_threadshift_t);
 167 
 168 #define OPAL_PMIX_OP_THREADSHIFT(e, fn, cb, cd)             \
 169     do {                                                    \
 170         ext2x_threadshift_t *_cd;                          \
 171         _cd = OBJ_NEW(ext2x_threadshift_t);                \
 172         _cd->handler = (e);                                 \
 173         _cd->opcbfunc = (cb);                               \
 174         _cd->cbdata = (cd);                                 \
 175         opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase,   \
 176                           -1, EV_WRITE, (fn), (_cd));            \
 177         OPAL_POST_OBJECT(_cd);                              \
 178         opal_event_active(&((_cd)->ev), EV_WRITE, 1);            \
 179     } while(0)
 180 
 181 #define OPAL_PMIX_THREADSHIFT(e, i, eh, fn, cb, cd)         \
 182     do {                                                    \
 183         ext2x_threadshift_t *_cd;                          \
 184         _cd = OBJ_NEW(ext2x_threadshift_t);                \
 185         _cd->event_codes = (e);                             \
 186         _cd->info = (i);                                    \
 187         _cd->evhandler = (eh);                              \
 188         _cd->cbfunc = (cb);                                 \
 189         _cd->cbdata = (cd);                                 \
 190         opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase,  \
 191                           -1, EV_WRITE, (fn), (_cd));           \
 192         OPAL_POST_OBJECT(_cd);                              \
 193         opal_event_active(&((_cd)->ev), EV_WRITE, 1);           \
 194     } while(0)
 195 
 196 #define OPAL_PMIX_NOTIFY_THREADSHIFT(s, sr, r, i, fn, cb, cd)   \
 197     do {                                                        \
 198         ext2x_threadshift_t *_cd;                              \
 199         _cd = OBJ_NEW(ext2x_threadshift_t);                    \
 200         _cd->status = (s);                                      \
 201         _cd->source = (sr);                                     \
 202         _cd->range = (r);                                       \
 203         _cd->info = (i);                                        \
 204         _cd->opcbfunc = (cb);                                   \
 205         _cd->cbdata = (cd);                                     \
 206         opal_event_assign(&((_cd)->ev), opal_pmix_base.evbase,  \
 207                      -1, EV_WRITE, (fn), (_cd));                \
 208         OPAL_POST_OBJECT(_cd);                                  \
 209         opal_event_active(&((_cd)->ev), EV_WRITE, 1);           \
 210     } while(0)
 211 
 212 #define OPAL_PMIX2X_THREADSHIFT(p, cb)                          \
 213     do {                                                        \
 214         opal_event_assign(&((p)->ev), opal_pmix_base.evbase,    \
 215                           -1, EV_WRITE, (cb), (p));             \
 216         OPAL_POST_OBJECT(p);                                    \
 217         opal_event_active(&((p)->ev), EV_WRITE, 1);             \
 218     } while(0)
 219 
 220 /****  CLIENT FUNCTIONS  ****/
 221 OPAL_MODULE_DECLSPEC int ext2x_client_init(opal_list_t *ilist);
 222 OPAL_MODULE_DECLSPEC int ext2x_client_finalize(void);
 223 OPAL_MODULE_DECLSPEC int ext2x_initialized(void);
 224 OPAL_MODULE_DECLSPEC int ext2x_abort(int flag, const char *msg,
 225                                      opal_list_t *procs);
 226 OPAL_MODULE_DECLSPEC int ext2x_commit(void);
 227 OPAL_MODULE_DECLSPEC int ext2x_fence(opal_list_t *procs, int collect_data);
 228 OPAL_MODULE_DECLSPEC int ext2x_fencenb(opal_list_t *procs, int collect_data,
 229                                        opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
 230 OPAL_MODULE_DECLSPEC int ext2x_put(opal_pmix_scope_t scope,
 231                                      opal_value_t *val);
 232 OPAL_MODULE_DECLSPEC int ext2x_get(const opal_process_name_t *proc, const char *key,
 233                                    opal_list_t *info, opal_value_t **val);
 234 OPAL_MODULE_DECLSPEC int ext2x_getnb(const opal_process_name_t *proc, const char *key,
 235                                      opal_list_t *info,
 236                                      opal_pmix_value_cbfunc_t cbfunc, void *cbdata);
 237 OPAL_MODULE_DECLSPEC int ext2x_publish(opal_list_t *info);
 238 OPAL_MODULE_DECLSPEC int ext2x_publishnb(opal_list_t *info,
 239                                          opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
 240 OPAL_MODULE_DECLSPEC int ext2x_lookup(opal_list_t *data, opal_list_t *info);
 241 OPAL_MODULE_DECLSPEC int ext2x_lookupnb(char **keys, opal_list_t *info,
 242                                         opal_pmix_lookup_cbfunc_t cbfunc, void *cbdata);
 243 OPAL_MODULE_DECLSPEC int ext2x_unpublish(char **keys, opal_list_t *info);
 244 OPAL_MODULE_DECLSPEC int ext2x_unpublishnb(char **keys, opal_list_t *info,
 245                                            opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
 246 OPAL_MODULE_DECLSPEC int ext2x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid);
 247 OPAL_MODULE_DECLSPEC int ext2x_spawnnb(opal_list_t *job_info, opal_list_t *apps,
 248                                        opal_pmix_spawn_cbfunc_t cbfunc, void *cbdata);
 249 OPAL_MODULE_DECLSPEC int ext2x_connect(opal_list_t *procs);
 250 OPAL_MODULE_DECLSPEC int ext2x_connectnb(opal_list_t *procs,
 251                                          opal_pmix_op_cbfunc_t cbfunc,
 252                                          void *cbdata);
 253 OPAL_MODULE_DECLSPEC int ext2x_disconnect(opal_list_t *procs);
 254 OPAL_MODULE_DECLSPEC int ext2x_disconnectnb(opal_list_t *procs,
 255                                             opal_pmix_op_cbfunc_t cbfunc,
 256                                             void *cbdata);
 257 OPAL_MODULE_DECLSPEC int ext2x_resolve_peers(const char *nodename, opal_jobid_t jobid,
 258                                              opal_list_t *procs);
 259 OPAL_MODULE_DECLSPEC int ext2x_resolve_nodes(opal_jobid_t jobid, char **nodelist);
 260 OPAL_MODULE_DECLSPEC int ext2x_allocate(opal_pmix_alloc_directive_t directive,
 261                                          opal_list_t *info,
 262                                          opal_pmix_info_cbfunc_t cbfunc, void *cbdata);
 263 OPAL_MODULE_DECLSPEC int ext2x_job_control(opal_list_t *targets,
 264                                             opal_list_t *directives,
 265                                             opal_pmix_info_cbfunc_t cbfunc, void *cbdata);
 266 
 267 /****  TOOL FUNCTIONS  ****/
 268 OPAL_MODULE_DECLSPEC int ext2x_tool_init(opal_list_t *info);
 269 OPAL_MODULE_DECLSPEC int ext2x_tool_fini(void);
 270 
 271 /****  COMMON FUNCTIONS  ****/
 272 OPAL_MODULE_DECLSPEC int ext2x_store_local(const opal_process_name_t *proc,
 273                                              opal_value_t *val);
 274 
 275 /****  SERVER SOUTHBOUND FUNCTIONS  ****/
 276 OPAL_MODULE_DECLSPEC int ext2x_server_init(opal_pmix_server_module_t *module,
 277                                            opal_list_t *info);
 278 OPAL_MODULE_DECLSPEC int ext2x_server_finalize(void);
 279 OPAL_MODULE_DECLSPEC int ext2x_server_gen_regex(const char *input, char **regex);
 280 OPAL_MODULE_DECLSPEC int ext2x_server_gen_ppn(const char *input, char **ppn);
 281 OPAL_MODULE_DECLSPEC int ext2x_server_register_nspace(opal_jobid_t jobid,
 282                                                       int nlocalprocs,
 283                                                       opal_list_t *info,
 284                                                       opal_pmix_op_cbfunc_t cbfunc,
 285                                                       void *cbdata);
 286 OPAL_MODULE_DECLSPEC void ext2x_server_deregister_nspace(opal_jobid_t jobid,
 287                                                           opal_pmix_op_cbfunc_t cbfunc,
 288                                                           void *cbdata);
 289 OPAL_MODULE_DECLSPEC int ext2x_server_register_client(const opal_process_name_t *proc,
 290                                                       uid_t uid, gid_t gid,
 291                                                       void *server_object,
 292                                                       opal_pmix_op_cbfunc_t cbfunc,
 293                                                       void *cbdata);
 294 OPAL_MODULE_DECLSPEC void ext2x_server_deregister_client(const opal_process_name_t *proc,
 295                                                           opal_pmix_op_cbfunc_t cbfunc,
 296                                                           void *cbdata);
 297 OPAL_MODULE_DECLSPEC int ext2x_server_setup_fork(const opal_process_name_t *proc, char ***env);
 298 OPAL_MODULE_DECLSPEC int ext2x_server_dmodex(const opal_process_name_t *proc,
 299                                              opal_pmix_modex_cbfunc_t cbfunc, void *cbdata);
 300 OPAL_MODULE_DECLSPEC int ext2x_server_notify_event(int status,
 301                                                     const opal_process_name_t *source,
 302                                                     opal_list_t *info,
 303                                                     opal_pmix_op_cbfunc_t cbfunc, void *cbdata);
 304 
 305 
 306 /****  COMPONENT UTILITY FUNCTIONS  ****/
 307 OPAL_MODULE_DECLSPEC int opal_pmix_ext2x_check_evars(void);
 308 
 309 OPAL_MODULE_DECLSPEC void ext2x_event_hdlr(size_t evhdlr_registration_id,
 310                                             pmix_status_t status, const pmix_proc_t *source,
 311                                             pmix_info_t info[], size_t ninfo,
 312                                             pmix_info_t results[], size_t nresults,
 313                                             pmix_event_notification_cbfunc_fn_t cbfunc,
 314                                             void *cbdata);
 315 OPAL_MODULE_DECLSPEC pmix_status_t ext2x_convert_opalrc(int rc);
 316 OPAL_MODULE_DECLSPEC int ext2x_convert_rc(pmix_status_t rc);
 317 
 318 OPAL_MODULE_DECLSPEC opal_vpid_t ext2x_convert_rank(pmix_rank_t rank);
 319 OPAL_MODULE_DECLSPEC pmix_rank_t ext2x_convert_opalrank(opal_vpid_t vpid);
 320 
 321 OPAL_MODULE_DECLSPEC opal_pmix_scope_t ext2x_convert_scope(pmix_scope_t scope);
 322 OPAL_MODULE_DECLSPEC pmix_scope_t ext2x_convert_opalscope(opal_pmix_scope_t scope);
 323 
 324 OPAL_MODULE_DECLSPEC pmix_data_range_t ext2x_convert_opalrange(opal_pmix_data_range_t range);
 325 OPAL_MODULE_DECLSPEC opal_pmix_data_range_t ext2x_convert_range(pmix_data_range_t range);
 326 
 327 OPAL_MODULE_DECLSPEC opal_pmix_persistence_t ext2x_convert_persist(pmix_persistence_t scope);
 328 OPAL_MODULE_DECLSPEC pmix_persistence_t ext2x_convert_opalpersist(opal_pmix_persistence_t scope);
 329 
 330 OPAL_MODULE_DECLSPEC void ext2x_value_load(pmix_value_t *v,
 331                                             opal_value_t *kv);
 332 OPAL_MODULE_DECLSPEC int ext2x_value_unload(opal_value_t *kv,
 333                                             const pmix_value_t *v);
 334 
 335 OPAL_MODULE_DECLSPEC opal_pmix_alloc_directive_t ext2x_convert_allocdir(pmix_alloc_directive_t dir);
 336 
 337 OPAL_MODULE_DECLSPEC char* ext2x_convert_jobid(opal_jobid_t jobid);
 338 
 339 END_C_DECLS
 340 
 341 #endif /* MCA_PMIX_EXTERNAL_H */

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