root/opal/mca/pmix/pmix4x/pmix/src/mca/gds/ds12/gds_ds20_file.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pmix_ds20_kv_size
  2. pmix_ds20_key_name_ptr
  3. pmix_ds20_key_name_len
  4. pmix_ds20_data_ptr
  5. pmix_ds20_data_size
  6. pmix_ds20_key_size
  7. pmix_ds20_ext_slot_size
  8. pmix_ds20_put_key
  9. pmix_ds20_is_invalid
  10. pmix_ds20_set_invalid
  11. pmix_ds20_is_ext_slot
  12. pmix_ds20_kname_match

   1 /*
   2  * Copyright (c) 2018      Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  *
   5  * $COPYRIGHT$
   6  *
   7  * Additional copyrights may follow
   8  *
   9  * $HEADER$
  10  */
  11 
  12 #include <pmix_common.h>
  13 
  14 #include "src/include/pmix_globals.h"
  15 #include "src/mca/gds/base/base.h"
  16 
  17 #include "src/mca/common/dstore/dstore_file.h"
  18 #include "gds_ds12_file.h"
  19 
  20 #define ESH_KV_SIZE_V20(addr)                               \
  21 __pmix_attribute_extension__ ({                             \
  22     size_t sz;                                              \
  23     memcpy(&sz, addr, sizeof(size_t));                      \
  24     sz;                                                     \
  25 })
  26 
  27 #define ESH_KNAME_PTR_V20(addr)                             \
  28     ((char *)addr + sizeof(size_t))
  29 
  30 #define ESH_KNAME_LEN_V20(key)                              \
  31 __pmix_attribute_extension__ ({                             \
  32     size_t kname_len = strlen(key) + 1;                     \
  33     size_t len = (kname_len < ESH_MIN_KEY_LEN) ?            \
  34     ESH_MIN_KEY_LEN : kname_len;                            \
  35     len;                                                    \
  36 })
  37 
  38 #define ESH_DATA_PTR_V20(addr)                              \
  39 __pmix_attribute_extension__ ({                             \
  40     size_t kname_len =                                      \
  41         ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr));         \
  42     uint8_t *data_ptr = addr + sizeof(size_t) + kname_len;  \
  43     data_ptr;                                               \
  44 })
  45 
  46 #define ESH_DATA_SIZE_V20(addr, data_ptr)                   \
  47 __pmix_attribute_extension__ ({                             \
  48     size_t __sz = ESH_KV_SIZE_V20(addr);                      \
  49     size_t data_size = __sz - (data_ptr - addr);              \
  50     data_size;                                              \
  51 })
  52 
  53 #define ESH_KEY_SIZE_V20(key, size)                         \
  54     (sizeof(size_t) + ESH_KNAME_LEN_V20((char*)key) + size)
  55 
  56 /* in ext slot new offset will be stored in case if
  57  * new data were added for the same process during
  58  * next commit
  59  */
  60 #define EXT_SLOT_SIZE_V20()                                 \
  61     (ESH_KEY_SIZE_V20(ESH_REGION_EXTENSION, sizeof(size_t)))
  62 
  63 
  64 #define ESH_PUT_KEY_V20(addr, key, buffer, size)            \
  65 __pmix_attribute_extension__ ({                             \
  66     size_t sz = ESH_KEY_SIZE_V20(key, size);                \
  67     memcpy(addr, &sz, sizeof(size_t));                      \
  68     memset(addr + sizeof(size_t), 0,                        \
  69         ESH_KNAME_LEN_V20(key));                            \
  70     strncpy((char *)addr + sizeof(size_t),                  \
  71             key, ESH_KNAME_LEN_V20(key));                   \
  72     memcpy(addr + sizeof(size_t) + ESH_KNAME_LEN_V20(key),  \
  73             buffer, size);                                  \
  74 })
  75 
  76 static size_t pmix_ds20_kv_size(uint8_t *key)
  77 {
  78     size_t size;
  79 
  80     memcpy(&size, key, sizeof(size_t));
  81     return size;
  82 }
  83 
  84 static char* pmix_ds20_key_name_ptr(uint8_t *addr)
  85 {
  86     return ESH_KNAME_PTR_V20(addr);
  87 }
  88 
  89 static size_t pmix_ds20_key_name_len(char *key)
  90 {
  91     return ESH_KNAME_LEN_V20(key);
  92 }
  93 
  94 static uint8_t* pmix_ds20_data_ptr(uint8_t *addr)
  95 {
  96     return ESH_DATA_PTR_V20(addr);
  97 }
  98 
  99 static size_t pmix_ds20_data_size(uint8_t *addr, uint8_t* data_ptr)
 100 {
 101     return ESH_DATA_SIZE_V20(addr, data_ptr);
 102 }
 103 
 104 static size_t pmix_ds20_key_size(char *addr, size_t data_size)
 105 {
 106     return ESH_KEY_SIZE_V20(addr, data_size);
 107 }
 108 
 109 static size_t pmix_ds20_ext_slot_size(void)
 110 {
 111     return EXT_SLOT_SIZE_V20();
 112 }
 113 
 114 static int pmix_ds20_put_key(uint8_t *addr, char *key, void *buf, size_t size)
 115 {
 116     ESH_PUT_KEY_V20(addr, key, buf, size);
 117     return PMIX_SUCCESS;
 118 }
 119 
 120 static bool pmix_ds20_is_invalid(uint8_t *addr)
 121 {
 122     bool ret = (0 == strncmp(ESH_REGION_INVALIDATED, ESH_KNAME_PTR_V20(addr),
 123                             ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr))));
 124     return ret;
 125 }
 126 
 127 static void pmix_ds20_set_invalid(uint8_t *addr)
 128 {
 129     strncpy(ESH_KNAME_PTR_V20(addr), ESH_REGION_INVALIDATED,
 130             ESH_KNAME_LEN_V20(ESH_REGION_INVALIDATED));
 131 }
 132 
 133 static bool pmix_ds20_is_ext_slot(uint8_t *addr)
 134 {
 135     bool ret;
 136     ret = (0 == strncmp(ESH_REGION_EXTENSION, ESH_KNAME_PTR_V20(addr),
 137                         ESH_KNAME_LEN_V20(ESH_KNAME_PTR_V20(addr))));
 138     return ret;
 139 }
 140 
 141 static bool pmix_ds20_kname_match(uint8_t *addr, const char *key, size_t key_hash)
 142 {
 143     bool ret = 0;
 144 
 145     ret = (0 == strncmp(ESH_KNAME_PTR_V20(addr),
 146                         key, ESH_KNAME_LEN_V20(key)));
 147     return ret;
 148 }
 149 
 150 
 151 pmix_common_dstore_file_cbs_t pmix_ds20_file_module = {
 152     .name = "ds20",
 153     .kval_size = pmix_ds20_kv_size,
 154     .kname_ptr = pmix_ds20_key_name_ptr,
 155     .kname_len = pmix_ds20_key_name_len,
 156     .data_ptr = pmix_ds20_data_ptr,
 157     .data_size = pmix_ds20_data_size,
 158     .key_size = pmix_ds20_key_size,
 159     .ext_slot_size = pmix_ds20_ext_slot_size,
 160     .put_key = pmix_ds20_put_key,
 161     .is_invalid = pmix_ds20_is_invalid,
 162     .is_extslot = pmix_ds20_is_ext_slot,
 163     .set_invalid = pmix_ds20_set_invalid,
 164     .key_hash = NULL,
 165     .key_match = pmix_ds20_kname_match
 166 };

/* [<][>][^][v][top][bottom][index][help] */