DAOS API (v2.1 - dev)
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,
73 DAOS_PROP_PO_EC_CELL_SZ,
77 DAOS_PROP_PO_DATA_THRESH,
81 DAOS_PROP_PO_REDUN_FAC,
85 DAOS_PROP_PO_EC_PDA,
90 DAOS_PROP_PO_RP_PDA,
91
96 DAOS_PROP_PO_GLOBAL_VERSION,
100 DAOS_PROP_PO_UPGRADE_STATUS,
101 /*
102 * Schedule that the checksum scrubber will run. See
103 * DAOS_SCRUBBER_SCHED_*
104 *
105 * default: DAOS_SCRUB_MODE_OFF
106 */
107 DAOS_PROP_PO_SCRUB_MODE,
113 DAOS_PROP_PO_SCRUB_FREQ,
119 DAOS_PROP_PO_SCRUB_THRESH,
123 DAOS_PROP_PO_SVC_REDUN_FAC,
125 DAOS_PROP_PO_OBJ_VERSION,
129 DAOS_PROP_PO_PERF_DOMAIN,
131 DAOS_PROP_PO_CHECKPOINT_MODE,
133 DAOS_PROP_PO_CHECKPOINT_FREQ,
135 DAOS_PROP_PO_CHECKPOINT_THRESH,
137 DAOS_PROP_PO_REINT_MODE,
139 DAOS_PROP_PO_SVC_OPS_ENABLED,
141 DAOS_PROP_PO_SVC_OPS_ENTRY_AGE,
142 DAOS_PROP_PO_MAX,
143};
144
145#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
146#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
147
148#define DAOS_PROP_PO_REDUN_FAC_MAX 4
149#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 0
150
151static inline bool
152daos_rf_is_valid(unsigned long long rf)
153{
154 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
155}
156
157#define DAOS_PROP_PDA_MAX ((uint32_t)-1)
164#define DAOS_PROP_PO_RP_PDA_DEFAULT DAOS_PROP_PDA_MAX
169#define DAOS_PROP_PO_EC_PDA_DEFAULT ((uint32_t)1)
170
172enum {
173 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
174 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
175 DAOS_UPGRADE_STATUS_COMPLETED = 2,
176 DAOS_UPGRADE_STATUS_FAILED = 3,
177};
178
179#define DAOS_PROP_PO_SVC_REDUN_FAC_MAX 4
180#define DAOS_PROP_PO_SVC_REDUN_FAC_DEFAULT 2
181
182static inline bool
183daos_svc_rf_is_valid(uint64_t svc_rf)
184{
185 return svc_rf <= DAOS_PROP_PO_SVC_REDUN_FAC_MAX;
186}
187
191enum {
192 DAOS_PROP_PERF_DOMAIN_ROOT = 255,
193 DAOS_PROP_PERF_DOMAIN_GROUP = 3,
194};
195
199#define DAOS_PROP_PO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
200#define DAOS_PROP_CO_PERF_DOMAIN_DEFAULT DAOS_PROP_PERF_DOMAIN_ROOT
201
205#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
206
208enum {
209 DAOS_RECLAIM_DISABLED = 0,
210 DAOS_RECLAIM_LAZY,
211 DAOS_RECLAIM_SNAPSHOT,
212 DAOS_RECLAIM_BATCH,
213 DAOS_RECLAIM_TIME,
214};
215
216enum {
217 DAOS_REINT_MODE_DATA_SYNC = 0,
218 DAOS_REINT_MODE_NO_DATA_SYNC = 1,
219};
220
224#define DAOS_PROP_PO_REINT_MODE_DEFAULT DAOS_REINT_MODE_DATA_SYNC
225
230enum {
231 DAOS_SCRUB_MODE_OFF = 0,
232 DAOS_SCRUB_MODE_LAZY = 1,
233 DAOS_SCRUB_MODE_TIMED = 2,
234 DAOS_SCRUB_MODE_INVALID = 3,
235};
236
237/* Checksum Scrubbing Defaults */
238#define DAOS_PROP_PO_SCRUB_MODE_DEFAULT DAOS_SCRUB_MODE_OFF
239
240#define DAOS_PROP_PO_SCRUB_FREQ_DEFAULT 604800 /* 1 week in seconds */
241#define DAOS_PROP_PO_SCRUB_THRESH_DEFAULT 0
242
244enum {
245 DAOS_CHECKPOINT_DISABLED = 0,
246 DAOS_CHECKPOINT_TIMED,
247 DAOS_CHECKPOINT_LAZY,
248};
249
250#define DAOS_PROP_PO_CHECKPOINT_MODE_DEFAULT DAOS_CHECKPOINT_TIMED
251#define DAOS_PROP_PO_CHECKPOINT_FREQ_DEFAULT 5 /* 5 seconds */
252#define DAOS_PROP_PO_CHECKPOINT_FREQ_MIN 1 /* 1 seconds */
253#define DAOS_PROP_PO_CHECKPOINT_FREQ_MAX (1 << 20) /* 1 million seconds */
254#define DAOS_PROP_PO_CHECKPOINT_THRESH_DEFAULT 50 /* 50 % WAL capacity */
255#define DAOS_PROP_PO_CHECKPOINT_THRESH_MAX 75 /* 75 % WAL capacity */
256#define DAOS_PROP_PO_CHECKPOINT_THRESH_MIN 10 /* 10 % WAL capacity */
257#define DAOS_PROP_PO_SVC_OPS_ENABLED_DEFAULT 1 /* true: enabled by default */
258#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_DEFAULT 300 /* 300 seconds */
259#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MIN 60 /* 60 seconds */
260#define DAOS_PROP_PO_SVC_OPS_ENTRY_AGE_MAX 600 /* 600 seconds */
261
263#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
264#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
265#define DAOS_SELF_HEAL_DELAY_REBUILD (1U << 2)
266
271enum daos_cont_props {
272 DAOS_PROP_CO_MIN = 0x1000,
277 DAOS_PROP_CO_LABEL,
282 DAOS_PROP_CO_LAYOUT_TYPE,
287 DAOS_PROP_CO_LAYOUT_VER,
292 DAOS_PROP_CO_CSUM,
297 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
302 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
308 DAOS_PROP_CO_REDUN_FAC,
313 DAOS_PROP_CO_REDUN_LVL,
317 DAOS_PROP_CO_SNAPSHOT_MAX,
324 DAOS_PROP_CO_ACL,
330 DAOS_PROP_CO_COMPRESS,
340 DAOS_PROP_CO_ENCRYPT,
345 DAOS_PROP_CO_OWNER,
350 DAOS_PROP_CO_OWNER_GROUP,
357 DAOS_PROP_CO_DEDUP,
362 DAOS_PROP_CO_DEDUP_THRESHOLD,
364 DAOS_PROP_CO_ROOTS,
369 DAOS_PROP_CO_STATUS,
371 DAOS_PROP_CO_ALLOCED_OID,
373 DAOS_PROP_CO_EC_CELL_SZ,
375 DAOS_PROP_CO_EC_PDA,
377 DAOS_PROP_CO_RP_PDA,
379 DAOS_PROP_CO_GLOBAL_VERSION,
381 DAOS_PROP_CO_SCRUBBER_DISABLED,
383 DAOS_PROP_CO_OBJ_VERSION,
385 DAOS_PROP_CO_PERF_DOMAIN,
386 DAOS_PROP_CO_MAX,
387};
388
394
398#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
399
400typedef uint16_t daos_cont_layout_t;
401
403enum {
404 DAOS_PROP_CO_LAYOUT_UNKNOWN,
405 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
406 DAOS_PROP_CO_LAYOUT_POSIX,
407 DAOS_PROP_CO_LAYOUT_HDF5,
408 DAOS_PROP_CO_LAYOUT_PYTHON,
409 DAOS_PROP_CO_LAYOUT_SPARK,
410 DAOS_PROP_CO_LAYOUT_DATABASE,
411 DAOS_PROP_CO_LAYOUT_ROOT,
412 DAOS_PROP_CO_LAYOUT_SEISMIC,
413 DAOS_PROP_CO_LAYOUT_METEO,
414 DAOS_PROP_CO_LAYOUT_MAX
415};
416
418enum {
419 DAOS_PROP_CO_CSUM_OFF,
420 DAOS_PROP_CO_CSUM_CRC16,
421 DAOS_PROP_CO_CSUM_CRC32,
422 DAOS_PROP_CO_CSUM_CRC64,
423 DAOS_PROP_CO_CSUM_SHA1,
424 DAOS_PROP_CO_CSUM_SHA256,
425 DAOS_PROP_CO_CSUM_SHA512,
426 DAOS_PROP_CO_CSUM_ADLER32
427};
428
430enum {
431 DAOS_PROP_CO_CSUM_SV_OFF,
432 DAOS_PROP_CO_CSUM_SV_ON
433};
434
436enum {
437 DAOS_PROP_CO_DEDUP_OFF,
438 DAOS_PROP_CO_DEDUP_MEMCMP,
439 DAOS_PROP_CO_DEDUP_HASH
440};
441
443enum {
444 DAOS_PROP_CO_COMPRESS_OFF,
445 DAOS_PROP_CO_COMPRESS_LZ4,
446 DAOS_PROP_CO_COMPRESS_DEFLATE,
447 DAOS_PROP_CO_COMPRESS_DEFLATE1,
448 DAOS_PROP_CO_COMPRESS_DEFLATE2,
449 DAOS_PROP_CO_COMPRESS_DEFLATE3,
450 DAOS_PROP_CO_COMPRESS_DEFLATE4,
451};
452
454enum {
455 DAOS_PROP_CO_ENCRYPT_OFF,
456 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
457 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
458 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
459 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
460 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
461 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
462 DAOS_PROP_CO_ENCRYPT_AES_GCM256
463};
464
466enum {
467 DAOS_PROP_CO_REDUN_RF0 = 0,
468 DAOS_PROP_CO_REDUN_RF1 = 1,
469 DAOS_PROP_CO_REDUN_RF2 = 2,
470 DAOS_PROP_CO_REDUN_RF3 = 3,
471 DAOS_PROP_CO_REDUN_RF4 = 4,
472 DAOS_RF_MAX = 4,
473};
474
479enum {
480 DAOS_PROP_CO_REDUN_MIN = 1,
481 /* server rank (engine) level */
482 DAOS_PROP_CO_REDUN_RANK = 1,
483 /* server node level */
484 DAOS_PROP_CO_REDUN_NODE = 2,
485 DAOS_PROP_CO_REDUN_MAX = 254,
486};
487
489#define DAOS_PROP_CO_REDUN_DEFAULT DAOS_PROP_CO_REDUN_NODE
490
492enum {
493 /* in healthy status, data protection work as expected */
494 DAOS_PROP_CO_HEALTHY,
495 /* in unclean status, data protection possibly cannot work.
496 * typical scenario - cascading failed targets exceed the container
497 * redundancy factor, that possibly cause lost data cannot be detected
498 * or rebuilt.
499 */
500 DAOS_PROP_CO_UNCLEAN,
501};
502
504#define DAOS_PROP_CO_CLEAR (0x1)
505
509 uint16_t dcs_status;
511 uint16_t dcs_flags;
513 uint32_t dcs_pm_ver;
514};
515
516#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
517 ((((uint64_t)(flag)) << 48) | \
518 (((uint64_t)(status) & 0xFFFF) << 32) | \
519 ((uint64_t)(pm_ver)))
520
521static inline uint64_t
522daos_prop_co_status_2_val(struct daos_co_status *co_status)
523{
524 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
525 co_status->dcs_flags,
526 co_status->dcs_pm_ver);
527}
528
529static inline void
530daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
531{
532 co_status->dcs_flags = (uint16_t)(val >> 48);
533 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
534 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
535}
536
537enum {
538 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
539};
540
544 uint32_t dpe_type;
546 uint16_t dpe_flags;
548 uint16_t dpe_reserv;
553 union {
554 uint64_t dpe_val;
555 d_string_t dpe_str;
556 void *dpe_val_ptr;
557 };
558};
559
561#define DAOS_PROP_ENTRIES_MAX_NR (128)
562
564#define DAOS_PROP_LABEL_MAX_LEN (127)
566#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
567
569#define DAOS_PROP_CO_LABEL_DEFAULT "container_label_not_set"
570#define DAOS_PROP_PO_LABEL_DEFAULT "pool_label_not_set"
571
583static inline bool
584daos_label_is_valid(const char *label)
585{
586 int len;
587 int i;
588 bool maybe_uuid = false;
589
591 if (label == NULL)
592 return false;
593
595 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
596 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
597 return false;
598
600 for (i = 0; i < len; i++) {
601 char c = label[i];
602
603 if (isalnum(c) || c == '.' || c == '_' || c == ':')
604 continue;
605 if (c == '-') {
606 maybe_uuid = true;
607 continue;
608 }
609
610 return false;
611 }
612
614 if (maybe_uuid && daos_is_valid_uuid_string(label))
615 return false;
616
617 return true;
618}
619
620/* default data threshold size of 4KiB */
621#define DAOS_PROP_PO_DATA_THRESH_DEFAULT (1UL << 12)
622
623/* For the case of no label is set for the pool. */
624#define DAOS_PROP_NO_PO_LABEL "pool_label_not_set"
625
626/* Default container label */
627#define DEFAULT_CONT_LABEL "container_label_not_set"
628
629/* For the case of no label is set for the container. */
630#define DAOS_PROP_NO_CO_LABEL DEFAULT_CONT_LABEL
631
636static inline bool
637daos_perf_domain_is_valid(const char *perf_domain)
638{
639 return daos_label_is_valid(perf_domain);
640}
641
643typedef struct {
645 uint32_t dpp_nr;
647 uint32_t dpp_reserv;
651
660daos_prop_alloc(uint32_t entries_nr);
661
667void
668daos_prop_fini(daos_prop_t *prop);
669
675void
676daos_prop_free(daos_prop_t *prop);
677
691int
692daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
693
704int
705daos_prop_merge2(daos_prop_t *old_prop, daos_prop_t *new_prop, daos_prop_t **out_prop);
706
716daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
717
726struct daos_prop_entry *
727daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
728
741int
742daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
743
752int
753daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
754
767int
768daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
769
778int
779daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
780
792int
793daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
794 struct daos_prop_entry *entry_src, size_t len);
795
805int
806daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
807 struct daos_prop_entry *entry2);
808
819int
820daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
821 struct daos_prop_entry *src);
822
831bool
832daos_prop_has_str(struct daos_prop_entry *entry);
833
842bool
843daos_prop_has_ptr(struct daos_prop_entry *entry);
844
853static inline bool
854daos_prop_is_set(struct daos_prop_entry *entry)
855{
856 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
857 return false;
858
859 return true;
860}
861
862#if defined(__cplusplus)
863}
864#endif
865
866#endif /* __DAOS_PROP_H__ */
uint16_t dcs_status
Definition daos_prop.h:509
uint16_t dcs_flags
Definition daos_prop.h:511
uint32_t dcs_pm_ver
Definition daos_prop.h:513
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:392
Definition daos_prop.h:542
uint16_t dpe_flags
Definition daos_prop.h:546
uint16_t dpe_reserv
Definition daos_prop.h:548
uint32_t dpe_type
Definition daos_prop.h:544
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:649
uint32_t dpp_reserv
Definition daos_prop.h:647
uint32_t dpp_nr
Definition daos_prop.h:645