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 DAOS_PROP_PO_MAX,
102};
103
104#define DAOS_PROP_PO_EC_CELL_SZ_MIN (1UL << 10)
105#define DAOS_PROP_PO_EC_CELL_SZ_MAX (1UL << 30)
106
107#define DAOS_PROP_PO_REDUN_FAC_MAX 4
108#define DAOS_PROP_PO_REDUN_FAC_DEFAULT 0
109
110static inline bool
111daos_rf_is_valid(unsigned long long rf)
112{
113 return rf <= DAOS_PROP_PO_REDUN_FAC_MAX;
114}
115
122#define DAOS_PROP_PO_RP_PDA_DEFAULT 3
127#define DAOS_PROP_PO_EC_PDA_DEFAULT 1
128
130enum {
131 DAOS_UPGRADE_STATUS_NOT_STARTED = 0,
132 DAOS_UPGRADE_STATUS_IN_PROGRESS = 1,
133 DAOS_UPGRADE_STATUS_COMPLETED = 2,
134 DAOS_UPGRADE_STATUS_FAILED = 3,
135};
136
140#define DAOS_PROP_PO_NUM (DAOS_PROP_PO_MAX - DAOS_PROP_PO_MIN - 1)
141
143enum {
144 DAOS_RECLAIM_DISABLED = 0,
145 DAOS_RECLAIM_LAZY,
146 DAOS_RECLAIM_SNAPSHOT,
147 DAOS_RECLAIM_BATCH,
148 DAOS_RECLAIM_TIME,
149};
150
152#define DAOS_SELF_HEAL_AUTO_EXCLUDE (1U << 0)
153#define DAOS_SELF_HEAL_AUTO_REBUILD (1U << 1)
154
159enum daos_cont_props {
160 DAOS_PROP_CO_MIN = 0x1000,
165 DAOS_PROP_CO_LABEL,
170 DAOS_PROP_CO_LAYOUT_TYPE,
175 DAOS_PROP_CO_LAYOUT_VER,
180 DAOS_PROP_CO_CSUM,
185 DAOS_PROP_CO_CSUM_CHUNK_SIZE,
190 DAOS_PROP_CO_CSUM_SERVER_VERIFY,
196 DAOS_PROP_CO_REDUN_FAC,
201 DAOS_PROP_CO_REDUN_LVL,
205 DAOS_PROP_CO_SNAPSHOT_MAX,
212 DAOS_PROP_CO_ACL,
218 DAOS_PROP_CO_COMPRESS,
228 DAOS_PROP_CO_ENCRYPT,
233 DAOS_PROP_CO_OWNER,
238 DAOS_PROP_CO_OWNER_GROUP,
245 DAOS_PROP_CO_DEDUP,
250 DAOS_PROP_CO_DEDUP_THRESHOLD,
252 DAOS_PROP_CO_ROOTS,
257 DAOS_PROP_CO_STATUS,
259 DAOS_PROP_CO_ALLOCED_OID,
261 DAOS_PROP_CO_EC_CELL_SZ,
263 DAOS_PROP_CO_EC_PDA,
265 DAOS_PROP_CO_RP_PDA,
267 DAOS_PROP_CO_GLOBAL_VERSION,
268 DAOS_PROP_CO_MAX,
269};
270
276
280#define DAOS_PROP_CO_NUM (DAOS_PROP_CO_MAX - DAOS_PROP_CO_MIN - 1)
281
282typedef uint16_t daos_cont_layout_t;
283
285enum {
286 DAOS_PROP_CO_LAYOUT_UNKNOWN,
287 DAOS_PROP_CO_LAYOUT_UNKOWN = DAOS_PROP_CO_LAYOUT_UNKNOWN,
288 DAOS_PROP_CO_LAYOUT_POSIX,
289 DAOS_PROP_CO_LAYOUT_HDF5,
290 DAOS_PROP_CO_LAYOUT_PYTHON,
291 DAOS_PROP_CO_LAYOUT_SPARK,
292 DAOS_PROP_CO_LAYOUT_DATABASE,
293 DAOS_PROP_CO_LAYOUT_ROOT,
294 DAOS_PROP_CO_LAYOUT_SEISMIC,
295 DAOS_PROP_CO_LAYOUT_METEO,
296 DAOS_PROP_CO_LAYOUT_MAX
297};
298
300enum {
301 DAOS_PROP_CO_CSUM_OFF,
302 DAOS_PROP_CO_CSUM_CRC16,
303 DAOS_PROP_CO_CSUM_CRC32,
304 DAOS_PROP_CO_CSUM_CRC64,
305 DAOS_PROP_CO_CSUM_SHA1,
306 DAOS_PROP_CO_CSUM_SHA256,
307 DAOS_PROP_CO_CSUM_SHA512,
308 DAOS_PROP_CO_CSUM_ADLER32
309};
310
312enum {
313 DAOS_PROP_CO_CSUM_SV_OFF,
314 DAOS_PROP_CO_CSUM_SV_ON
315};
316
318enum {
319 DAOS_PROP_CO_DEDUP_OFF,
320 DAOS_PROP_CO_DEDUP_MEMCMP,
321 DAOS_PROP_CO_DEDUP_HASH
322};
323
325enum {
326 DAOS_PROP_CO_COMPRESS_OFF,
327 DAOS_PROP_CO_COMPRESS_LZ4,
328 DAOS_PROP_CO_COMPRESS_DEFLATE,
329 DAOS_PROP_CO_COMPRESS_DEFLATE1,
330 DAOS_PROP_CO_COMPRESS_DEFLATE2,
331 DAOS_PROP_CO_COMPRESS_DEFLATE3,
332 DAOS_PROP_CO_COMPRESS_DEFLATE4,
333};
334
336enum {
337 DAOS_PROP_CO_ENCRYPT_OFF,
338 DAOS_PROP_CO_ENCRYPT_AES_XTS128,
339 DAOS_PROP_CO_ENCRYPT_AES_XTS256,
340 DAOS_PROP_CO_ENCRYPT_AES_CBC128,
341 DAOS_PROP_CO_ENCRYPT_AES_CBC192,
342 DAOS_PROP_CO_ENCRYPT_AES_CBC256,
343 DAOS_PROP_CO_ENCRYPT_AES_GCM128,
344 DAOS_PROP_CO_ENCRYPT_AES_GCM256
345};
346
348enum {
349 DAOS_PROP_CO_REDUN_RF0,
350 DAOS_PROP_CO_REDUN_RF1,
351 DAOS_PROP_CO_REDUN_RF2,
352 DAOS_PROP_CO_REDUN_RF3,
353 DAOS_PROP_CO_REDUN_RF4,
354};
355
360enum {
361 DAOS_PROP_CO_REDUN_MIN = 1,
362 DAOS_PROP_CO_REDUN_RANK = 1,
363 DAOS_PROP_CO_REDUN_MAX = 254,
364};
365
367enum {
368 /* in healthy status, data protection work as expected */
369 DAOS_PROP_CO_HEALTHY,
370 /* in unclean status, data protection possibly cannot work.
371 * typical scenario - cascading failed targets exceed the container
372 * redundancy factor, that possibly cause lost data cannot be detected
373 * or rebuilt.
374 */
375 DAOS_PROP_CO_UNCLEAN,
376};
377
379#define DAOS_PROP_CO_CLEAR (0x1)
383 uint16_t dcs_status;
385 uint16_t dcs_flags;
387 uint32_t dcs_pm_ver;
388};
389
390#define DAOS_PROP_CO_STATUS_VAL(status, flag, pm_ver) \
391 ((((uint64_t)(flag)) << 48) | \
392 (((uint64_t)(status) & 0xFFFF) << 32) | \
393 ((uint64_t)(pm_ver)))
394
395static inline uint64_t
396daos_prop_co_status_2_val(struct daos_co_status *co_status)
397{
398 return DAOS_PROP_CO_STATUS_VAL(co_status->dcs_status,
399 co_status->dcs_flags,
400 co_status->dcs_pm_ver);
401}
402
403static inline void
404daos_prop_val_2_co_status(uint64_t val, struct daos_co_status *co_status)
405{
406 co_status->dcs_flags = (uint16_t)(val >> 48);
407 co_status->dcs_status = (uint16_t)((val >> 32) & 0xFFFF);
408 co_status->dcs_pm_ver = (uint32_t)(val & 0xFFFFFFFF);
409}
410
411enum {
412 DAOS_PROP_ENTRY_NOT_SET = (1 << 0),
413};
414
418 uint32_t dpe_type;
420 uint16_t dpe_flags;
422 uint16_t dpe_reserv;
427 union {
428 uint64_t dpe_val;
429 d_string_t dpe_str;
430 void *dpe_val_ptr;
431 };
432};
433
435#define DAOS_PROP_ENTRIES_MAX_NR (128)
436
438#define DAOS_PROP_LABEL_MAX_LEN (127)
440#define DAOS_PROP_MAX_LABEL_BUF_LEN (DAOS_PROP_LABEL_MAX_LEN + 1)
441
453static inline bool
454daos_label_is_valid(const char *label)
455{
456 int len;
457 int i;
458 bool maybe_uuid = false;
459
461 if (label == NULL)
462 return false;
463
465 len = strnlen(label, DAOS_PROP_LABEL_MAX_LEN + 1);
466 if (len == 0 || len > DAOS_PROP_LABEL_MAX_LEN)
467 return false;
468
470 for (i = 0; i < len; i++) {
471 char c = label[i];
472
473 if (isalnum(c) || c == '.' || c == '_' || c == ':')
474 continue;
475 if (c == '-') {
476 maybe_uuid = true;
477 continue;
478 }
479
480 return false;
481 }
482
484 if (maybe_uuid && strnlen(label, 36) == 36) {
485 bool is_uuid = true;
486 const char *p;
487
489 for (i = 0, p = label; i < 36; i++, p++) {
490 if (i == 8 || i == 13 || i == 18 || i == 23) {
491 if (*p != '-') {
492 is_uuid = false;
493 break;
494 }
495 continue;
496 }
497 if (!isxdigit(*p)) {
498 is_uuid = false;
499 break;
500 }
501 }
502
503 if (is_uuid)
504 return false;
505 }
506
507 return true;
508}
509
511#define DAOS_PROP_POLICYSTR_MAX_LEN (127)
512
513/* default policy string */
514#define DAOS_PROP_POLICYSTR_DEFAULT "type=io_size"
515
517typedef struct {
519 uint32_t dpp_nr;
521 uint32_t dpp_reserv;
525
534daos_prop_alloc(uint32_t entries_nr);
535
541void
542daos_prop_fini(daos_prop_t *prop);
543
549void
550daos_prop_free(daos_prop_t *prop);
551
565int
566daos_prop_from_str(const char *str, daos_size_t len, daos_prop_t **prop);
567
577daos_prop_merge(daos_prop_t *old_prop, daos_prop_t *new_prop);
578
587struct daos_prop_entry *
588daos_prop_entry_get(daos_prop_t *prop, uint32_t type);
589
602int
603daos_prop_set_str(daos_prop_t *prop, uint32_t type, const char *str, daos_size_t len);
604
613int
614daos_prop_entry_set_str(struct daos_prop_entry *entry, const char *str, daos_size_t len);
615
628int
629daos_prop_set_ptr(daos_prop_t *prop, uint32_t type, const void *ptr, daos_size_t size);
630
639int
640daos_prop_entry_set_ptr(struct daos_prop_entry *entry, const void *ptr, daos_size_t size);
641
653int
654daos_prop_entry_dup_ptr(struct daos_prop_entry *entry_dst,
655 struct daos_prop_entry *entry_src, size_t len);
656
666int
667daos_prop_entry_cmp_acl(struct daos_prop_entry *entry1,
668 struct daos_prop_entry *entry2);
669
680int
681daos_prop_entry_dup_co_roots(struct daos_prop_entry *dst,
682 struct daos_prop_entry *src);
683
692bool
693daos_prop_has_str(struct daos_prop_entry *entry);
694
703bool
704daos_prop_has_ptr(struct daos_prop_entry *entry);
705
714static inline bool
715daos_prop_is_set(struct daos_prop_entry *entry)
716{
717 if (entry->dpe_flags & DAOS_PROP_ENTRY_NOT_SET)
718 return false;
719
720 return true;
721}
722
723#if defined(__cplusplus)
724}
725#endif
726
727#endif /* __DAOS_PROP_H__ */
uint16_t dcs_status
Definition daos_prop.h:383
uint16_t dcs_flags
Definition daos_prop.h:385
uint32_t dcs_pm_ver
Definition daos_prop.h:387
daos_obj_id_t cr_oids[4]
Definition daos_prop.h:274
Definition daos_prop.h:416
uint16_t dpe_flags
Definition daos_prop.h:420
uint16_t dpe_reserv
Definition daos_prop.h:422
uint32_t dpe_type
Definition daos_prop.h:418
struct daos_prop_entry * dpp_entries
Definition daos_prop.h:523
uint32_t dpp_reserv
Definition daos_prop.h:521
uint32_t dpp_nr
Definition daos_prop.h:519