This source file includes following definitions.
- pmix_psec_base_select
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <src/include/pmix_config.h>
21 #include <pmix_common.h>
22
23 #include <string.h>
24
25 #include "src/mca/mca.h"
26 #include "src/mca/base/base.h"
27 #include "src/util/error.h"
28 #include "src/util/show_help.h"
29
30 #include "src/mca/psec/base/base.h"
31
32 static bool selected = false;
33
34
35
36 int pmix_psec_base_select(void)
37 {
38 pmix_mca_base_component_list_item_t *cli = NULL;
39 pmix_mca_base_component_t *component = NULL;
40 pmix_mca_base_module_t *module = NULL;
41 pmix_psec_module_t *nmodule;
42 pmix_psec_base_active_module_t *newmodule, *mod;
43 int rc, priority;
44 bool inserted;
45
46 if (selected) {
47
48 return PMIX_SUCCESS;
49 }
50 selected = true;
51
52
53 PMIX_LIST_FOREACH(cli, &pmix_psec_base_framework.framework_components, pmix_mca_base_component_list_item_t) {
54 component = (pmix_mca_base_component_t *) cli->cli_component;
55
56 pmix_output_verbose(5, pmix_psec_base_framework.framework_output,
57 "mca:psec:select: checking available component %s", component->pmix_mca_component_name);
58
59
60 if (NULL == component->pmix_mca_query_component) {
61 pmix_output_verbose(5, pmix_psec_base_framework.framework_output,
62 "mca:psec:select: Skipping component [%s]. It does not implement a query function",
63 component->pmix_mca_component_name );
64 continue;
65 }
66
67
68 pmix_output_verbose(5, pmix_psec_base_framework.framework_output,
69 "mca:psec:select: Querying component [%s]",
70 component->pmix_mca_component_name);
71 rc = component->pmix_mca_query_component(&module, &priority);
72
73
74 if (PMIX_SUCCESS != rc || NULL == module) {
75 pmix_output_verbose(5, pmix_psec_base_framework.framework_output,
76 "mca:psec:select: Skipping component [%s]. Query failed to return a module",
77 component->pmix_mca_component_name);
78 continue;
79 }
80 nmodule = (pmix_psec_module_t*) module;
81
82
83 if (NULL != nmodule->init && PMIX_SUCCESS != nmodule->init()) {
84
85 pmix_output_verbose(5, pmix_psec_base_framework.framework_output,
86 "mca:psec:select: Skipping component [%s]. Failed to init",
87 component->pmix_mca_component_name);
88 continue;
89 }
90
91
92
93 newmodule = PMIX_NEW(pmix_psec_base_active_module_t);
94 newmodule->pri = priority;
95 newmodule->module = nmodule;
96 newmodule->component = (pmix_psec_base_component_t*)cli->cli_component;
97
98
99 inserted = false;
100 PMIX_LIST_FOREACH(mod, &pmix_psec_globals.actives, pmix_psec_base_active_module_t) {
101 if (priority > mod->pri) {
102 pmix_list_insert_pos(&pmix_psec_globals.actives,
103 (pmix_list_item_t*)mod, &newmodule->super);
104 inserted = true;
105 break;
106 }
107 }
108 if (!inserted) {
109
110 pmix_list_append(&pmix_psec_globals.actives, &newmodule->super);
111 }
112 }
113
114
115 if (0 == pmix_list_get_size(&pmix_psec_globals.actives)) {
116 pmix_show_help("help-pmix-runtime.txt", "no-plugins", true, "PSEC");
117 return PMIX_ERR_SILENT;
118 }
119
120 if (4 < pmix_output_get_verbosity(pmix_psec_base_framework.framework_output)) {
121 pmix_output(0, "Final psec priorities");
122
123 PMIX_LIST_FOREACH(mod, &pmix_psec_globals.actives, pmix_psec_base_active_module_t) {
124 pmix_output(0, "\tpsec: %s Priority: %d", mod->component->base.pmix_mca_component_name, mod->pri);
125 }
126 }
127
128 return PMIX_SUCCESS;;
129 }