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_POLICY,
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,
138 DAOS_PROP_PO_MAX,
139};
140
141#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
142#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
143
144#define DAOS_PROP_PO_REDUN_FAC_MAX 4
145#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 0
146
147static inline bool
148daos_rf_is_valid(unsigned long long rf)
149{
150 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
151}
152
159#define DAOS_PROP_PO_RP_PDA_DEFAULT 3
164#define DAOS_PROP_PO_EC_PDA_DEFAULT 1
165
167enum {
168 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
169 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
170 DAOS_UPGRADE_STATUS_COMPLETED = 2,
171 DAOS_UPGRADE_STATUS_FAILED = 3,
172};
173
174#define DAOS_PROP_PO_SVC_REDUN_FAC_MAX 4
175#define DAOS_PROP_PO_SVC_REDUN_FAC_DEFAULT 2
176
177static inline bool
178daos_svc_rf_is_valid(uint64_t svc_rf)
179{
180 return svc_rf <= DAOS_PROP_PO_SVC_REDUN_FAC_MAX;
181}
182
186#define DAOS_PROP_PO_PERF_DOMAIN_DEFAULT PO_COMP_TP_ROOT
187
191#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
192
194enum {
195 DAOS_RECLAIM_DISABLED = 0,
196 DAOS_RECLAIM_LAZY,
197 DAOS_RECLAIM_SNAPSHOT,
198 DAOS_RECLAIM_BATCH,
199 DAOS_RECLAIM_TIME,
200};
201
202enum {
203 DAOS_REINT_MODE_DATA_SYNC = 0,
204 DAOS_REINT_MODE_NO_DATA_SYNC = 1,
205};
206
210#define DAOS_PROP_PO_REINT_MODE_DEFAULT DAOS_REINT_MODE_DATA_SYNC
211
216enum {
217 DAOS_SCRUB_MODE_OFF = 0,
218 DAOS_SCRUB_MODE_LAZY = 1,
219 DAOS_SCRUB_MODE_TIMED = 2,
220 DAOS_SCRUB_MODE_INVALID = 3,
221};
222
223/* Checksum Scrubbing Defaults */
224#define DAOS_PROP_PO_SCRUB_MODE_DEFAULT DAOS_SCRUB_MODE_OFF
225
226#define DAOS_PROP_PO_SCRUB_FREQ_DEFAULT 604800 /* 1 week in seconds */
227#define DAOS_PROP_PO_SCRUB_THRESH_DEFAULT 0
228
230enum {
231 DAOS_CHECKPOINT_DISABLED = 0,
232 DAOS_CHECKPOINT_TIMED,
233 DAOS_CHECKPOINT_LAZY,
234};
235
236#define DAOS_PROP_PO_CHECKPOINT_MODE_DEFAULT DAOS_CHECKPOINT_TIMED
237#define DAOS_PROP_PO_CHECKPOINT_FREQ_DEFAULT 5 /* 5 seconds */
238#define DAOS_PROP_PO_CHECKPOINT_FREQ_MIN 1 /* 1 seconds */
239#define DAOS_PROP_PO_CHECKPOINT_FREQ_MAX (1 << 20) /* 1 million seconds */
240#define DAOS_PROP_PO_CHECKPOINT_THRESH_DEFAULT 50 /* 50 % WAL capacity */
241#define DAOS_PROP_PO_CHECKPOINT_THRESH_MAX 75 /* 75 % WAL capacity */
242#define DAOS_PROP_PO_CHECKPOINT_THRESH_MIN 10 /* 10 % WAL capacity */
243
245#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
246#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
247
252enum daos_cont_props {
253 DAOS_PROP_CO_MIN = 0x1000,
258 DAOS_PROP_CO_LABEL,
263 DAOS_PROP_CO_LAYOUT_TYPE,
268 DAOS_PROP_CO_LAYOUT_VER,
273 DAOS_PROP_CO_CSUM,
278 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
283 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
289 DAOS_PROP_CO_REDUN_FAC,
294 DAOS_PROP_CO_REDUN_LVL,
298 DAOS_PROP_CO_SNAPSHOT_MAX,
305 DAOS_PROP_CO_ACL,
311 DAOS_PROP_CO_COMPRESS,
321 DAOS_PROP_CO_ENCRYPT,
326 DAOS_PROP_CO_OWNER,
331 DAOS_PROP_CO_OWNER_GROUP,
338 DAOS_PROP_CO_DEDUP,
343 DAOS_PROP_CO_DEDUP_THRESHOLD,
345 DAOS_PROP_CO_ROOTS,
350 DAOS_PROP_CO_STATUS,
352 DAOS_PROP_CO_ALLOCED_OID,
354 DAOS_PROP_CO_EC_CELL_SZ,
356 DAOS_PROP_CO_EC_PDA,
358 DAOS_PROP_CO_RP_PDA,
360 DAOS_PROP_CO_GLOBAL_VERSION,
362 DAOS_PROP_CO_SCRUBBER_DISABLED,
364 DAOS_PROP_CO_OBJ_VERSION,
365 DAOS_PROP_CO_MAX,
366};
367
373
377#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
378
379typedef uint16_t daos_cont_layout_t;
380
382enum {
383 DAOS_PROP_CO_LAYOUT_UNKNOWN,
384 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
385 DAOS_PROP_CO_LAYOUT_POSIX,
386 DAOS_PROP_CO_LAYOUT_HDF5,
387 DAOS_PROP_CO_LAYOUT_PYTHON,
388 DAOS_PROP_CO_LAYOUT_SPARK,
389 DAOS_PROP_CO_LAYOUT_DATABASE,
390 DAOS_PROP_CO_LAYOUT_ROOT,
391 DAOS_PROP_CO_LAYOUT_SEISMIC,
392 DAOS_PROP_CO_LAYOUT_METEO,
393 DAOS_PROP_CO_LAYOUT_MAX
394};
395
397enum {
398 DAOS_PROP_CO_CSUM_OFF,
399 DAOS_PROP_CO_CSUM_CRC16,
400 DAOS_PROP_CO_CSUM_CRC32,
401 DAOS_PROP_CO_CSUM_CRC64,
402 DAOS_PROP_CO_CSUM_SHA1,
403 DAOS_PROP_CO_CSUM_SHA256,
404 DAOS_PROP_CO_CSUM_SHA512,
405 DAOS_PROP_CO_CSUM_ADLER32
406};
407
409enum {
410 DAOS_PROP_CO_CSUM_SV_OFF,
411 DAOS_PROP_CO_CSUM_SV_ON
412};
413
415enum {
416 DAOS_PROP_CO_DEDUP_OFF,
417 DAOS_PROP_CO_DEDUP_MEMCMP,
418 DAOS_PROP_CO_DEDUP_HASH
419};
420
422enum {
423 DAOS_PROP_CO_COMPRESS_OFF,
424 DAOS_PROP_CO_COMPRESS_LZ4,
425 DAOS_PROP_CO_COMPRESS_DEFLATE,
426 DAOS_PROP_CO_COMPRESS_DEFLATE1,
427 DAOS_PROP_CO_COMPRESS_DEFLATE2,
428 DAOS_PROP_CO_COMPRESS_DEFLATE3,
429 DAOS_PROP_CO_COMPRESS_DEFLATE4,
430};
431
433enum {
434 DAOS_PROP_CO_ENCRYPT_OFF,
435 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
436 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
437 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
438 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
439 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
440 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
441 DAOS_PROP_CO_ENCRYPT_AES_GCM256
442};
443
445enum {
446 DAOS_PROP_CO_REDUN_RF0,
447 DAOS_PROP_CO_REDUN_RF1,
448 DAOS_PROP_CO_REDUN_RF2,
449 DAOS_PROP_CO_REDUN_RF3,
450 DAOS_PROP_CO_REDUN_RF4,
451};
452
457enum {
458 DAOS_PROP_CO_REDUN_MIN = 1,
459 /* server rank (engine) level */
460 DAOS_PROP_CO_REDUN_RANK = 1,
461 /* server node level */
462 DAOS_PROP_CO_REDUN_NODE = 2,
463 DAOS_PROP_CO_REDUN_MAX = 254,
464};
465
467#define DAOS_PROP_CO_REDUN_DEFAULT DAOS_PROP_CO_REDUN_NODE
468
470enum {
471 /* in healthy status, data protection work as expected */
472 DAOS_PROP_CO_HEALTHY,
473 /* in unclean status, data protection possibly cannot work.
474 * typical scenario - cascading failed targets exceed the container
475 * redundancy factor, that possibly cause lost data cannot be detected
476 * or rebuilt.
477 */
478 DAOS_PROP_CO_UNCLEAN,
479};
480
482#define DAOS_PROP_CO_CLEAR (0x1)
483
487 uint16_t dcs_status;
489 uint16_t dcs_flags;
491 uint32_t dcs_pm_ver;
492};
493
494#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
495 ((((uint64_t)(flag)) << 48) | \
496 (((uint64_t)(status) & 0xFFFF) << 32) | \
497 ((uint64_t)(pm_ver)))
498
499static inline uint64_t
500daos_prop_co_status_2_val(struct daos_co_status *co_status)
501{
502 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
503 co_status->dcs_flags,
504 co_status->dcs_pm_ver);
505}
506
507static inline void
508daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
509{
510 co_status->dcs_flags = (uint16_t)(val >> 48);
511 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
512 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
513}
514
515enum {
516 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
517};
518
522 uint32_t dpe_type;
524 uint16_t dpe_flags;
526 uint16_t dpe_reserv;
531 union {
532 uint64_t dpe_val;
533 d_string_t dpe_str;
534 void *dpe_val_ptr;
535 };
536};
537
539#define DAOS_PROP_ENTRIES_MAX_NR (128)
540
542#define DAOS_PROP_LABEL_MAX_LEN (127)
544#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
545
547#define DAOS_PROP_CO_LABEL_DEFAULT "container_label_not_set"
548#define DAOS_PROP_PO_LABEL_DEFAULT "pool_label_not_set"
549
561static inline bool
562daos_label_is_valid(const char *label)
563{
564 int len;
565 int i;
566 bool maybe_uuid = false;
567
569 if (label == NULL)
570 return false;
571
573 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
574 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
575 return false;
576
578 for (i = 0; i < len; i++) {
579 char c = label[i];
580
581 if (isalnum(c) || c == '.' || c == '_' || c == ':')
582 continue;
583 if (c == '-') {
584 maybe_uuid = true;
585 continue;
586 }
587
588 return false;
589 }
590
592 if (maybe_uuid && strnlen(label, 36) == 36) {
593 bool is_uuid = true;
594 const char *p;
595
597 for (i = 0, p = label; i < 36; i++, p++) {
598 if (i == 8 || i == 13 || i == 18 || i == 23) {
599 if (*p != '-') {
600 is_uuid = false;
601 break;
602 }
603 continue;
604 }
605 if (!isxdigit(*p)) {
606 is_uuid = false;
607 break;
608 }
609 }
610
611 if (is_uuid)
612 return false;
613 }
614
615 return true;
616}
617
619#define DAOS_PROP_POLICYSTR_MAX_LEN (127)
620
621/* default policy string */
622#define DAOS_PROP_POLICYSTR_DEFAULT "type=io_size"
623
628static inline bool
629daos_perf_domain_is_valid(const char *perf_domain)
630{
631 return daos_label_is_valid(perf_domain);
632}
633
635typedef struct {
637 uint32_t dpp_nr;
639 uint32_t dpp_reserv;
643
652daos_prop_alloc(uint32_t entries_nr);
653
659void
660daos_prop_fini(daos_prop_t *prop);
661
667void
668daos_prop_free(daos_prop_t *prop);
669
683int
684daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
685
696int
697daos_prop_merge2(daos_prop_t *old_prop, daos_prop_t *new_prop, daos_prop_t **out_prop);
698
708daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
709
718struct daos_prop_entry *
719daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
720
733int
734daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
735
744int
745daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
746
759int
760daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
761
770int
771daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
772
784int
785daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
786 struct daos_prop_entry *entry_src, size_t len);
787
797int
798daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
799 struct daos_prop_entry *entry2);
800
811int
812daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
813 struct daos_prop_entry *src);
814
823bool
824daos_prop_has_str(struct daos_prop_entry *entry);
825
834bool
835daos_prop_has_ptr(struct daos_prop_entry *entry);
836
845static inline bool
846daos_prop_is_set(struct daos_prop_entry *entry)
847{
848 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
849 return false;
850
851 return true;
852}
853
854#if defined(__cplusplus)
855}
856#endif
857
858#endif /* __DAOS_PROP_H__ */
uint16_t dcs_status
Definition daos_prop.h:487
uint16_t dcs_flags
Definition daos_prop.h:489
uint32_t dcs_pm_ver
Definition daos_prop.h:491
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:371
Definition daos_prop.h:520
uint16_t dpe_flags
Definition daos_prop.h:524
uint16_t dpe_reserv
Definition daos_prop.h:526
uint32_t dpe_type
Definition daos_prop.h:522
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:641
uint32_t dpp_reserv
Definition daos_prop.h:639
uint32_t dpp_nr
Definition daos_prop.h:637