DAOS API: src/include/daos_prop.h Source File

| 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,
143 DAOS_PROP_PO_MAX,
144};
145
146#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
147
148#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
149#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
150
151#define DAOS_PROP_PO_REDUN_FAC_MAX 4
152#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 0
153
154static inline bool
155daos_rf_is_valid(unsigned long long rf)
156{
157 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
158}
159
160#define DAOS_PROP_PDA_MAX ((uint32_t)-1)
167#define DAOS_PROP_PO_RP_PDA_DEFAULT DAOS_PROP_PDA_MAX
172#define DAOS_PROP_PO_EC_PDA_DEFAULT ((uint32_t)1)
173
175enum {
176 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
177 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
178 DAOS_UPGRADE_STATUS_COMPLETED = 2,
179 DAOS_UPGRADE_STATUS_FAILED = 3,
180};
181
182#define DAOS_PROP_PO_SVC_REDUN_FAC_MAX 4
183#define DAOS_PROP_PO_SVC_REDUN_FAC_DEFAULT 2
184
185static inline bool
186daos_svc_rf_is_valid(uint64_t svc_rf)
187{
188 return svc_rf <= DAOS_PROP_PO_SVC_REDUN_FAC_MAX;
189}
190
194enum {
195 DAOS_PROP_PERF_DOMAIN_ROOT = 255,
196 DAOS_PROP_PERF_DOMAIN_GROUP = 3,
197};
198
202#define DAOS_PROP_PO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
203#define DAOS_PROP_CO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
204
208#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
209
211enum {
212 DAOS_RECLAIM_DISABLED = 0,
213 DAOS_RECLAIM_LAZY,
214 DAOS_RECLAIM_SNAPSHOT,
215 DAOS_RECLAIM_BATCH,
216 DAOS_RECLAIM_TIME,
217};
218
219enum {
220 DAOS_REINT_MODE_DATA_SYNC = 0,
221 DAOS_REINT_MODE_NO_DATA_SYNC = 1,
222};
223
227#define DAOS_PROP_PO_REINT_MODE_DEFAULT DAOS_REINT_MODE_DATA_SYNC
228
233enum {
234 DAOS_SCRUB_MODE_OFF = 0,
235 DAOS_SCRUB_MODE_LAZY = 1,
236 DAOS_SCRUB_MODE_TIMED = 2,
237 DAOS_SCRUB_MODE_INVALID = 3,
238};
239
240/* Checksum Scrubbing Defaults */
241#define DAOS_PROP_PO_SCRUB_MODE_DEFAULT DAOS_SCRUB_MODE_OFF
242
243#define DAOS_PROP_PO_SCRUB_FREQ_DEFAULT 604800 /* 1 week in seconds */
244#define DAOS_PROP_PO_SCRUB_THRESH_DEFAULT 0
245
247enum {
248 DAOS_CHECKPOINT_DISABLED = 0,
249 DAOS_CHECKPOINT_TIMED,
250 DAOS_CHECKPOINT_LAZY,
251};
252
253#define DAOS_PROP_PO_CHECKPOINT_MODE_DEFAULT DAOS_CHECKPOINT_TIMED
254#define DAOS_PROP_PO_CHECKPOINT_FREQ_DEFAULT 5 /* 5 seconds */
255#define DAOS_PROP_PO_CHECKPOINT_FREQ_MIN 1 /* 1 seconds */
256#define DAOS_PROP_PO_CHECKPOINT_FREQ_MAX (1 << 20) /* 1 million seconds */
257#define DAOS_PROP_PO_CHECKPOINT_THRESH_DEFAULT 50 /* 50 % WAL capacity */
258#define DAOS_PROP_PO_CHECKPOINT_THRESH_MAX 75 /* 75 % WAL capacity */
259#define DAOS_PROP_PO_CHECKPOINT_THRESH_MIN 10 /* 10 % WAL capacity */
260#define DAOS_PROP_PO_SVC_OPS_ENABLED_DEFAULT 1 /* true: enabled by default */
261#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_DEFAULT 300 /* 300 seconds */
262#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MIN 60 /* 60 seconds */
263#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MAX 600 /* 600 seconds */
264
266#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
267#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
268#define DAOS_SELF_HEAL_DELAY_REBUILD (1U << 2)
269
274enum daos_cont_props {
275 DAOS_PROP_CO_MIN = 0x1000,
280 DAOS_PROP_CO_LABEL,
285 DAOS_PROP_CO_LAYOUT_TYPE,
290 DAOS_PROP_CO_LAYOUT_VER,
295 DAOS_PROP_CO_CSUM,
300 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
305 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
311 DAOS_PROP_CO_REDUN_FAC,
316 DAOS_PROP_CO_REDUN_LVL,
320 DAOS_PROP_CO_SNAPSHOT_MAX,
327 DAOS_PROP_CO_ACL,
333 DAOS_PROP_CO_COMPRESS,
343 DAOS_PROP_CO_ENCRYPT,
348 DAOS_PROP_CO_OWNER,
353 DAOS_PROP_CO_OWNER_GROUP,
360 DAOS_PROP_CO_DEDUP,
365 DAOS_PROP_CO_DEDUP_THRESHOLD,
367 DAOS_PROP_CO_ROOTS,
372 DAOS_PROP_CO_STATUS,
374 DAOS_PROP_CO_ALLOCED_OID,
376 DAOS_PROP_CO_EC_CELL_SZ,
378 DAOS_PROP_CO_EC_PDA,
380 DAOS_PROP_CO_RP_PDA,
382 DAOS_PROP_CO_GLOBAL_VERSION,
384 DAOS_PROP_CO_SCRUBBER_DISABLED,
386 DAOS_PROP_CO_OBJ_VERSION,
388 DAOS_PROP_CO_PERF_DOMAIN,
389 DAOS_PROP_CO_MAX,
390};
391
393 struct daos_prop_co_roots {
395 daos_obj_id_t cr_oids[4];
396};
397
401#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
402
403typedef uint16_t daos_cont_layout_t;
404
406enum {
407 DAOS_PROP_CO_LAYOUT_UNKNOWN,
408 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
409 DAOS_PROP_CO_LAYOUT_POSIX,
410 DAOS_PROP_CO_LAYOUT_HDF5,
411 DAOS_PROP_CO_LAYOUT_PYTHON,
412 DAOS_PROP_CO_LAYOUT_SPARK,
413 DAOS_PROP_CO_LAYOUT_DATABASE,
414 DAOS_PROP_CO_LAYOUT_ROOT,
415 DAOS_PROP_CO_LAYOUT_SEISMIC,
416 DAOS_PROP_CO_LAYOUT_METEO,
417 DAOS_PROP_CO_LAYOUT_MAX
418};
419
421enum {
422 DAOS_PROP_CO_CSUM_OFF,
423 DAOS_PROP_CO_CSUM_CRC16,
424 DAOS_PROP_CO_CSUM_CRC32,
425 DAOS_PROP_CO_CSUM_CRC64,
426 DAOS_PROP_CO_CSUM_SHA1,
427 DAOS_PROP_CO_CSUM_SHA256,
428 DAOS_PROP_CO_CSUM_SHA512,
429 DAOS_PROP_CO_CSUM_ADLER32
430};
431
433enum {
434 DAOS_PROP_CO_CSUM_SV_OFF,
435 DAOS_PROP_CO_CSUM_SV_ON
436};
437
439enum {
440 DAOS_PROP_CO_DEDUP_OFF,
441 DAOS_PROP_CO_DEDUP_MEMCMP,
442 DAOS_PROP_CO_DEDUP_HASH
443};
444
446enum {
447 DAOS_PROP_CO_COMPRESS_OFF,
448 DAOS_PROP_CO_COMPRESS_LZ4,
449 DAOS_PROP_CO_COMPRESS_DEFLATE,
450 DAOS_PROP_CO_COMPRESS_DEFLATE1,
451 DAOS_PROP_CO_COMPRESS_DEFLATE2,
452 DAOS_PROP_CO_COMPRESS_DEFLATE3,
453 DAOS_PROP_CO_COMPRESS_DEFLATE4,
454};
455
457enum {
458 DAOS_PROP_CO_ENCRYPT_OFF,
459 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
460 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
461 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
462 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
463 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
464 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
465 DAOS_PROP_CO_ENCRYPT_AES_GCM256
466};
467
469enum {
470 DAOS_PROP_CO_REDUN_RF0 = 0,
471 DAOS_PROP_CO_REDUN_RF1 = 1,
472 DAOS_PROP_CO_REDUN_RF2 = 2,
473 DAOS_PROP_CO_REDUN_RF3 = 3,
474 DAOS_PROP_CO_REDUN_RF4 = 4,
475 DAOS_RF_MAX = 4,
476};
477
482enum {
483 DAOS_PROP_CO_REDUN_MIN = 1,
484 /* server rank (engine) level */
485 DAOS_PROP_CO_REDUN_RANK = 1,
486 /* server node level */
487 DAOS_PROP_CO_REDUN_NODE = 2,
488 DAOS_PROP_CO_REDUN_MAX = 254,
489};
490
492#define DAOS_PROP_CO_REDUN_DEFAULT DAOS_PROP_CO_REDUN_NODE
493
495enum {
496 /* in healthy status, data protection work as expected */
497 DAOS_PROP_CO_HEALTHY,
498 /* in unclean status, data protection possibly cannot work.
499 * typical scenario - cascading failed targets exceed the container
500 * redundancy factor, that possibly cause lost data cannot be detected
501 * or rebuilt.
502 */
503 DAOS_PROP_CO_UNCLEAN,
504};
505
507#define DAOS_PROP_CO_CLEAR (0x1)
508
510 struct daos_co_status {
512 uint16_t dcs_status;
514 uint16_t dcs_flags;
516 uint32_t dcs_pm_ver;
517};
518
519#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
520 ((((uint64_t)(flag)) << 48) | \
521 (((uint64_t)(status) & 0xFFFF) << 32) | \
522 ((uint64_t)(pm_ver)))
523
524static inline uint64_t
525daos_prop_co_status_2_val(struct daos_co_status *co_status)
526{
527 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
528 co_status->dcs_flags,
529 co_status->dcs_pm_ver);
530}
531
532static inline void
533daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
534{
535 co_status->dcs_flags = (uint16_t)(val >> 48);
536 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
537 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
538}
539
540enum {
541 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
542};
543
545 struct daos_prop_entry {
547 uint32_t dpe_type;
549 uint16_t dpe_flags;
551 uint16_t dpe_reserv;
556 union {
557 uint64_t dpe_val;
558 d_string_t dpe_str;
559 void *dpe_val_ptr;
560 };
561};
562
564#define DAOS_PROP_ENTRIES_MAX_NR (128)
565
567#define DAOS_PROP_LABEL_MAX_LEN (127)
569#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
570
572#define DAOS_PROP_CO_LABEL_DEFAULT "container_label_not_set"
573#define DAOS_PROP_PO_LABEL_DEFAULT "pool_label_not_set"
574
586static inline bool
587daos_label_is_valid(const char *label)
588{
589 int len;
590 int i;
591 bool maybe_uuid = false;
592
594 if (label == NULL)
595 return false;
596
598 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
599 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
600 return false;
601
603 for (i = 0; i < len; i++) {
604 char c = label[i];
605
606 if (isalnum(c) || c == '.' || c == '_' || c == ':')
607 continue;
608 if (c == '-') {
609 maybe_uuid = true;
610 continue;
611 }
612
613 return false;
614 }
615
617 if (maybe_uuid && daos_is_valid_uuid_string(label))
618 return false;
619
620 return true;
621}
622
623/* default data threshold size of 4KiB */
624#define DAOS_PROP_PO_DATA_THRESH_DEFAULT (1UL << 12)
625
626/* For the case of no label is set for the pool. */
627#define DAOS_PROP_NO_PO_LABEL "pool_label_not_set"
628
629/* Default container label */
630#define DEFAULT_CONT_LABEL "container_label_not_set"
631
632/* For the case of no label is set for the container. */
633#define DAOS_PROP_NO_CO_LABEL DEFAULT_CONT_LABEL
634
639static inline bool
640daos_perf_domain_is_valid(const char *perf_domain)
641{
642 return daos_label_is_valid(perf_domain);
643}
644
646 typedef struct {
648 uint32_t dpp_nr;
650 uint32_t dpp_reserv;
652 struct daos_prop_entry *dpp_entries;
653} daos_prop_t;
654
662 daos_prop_t *
663daos_prop_alloc(uint32_t entries_nr);
664
670void
671daos_prop_fini(daos_prop_t *prop);
672
678void
679daos_prop_free(daos_prop_t *prop);
680
694int
695daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
696
707int
708daos_prop_merge2(daos_prop_t *old_prop, daos_prop_t *new_prop, daos_prop_t **out_prop);
709
718 daos_prop_t *
719daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
720
729struct daos_prop_entry *
730daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
731
744int
745daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
746
755int
756daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
757
770int
771daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
772
781int
782daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
783
795int
796daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
797 struct daos_prop_entry *entry_src, size_t len);
798
808int
809daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
810 struct daos_prop_entry *entry2);
811
822int
823daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
824 struct daos_prop_entry *src);
825
834bool
835daos_prop_has_str(struct daos_prop_entry *entry);
836
845bool
846daos_prop_has_ptr(struct daos_prop_entry *entry);
847
856static inline bool
857daos_prop_is_set(struct daos_prop_entry *entry)
858{
859 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
860 return false;
861
862 return true;
863}
864
865#if defined(__cplusplus)
866}
867#endif
868
869#endif /* __DAOS_PROP_H__ */
daos_co_status
Definition daos_prop.h:510
daos_co_status::dcs_status
uint16_t dcs_status
Definition daos_prop.h:512
daos_co_status::dcs_flags
uint16_t dcs_flags
Definition daos_prop.h:514
daos_co_status::dcs_pm_ver
uint32_t dcs_pm_ver
Definition daos_prop.h:516
daos_obj_id_t
Definition daos_types.h:230
daos_prop_co_roots
Definition daos_prop.h:393
daos_prop_co_roots::cr_oids
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:395
daos_prop_entry
Definition daos_prop.h:545
daos_prop_entry::dpe_flags
uint16_t dpe_flags
Definition daos_prop.h:549
daos_prop_entry::dpe_reserv
uint16_t dpe_reserv
Definition daos_prop.h:551
daos_prop_entry::dpe_type
uint32_t dpe_type
Definition daos_prop.h:547
daos_prop_t
Definition daos_prop.h:646
daos_prop_t::dpp_entries
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:652
daos_prop_t::dpp_reserv
uint32_t dpp_reserv
Definition daos_prop.h:650
daos_prop_t::dpp_nr
uint32_t dpp_nr
Definition daos_prop.h:648