This source file includes following definitions.
- release_cb
- get_cb
- key_is_replace
- test_replace
1
2
3
4
5
6
7
8
9
10
11
12 #include "test_replace.h"
13
14 static void release_cb(pmix_status_t status, void *cbdata)
15 {
16 int *ptr = (int*)cbdata;
17 *ptr = 0;
18 }
19
20 static void get_cb(pmix_status_t status, pmix_value_t *kv, void *cbdata)
21 {
22 get_cbdata *cb = (get_cbdata*)cbdata;
23 if (PMIX_SUCCESS == status) {
24 pmix_value_xfer(cb->kv, kv);
25 }
26 cb->in_progress = 0;
27 cb->status = status;
28 }
29
30 static int key_is_replace(int key_idx) {
31 key_replace_t *item;
32
33 PMIX_LIST_FOREACH(item, &key_replace, key_replace_t) {
34 if (item->key_idx == key_idx)
35 return 1;
36 }
37 return 0;
38 }
39
40 int test_replace(char *my_nspace, pmix_rank_t my_rank, test_params params) {
41 int key_idx = 0;
42 int key_cnt = 0;
43 char sval[PMIX_MAX_NSLEN];
44 pmix_proc_t proc;
45 pmix_status_t rc;
46 key_replace_t *item;
47
48 PMIX_CONSTRUCT(&key_replace, pmix_list_t);
49 parse_replace(params.key_replace, 1, &key_cnt);
50
51 for (key_idx = 0; key_idx < key_cnt; key_idx++) {
52 memset(sval, 0, PMIX_MAX_NSLEN);
53 sprintf(sval, "test_replace:%s:%d:%d", my_nspace, my_rank, key_idx);
54
55 PUT(string, sval, PMIX_GLOBAL, 0, key_idx, 1);
56 if (PMIX_SUCCESS != rc) {
57 TEST_ERROR(("%s:%d: PMIx_Put failed: %d", my_nspace, my_rank, rc));
58 PMIX_LIST_DESTRUCT(&key_replace);
59 return rc;
60 }
61 }
62
63 PMIX_PROC_CONSTRUCT(&proc);
64 (void)strncpy(proc.nspace, my_nspace, PMIX_MAX_NSLEN);
65 proc.rank = PMIX_RANK_WILDCARD;
66
67
68 if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
69 TEST_ERROR(("%s:%d: PMIx_Commit failed: %d", my_nspace, my_rank, rc));
70 PMIX_LIST_DESTRUCT(&key_replace);
71 PMIX_PROC_DESTRUCT(&proc);
72 return PMIX_ERROR;
73 }
74
75 FENCE(1, 1, (&proc), 1);
76 if (PMIX_SUCCESS != rc) {
77 TEST_ERROR(("%s:%d: PMIx_Fence failed: %d", my_nspace, my_rank, rc));
78 PMIX_LIST_DESTRUCT(&key_replace);
79 PMIX_PROC_DESTRUCT(&proc);
80 return rc;
81 }
82
83 PMIX_LIST_FOREACH(item, &key_replace, key_replace_t) {
84 memset(sval, 0, PMIX_MAX_NSLEN);
85 sprintf(sval, "test_replace:%s:%d:%d: replaced key", my_nspace, my_rank, item->key_idx);
86
87 PUT(string, sval, PMIX_GLOBAL, 0, item->key_idx, 1);
88 if (PMIX_SUCCESS != rc) {
89 TEST_ERROR(("%s:%d: PMIx_Put failed: %d", my_nspace, my_rank, rc));
90 PMIX_LIST_DESTRUCT(&key_replace);
91 PMIX_PROC_DESTRUCT(&proc);
92 return rc;
93 }
94 }
95
96
97
98 if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
99 TEST_ERROR(("%s:%d: PMIx_Commit failed: %d", my_nspace, my_rank, rc));
100 PMIX_LIST_DESTRUCT(&key_replace);
101 PMIX_PROC_DESTRUCT(&proc);
102 return PMIX_ERROR;
103 }
104
105 FENCE(1, 1, (&proc), 1);
106 if (PMIX_SUCCESS != rc) {
107 TEST_ERROR(("%s:%d: PMIx_Fence failed: %d", my_nspace, my_rank, rc));
108 PMIX_LIST_DESTRUCT(&key_replace);
109 PMIX_PROC_DESTRUCT(&proc);
110 return rc;
111 }
112
113 for (key_idx = 0; key_idx < key_cnt; key_idx++) {
114 memset(sval, 0, PMIX_MAX_NSLEN);
115
116 if (key_is_replace(key_idx)) {
117 sprintf(sval, "test_replace:%s:%d:%d: replaced key", my_nspace, my_rank, key_idx);
118 } else {
119 sprintf(sval, "test_replace:%s:%d:%d", my_nspace, my_rank, key_idx);
120 }
121
122
123 GET(string, sval, my_nspace, my_rank, 0, key_idx, 1, 1, 0);
124 if (PMIX_SUCCESS != rc) {
125 TEST_ERROR(("%s:%d: PMIx_Get of remote key on local proc", my_nspace, my_rank));
126 PMIX_LIST_DESTRUCT(&key_replace);
127 PMIX_PROC_DESTRUCT(&proc);
128 return PMIX_ERROR;
129 }
130 }
131
132 PMIX_LIST_DESTRUCT(&key_replace);
133 PMIX_PROC_DESTRUCT(&proc);
134 return PMIX_SUCCESS;
135 }