DAOS API (v2.1 - dev)
Loading...
Searching...
No Matches
daos_prop.h
1
10
11#ifndef __DAOS_PROP_H__
12#define __DAOS_PROP_H__
13
14#if defined(__cplusplus)
15extern "C" {
16#endif
17
18#include <ctype.h>
19#include <daos_types.h>
20
25enum daos_pool_props {
26 DAOS_PROP_PO_MIN = 0,
31 DAOS_PROP_PO_LABEL,
38 DAOS_PROP_PO_ACL,
43 DAOS_PROP_PO_SPACE_RB,
49 DAOS_PROP_PO_SELF_HEAL,
56 DAOS_PROP_PO_RECLAIM,
61 DAOS_PROP_PO_OWNER,
66 DAOS_PROP_PO_OWNER_GROUP,
70 DAOS_PROP_PO_SVC_LIST,
74 DAOS_PROP_PO_EC_CELL_SZ,
78 DAOS_PROP_PO_DATA_THRESH,
82 DAOS_PROP_PO_REDUN_FAC,
86 DAOS_PROP_PO_EC_PDA,
91 DAOS_PROP_PO_RP_PDA,
92
97 DAOS_PROP_PO_GLOBAL_VERSION,
101 DAOS_PROP_PO_UPGRADE_STATUS,
102 /*
103 * Schedule that the checksum scrubber will run. See
104 * DAOS_SCRUBBER_SCHED_*
105 *
106 * default: DAOS_SCRUB_MODE_OFF
107 */
108 DAOS_PROP_PO_SCRUB_MODE,
114 DAOS_PROP_PO_SCRUB_FREQ,
120 DAOS_PROP_PO_SCRUB_THRESH,
124 DAOS_PROP_PO_SVC_REDUN_FAC,
126 DAOS_PROP_PO_OBJ_VERSION,
130 DAOS_PROP_PO_PERF_DOMAIN,
132 DAOS_PROP_PO_CHECKPOINT_MODE,
134 DAOS_PROP_PO_CHECKPOINT_FREQ,
136 DAOS_PROP_PO_CHECKPOINT_THRESH,
138 DAOS_PROP_PO_REINT_MODE,
140 DAOS_PROP_PO_SVC_OPS_ENABLED,
142 DAOS_PROP_PO_SVC_OPS_ENTRY_AGE,
144 DAOS_PROP_PO_CA_CERT,
146 DAOS_PROP_PO_CERT_WATERMARKS,
147 DAOS_PROP_PO_MAX,
148};
149
150#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
151
155 void *dpb_data;
157 size_t dpb_len;
158};
159
160#define DAOS_PROP_BYTEVAL_MAX_LEN (1U << 20)
161
162#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
163#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
164
165#define DAOS_PROP_PO_REDUN_FAC_MAX 4
166#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 3
167
168static inline bool
169daos_rf_is_valid(unsigned long long rf)
170{
171 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
172}
173
174#define DAOS_PROP_PDA_MAX ((uint32_t)-1)
181#define DAOS_PROP_PO_RP_PDA_DEFAULT DAOS_PROP_PDA_MAX
186#define DAOS_PROP_PO_EC_PDA_DEFAULT ((uint32_t)1)
187
189enum {
190 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
191 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
192 DAOS_UPGRADE_STATUS_COMPLETED = 2,
193 DAOS_UPGRADE_STATUS_FAILED = 3,
194};
195
196#define DAOS_PROP_PO_SVC_REDUN_FAC_MAX 4
197#define DAOS_PROP_PO_SVC_REDUN_FAC_DEFAULT 2
198
199static inline bool
200daos_svc_rf_is_valid(uint64_t svc_rf)
201{
202 return svc_rf <= DAOS_PROP_PO_SVC_REDUN_FAC_MAX;
203}
204
208enum {
209 DAOS_PROP_PERF_DOMAIN_ROOT = 255,
210 DAOS_PROP_PERF_DOMAIN_GROUP = 200,
211};
212
216#define DAOS_PROP_PO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
217#define DAOS_PROP_CO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
218
222#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
223
225enum {
226 DAOS_RECLAIM_DISABLED = 0,
227 DAOS_RECLAIM_LAZY,
228 DAOS_RECLAIM_SNAPSHOT,
229 DAOS_RECLAIM_BATCH,
230 DAOS_RECLAIM_TIME,
231};
232
233enum {
234 DAOS_REINT_MODE_DATA_SYNC = 0,
235 DAOS_REINT_MODE_NO_DATA_SYNC = 1,
236 DAOS_REINT_MODE_INCREMENTAL = 2,
237};
238
242#define DAOS_PROP_PO_REINT_MODE_DEFAULT DAOS_REINT_MODE_DATA_SYNC
243
248enum {
249 DAOS_SCRUB_MODE_OFF = 0,
250 DAOS_SCRUB_MODE_LAZY = 1,
251 DAOS_SCRUB_MODE_TIMED = 2,
252 DAOS_SCRUB_MODE_INVALID = 3,
253};
254
255/* Checksum Scrubbing Defaults */
256#define DAOS_PROP_PO_SCRUB_MODE_DEFAULT DAOS_SCRUB_MODE_OFF
257
258#define DAOS_PROP_PO_SCRUB_FREQ_DEFAULT 604800 /* 1 week in seconds */
259#define DAOS_PROP_PO_SCRUB_THRESH_DEFAULT 0
260
262enum {
263 DAOS_CHECKPOINT_DISABLED = 0,
264 DAOS_CHECKPOINT_TIMED,
265 DAOS_CHECKPOINT_LAZY,
266};
267
268#define DAOS_PROP_PO_CHECKPOINT_MODE_DEFAULT DAOS_CHECKPOINT_TIMED
269#define DAOS_PROP_PO_CHECKPOINT_FREQ_DEFAULT 5 /* 5 seconds */
270#define DAOS_PROP_PO_CHECKPOINT_FREQ_MIN 1 /* 1 seconds */
271#define DAOS_PROP_PO_CHECKPOINT_FREQ_MAX (1 << 20) /* 1 million seconds */
272#define DAOS_PROP_PO_CHECKPOINT_THRESH_DEFAULT 50 /* 50 % WAL capacity */
273#define DAOS_PROP_PO_CHECKPOINT_THRESH_MAX 75 /* 75 % WAL capacity */
274#define DAOS_PROP_PO_CHECKPOINT_THRESH_MIN 10 /* 10 % WAL capacity */
275#define DAOS_PROP_PO_SVC_OPS_ENABLED_DEFAULT 1 /* true: enabled by default */
276#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_DEFAULT 300 /* 300 seconds */
277#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MIN 60 /* 60 seconds */
278#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MAX 600 /* 600 seconds */
279
281#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
282#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
283#define DAOS_SELF_HEAL_DELAY_REBUILD (1U << 2)
284
289enum daos_cont_props {
290 DAOS_PROP_CO_MIN = 0x1000,
295 DAOS_PROP_CO_LABEL,
300 DAOS_PROP_CO_LAYOUT_TYPE,
305 DAOS_PROP_CO_LAYOUT_VER,
310 DAOS_PROP_CO_CSUM,
315 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
320 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
326 DAOS_PROP_CO_REDUN_FAC,
331 DAOS_PROP_CO_REDUN_LVL,
335 DAOS_PROP_CO_SNAPSHOT_MAX,
342 DAOS_PROP_CO_ACL,
348 DAOS_PROP_CO_COMPRESS,
358 DAOS_PROP_CO_ENCRYPT,
363 DAOS_PROP_CO_OWNER,
368 DAOS_PROP_CO_OWNER_GROUP,
375 DAOS_PROP_CO_DEDUP,
380 DAOS_PROP_CO_DEDUP_THRESHOLD,
382 DAOS_PROP_CO_ROOTS,
387 DAOS_PROP_CO_STATUS,
389 DAOS_PROP_CO_ALLOCED_OID,
391 DAOS_PROP_CO_EC_CELL_SZ,
393 DAOS_PROP_CO_EC_PDA,
395 DAOS_PROP_CO_RP_PDA,
397 DAOS_PROP_CO_GLOBAL_VERSION,
399 DAOS_PROP_CO_SCRUBBER_DISABLED,
401 DAOS_PROP_CO_OBJ_VERSION,
403 DAOS_PROP_CO_PERF_DOMAIN,
404 DAOS_PROP_CO_MAX,
405};
406
412
416#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
417
418typedef uint16_t daos_cont_layout_t;
419
421enum {
422 DAOS_PROP_CO_LAYOUT_UNKNOWN,
423 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
424 DAOS_PROP_CO_LAYOUT_POSIX,
425 DAOS_PROP_CO_LAYOUT_HDF5,
426 DAOS_PROP_CO_LAYOUT_PYTHON,
427 DAOS_PROP_CO_LAYOUT_SPARK,
428 DAOS_PROP_CO_LAYOUT_DATABASE,
429 DAOS_PROP_CO_LAYOUT_ROOT,
430 DAOS_PROP_CO_LAYOUT_SEISMIC,
431 DAOS_PROP_CO_LAYOUT_METEO,
432 DAOS_PROP_CO_LAYOUT_MAX
433};
434
436enum {
437 DAOS_PROP_CO_CSUM_OFF,
438 DAOS_PROP_CO_CSUM_CRC16,
439 DAOS_PROP_CO_CSUM_CRC32,
440 DAOS_PROP_CO_CSUM_CRC64,
441 DAOS_PROP_CO_CSUM_SHA1,
442 DAOS_PROP_CO_CSUM_SHA256,
443 DAOS_PROP_CO_CSUM_SHA512,
444 DAOS_PROP_CO_CSUM_ADLER32
445};
446
448enum {
449 DAOS_PROP_CO_CSUM_SV_OFF,
450 DAOS_PROP_CO_CSUM_SV_ON
451};
452
454enum {
455 DAOS_PROP_CO_DEDUP_OFF,
456 DAOS_PROP_CO_DEDUP_MEMCMP,
457 DAOS_PROP_CO_DEDUP_HASH
458};
459
461enum {
462 DAOS_PROP_CO_COMPRESS_OFF,
463 DAOS_PROP_CO_COMPRESS_LZ4,
464 DAOS_PROP_CO_COMPRESS_DEFLATE,
465 DAOS_PROP_CO_COMPRESS_DEFLATE1,
466 DAOS_PROP_CO_COMPRESS_DEFLATE2,
467 DAOS_PROP_CO_COMPRESS_DEFLATE3,
468 DAOS_PROP_CO_COMPRESS_DEFLATE4,
469};
470
472enum {
473 DAOS_PROP_CO_ENCRYPT_OFF,
474 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
475 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
476 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
477 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
478 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
479 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
480 DAOS_PROP_CO_ENCRYPT_AES_GCM256
481};
482
484enum {
485 DAOS_PROP_CO_REDUN_RF0 = 0,
486 DAOS_PROP_CO_REDUN_RF1 = 1,
487 DAOS_PROP_CO_REDUN_RF2 = 2,
488 DAOS_PROP_CO_REDUN_RF3 = 3,
489 DAOS_PROP_CO_REDUN_RF4 = 4,
490 DAOS_RF_MAX = 4,
491};
492
497enum {
498 DAOS_PROP_CO_REDUN_MIN = 1,
499 /* server rank (engine) level */
500 DAOS_PROP_CO_REDUN_RANK = 1,
501 /* server node level */
502 DAOS_PROP_CO_REDUN_NODE = 2,
503 /* pool fault domain level */
504 DAOS_PROP_CO_REDUN_FAULT = 3,
505 DAOS_PROP_CO_REDUN_MAX = 254,
506};
507
509#define DAOS_PROP_CO_REDUN_DEFAULT DAOS_PROP_CO_REDUN_NODE
510
512enum {
513 /* in healthy status, data protection work as expected */
514 DAOS_PROP_CO_HEALTHY,
515 /* in unclean status, data protection possibly cannot work.
516 * typical scenario - cascading failed targets exceed the container
517 * redundancy factor, that possibly cause lost data cannot be detected
518 * or rebuilt.
519 */
520 DAOS_PROP_CO_UNCLEAN,
521};
522
524#define DAOS_PROP_CO_CLEAR (0x1)
525
529 uint16_t dcs_status;
531 uint16_t dcs_flags;
533 uint32_t dcs_pm_ver;
534};
535
536#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
537 ((((uint64_t)(flag)) << 48) | \
538 (((uint64_t)(status) & 0xFFFF) << 32) | \
539 ((uint64_t)(pm_ver)))
540
541static inline uint64_t
542daos_prop_co_status_2_val(struct daos_co_status *co_status)
543{
544 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
545 co_status->dcs_flags,
546 co_status->dcs_pm_ver);
547}
548
549static inline void
550daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
551{
552 co_status->dcs_flags = (uint16_t)(val >> 48);
553 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
554 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
555}
556
557enum {
558 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
559};
560
564 uint32_t dpe_type;
566 uint16_t dpe_flags;
568 uint16_t dpe_reserv;
573 union {
574 uint64_t dpe_val;
575 d_string_t dpe_str;
576 void *dpe_val_ptr;
577 };
578};
579
581#define DAOS_PROP_ENTRIES_MAX_NR (128)
582
584#define DAOS_PROP_LABEL_MAX_LEN (127)
586#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
587
589#define DAOS_PROP_CO_LABEL_DEFAULT "container_label_not_set"
590#define DAOS_PROP_PO_LABEL_DEFAULT "pool_label_not_set"
591
603static inline bool
604daos_label_is_valid(const char *label)
605{
606 int len;
607 int i;
608 bool maybe_uuid = false;
609
611 if (label == NULL)
612 return false;
613
615 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
616 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
617 return false;
618
620 for (i = 0; i < len; i++) {
621 char c = label[i];
622
623 if (isalnum(c) || c == '.' || c == '_' || c == ':')
624 continue;
625 if (c == '-') {
626 maybe_uuid = true;
627 continue;
628 }
629
630 return false;
631 }
632
634 if (maybe_uuid && daos_is_valid_uuid_string(label, UUID_SST_NONE))
635 return false;
636
637 return true;
638}
639
640/* default data threshold size of 4KiB */
641#define DAOS_PROP_PO_DATA_THRESH_DEFAULT (1UL << 12)
642
643/* For the case of no label is set for the pool. */
644#define DAOS_PROP_NO_PO_LABEL "pool_label_not_set"
645
646/* Default container label */
647#define DEFAULT_CONT_LABEL "container_label_not_set"
648
649/* For the case of no label is set for the container. */
650#define DAOS_PROP_NO_CO_LABEL DEFAULT_CONT_LABEL
651
656static inline bool
657daos_perf_domain_is_valid(const char *perf_domain)
658{
659 return daos_label_is_valid(perf_domain);
660}
661
663typedef struct {
665 uint32_t dpp_nr;
667 uint32_t dpp_reserv;
671
680daos_prop_alloc(uint32_t entries_nr);
681
687void
688daos_prop_fini(daos_prop_t *prop);
689
695void
696daos_prop_free(daos_prop_t *prop);
697
711int
712daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
713
724int
725daos_prop_merge2(daos_prop_t *old_prop, daos_prop_t *new_prop, daos_prop_t **out_prop);
726
736daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
737
746struct daos_prop_entry *
747daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
748
761int
762daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
763
772int
773daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
774
787int
788daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
789
798int
799daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
800
812int
813daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
814 struct daos_prop_entry *entry_src, size_t len);
815
834int
835daos_prop_set_byteval(daos_prop_t *prop, uint32_t type, const void *data, size_t len);
836
850int
851daos_prop_entry_set_byteval(struct daos_prop_entry *entry, const void *data, size_t len);
852
864int
865daos_prop_entry_dup_byteval(struct daos_prop_entry *entry_dst, struct daos_prop_entry *entry_src);
866
876int
877daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
878 struct daos_prop_entry *entry2);
879
890int
891daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
892 struct daos_prop_entry *src);
893
902bool
903daos_prop_has_str(struct daos_prop_entry *entry);
904
913bool
914daos_prop_has_ptr(struct daos_prop_entry *entry);
915
924bool
925daos_prop_has_byteval(struct daos_prop_entry *entry);
926
935bool
936daos_prop_byteval_is_valid(struct daos_prop_entry *entry);
937
946static inline bool
947daos_prop_is_set(struct daos_prop_entry *entry)
948{
949 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
950 return false;
951
952 return true;
953}
954
955#if defined(__cplusplus)
956}
957#endif
958
959#endif /* __DAOS_PROP_H__ */
uint16_t dcs_status
Definition daos_prop.h:529
uint16_t dcs_flags
Definition daos_prop.h:531
uint32_t dcs_pm_ver
Definition daos_prop.h:533
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:410
Definition daos_prop.h:562
uint16_t dpe_flags
Definition daos_prop.h:566
uint16_t dpe_reserv
Definition daos_prop.h:568
uint32_t dpe_type
Definition daos_prop.h:564
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:669
uint32_t dpp_reserv
Definition daos_prop.h:667
uint32_t dpp_nr
Definition daos_prop.h:665