DAOS API (v2.0)
Loading...
Searching...
No Matches
daos_prop.h
1
10#ifndef __DAOS_PROP_H__
11#define __DAOS_PROP_H__
12
13#if defined(__cplusplus)
14extern "C" {
15#endif
16
17#include <ctype.h>
18#include <daos_types.h>
19
24enum daos_pool_props {
25 DAOS_PROP_PO_MIN = 0,
30 DAOS_PROP_PO_LABEL,
37 DAOS_PROP_PO_ACL,
42 DAOS_PROP_PO_SPACE_RB,
48 DAOS_PROP_PO_SELF_HEAL,
55 DAOS_PROP_PO_RECLAIM,
60 DAOS_PROP_PO_OWNER,
65 DAOS_PROP_PO_OWNER_GROUP,
69 DAOS_PROP_PO_SVC_LIST,
70 DAOS_PROP_PO_EC_CELL_SZ,
71 DAOS_PROP_PO_MAX,
72};
73
74#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
75#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
76
80#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
81
83enum {
84 DAOS_RECLAIM_DISABLED = 0,
85 DAOS_RECLAIM_LAZY,
86 DAOS_RECLAIM_SNAPSHOT,
87 DAOS_RECLAIM_BATCH,
88 DAOS_RECLAIM_TIME,
89};
90
92#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
93#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
94
99enum daos_cont_props {
100 DAOS_PROP_CO_MIN = 0x1000,
105 DAOS_PROP_CO_LABEL,
110 DAOS_PROP_CO_LAYOUT_TYPE,
115 DAOS_PROP_CO_LAYOUT_VER,
120 DAOS_PROP_CO_CSUM,
125 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
130 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
136 DAOS_PROP_CO_REDUN_FAC,
141 DAOS_PROP_CO_REDUN_LVL,
145 DAOS_PROP_CO_SNAPSHOT_MAX,
152 DAOS_PROP_CO_ACL,
158 DAOS_PROP_CO_COMPRESS,
168 DAOS_PROP_CO_ENCRYPT,
173 DAOS_PROP_CO_OWNER,
178 DAOS_PROP_CO_OWNER_GROUP,
185 DAOS_PROP_CO_DEDUP,
190 DAOS_PROP_CO_DEDUP_THRESHOLD,
192 DAOS_PROP_CO_ROOTS,
197 DAOS_PROP_CO_STATUS,
199 DAOS_PROP_CO_ALLOCED_OID,
201 DAOS_PROP_CO_EC_CELL_SZ,
202 DAOS_PROP_CO_MAX,
203};
204
207 daos_obj_id_t cr_oids[4];
208};
209
213#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
214
215typedef uint16_t daos_cont_layout_t;
216
218enum {
219 DAOS_PROP_CO_LAYOUT_UNKNOWN,
220 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
221 DAOS_PROP_CO_LAYOUT_POSIX,
222 DAOS_PROP_CO_LAYOUT_HDF5,
223 DAOS_PROP_CO_LAYOUT_PYTHON,
224 DAOS_PROP_CO_LAYOUT_SPARK,
225 DAOS_PROP_CO_LAYOUT_DATABASE,
226 DAOS_PROP_CO_LAYOUT_ROOT,
227 DAOS_PROP_CO_LAYOUT_SEISMIC,
228 DAOS_PROP_CO_LAYOUT_METEO,
229 DAOS_PROP_CO_LAYOUT_MAX
230};
231
233enum {
234 DAOS_PROP_CO_CSUM_OFF,
235 DAOS_PROP_CO_CSUM_CRC16,
236 DAOS_PROP_CO_CSUM_CRC32,
237 DAOS_PROP_CO_CSUM_CRC64,
238 DAOS_PROP_CO_CSUM_SHA1,
239 DAOS_PROP_CO_CSUM_SHA256,
240 DAOS_PROP_CO_CSUM_SHA512,
241 DAOS_PROP_CO_CSUM_ADLER32
242};
243
245enum {
246 DAOS_PROP_CO_CSUM_SV_OFF,
247 DAOS_PROP_CO_CSUM_SV_ON
248};
249
251enum {
252 DAOS_PROP_CO_DEDUP_OFF,
253 DAOS_PROP_CO_DEDUP_MEMCMP,
254 DAOS_PROP_CO_DEDUP_HASH
255};
256
258enum {
259 DAOS_PROP_CO_COMPRESS_OFF,
260 DAOS_PROP_CO_COMPRESS_LZ4,
261 DAOS_PROP_CO_COMPRESS_DEFLATE,
262 DAOS_PROP_CO_COMPRESS_DEFLATE1,
263 DAOS_PROP_CO_COMPRESS_DEFLATE2,
264 DAOS_PROP_CO_COMPRESS_DEFLATE3,
265 DAOS_PROP_CO_COMPRESS_DEFLATE4,
266};
267
269enum {
270 DAOS_PROP_CO_ENCRYPT_OFF,
271 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
272 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
273 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
274 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
275 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
276 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
277 DAOS_PROP_CO_ENCRYPT_AES_GCM256
278};
279
281enum {
282 DAOS_PROP_CO_REDUN_RF0,
283 DAOS_PROP_CO_REDUN_RF1,
284 DAOS_PROP_CO_REDUN_RF2,
285 DAOS_PROP_CO_REDUN_RF3,
286 DAOS_PROP_CO_REDUN_RF4,
287};
288
293enum {
294 DAOS_PROP_CO_REDUN_MIN = 1,
295 DAOS_PROP_CO_REDUN_RANK = 1,
296 DAOS_PROP_CO_REDUN_MAX = 254,
297};
298
300enum {
301 /* in healthy status, data protection work as expected */
302 DAOS_PROP_CO_HEALTHY,
303 /* in unclean status, data protection possibly cannot work.
304 * typical scenario - cascading failed targets exceed the container
305 * redundancy factor, that possibly cause lost data cannot be detected
306 * or rebuilt.
307 */
308 DAOS_PROP_CO_UNCLEAN,
309};
310
312#define DAOS_PROP_CO_CLEAR (0x1)
315 uint16_t dcs_status;
317 uint16_t dcs_flags;
319 uint32_t dcs_pm_ver;
320};
321
322#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
323 ((((uint64_t)(flag)) << 48) | \
324 (((uint64_t)(status) & 0xFFFF) << 32) | \
325 ((uint64_t)(pm_ver)))
326
327static inline uint64_t
328daos_prop_co_status_2_val(struct daos_co_status *co_status)
329{
330 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
331 co_status->dcs_flags,
332 co_status->dcs_pm_ver);
333}
334
335static inline void
336daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
337{
338 co_status->dcs_flags = (uint16_t)(val >> 48);
339 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
340 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
341}
342
345 uint32_t dpe_type;
347 uint32_t dpe_reserv;
352 union {
353 uint64_t dpe_val;
354 d_string_t dpe_str;
355 void *dpe_val_ptr;
356 };
357};
358
360#define DAOS_PROP_ENTRIES_MAX_NR (128)
361
363#define DAOS_PROP_LABEL_MAX_LEN (127)
365#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
366
378static inline bool
379daos_label_is_valid(const char *label)
380{
381 int len;
382 int i;
383 bool maybe_uuid = false;
384
386 if (label == NULL)
387 return false;
388
390 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
391 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
392 return false;
393
395 for (i = 0; i < len; i++) {
396 char c = label[i];
397
398 if (isalnum(c) || c == '.' || c == '_' || c == ':')
399 continue;
400 if (c == '-') {
401 maybe_uuid = true;
402 continue;
403 }
404
405 return false;
406 }
407
409 if (maybe_uuid && strnlen(label, 36) == 36) {
410 bool is_uuid = true;
411 const char *p;
412
414 for (i = 0, p = label; i < 36; i++, p++) {
415 if (i == 8 || i == 13 || i == 18 || i == 23) {
416 if (*p != '-') {
417 is_uuid = false;
418 break;
419 }
420 continue;
421 }
422 if (!isxdigit(*p)) {
423 is_uuid = false;
424 break;
425 }
426 }
427
428 if (is_uuid)
429 return false;
430 }
431
432 return true;
433}
434
436typedef struct {
438 uint32_t dpp_nr;
440 uint32_t dpp_reserv;
444
453daos_prop_alloc(uint32_t entries_nr);
454
460void
461daos_prop_fini(daos_prop_t *prop);
462
468void
469daos_prop_free(daos_prop_t *prop);
470
483int
484daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
485
495daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
496
505struct daos_prop_entry *
506daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
507
520int
521daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
522
531int
532daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
533
546int
547daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
548
557int
558daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
559
571int
572daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
573 struct daos_prop_entry *entry_src, size_t len);
574
584int
585daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
586 struct daos_prop_entry *entry2);
587
598int
599daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
600 struct daos_prop_entry *src);
601
610bool
611daos_prop_has_str(struct daos_prop_entry *entry);
612
621bool
622daos_prop_has_ptr(struct daos_prop_entry *entry);
623
624#if defined(__cplusplus)
625}
626#endif
627
628#endif /* __DAOS_PROP_H__ */
uint16_t dcs_status
Definition daos_prop.h:315
uint16_t dcs_flags
Definition daos_prop.h:317
uint32_t dcs_pm_ver
Definition daos_prop.h:319
Definition daos_prop.h:343
uint32_t dpe_reserv
Definition daos_prop.h:347
uint32_t dpe_type
Definition daos_prop.h:345
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:442
uint32_t dpp_reserv
Definition daos_prop.h:440
uint32_t dpp_nr
Definition daos_prop.h:438