23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 74 (
const char **)suffix, (
void**) &
buf) :
76 (
const char**) suffix, (
void**) &
buf);
147 const char *stob_create_cfg,
176 bool use_local_tx = tx ==
NULL;
189 tx_is_open =
rc == 0;
195 dom->bd_cfg.bc_zone_pcnt,
218 seg_tlink_del_fini(
seg);
247 seg_tlink_init_at_tail(
seg, &
dom->bd_segs);
287 "creation. seg_cfg->bsc_stob_key = %" PRIu64 ", rc = %d",
300 "creation. seg_cfg->bsc_stob_key = %" PRIu64 ", rc = %d",
366 const char *location_add =
"-log";
371 size = strlen(stob_domain_location);
372 size += strlen(location_add) + 1;
391 if (M0_IN(
rc, (-ENOENT, 0))) {
413 &seg0_cfg_buf, &cred);
463 return &
dom->bd_engine;
468 return &
dom->bd_seg0;
504 int nr = snprintf(str, str_size,
"%"PRIu64, seg_id);
560 bool use_local_tx = tx ==
NULL;
568 "seg0 should be added first");
580 tx_is_open =
rc == 0;
603 "just after creation. " 604 "seg_cfg->bsc_stob_key = %" PRIu64 ", rc = %d",
651 zt_tlink_init_at_tail(
type, &
dom->bd_0types);
659 zt_tlink_del_fini(
type);
670 const char *level_name;
678 zt_tlist_init(&
dom->bd_0types);
679 seg_tlist_init(&
dom->bd_segs);
686 if (
dom->bd_0types_allocated ==
NULL)
718 &
dom->bd_stob_domain));
725 &
dom->bd_stob_domain));
760 "seg_io_nr must be at least number of tx_groups");
850 seg_tlist_fini(&
dom->bd_segs);
851 zt_tlist_fini(&
dom->bd_0types);
854 for (
i = 0;
i <
dom->bd_cfg.bc_0types_nr; ++
i) {
856 &
dom->bd_0types_allocated[
i]);
871 lsc_stob_domain_location);
924 #define BE_DOMAIN_LEVEL(level) [level] = { \ 926 .ml_enter = be_domain_level_enter, \ 927 .ml_leave = be_domain_level_leave, \ 950 #undef BE_DOMAIN_LEVEL 970 uint32_t *tx_per_group)
1026 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL void m0_be_engine_fini(struct m0_be_engine *en)
struct m0_be_domain * bec_domain
static struct m0_addb2_philter p
M0_INTERNAL void m0_be_domain_seg_create_credit(struct m0_be_domain *dom, const struct m0_be_0type_seg_cfg *seg_cfg, struct m0_be_tx_credit *cred)
M0_INTERNAL int m0_be_seg_dict_begin(struct m0_be_seg *seg, const char *start_key, const char **this_key, void **this_rec)
M0_INTERNAL void m0_be_tx_group_discard(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
#define M0_ALLOC_ARR(arr, nr)
m0_bcount_t bisc_pos_start
M0_INTERNAL void m0_be_domain__0type_unregister(struct m0_be_domain *dom, struct m0_be_0type *type)
M0_INTERNAL void m0_be_tx_group_seg_io_credit(struct m0_be_tx_group_cfg *gr_cfg, struct m0_be_io_credit *io_cred)
#define M0_BUF_INIT_PTR_CONST(p)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL bool m0_be_domain_is_stob_log(struct m0_be_domain *dom, const struct m0_stob_id *stob_id)
M0_INTERNAL int m0_be_pd_init(struct m0_be_pd *pd, struct m0_be_pd_cfg *pd_cfg)
M0_INTERNAL struct m0_be_tx * m0_be_engine__tx_find(struct m0_be_engine *en, uint64_t id)
M0_INTERNAL void m0_stob_domain__dom_id_make(struct m0_fid *dom_id, uint8_t type_id, uint64_t dom_container, uint64_t dom_key)
void m0_be_0type_add_credit(struct m0_be_domain *dom, const struct m0_be_0type *zt, const char *suffix, const struct m0_buf *data, struct m0_be_tx_credit *credit)
int(* b0_init)(struct m0_be_domain *dom, const char *suffix, const struct m0_buf *data)
M0_INTERNAL void m0_be_seg_fini(struct m0_be_seg *seg)
M0_INTERNAL void m0_be_seg_dict_init(struct m0_be_seg *seg)
M0_INTERNAL int m0_stob_locate(struct m0_stob *stob)
struct m0_fid si_domain_fid
char * lsc_stob_domain_location
M0_INTERNAL int m0_be_domain_seg_create(struct m0_be_domain *dom, struct m0_be_tx *tx, const struct m0_be_0type_seg_cfg *seg_cfg, struct m0_be_seg **out)
M0_INTERNAL bool m0_be_domain_is_locked(const struct m0_be_domain *dom)
struct m0_be_0type_seg_cfg bc_seg0_cfg
static struct m0_sm_group * grp
#define M0_LOG(level,...)
M0_INTERNAL int m0_be_seg_dict_next(struct m0_be_seg *seg, const char *prefix, const char *start_key, const char **this_key, void **this_rec)
enum m0_trace_level level
M0_INTERNAL void m0_be_log_discard_flush(struct m0_be_log_discard *ld, struct m0_be_op *op)
void m0_be_0type_del_credit(struct m0_be_domain *dom, const struct m0_be_0type *zt, const char *suffix, struct m0_be_tx_credit *credit)
void(* ldsc_sync)(struct m0_be_log_discard *ld, struct m0_be_op *op, struct m0_be_log_discard_item *ldi)
M0_INTERNAL void m0_be_seg_init(struct m0_be_seg *seg, struct m0_stob *stob, struct m0_be_domain *dom, uint64_t seg_id)
static void be_0type_seg_fini(struct m0_be_domain *dom, const char *suffix, const struct m0_buf *data)
M0_INTERNAL void m0_be_tx_fini(struct m0_be_tx *tx)
M0_INTERNAL int m0_be_seg_create(struct m0_be_seg *seg, m0_bcount_t size, void *addr)
M0_INTERNAL bool m0_be_seg_contains_stob(struct m0_be_seg *seg, const struct m0_stob_id *stob_id)
static struct m0_uint128 prefix
#define M0_BE_OP_SYNC(op_obj, action)
M0_INTERNAL int m0_be_log_open(struct m0_be_log *log, struct m0_be_log_cfg *log_cfg)
#define BE_DOMAIN_LEVEL(level)
struct m0_mutex * bec_lock
M0_INTERNAL int m0_be_engine_start(struct m0_be_engine *en)
void m0_be_0type_unregister(struct m0_be_domain *dom, struct m0_be_0type *zt)
M0_TL_DESCR_DEFINE(zt, "m0_be_domain::bd_0types", M0_INTERNAL, struct m0_be_0type, b0_linkage, b0_magic, M0_BE_0TYPE_MAGIC, M0_BE_0TYPE_MAGIC)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg0_get(struct m0_be_domain *dom)
M0_INTERNAL int m0_be_reg__write(struct m0_be_reg *reg)
M0_INTERNAL m0_bindex_t m0_be_log_recovery_discarded(struct m0_be_log *log)
M0_INTERNAL void m0_be_domain__0type_register(struct m0_be_domain *dom, struct m0_be_0type *type)
static const struct m0_be_0type m0_be_0type_seg
M0_INTERNAL void m0_be_tx_prep(struct m0_be_tx *tx, const struct m0_be_tx_credit *credit)
M0_INTERNAL struct m0 * m0_get(void)
uint32_t ldsc_items_pending_max
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg_by_addr(struct m0_be_domain *dom, void *addr)
M0_INTERNAL bool m0_be_domain_is_stob_seg(struct m0_be_domain *dom, const struct m0_stob_id *stob_id)
#define container_of(ptr, type, member)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL int m0_be_log_discard_init(struct m0_be_log_discard *ld, struct m0_be_log_discard_cfg *ld_cfg)
M0_INTERNAL void m0_be_seg_close(struct m0_be_seg *seg)
M0_INTERNAL void m0_be_domain_seg_destroy_credit(struct m0_be_domain *dom, struct m0_be_seg *seg, struct m0_be_tx_credit *cred)
static const struct m0_modlev levels_be_domain[]
uint64_t lsc_stob_domain_key
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
static int be_domain_seg_destroy(struct m0_be_domain *dom, uint64_t seg_id)
M0_INTERNAL struct m0_be_engine * m0_be_domain_engine(struct m0_be_domain *dom)
struct m0_be_log_store_cfg lc_store_cfg
M0_INTERNAL int m0_stob_domain_create(const char *location, const char *str_cfg_init, uint64_t dom_key, const char *str_cfg_create, struct m0_stob_domain **out)
static void be_domain_seg_suffix_make(const struct m0_be_domain *dom, uint64_t seg_id, char *str, size_t str_size)
M0_INTERNAL void m0_be_engine_got_log_space_cb(struct m0_be_log *log)
struct m0_mutex * lc_lock
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL void m0_be_log_close(struct m0_be_log *log)
#define M0_AMB(obj, ptr, field)
#define m0_tl_teardown(name, head, obj)
const char * bsc_stob_create_cfg
static int be_domain_mkfs_seg0(struct m0_be_domain *dom, const struct m0_be_0type_seg_cfg *seg0_cfg)
uint64_t bc_stob_domain_key
static struct m0_stob * stob
void m0_be_0type_register(struct m0_be_domain *dom, struct m0_be_0type *zt)
static void be_domain_level_leave(struct m0_module *module)
static void be_domain_lock(struct m0_be_domain *dom)
struct m0_be_log_discard * bec_log_discard
const char * lsc_stob_domain_init_cfg
static int be_domain_seg_close(struct m0_be_domain *dom, struct m0_be_seg *seg, bool destroy)
M0_INTERNAL struct m0_be_allocator * m0_be_seg_allocator(struct m0_be_seg *seg)
uint64_t m0_strtou64(const char *str, char **endptr, int base)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg(const struct m0_be_domain *dom, const void *addr)
static struct m0_stob_domain * dom
M0_INTERNAL void m0_be_seg_dict_fini(struct m0_be_seg *seg)
M0_INTERNAL void m0_stob_id_make(uint64_t container, uint64_t key, const struct m0_fid *dom_id, struct m0_stob_id *stob_id)
M0_INTERNAL void m0_module_setup(struct m0_module *module, const char *name, const struct m0_modlev *level, int level_nr, struct m0 *instance)
M0_INTERNAL int m0_be_tx_open_sync(struct m0_be_tx *tx)
M0_INTERNAL struct m0_be_log * m0_be_domain_log(struct m0_be_domain *dom)
m0_be_log_got_space_cb_t lc_got_space_cb
struct m0_be_io_sched_cfg bpdc_sched
void * m0_alloc(size_t size)
M0_INTERNAL int m0_be_log_create(struct m0_be_log *log, struct m0_be_log_cfg *log_cfg)
M0_INTERNAL void m0_be_domain_cleanup_by_location(const char *stob_domain_location)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_INTERNAL uint8_t m0_stob_type_id_by_name(const char *name)
M0_INTERNAL int m0_be_tx_exclusive_open_sync(struct m0_be_tx *tx)
M0_INTERNAL void m0_be_pd_sync(struct m0_be_pd *pd, m0_bindex_t pos, struct m0_stob **stobs, int nr, struct m0_be_op *op)
M0_INTERNAL bool m0_be_tx__is_exclusive(const struct m0_be_tx *tx)
struct m0_sm_group * lo_grp
const char * bc_stob_domain_cfg_init
static int be_domain_seg_create(struct m0_be_domain *dom, struct m0_be_tx *tx, struct m0_be_seg *seg, const struct m0_be_0type_seg_cfg *seg_cfg)
M0_INTERNAL bool m0_be_seg_contains(const struct m0_be_seg *seg, const void *addr)
M0_INTERNAL void m0_be_log_discard_fini(struct m0_be_log_discard *ld)
M0_INTERNAL void m0_be_engine_tx_size_max(struct m0_be_engine *en, struct m0_be_tx_credit *cred, m0_bcount_t *payload_size)
static int be_domain_seg_open(struct m0_be_domain *dom, struct m0_be_seg *seg, uint64_t stob_key)
M0_INTERNAL void m0_be_engine__group_limits(struct m0_be_engine *en, uint32_t *group_nr, uint32_t *tx_per_group)
static void be_domain_ldsc_sync(struct m0_be_log_discard *ld, struct m0_be_op *op, struct m0_be_log_discard_item *ldi)
void(* ldsc_discard)(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
void(* b0_fini)(struct m0_be_domain *dom, const char *suffix, const struct m0_buf *data)
M0_INTERNAL void m0_stob_domain_fini(struct m0_stob_domain *dom)
int m0_be_0type_add(struct m0_be_0type *zt, struct m0_be_domain *dom, struct m0_be_tx *tx, const char *suffix, const struct m0_buf *data)
M0_INTERNAL void m0_be_domain__group_limits(struct m0_be_domain *dom, uint32_t *group_nr, uint32_t *tx_per_group)
M0_INTERNAL void m0_be_tx_init(struct m0_be_tx *tx, uint64_t tid, struct m0_be_domain *dom, struct m0_sm_group *sm_group, m0_be_tx_cb_t persistent, m0_be_tx_cb_t discarded, void(*filler)(struct m0_be_tx *tx, void *payload), void *datum)
M0_INTERNAL int m0_stob_create(struct m0_stob *stob, struct m0_dtx *dtx, const char *str_cfg)
M0_INTERNAL bool m0_be_domain_seg_is_valid(struct m0_be_domain *dom, struct m0_be_seg *seg)
struct m0_module bd_module
int init(struct workload *w)
M0_INTERNAL int m0_stob_domain_destroy_location(const char *location)
struct m0_be_pd_cfg bc_pd_cfg
static void be_domain_unlock(struct m0_be_domain *dom)
const struct m0_be_0type ** bc_0types
struct m0_be_log_discard_cfg bc_log_discard_cfg
M0_INTERNAL enum m0_stob_state m0_stob_state_get(struct m0_stob *stob)
M0_TL_DEFINE(zt, M0_INTERNAL, struct m0_be_0type)
M0_INTERNAL void m0_be_pd_fini(struct m0_be_pd *pd)
M0_INTERNAL void m0_be_engine_stop(struct m0_be_engine *en)
M0_INTERNAL struct m0_locality * m0_locality0_get(void)
M0_INTERNAL void m0_be_domain_module_setup(struct m0_be_domain *dom, const struct m0_be_domain_cfg *cfg)
M0_INTERNAL int m0_stob_domain_init(const char *location, const char *str_cfg_init, struct m0_stob_domain **out)
static const char * id_cut(const char *prefix, const char *key)
M0_INTERNAL void m0_be_seg_dict_create_credit(struct m0_be_seg *seg, struct m0_be_tx_credit *accum)
int m0_be_0type_del(struct m0_be_0type *zt, struct m0_be_domain *dom, struct m0_be_tx *tx, const char *suffix)
static int be_domain_stob_open(struct m0_be_domain *dom, uint64_t stob_key, const char *stob_create_cfg, struct m0_stob **out, bool create)
#define M0_ALLOC_PTR(ptr)
static int m0_be_segobj_opt_iterate(struct m0_be_seg *dict, const struct m0_be_0type *objtype, struct m0_buf *opt, char **suffix, bool begin)
struct m0_be_0type_seg_cfg * bc_seg_cfg
M0_INTERNAL void m0_be_domain_tx_size_max(struct m0_be_domain *dom, struct m0_be_tx_credit *cred, m0_bcount_t *payload_size)
uint64_t bc_seg0_stob_key
const char * bc_stob_domain_location
M0_INTERNAL int m0_be_seg_destroy(struct m0_be_seg *seg)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
struct m0_be_io_credit bpdc_io_credit
m0_be_log_full_cb_t lc_full_cb
M0_INTERNAL int m0_be_seg_open(struct m0_be_seg *seg)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
M0_INTERNAL int m0_be_engine_init(struct m0_be_engine *en, struct m0_be_domain *dom, struct m0_be_engine_cfg *en_cfg)
struct m0_be_log_cfg bc_log
M0_INTERNAL int m0_stob_find(const struct m0_stob_id *id, struct m0_stob **out)
static struct m0_be_seg * seg
static int _0types_visit(struct m0_be_domain *dom, bool init)
static int be_domain_level_enter(struct m0_module *module)
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL int m0_be_allocator_create(struct m0_be_allocator *a, struct m0_be_tx *tx, uint32_t *zone_percent, uint32_t zones_nr)
struct m0_be_tx_group_cfg bec_group_cfg
M0_INTERNAL void m0_be_engine_full_log_cb(struct m0_be_log *log)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg_first(const struct m0_be_domain *dom)
M0_INTERNAL void m0_be_seg_dict_create(struct m0_be_seg *seg, struct m0_be_tx *tx)
M0_INTERNAL int m0_be_allocator_init(struct m0_be_allocator *a, struct m0_be_seg *seg)
M0_INTERNAL void be_domain_log_cleanup(const char *stob_domain_location, struct m0_be_log_cfg *log_cfg, bool create)
M0_INTERNAL int m0_be_segobj_opt_next(struct m0_be_seg *dict, const struct m0_be_0type *objtype, struct m0_buf *opt, char **suffix)
const char * bc_stob_domain_cfg_create
#define M0_BE_REG_SEG(seg)
M0_INTERNAL struct m0_be_seg * m0_be_domain_seg_by_id(const struct m0_be_domain *dom, uint64_t id)
static int be_0type_seg_init(struct m0_be_domain *dom, const char *suffix, const struct m0_buf *data)
static int be_domain_seg_structs_create(struct m0_be_domain *dom, struct m0_be_tx *tx, struct m0_be_seg *seg)
M0_INTERNAL void m0_be_allocator_credit(struct m0_be_allocator *a, enum m0_be_allocator_op optype, m0_bcount_t size, unsigned shift, struct m0_be_tx_credit *accum)
M0_INTERNAL bool m0_be_log_contains_stob(struct m0_be_log *log, const struct m0_stob_id *stob_id)
#define m0_tl_find(name, var, head,...)
#define m0_tl_for(name, head, obj)
M0_INTERNAL int m0_be_domain_seg_destroy(struct m0_be_domain *dom, struct m0_be_tx *tx, struct m0_be_seg *seg)
static struct m0_addb2_source * s
M0_INTERNAL int m0_be_segobj_opt_begin(struct m0_be_seg *dict, const struct m0_be_0type *objtype, struct m0_buf *opt, char **suffix)
struct m0_be_engine_cfg bc_engine
M0_INTERNAL struct m0_be_tx * m0_be_domain_tx_find(struct m0_be_domain *dom, uint64_t id)
#define m0_tl_exists(name, var, head,...)
M0_INTERNAL void m0_stob_put(struct m0_stob *stob)
struct m0_stob_id lsc_stob_id
M0_INTERNAL void m0_be_allocator_fini(struct m0_be_allocator *a)
M0_INTERNAL void m0_be_tx_close_sync(struct m0_be_tx *tx)
#define M0_IMPOSSIBLE(fmt,...)