This source file includes following definitions.
- ds21_init
- ds21_finalize
- ds21_assign_module
- ds21_cache_job_info
- ds21_register_job_info
- ds21_store_job_info
- ds21_store
- ds21_store_modex
- ds21_fetch
- ds21_setup_fork
- ds21_add_nspace
- ds21_del_nspace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <src/include/pmix_config.h>
17 #include <pmix_common.h>
18 #include "src/include/pmix_globals.h"
19 #include "src/util/error.h"
20 #include "src/mca/gds/base/base.h"
21 #include "src/util/argv.h"
22
23 #include "src/mca/common/dstore/dstore_common.h"
24 #include "gds_ds21_base.h"
25 #include "gds_ds21_lock.h"
26 #include "gds_ds21_file.h"
27 #include "src/mca/common/dstore/dstore_base.h"
28
29 static pmix_common_dstore_ctx_t *ds21_ctx;
30
31 static pmix_status_t ds21_init(pmix_info_t info[], size_t ninfo)
32 {
33 pmix_status_t rc = PMIX_SUCCESS;
34
35 ds21_ctx = pmix_common_dstor_init("ds21", info, ninfo,
36 &pmix_ds21_lock_module,
37 &pmix_ds21_file_module);
38 if (NULL == ds21_ctx) {
39 rc = PMIX_ERR_INIT;
40 }
41
42 return rc;
43 }
44
45 static void ds21_finalize(void)
46 {
47 pmix_common_dstor_finalize(ds21_ctx);
48 }
49
50 static pmix_status_t ds21_assign_module(pmix_info_t *info, size_t ninfo,
51 int *priority)
52 {
53 size_t n, m;
54 char **options;
55
56 *priority = 20;
57 if (NULL != info) {
58 for (n=0; n < ninfo; n++) {
59 if (0 == strncmp(info[n].key, PMIX_GDS_MODULE, PMIX_MAX_KEYLEN)) {
60 options = pmix_argv_split(info[n].value.data.string, ',');
61 for (m=0; NULL != options[m]; m++) {
62 if (0 == strcmp(options[m], "ds21")) {
63
64 *priority = 120;
65 break;
66 }
67 if (0 == strcmp(options[m], "dstore")) {
68 *priority = 60;
69 break;
70 }
71 }
72 pmix_argv_free(options);
73 break;
74 }
75 }
76 }
77
78 return PMIX_SUCCESS;
79 }
80
81 static pmix_status_t ds21_cache_job_info(struct pmix_namespace_t *ns,
82 pmix_info_t info[], size_t ninfo)
83 {
84 return PMIX_SUCCESS;
85 }
86
87 static pmix_status_t ds21_register_job_info(struct pmix_peer_t *pr,
88 pmix_buffer_t *reply)
89 {
90 return pmix_common_dstor_register_job_info(ds21_ctx, pr, reply);
91 }
92
93 static pmix_status_t ds21_store_job_info(const char *nspace, pmix_buffer_t *buf)
94 {
95 return pmix_common_dstor_store_job_info(ds21_ctx, nspace, buf);
96 }
97
98 static pmix_status_t ds21_store(const pmix_proc_t *proc,
99 pmix_scope_t scope,
100 pmix_kval_t *kv)
101 {
102 return pmix_common_dstor_store(ds21_ctx, proc, scope, kv);
103 }
104
105
106
107
108
109 static pmix_status_t ds21_store_modex(struct pmix_namespace_t *nspace,
110 pmix_buffer_t *buf,
111 void *cbdata)
112 {
113 return pmix_common_dstor_store_modex(ds21_ctx, nspace, buf, cbdata);
114 }
115
116 static pmix_status_t ds21_fetch(const pmix_proc_t *proc,
117 pmix_scope_t scope, bool copy,
118 const char *key,
119 pmix_info_t info[], size_t ninfo,
120 pmix_list_t *kvs)
121 {
122 return pmix_common_dstor_fetch(ds21_ctx, proc, scope, copy, key, info, ninfo, kvs);
123 }
124
125 static pmix_status_t ds21_setup_fork(const pmix_proc_t *peer, char ***env)
126 {
127 pmix_status_t rc;
128 char *env_name = NULL;
129 int ds_ver = 0;
130
131 sscanf(ds21_ctx->ds_name, "ds%d", &ds_ver);
132 if (0 == ds_ver) {
133 rc = PMIX_ERR_INIT;
134 PMIX_ERROR_LOG(rc);
135 return rc;
136 }
137 if (0 > asprintf(&env_name, PMIX_DSTORE_VER_BASE_PATH_FMT, ds_ver)) {
138 rc = PMIX_ERR_NOMEM;
139 PMIX_ERROR_LOG(rc);
140 return rc;
141 }
142 rc = pmix_common_dstor_setup_fork(ds21_ctx, env_name, peer, env);
143 free(env_name);
144
145 return rc;
146 }
147
148 static pmix_status_t ds21_add_nspace(const char *nspace,
149 pmix_info_t info[],
150 size_t ninfo)
151 {
152 return pmix_common_dstor_add_nspace(ds21_ctx, nspace, info, ninfo);
153 }
154
155 static pmix_status_t ds21_del_nspace(const char* nspace)
156 {
157 return pmix_common_dstor_del_nspace(ds21_ctx, nspace);
158 }
159
160 pmix_gds_base_module_t pmix_ds21_module = {
161 .name = "ds21",
162 .is_tsafe = true,
163 .init = ds21_init,
164 .finalize = ds21_finalize,
165 .assign_module = ds21_assign_module,
166 .cache_job_info = ds21_cache_job_info,
167 .register_job_info = ds21_register_job_info,
168 .store_job_info = ds21_store_job_info,
169 .store = ds21_store,
170 .store_modex = ds21_store_modex,
171 .fetch = ds21_fetch,
172 .setup_fork = ds21_setup_fork,
173 .add_nspace = ds21_add_nspace,
174 .del_nspace = ds21_del_nspace,
175 };
176