File indexing completed on 2025-02-22 10:47:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef PMIX_SERVER_OPS_H
0016 #define PMIX_SERVER_OPS_H
0017
0018 #include <unistd.h>
0019 #ifdef HAVE_SYS_TYPES_H
0020 # include <sys/types.h>
0021 #endif
0022
0023 #include "src/include/pmix_config.h"
0024 #include "pmix_common.h"
0025 #include "pmix_server.h"
0026
0027 #include "src/class/pmix_hotel.h"
0028 #include "src/include/pmix_globals.h"
0029 #include "src/include/pmix_types.h"
0030 #include "src/threads/pmix_threads.h"
0031 #include "src/util/pmix_hash.h"
0032
0033 #define PMIX_IOF_HOTEL_SIZE 256
0034 #define PMIX_IOF_MAX_STAY 300000000
0035
0036 typedef struct {
0037 pmix_object_t super;
0038 pmix_event_t ev;
0039 pmix_server_trkr_t *trk;
0040 } pmix_trkr_caddy_t;
0041 PMIX_CLASS_DECLARATION(pmix_trkr_caddy_t);
0042
0043 typedef struct {
0044 pmix_object_t super;
0045 pmix_event_t ev;
0046 pmix_lock_t lock;
0047 pmix_peer_t *peer;
0048 char *nspace;
0049 pmix_status_t status;
0050 pmix_status_t *codes;
0051 size_t ncodes;
0052 pmix_proc_t proc;
0053 pmix_proc_t *procs;
0054 size_t nprocs;
0055 uid_t uid;
0056 gid_t gid;
0057 void *server_object;
0058 int nlocalprocs;
0059 pmix_info_t *info;
0060 size_t ninfo;
0061 bool copied;
0062 char **keys;
0063 pmix_app_t *apps;
0064 size_t napps;
0065 pmix_iof_channel_t channels;
0066 pmix_iof_flags_t flags;
0067 pmix_byte_object_t *bo;
0068 size_t nbo;
0069
0070
0071 time_t ts;
0072
0073 int room;
0074 pmix_op_cbfunc_t opcbfunc;
0075 pmix_dmodex_response_fn_t cbfunc;
0076 pmix_setup_application_cbfunc_t setupcbfunc;
0077 pmix_lookup_cbfunc_t lkcbfunc;
0078 pmix_spawn_cbfunc_t spcbfunc;
0079 void *cbdata;
0080 } pmix_setup_caddy_t;
0081 PMIX_CLASS_DECLARATION(pmix_setup_caddy_t);
0082
0083
0084 typedef void (*pmix_inventory_cbfunc_t)(pmix_status_t status, pmix_list_t *inventory, void *cbdata);
0085
0086
0087 typedef struct {
0088 pmix_object_t super;
0089 pmix_lock_t lock;
0090 pmix_event_t ev;
0091 pmix_status_t status;
0092 int requests;
0093 int replies;
0094 pmix_list_t payload;
0095 pmix_info_t *info;
0096 size_t ninfo;
0097 pmix_inventory_cbfunc_t cbfunc;
0098 pmix_info_cbfunc_t infocbfunc;
0099 pmix_op_cbfunc_t opcbfunc;
0100 void *cbdata;
0101 } pmix_inventory_rollup_t;
0102 PMIX_CLASS_DECLARATION(pmix_inventory_rollup_t);
0103
0104 typedef struct {
0105 pmix_list_item_t super;
0106 pmix_setup_caddy_t *cd;
0107 } pmix_dmdx_remote_t;
0108 PMIX_CLASS_DECLARATION(pmix_dmdx_remote_t);
0109
0110 typedef struct {
0111 pmix_list_item_t super;
0112 pmix_proc_t proc;
0113 pmix_list_t loc_reqs;
0114
0115 pmix_info_t *info;
0116 size_t ninfo;
0117 } pmix_dmdx_local_t;
0118 PMIX_CLASS_DECLARATION(pmix_dmdx_local_t);
0119
0120 typedef struct {
0121 pmix_list_item_t super;
0122 pmix_event_t ev;
0123 bool event_active;
0124 pmix_dmdx_local_t *lcd;
0125 char *key;
0126 pmix_modex_cbfunc_t cbfunc;
0127 void *cbdata;
0128 } pmix_dmdx_request_t;
0129 PMIX_CLASS_DECLARATION(pmix_dmdx_request_t);
0130
0131
0132 typedef struct {
0133 pmix_list_item_t super;
0134 pmix_peer_t *peer;
0135 bool enviro_events;
0136 pmix_proc_t *affected;
0137 size_t naffected;
0138 } pmix_peer_events_info_t;
0139 PMIX_CLASS_DECLARATION(pmix_peer_events_info_t);
0140
0141 typedef struct {
0142 pmix_list_item_t super;
0143 pmix_list_t peers;
0144 int code;
0145 } pmix_regevents_info_t;
0146 PMIX_CLASS_DECLARATION(pmix_regevents_info_t);
0147
0148 typedef struct {
0149 pmix_list_item_t super;
0150 pmix_group_t *grp;
0151 pmix_rank_t rank;
0152 size_t idx;
0153 } pmix_group_caddy_t;
0154 PMIX_CLASS_DECLARATION(pmix_group_caddy_t);
0155
0156 typedef struct {
0157 pmix_list_item_t super;
0158 pmix_proc_t source;
0159 pmix_iof_channel_t channel;
0160 pmix_byte_object_t *bo;
0161 pmix_info_t *info;
0162 size_t ninfo;
0163 } pmix_iof_cache_t;
0164 PMIX_CLASS_DECLARATION(pmix_iof_cache_t);
0165
0166 typedef struct {
0167 pmix_list_item_t super;
0168 char *name;
0169 pmix_proc_t *members;
0170 size_t nmembers;
0171 } pmix_pset_t;
0172 PMIX_CLASS_DECLARATION(pmix_pset_t);
0173
0174 typedef struct {
0175 pmix_list_t nspaces;
0176 pmix_pointer_array_t clients;
0177 pmix_list_t collectives;
0178 pmix_list_t remote_pnd;
0179
0180 pmix_list_t local_reqs;
0181 pmix_list_t gdata;
0182 char **genvars;
0183 pmix_list_t events;
0184 char **failedgrps;
0185 pmix_list_t iof;
0186 pmix_list_t iof_residuals;
0187 pmix_list_t psets;
0188 size_t max_iof_cache;
0189 bool tool_connections_allowed;
0190 char *tmpdir;
0191 char *system_tmpdir;
0192 bool fence_localonly_opt;
0193
0194 int get_output;
0195 int get_verbose;
0196
0197 int connect_output;
0198 int connect_verbose;
0199
0200 int fence_output;
0201 int fence_verbose;
0202
0203 int pub_output;
0204 int pub_verbose;
0205
0206 int spawn_output;
0207 int spawn_verbose;
0208
0209 int event_output;
0210 int event_verbose;
0211
0212 int iof_output;
0213 int iof_verbose;
0214
0215 int base_output;
0216 int base_verbose;
0217
0218 int group_output;
0219 int group_verbose;
0220 } pmix_server_globals_t;
0221
0222 #define PMIX_GDS_CADDY(c, p, t) \
0223 do { \
0224 (c) = PMIX_NEW(pmix_server_caddy_t); \
0225 (c)->hdr.tag = (t); \
0226 PMIX_RETAIN((p)); \
0227 (c)->peer = (p); \
0228 } while (0)
0229
0230 #define PMIX_SETUP_COLLECTIVE(c, t) \
0231 do { \
0232 (c) = PMIX_NEW(pmix_trkr_caddy_t); \
0233 (c)->trk = (t); \
0234 } while (0)
0235
0236 #define PMIX_EXECUTE_COLLECTIVE(c, t, f) \
0237 do { \
0238 PMIX_SETUP_COLLECTIVE(c, t); \
0239 pmix_event_assign(&((c)->ev), pmix_globals.evbase, -1, EV_WRITE, (f), (c)); \
0240 pmix_event_active(&((c)->ev), EV_WRITE, 1); \
0241 } while (0)
0242
0243 PMIX_EXPORT bool pmix_server_trk_update(pmix_server_trkr_t *trk);
0244
0245 PMIX_EXPORT void pmix_pending_nspace_requests(pmix_namespace_t *nptr);
0246 PMIX_EXPORT pmix_status_t pmix_pending_resolve(pmix_namespace_t *nptr, pmix_rank_t rank,
0247 pmix_status_t status, pmix_scope_t scope,
0248 pmix_dmdx_local_t *lcd);
0249
0250 PMIX_EXPORT pmix_status_t pmix_server_abort(pmix_peer_t *peer, pmix_buffer_t *buf,
0251 pmix_op_cbfunc_t cbfunc, void *cbdata);
0252
0253 PMIX_EXPORT pmix_status_t pmix_server_commit(pmix_peer_t *peer, pmix_buffer_t *buf);
0254
0255 PMIX_EXPORT pmix_status_t pmix_server_fence(pmix_server_caddy_t *cd, pmix_buffer_t *buf,
0256 pmix_modex_cbfunc_t modexcbfunc,
0257 pmix_op_cbfunc_t opcbfunc);
0258
0259 PMIX_EXPORT pmix_status_t pmix_server_get(pmix_buffer_t *buf, pmix_modex_cbfunc_t cbfunc,
0260 void *cbdata);
0261
0262 PMIX_EXPORT pmix_status_t pmix_server_publish(pmix_peer_t *peer, pmix_buffer_t *buf,
0263 pmix_op_cbfunc_t cbfunc, void *cbdata);
0264
0265 PMIX_EXPORT pmix_status_t pmix_server_lookup(pmix_peer_t *peer, pmix_buffer_t *buf,
0266 pmix_lookup_cbfunc_t cbfunc, void *cbdata);
0267
0268 PMIX_EXPORT pmix_status_t pmix_server_unpublish(pmix_peer_t *peer, pmix_buffer_t *buf,
0269 pmix_op_cbfunc_t cbfunc, void *cbdata);
0270
0271 PMIX_EXPORT pmix_status_t pmix_server_spawn(pmix_peer_t *peer, pmix_buffer_t *buf,
0272 pmix_spawn_cbfunc_t cbfunc, void *cbdata);
0273 PMIX_EXPORT void pmix_server_spawn_parser(pmix_peer_t *peer, pmix_setup_caddy_t *cd);
0274 PMIX_EXPORT void pmix_server_spcbfunc(pmix_status_t status, char nspace[], void *cbdata);
0275
0276 PMIX_EXPORT pmix_status_t pmix_server_connect(pmix_server_caddy_t *cd, pmix_buffer_t *buf,
0277 pmix_op_cbfunc_t cbfunc);
0278
0279 PMIX_EXPORT pmix_status_t pmix_server_disconnect(pmix_server_caddy_t *cd, pmix_buffer_t *buf,
0280 pmix_op_cbfunc_t cbfunc);
0281
0282 PMIX_EXPORT pmix_status_t pmix_server_notify_error(pmix_status_t status, pmix_proc_t procs[],
0283 size_t nprocs, pmix_proc_t error_procs[],
0284 size_t error_nprocs, pmix_info_t info[],
0285 size_t ninfo, pmix_op_cbfunc_t cbfunc,
0286 void *cbdata);
0287
0288 PMIX_EXPORT pmix_status_t pmix_server_register_events(pmix_peer_t *peer, pmix_buffer_t *buf,
0289 pmix_op_cbfunc_t cbfunc, void *cbdata);
0290
0291 PMIX_EXPORT void pmix_server_deregister_events(pmix_peer_t *peer, pmix_buffer_t *buf);
0292
0293 PMIX_EXPORT pmix_status_t pmix_server_query(pmix_peer_t *peer, pmix_buffer_t *buf,
0294 pmix_info_cbfunc_t cbfunc, void *cbdata);
0295
0296 PMIX_EXPORT pmix_status_t pmix_server_log(pmix_peer_t *peer, pmix_buffer_t *buf,
0297 pmix_op_cbfunc_t cbfunc, void *cbdata);
0298
0299 PMIX_EXPORT pmix_status_t pmix_server_alloc(pmix_peer_t *peer, pmix_buffer_t *buf,
0300 pmix_info_cbfunc_t cbfunc, void *cbdata);
0301
0302 PMIX_EXPORT pmix_status_t pmix_server_job_ctrl(pmix_peer_t *peer, pmix_buffer_t *buf,
0303 pmix_info_cbfunc_t cbfunc, void *cbdata);
0304
0305 PMIX_EXPORT pmix_status_t pmix_server_monitor(pmix_peer_t *peer, pmix_buffer_t *buf,
0306 pmix_info_cbfunc_t cbfunc, void *cbdata);
0307
0308 PMIX_EXPORT pmix_status_t pmix_server_get_credential(pmix_peer_t *peer, pmix_buffer_t *buf,
0309 pmix_credential_cbfunc_t cbfunc, void *cbdata);
0310
0311 PMIX_EXPORT pmix_status_t pmix_server_validate_credential(pmix_peer_t *peer, pmix_buffer_t *buf,
0312 pmix_validation_cbfunc_t cbfunc,
0313 void *cbdata);
0314
0315 PMIX_EXPORT pmix_status_t pmix_server_iofreg(pmix_peer_t *peer, pmix_buffer_t *buf,
0316 pmix_op_cbfunc_t cbfunc, void *cbdata);
0317
0318 PMIX_EXPORT pmix_status_t pmix_server_iofstdin(pmix_peer_t *peer, pmix_buffer_t *buf,
0319 pmix_op_cbfunc_t cbfunc, void *cbdata);
0320
0321 PMIX_EXPORT pmix_status_t pmix_server_iofdereg(pmix_peer_t *peer, pmix_buffer_t *buf,
0322 pmix_op_cbfunc_t cbfunc, void *cbdata);
0323
0324 PMIX_EXPORT pmix_status_t pmix_server_grpconstruct(pmix_server_caddy_t *cd, pmix_buffer_t *buf);
0325
0326 PMIX_EXPORT pmix_status_t pmix_server_grpdestruct(pmix_server_caddy_t *cd, pmix_buffer_t *buf);
0327
0328 PMIX_EXPORT pmix_status_t pmix_server_event_recvd_from_client(pmix_peer_t *peer, pmix_buffer_t *buf,
0329 pmix_op_cbfunc_t cbfunc,
0330 void *cbdata);
0331 PMIX_EXPORT void pmix_server_execute_collective(int sd, short args, void *cbdata);
0332
0333 PMIX_EXPORT pmix_status_t pmix_server_initialize(void);
0334
0335 PMIX_EXPORT void pmix_server_message_handler(struct pmix_peer_t *pr, pmix_ptl_hdr_t *hdr,
0336 pmix_buffer_t *buf, void *cbdata);
0337
0338 PMIX_EXPORT void pmix_server_purge_events(pmix_peer_t *peer, pmix_proc_t *proc);
0339
0340 PMIX_EXPORT pmix_status_t pmix_server_fabric_register(pmix_server_caddy_t *cd, pmix_buffer_t *buf,
0341 pmix_info_cbfunc_t cbfunc);
0342
0343 PMIX_EXPORT pmix_status_t pmix_server_fabric_update(pmix_server_caddy_t *cd, pmix_buffer_t *buf,
0344 pmix_info_cbfunc_t cbfunc);
0345
0346 PMIX_EXPORT pmix_status_t pmix_server_fabric_get_vertex_info(pmix_server_caddy_t *cd,
0347 pmix_buffer_t *buf,
0348 pmix_info_cbfunc_t cbfunc);
0349
0350 PMIX_EXPORT pmix_status_t pmix_server_fabric_get_device_index(pmix_server_caddy_t *cd,
0351 pmix_buffer_t *buf,
0352 pmix_info_cbfunc_t cbfunc);
0353
0354 PMIX_EXPORT pmix_status_t pmix_server_device_dists(pmix_server_caddy_t *cd,
0355 pmix_buffer_t *buf,
0356 pmix_device_dist_cbfunc_t cbfunc);
0357
0358 PMIX_EXPORT pmix_status_t pmix_server_refresh_cache(pmix_server_caddy_t *cd,
0359 pmix_buffer_t *buf,
0360 pmix_op_cbfunc_t cbfunc);
0361
0362 PMIX_EXPORT void pmix_server_query_cbfunc(pmix_status_t status,
0363 pmix_info_t *info, size_t ninfo, void *cbdata,
0364 pmix_release_cbfunc_t release_fn, void *release_cbdata);
0365
0366 PMIX_EXPORT extern pmix_server_module_t pmix_host_server;
0367 PMIX_EXPORT extern pmix_server_globals_t pmix_server_globals;
0368
0369 static inline pmix_peer_t* pmix_get_peer_object(const pmix_proc_t *proc)
0370 {
0371 pmix_peer_t *peer;
0372 int n;
0373
0374 for (n=0; n < pmix_server_globals.clients.size; n++) {
0375 peer = (pmix_peer_t *) pmix_pointer_array_get_item(&pmix_server_globals.clients, n);
0376 if (NULL == peer) {
0377 continue;
0378 }
0379 if (PMIX_CHECK_NSPACE(proc->nspace, peer->info->pname.nspace) &&
0380 proc->rank == peer->info->pname.rank) {
0381 return peer;
0382 }
0383 }
0384 return NULL;
0385 }
0386
0387
0388 #endif