This source file includes following definitions.
- opal_proc_construct
- opal_proc_destruct
- opal_compare_opal_procs
- opal_proc_local_get
- opal_proc_local_set
- opal_proc_set_name
- opal_process_name_print_should_never_be_called
- opal_vpid_print_should_never_be_called
- opal_jobid_print_should_never_be_called
- opal_convert_string_to_process_name_should_never_be_called
- opal_convert_process_name_to_string_should_never_be_called
- opal_snprintf_jobid_should_never_be_called
- opal_convert_string_to_jobid_should_never_be_called
- opal_proc_for_name_should_never_be_called
- opal_get_proc_hostname
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include "opal_config.h"
20
21 #include "proc.h"
22 #include "opal/util/proc.h"
23 #include "opal/util/arch.h"
24 #include "opal/util/string_copy.h"
25 #include "opal/mca/pmix/pmix.h"
26
27 opal_process_name_t opal_name_wildcard = {OPAL_JOBID_WILDCARD, OPAL_VPID_WILDCARD};
28 opal_process_name_t opal_name_invalid = {OPAL_JOBID_INVALID, OPAL_VPID_INVALID};
29
30 opal_process_info_t opal_process_info = {
31 .nodename = NULL,
32 .job_session_dir = NULL,
33 .proc_session_dir = NULL,
34 .num_local_peers = 0,
35 .my_local_rank = 0,
36 .cpuset = NULL,
37 };
38
39 static opal_proc_t opal_local_proc = {
40 { .opal_list_next = NULL,
41 .opal_list_prev = NULL},
42 {OPAL_JOBID_INVALID, OPAL_VPID_INVALID},
43 0,
44 0,
45 NULL,
46 NULL
47 };
48 static opal_proc_t* opal_proc_my_name = &opal_local_proc;
49
50 static void opal_proc_construct(opal_proc_t* proc)
51 {
52 proc->proc_arch = opal_local_arch;
53 proc->proc_convertor = NULL;
54 proc->proc_flags = 0;
55 proc->proc_name = *OPAL_NAME_INVALID;
56 proc->proc_hostname = NULL;
57 }
58
59 static void opal_proc_destruct(opal_proc_t* proc)
60 {
61 proc->proc_flags = 0;
62 proc->proc_name = *OPAL_NAME_INVALID;
63 proc->proc_hostname = NULL;
64 proc->proc_convertor = NULL;
65 }
66
67 OBJ_CLASS_INSTANCE(opal_proc_t, opal_list_item_t,
68 opal_proc_construct, opal_proc_destruct);
69
70 OBJ_CLASS_INSTANCE(opal_namelist_t, opal_list_item_t,
71 NULL, NULL);
72
73 static int
74 opal_compare_opal_procs(const opal_process_name_t p1,
75 const opal_process_name_t p2)
76 {
77 if( p1.jobid < p2.jobid ) {
78 return -1;
79 }
80 if( p1.jobid > p2.jobid ) {
81 return 1;
82 }
83 if( p1.vpid < p2.vpid ) {
84 return -1;
85 }
86 if( p1.vpid > p2.vpid ) {
87 return 1;
88 }
89 return 0;
90 }
91
92 opal_compare_proc_fct_t opal_compare_proc = opal_compare_opal_procs;
93
94 opal_proc_t* opal_proc_local_get(void)
95 {
96 return opal_proc_my_name;
97 }
98
99 int opal_proc_local_set(opal_proc_t* proc)
100 {
101 if( proc != opal_proc_my_name ) {
102 if( NULL != proc )
103 OBJ_RETAIN(proc);
104 if( &opal_local_proc != opal_proc_my_name )
105 OBJ_RELEASE(opal_proc_my_name);
106 if( NULL != proc ) {
107 opal_proc_my_name = proc;
108 } else {
109 opal_proc_my_name = &opal_local_proc;
110 }
111 }
112 return OPAL_SUCCESS;
113 }
114
115
116
117
118
119 void opal_proc_set_name(opal_process_name_t *name)
120 {
121
122 memcpy(&opal_local_proc.proc_name, name, sizeof(opal_process_name_t));
123 }
124
125
126
127
128
129
130
131 static char*
132 opal_process_name_print_should_never_be_called(const opal_process_name_t procname)
133 {
134 return "My Name is Nobody";
135 }
136
137 static char*
138 opal_vpid_print_should_never_be_called(const opal_vpid_t unused)
139 {
140 return "My VPID";
141 }
142
143 static char*
144 opal_jobid_print_should_never_be_called(const opal_jobid_t unused)
145 {
146 return "My JOBID";
147 }
148
149 static int opal_convert_string_to_process_name_should_never_be_called(opal_process_name_t *name,
150 const char* name_string)
151 {
152 return OPAL_ERR_NOT_SUPPORTED;
153 }
154
155 static int opal_convert_process_name_to_string_should_never_be_called(char** name_string,
156 const opal_process_name_t *name)
157 {
158 return OPAL_ERR_NOT_SUPPORTED;
159 }
160
161 static int opal_snprintf_jobid_should_never_be_called(char* name_string, size_t size, opal_jobid_t jobid)
162 {
163 (void)opal_string_copy(name_string, "My JOBID", size);
164 return OPAL_SUCCESS;
165 }
166
167 static int opal_convert_string_to_jobid_should_never_be_called(opal_jobid_t *jobid, const char *jobid_string)
168 {
169 return OPAL_ERR_NOT_SUPPORTED;
170 }
171
172 static struct opal_proc_t *opal_proc_for_name_should_never_be_called (opal_process_name_t name)
173 {
174 return NULL;
175 }
176
177 char* (*opal_process_name_print)(const opal_process_name_t) = opal_process_name_print_should_never_be_called;
178 char* (*opal_vpid_print)(const opal_vpid_t) = opal_vpid_print_should_never_be_called;
179 char* (*opal_jobid_print)(const opal_jobid_t) = opal_jobid_print_should_never_be_called;
180 int (*opal_convert_string_to_process_name)(opal_process_name_t *name, const char* name_string) = opal_convert_string_to_process_name_should_never_be_called;
181 int (*opal_convert_process_name_to_string)(char** name_string, const opal_process_name_t *name) = opal_convert_process_name_to_string_should_never_be_called;
182 int (*opal_snprintf_jobid)(char* name_string, size_t size, opal_jobid_t jobid) = opal_snprintf_jobid_should_never_be_called;
183 int (*opal_convert_string_to_jobid)(opal_jobid_t *jobid, const char *jobid_string) = opal_convert_string_to_jobid_should_never_be_called;
184 struct opal_proc_t *(*opal_proc_for_name) (const opal_process_name_t name) = opal_proc_for_name_should_never_be_called;
185
186 char* opal_get_proc_hostname(const opal_proc_t *proc)
187 {
188 int ret;
189
190
191 if (NULL == proc) {
192 return "unknown";
193 }
194
195
196
197 if (proc == opal_proc_my_name) {
198 return opal_process_info.nodename;
199 }
200
201
202 if (NULL != proc->proc_hostname) {
203 return proc->proc_hostname;
204 }
205
206
207 OPAL_MODEX_RECV_VALUE_OPTIONAL(ret, OPAL_PMIX_HOSTNAME, &proc->proc_name,
208 (char**)&(proc->proc_hostname), OPAL_STRING);
209 if (OPAL_SUCCESS != ret) {
210 return "unknown";
211 }
212
213
214 return proc->proc_hostname;
215 }