This source file includes following definitions.
- pmix_ds20_kv_size
- pmix_ds20_key_name_ptr
- pmix_ds20_key_name_len
- pmix_ds20_data_ptr
- pmix_ds20_data_size
- pmix_ds20_key_size
- pmix_ds20_ext_slot_size
- pmix_ds20_put_key
- pmix_ds20_is_invalid
- pmix_ds20_set_invalid
- pmix_ds20_is_ext_slot
- pmix_ds20_kname_match
1
2
3
4
5
6
7
8
9
10
11
12 #include <pmix_common.h>
13
14 #include "src/include/pmix_globals.h"
15 #include "src/mca/gds/base/base.h"
16
17 #include "src/mca/common/dstore/dstore_file.h"
18 #include "gds_ds12_file.h"
19
20 #define ESH_KV_SIZE_V20(addr) \
21 __pmix_attribute_extension__ ({ \
22 size_t sz; \
23 memcpy(&sz, addr, sizeof(size_t)); \
24 sz; \
25 })
26
27 #define ESH_KNAME_PTR_V20(addr) \
28 ((char *)addr + sizeof(size_t))
29
30 #define ESH_KNAME_LEN_V20(key) \
31 __pmix_attribute_extension__ ({ \
32 size_t kname_len = strlen(key) + 1; \
33 size_t len = (kname_len < ESH_MIN_KEY_LEN) ? \
34 ESH_MIN_KEY_LEN : kname_len; \
35 len; \
36 })
37
38 #define ESH_DATA_PTR_V20(addr) \
39 __pmix_attribute_extension__ ({ \
40 size_t kname_len = \
41 ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr)); \
42 uint8_t *data_ptr = addr + sizeof(size_t) + kname_len; \
43 data_ptr; \
44 })
45
46 #define ESH_DATA_SIZE_V20(addr, data_ptr) \
47 __pmix_attribute_extension__ ({ \
48 size_t __sz = ESH_KV_SIZE_V20(addr); \
49 size_t data_size = __sz - (data_ptr - addr); \
50 data_size; \
51 })
52
53 #define ESH_KEY_SIZE_V20(key, size) \
54 (sizeof(size_t) + ESH_KNAME_LEN_V20((char*)key) + size)
55
56
57
58
59
60 #define EXT_SLOT_SIZE_V20() \
61 (ESH_KEY_SIZE_V20(ESH_REGION_EXTENSION, sizeof(size_t)))
62
63
64 #define ESH_PUT_KEY_V20(addr, key, buffer, size) \
65 __pmix_attribute_extension__ ({ \
66 size_t sz = ESH_KEY_SIZE_V20(key, size); \
67 memcpy(addr, &sz, sizeof(size_t)); \
68 memset(addr + sizeof(size_t), 0, \
69 ESH_KNAME_LEN_V20(key)); \
70 strncpy((char *)addr + sizeof(size_t), \
71 key, ESH_KNAME_LEN_V20(key)); \
72 memcpy(addr + sizeof(size_t) + ESH_KNAME_LEN_V20(key), \
73 buffer, size); \
74 })
75
76 static size_t pmix_ds20_kv_size(uint8_t *key)
77 {
78 size_t size;
79
80 memcpy(&size, key, sizeof(size_t));
81 return size;
82 }
83
84 static char* pmix_ds20_key_name_ptr(uint8_t *addr)
85 {
86 return ESH_KNAME_PTR_V20(addr);
87 }
88
89 static size_t pmix_ds20_key_name_len(char *key)
90 {
91 return ESH_KNAME_LEN_V20(key);
92 }
93
94 static uint8_t* pmix_ds20_data_ptr(uint8_t *addr)
95 {
96 return ESH_DATA_PTR_V20(addr);
97 }
98
99 static size_t pmix_ds20_data_size(uint8_t *addr, uint8_t* data_ptr)
100 {
101 return ESH_DATA_SIZE_V20(addr, data_ptr);
102 }
103
104 static size_t pmix_ds20_key_size(char *addr, size_t data_size)
105 {
106 return ESH_KEY_SIZE_V20(addr, data_size);
107 }
108
109 static size_t pmix_ds20_ext_slot_size(void)
110 {
111 return EXT_SLOT_SIZE_V20();
112 }
113
114 static int pmix_ds20_put_key(uint8_t *addr, char *key, void *buf, size_t size)
115 {
116 ESH_PUT_KEY_V20(addr, key, buf, size);
117 return PMIX_SUCCESS;
118 }
119
120 static bool pmix_ds20_is_invalid(uint8_t *addr)
121 {
122 bool ret = (0 == strncmp(ESH_REGION_INVALIDATED, ESH_KNAME_PTR_V20(addr),
123 ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr))));
124 return ret;
125 }
126
127 static void pmix_ds20_set_invalid(uint8_t *addr)
128 {
129 strncpy(ESH_KNAME_PTR_V20(addr), ESH_REGION_INVALIDATED,
130 ESH_KNAME_LEN_V20(ESH_REGION_INVALIDATED));
131 }
132
133 static bool pmix_ds20_is_ext_slot(uint8_t *addr)
134 {
135 bool ret;
136 ret = (0 == strncmp(ESH_REGION_EXTENSION, ESH_KNAME_PTR_V20(addr),
137 ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr))));
138 return ret;
139 }
140
141 static bool pmix_ds20_kname_match(uint8_t *addr, const char *key, size_t key_hash)
142 {
143 bool ret = 0;
144
145 ret = (0 == strncmp(ESH_KNAME_PTR_V20(addr),
146 key, ESH_KNAME_LEN_V20(key)));
147 return ret;
148 }
149
150
151 pmix_common_dstore_file_cbs_t pmix_ds20_file_module = {
152 .name = "ds20",
153 .kval_size = pmix_ds20_kv_size,
154 .kname_ptr = pmix_ds20_key_name_ptr,
155 .kname_len = pmix_ds20_key_name_len,
156 .data_ptr = pmix_ds20_data_ptr,
157 .data_size = pmix_ds20_data_size,
158 .key_size = pmix_ds20_key_size,
159 .ext_slot_size = pmix_ds20_ext_slot_size,
160 .put_key = pmix_ds20_put_key,
161 .is_invalid = pmix_ds20_is_invalid,
162 .is_extslot = pmix_ds20_is_ext_slot,
163 .set_invalid = pmix_ds20_set_invalid,
164 .key_hash = NULL,
165 .key_match = pmix_ds20_kname_match
166 };