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
149 struct daos_prop_byteval {
151 void *dpb_data;
153 size_t dpb_len;
154};
155
156#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
157#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
158
159#define DAOS_PROP_PO_REDUN_FAC_MAX 4
160#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 3
161
162static inline bool
163daos_rf_is_valid(unsigned long long rf)
164{
165 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
166}
167
168#define DAOS_PROP_PDA_MAX ((uint32_t)-1)
175#define DAOS_PROP_PO_RP_PDA_DEFAULT DAOS_PROP_PDA_MAX
180#define DAOS_PROP_PO_EC_PDA_DEFAULT ((uint32_t)1)
181
183enum {
184 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
185 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
186 DAOS_UPGRADE_STATUS_COMPLETED = 2,
187 DAOS_UPGRADE_STATUS_FAILED = 3,
188};
189
190#define DAOS_PROP_PO_SVC_REDUN_FAC_MAX 4
191#define DAOS_PROP_PO_SVC_REDUN_FAC_DEFAULT 2
192
193static inline bool
194daos_svc_rf_is_valid(uint64_t svc_rf)
195{
196 return svc_rf <= DAOS_PROP_PO_SVC_REDUN_FAC_MAX;
197}
198
202enum {
203 DAOS_PROP_PERF_DOMAIN_ROOT = 255,
204 DAOS_PROP_PERF_DOMAIN_GROUP = 200,
205};
206
210#define DAOS_PROP_PO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
211#define DAOS_PROP_CO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
212
216#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
217
219enum {
220 DAOS_RECLAIM_DISABLED = 0,
221 DAOS_RECLAIM_LAZY,
222 DAOS_RECLAIM_SNAPSHOT,
223 DAOS_RECLAIM_BATCH,
224 DAOS_RECLAIM_TIME,
225};
226
227enum {
228 DAOS_REINT_MODE_DATA_SYNC = 0,
229 DAOS_REINT_MODE_NO_DATA_SYNC = 1,
230 DAOS_REINT_MODE_INCREMENTAL = 2,
231};
232
236#define DAOS_PROP_PO_REINT_MODE_DEFAULT DAOS_REINT_MODE_DATA_SYNC
237
242enum {
243 DAOS_SCRUB_MODE_OFF = 0,
244 DAOS_SCRUB_MODE_LAZY = 1,
245 DAOS_SCRUB_MODE_TIMED = 2,
246 DAOS_SCRUB_MODE_INVALID = 3,
247};
248
249/* Checksum Scrubbing Defaults */
250#define DAOS_PROP_PO_SCRUB_MODE_DEFAULT DAOS_SCRUB_MODE_OFF
251
252#define DAOS_PROP_PO_SCRUB_FREQ_DEFAULT 604800 /* 1 week in seconds */
253#define DAOS_PROP_PO_SCRUB_THRESH_DEFAULT 0
254
256enum {
257 DAOS_CHECKPOINT_DISABLED = 0,
258 DAOS_CHECKPOINT_TIMED,
259 DAOS_CHECKPOINT_LAZY,
260};
261
262#define DAOS_PROP_PO_CHECKPOINT_MODE_DEFAULT DAOS_CHECKPOINT_TIMED
263#define DAOS_PROP_PO_CHECKPOINT_FREQ_DEFAULT 5 /* 5 seconds */
264#define DAOS_PROP_PO_CHECKPOINT_FREQ_MIN 1 /* 1 seconds */
265#define DAOS_PROP_PO_CHECKPOINT_FREQ_MAX (1 << 20) /* 1 million seconds */
266#define DAOS_PROP_PO_CHECKPOINT_THRESH_DEFAULT 50 /* 50 % WAL capacity */
267#define DAOS_PROP_PO_CHECKPOINT_THRESH_MAX 75 /* 75 % WAL capacity */
268#define DAOS_PROP_PO_CHECKPOINT_THRESH_MIN 10 /* 10 % WAL capacity */
269#define DAOS_PROP_PO_SVC_OPS_ENABLED_DEFAULT 1 /* true: enabled by default */
270#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_DEFAULT 300 /* 300 seconds */
271#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MIN 60 /* 60 seconds */
272#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MAX 600 /* 600 seconds */
273
275#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
276#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
277#define DAOS_SELF_HEAL_DELAY_REBUILD (1U << 2)
278
283enum daos_cont_props {
284 DAOS_PROP_CO_MIN = 0x1000,
289 DAOS_PROP_CO_LABEL,
294 DAOS_PROP_CO_LAYOUT_TYPE,
299 DAOS_PROP_CO_LAYOUT_VER,
304 DAOS_PROP_CO_CSUM,
309 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
314 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
320 DAOS_PROP_CO_REDUN_FAC,
325 DAOS_PROP_CO_REDUN_LVL,
329 DAOS_PROP_CO_SNAPSHOT_MAX,
336 DAOS_PROP_CO_ACL,
342 DAOS_PROP_CO_COMPRESS,
352 DAOS_PROP_CO_ENCRYPT,
357 DAOS_PROP_CO_OWNER,
362 DAOS_PROP_CO_OWNER_GROUP,
369 DAOS_PROP_CO_DEDUP,
374 DAOS_PROP_CO_DEDUP_THRESHOLD,
376 DAOS_PROP_CO_ROOTS,
381 DAOS_PROP_CO_STATUS,
383 DAOS_PROP_CO_ALLOCED_OID,
385 DAOS_PROP_CO_EC_CELL_SZ,
387 DAOS_PROP_CO_EC_PDA,
389 DAOS_PROP_CO_RP_PDA,
391 DAOS_PROP_CO_GLOBAL_VERSION,
393 DAOS_PROP_CO_SCRUBBER_DISABLED,
395 DAOS_PROP_CO_OBJ_VERSION,
397 DAOS_PROP_CO_PERF_DOMAIN,
398 DAOS_PROP_CO_MAX,
399};
400
402 struct daos_prop_co_roots {
404 daos_obj_id_t cr_oids[4];
405};
406
410#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
411
412typedef uint16_t daos_cont_layout_t;
413
415enum {
416 DAOS_PROP_CO_LAYOUT_UNKNOWN,
417 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
418 DAOS_PROP_CO_LAYOUT_POSIX,
419 DAOS_PROP_CO_LAYOUT_HDF5,
420 DAOS_PROP_CO_LAYOUT_PYTHON,
421 DAOS_PROP_CO_LAYOUT_SPARK,
422 DAOS_PROP_CO_LAYOUT_DATABASE,
423 DAOS_PROP_CO_LAYOUT_ROOT,
424 DAOS_PROP_CO_LAYOUT_SEISMIC,
425 DAOS_PROP_CO_LAYOUT_METEO,
426 DAOS_PROP_CO_LAYOUT_MAX
427};
428
430enum {
431 DAOS_PROP_CO_CSUM_OFF,
432 DAOS_PROP_CO_CSUM_CRC16,
433 DAOS_PROP_CO_CSUM_CRC32,
434 DAOS_PROP_CO_CSUM_CRC64,
435 DAOS_PROP_CO_CSUM_SHA1,
436 DAOS_PROP_CO_CSUM_SHA256,
437 DAOS_PROP_CO_CSUM_SHA512,
438 DAOS_PROP_CO_CSUM_ADLER32
439};
440
442enum {
443 DAOS_PROP_CO_CSUM_SV_OFF,
444 DAOS_PROP_CO_CSUM_SV_ON
445};
446
448enum {
449 DAOS_PROP_CO_DEDUP_OFF,
450 DAOS_PROP_CO_DEDUP_MEMCMP,
451 DAOS_PROP_CO_DEDUP_HASH
452};
453
455enum {
456 DAOS_PROP_CO_COMPRESS_OFF,
457 DAOS_PROP_CO_COMPRESS_LZ4,
458 DAOS_PROP_CO_COMPRESS_DEFLATE,
459 DAOS_PROP_CO_COMPRESS_DEFLATE1,
460 DAOS_PROP_CO_COMPRESS_DEFLATE2,
461 DAOS_PROP_CO_COMPRESS_DEFLATE3,
462 DAOS_PROP_CO_COMPRESS_DEFLATE4,
463};
464
466enum {
467 DAOS_PROP_CO_ENCRYPT_OFF,
468 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
469 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
470 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
471 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
472 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
473 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
474 DAOS_PROP_CO_ENCRYPT_AES_GCM256
475};
476
478enum {
479 DAOS_PROP_CO_REDUN_RF0 = 0,
480 DAOS_PROP_CO_REDUN_RF1 = 1,
481 DAOS_PROP_CO_REDUN_RF2 = 2,
482 DAOS_PROP_CO_REDUN_RF3 = 3,
483 DAOS_PROP_CO_REDUN_RF4 = 4,
484 DAOS_RF_MAX = 4,
485};
486
491enum {
492 DAOS_PROP_CO_REDUN_MIN = 1,
493 /* server rank (engine) level */
494 DAOS_PROP_CO_REDUN_RANK = 1,
495 /* server node level */
496 DAOS_PROP_CO_REDUN_NODE = 2,
497 /* pool fault domain level */
498 DAOS_PROP_CO_REDUN_FAULT = 3,
499 DAOS_PROP_CO_REDUN_MAX = 254,
500};
501
503#define DAOS_PROP_CO_REDUN_DEFAULT DAOS_PROP_CO_REDUN_NODE
504
506enum {
507 /* in healthy status, data protection work as expected */
508 DAOS_PROP_CO_HEALTHY,
509 /* in unclean status, data protection possibly cannot work.
510 * typical scenario - cascading failed targets exceed the container
511 * redundancy factor, that possibly cause lost data cannot be detected
512 * or rebuilt.
513 */
514 DAOS_PROP_CO_UNCLEAN,
515};
516
518#define DAOS_PROP_CO_CLEAR (0x1)
519
521 struct daos_co_status {
523 uint16_t dcs_status;
525 uint16_t dcs_flags;
527 uint32_t dcs_pm_ver;
528};
529
530#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
531 ((((uint64_t)(flag)) << 48) | \
532 (((uint64_t)(status) & 0xFFFF) << 32) | \
533 ((uint64_t)(pm_ver)))
534
535static inline uint64_t
536daos_prop_co_status_2_val(struct daos_co_status *co_status)
537{
538 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
539 co_status->dcs_flags,
540 co_status->dcs_pm_ver);
541}
542
543static inline void
544daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
545{
546 co_status->dcs_flags = (uint16_t)(val >> 48);
547 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
548 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
549}
550
551enum {
552 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
553};
554
556 struct daos_prop_entry {
558 uint32_t dpe_type;
560 uint16_t dpe_flags;
562 uint16_t dpe_reserv;
567 union {
568 uint64_t dpe_val;
569 d_string_t dpe_str;
570 void *dpe_val_ptr;
571 };
572};
573
575#define DAOS_PROP_ENTRIES_MAX_NR (128)
576
578#define DAOS_PROP_LABEL_MAX_LEN (127)
580#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
581
583#define DAOS_PROP_CO_LABEL_DEFAULT "container_label_not_set"
584#define DAOS_PROP_PO_LABEL_DEFAULT "pool_label_not_set"
585
597static inline bool
598daos_label_is_valid(const char *label)
599{
600 int len;
601 int i;
602 bool maybe_uuid = false;
603
605 if (label == NULL)
606 return false;
607
609 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
610 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
611 return false;
612
614 for (i = 0; i < len; i++) {
615 char c = label[i];
616
617 if (isalnum(c) || c == '.' || c == '_' || c == ':')
618 continue;
619 if (c == '-') {
620 maybe_uuid = true;
621 continue;
622 }
623
624 return false;
625 }
626
628 if (maybe_uuid && daos_is_valid_uuid_string(label, UUID_SST_NONE))
629 return false;
630
631 return true;
632}
633
634/* default data threshold size of 4KiB */
635#define DAOS_PROP_PO_DATA_THRESH_DEFAULT (1UL << 12)
636
637/* For the case of no label is set for the pool. */
638#define DAOS_PROP_NO_PO_LABEL "pool_label_not_set"
639
640/* Default container label */
641#define DEFAULT_CONT_LABEL "container_label_not_set"
642
643/* For the case of no label is set for the container. */
644#define DAOS_PROP_NO_CO_LABEL DEFAULT_CONT_LABEL
645
650static inline bool
651daos_perf_domain_is_valid(const char *perf_domain)
652{
653 return daos_label_is_valid(perf_domain);
654}
655
657 typedef struct {
659 uint32_t dpp_nr;
661 uint32_t dpp_reserv;
663 struct daos_prop_entry *dpp_entries;
664} daos_prop_t;
665
673 daos_prop_t *
674daos_prop_alloc(uint32_t entries_nr);
675
681void
682daos_prop_fini(daos_prop_t *prop);
683
689void
690daos_prop_free(daos_prop_t *prop);
691
705int
706daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
707
718int
719daos_prop_merge2(daos_prop_t *old_prop, daos_prop_t *new_prop, daos_prop_t **out_prop);
720
729 daos_prop_t *
730daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
731
740struct daos_prop_entry *
741daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
742
755int
756daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
757
766int
767daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
768
781int
782daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
783
792int
793daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
794
806int
807daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
808 struct daos_prop_entry *entry_src, size_t len);
809
828int
829daos_prop_set_byteval(daos_prop_t *prop, uint32_t type, const void *data, size_t len);
830
844int
845daos_prop_entry_set_byteval(struct daos_prop_entry *entry, const void *data, size_t len);
846
858int
859daos_prop_entry_dup_byteval(struct daos_prop_entry *entry_dst, struct daos_prop_entry *entry_src);
860
870int
871daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
872 struct daos_prop_entry *entry2);
873
884int
885daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
886 struct daos_prop_entry *src);
887
896bool
897daos_prop_has_str(struct daos_prop_entry *entry);
898
907bool
908daos_prop_has_ptr(struct daos_prop_entry *entry);
909
920bool
921daos_prop_has_byteval(struct daos_prop_entry *entry);
922
931static inline bool
932daos_prop_is_set(struct daos_prop_entry *entry)
933{
934 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
935 return false;
936
937 return true;
938}
939
940#if defined(__cplusplus)
941}
942#endif
943
944#endif /* __DAOS_PROP_H__ */
daos_co_status
Definition daos_prop.h:521
daos_co_status::dcs_status
uint16_t dcs_status
Definition daos_prop.h:523
daos_co_status::dcs_flags
uint16_t dcs_flags
Definition daos_prop.h:525
daos_co_status::dcs_pm_ver
uint32_t dcs_pm_ver
Definition daos_prop.h:527
daos_obj_id_t
Definition daos_types.h:231
daos_prop_byteval
Definition daos_prop.h:149
daos_prop_byteval::dpb_len
size_t dpb_len
Definition daos_prop.h:153
daos_prop_byteval::dpb_data
void * dpb_data
Definition daos_prop.h:151
daos_prop_co_roots
Definition daos_prop.h:402
daos_prop_co_roots::cr_oids
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:404
daos_prop_entry
Definition daos_prop.h:556
daos_prop_entry::dpe_flags
uint16_t dpe_flags
Definition daos_prop.h:560
daos_prop_entry::dpe_reserv
uint16_t dpe_reserv
Definition daos_prop.h:562
daos_prop_entry::dpe_type
uint32_t dpe_type
Definition daos_prop.h:558
daos_prop_t
Definition daos_prop.h:657
daos_prop_t::dpp_entries
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:663
daos_prop_t::dpp_reserv
uint32_t dpp_reserv
Definition daos_prop.h:661
daos_prop_t::dpp_nr
uint32_t dpp_nr
Definition daos_prop.h:659