34 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CLIENT 50 m0_op_layout_bob_init(ol);
51 m0_ast_rc_bob_init(&ol->
ol_ar);
52 m0_op_common_bob_init(&ol->
ol_oc);
98 obj.ob_entity.en_id =
id;
127 .olo_copy_to_app =
NULL,
128 .olo_copy_from_app =
NULL,
153 en_grp = &
ent.en_sm_group;
240 obj.ob_entity.en_id =
id;
299 obj.ob_entity.en_id =
id;
300 obj.ob_attr.oa_layout_id = 12;
301 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
305 pdlayout =
M0_AMB(pdlayout, orig_layout, pl_layout);
307 pdlayout->
pl_lid =
obj.ob_attr.oa_layout_id;
312 cap_layout =
M0_AMB(cap_layout, layout, cl_layout);
342 obj.ob_entity.en_id =
id;
343 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
352 m0_op_obj_bob_init(&oci->
oci_oo);
353 m0_op_composite_io_bob_init(oci);
362 for (
i = 0;
i < nr_subobjs;
i++) {
367 sio_ext_tlist_init(&sio_arr[
i].si_exts);
373 sio_ext_tlink_init_at(sio_ext, &sio_arr[
i].si_exts);
376 m0_fi_enable(
"m0__obj_attr_get_sync",
"obj_attr_get_ok");
420 en_grp = &
ent.en_sm_group;
425 m0_fi_enable(
"composite_io_op_cb_launch",
"no_subobj_ops_launched");
434 m0_fi_disable(
"composite_io_op_cb_launch",
"no_subobj_ops_launched");
465 m0_fi_enable(
"composite_io_op_cb_free",
"skip_free_sub_io_op");
467 m0_fi_disable(
"composite_io_op_cb_free",
"skip_free_sub_io_op");
490 m0_fi_enable(
"composite_io_op_cb_fini",
"skip_fini_sub_io_op");
492 m0_fi_disable(
"composite_io_op_cb_fini",
"skip_fini_sub_io_op");
514 obj.ob_entity.en_id =
id;
515 obj.ob_attr.oa_layout_id = 12;
516 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
520 clayout =
M0_AMB(clayout, layout, ccl_layout);
523 m0_fi_enable(
"m0__obj_attr_get_sync",
"obj_attr_get_ok");
528 found->ccr_priority == 0);
553 obj.ob_entity.en_id =
id;
554 obj.ob_attr.oa_layout_id = 12;
555 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
559 clayout =
M0_AMB(clayout, layout, ccl_layout);
562 m0_fi_enable(
"m0__obj_attr_get_sync",
"obj_attr_get_ok");
565 obj.ob_entity.en_id.u_lo++;
576 &
obj.ob_entity.en_id));
603 obj.ob_entity.en_id =
id;
610 oo =
M0_AMB(oo, oc, oo_oc);
615 for (
i = 0;
i < nr_subobjs;
i++) {
620 sio_ext_tlist_init(&sio_arr[
i].si_exts);
626 sio_ext_tlink_init_at(sio_ext, &sio_arr[
i].si_exts);
629 m0_fi_enable(
"m0__obj_attr_get_sync",
"obj_attr_get_ok");
668 m0_fi_enable(
"m0__obj_attr_get_sync",
"obj_attr_get_ok");
669 for (
i = 0;
i < nr_layers;
i++) {
671 obj.ob_entity.en_id =
id;
672 obj.ob_attr.oa_layout_id = 12;
673 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
678 for (j = 0; j <
i; j++)
692 int nr_io_segs,
struct io_seg *io_segs,
706 for (
i = 0;
i < nr_io_segs;
i++) {
716 for (
i = 0;
i < nr_io_segs;
i++) {
722 &ext, &
data, sio_arr, nr_subobjs);
754 clayout =
M0_AMB(clayout, layout, ccl_layout);
772 ext->
ce_id = layer_ids[
i];
776 cext_tlink_init_at_tail(ext, ext_list);
784 for (
i = 0;
i < nr_io_segs;
i++) {
795 for (
i = 0;
i < nr_sios;
i++) {
801 sio_ext = sio_ext_tlist_head(&sio->
si_exts);
825 struct m0_tl *ext_list;
852 for (
i = 0;
i < nr_kvp;
i++) {
855 key.cek_off =
i * 4096;
869 for (
i = 0;
i < nr_kvp;
i++) {
879 for (
i = 0;
i < nr_kvp;
i++) {
883 key.cek_layer_id.u_lo++;
884 key.cek_off =
i * 4096;
926 {
"layout_op_invariant",
930 {
"layout_op_cb_launch",
932 {
"layout_op_cb_free",
934 {
"layout_op_cb_fini",
938 {
"m0_client_layout_alloc",
940 {
"m0_layout_capture",
942 {
"composite_io_op_cb_launch",
944 {
"composite_io_op_cb_free",
946 {
"composite_io_op_cb_fini",
948 {
"m0_composite_layer_add",
950 {
"m0_composite_layer_del",
952 {
"composite_sub_io_ops_build",
954 {
"composite_io_divide",
956 {
"composite_layer_idx_extents_extract",
958 {
"composite_layer_idx_scan",
964 #undef M0_TRACE_SUBSYSTEM const struct m0_client_layout_ops layout_composite_ops
#define M0_ALLOC_ARR(arr, nr)
static void ut_m0_layout_op(void)
static void ut_composite_layer_idx_extents_extract(void)
void m0_entity_fini(struct m0_entity *entity)
M0_INTERNAL int m0_op_get(struct m0_op **op, size_t size)
static int composite_io_divide(struct m0_client_composite_layout *clayout, enum m0_obj_opcode opcode, struct m0_indexvec *ext, struct m0_bufvec *data, struct composite_sub_io **out, int *out_nr_sios)
static void ut_layout_op_init(void)
M0_INTERNAL int m0_indexvec_alloc(struct m0_indexvec *ivec, uint32_t len)
static void layout_op_cb_free(struct m0_op_common *oc)
struct m0_sm_group * ol_sm_grp
static struct m0_client * dummy_instance
M0_INTERNAL bool m0_uint128_eq(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
static struct m0_op_layout * ut_m0_op_layout_alloc()
static void ut_composite_io_op_cb_free(void)
struct m0_sm_group * oo_sm_grp
static void ut_layout_op_invariant(void)
M0_INTERNAL void m0_indexvec_free(struct m0_indexvec *ivec)
M0_INTERNAL int ut_suite_layout_fini(void)
static const struct m0_client_layout_ops layout_pdclust_ops
static void composite_io_op_cb_fini(struct m0_op_common *oc)
M0_INTERNAL int ut_m0_client_init(struct m0_client **instance)
static int op_layout_dummy_launch(struct m0_op_layout *ol)
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
static const struct m0_client_layout_ops layout_capture_ops
const struct m0_uint128 M0_ID_APP
static void composite_sub_io_destroy(struct composite_sub_io *sio_arr, int nr_subobjs)
int(* olo_launch)(struct m0_op_layout *ol)
static uint32_t unit_size
M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
static void ut_layout_op_cb_launch(void)
enum m0_client_layout_type ml_type
static void ut_composite_layer_idx_scan(void)
static void ut_composite_io_divide(void)
static void ut_m0_composite_layer_add(void)
M0_INTERNAL void ut_realm_entity_setup(struct m0_realm *realm, struct m0_entity *ent, struct m0_client *cinst)
static void ut_composite_io_op_cb_launch(void)
struct m0_client_layout * m0_client_layout_alloc(enum m0_client_layout_type type)
struct m0_uint128 cl_orig_id
#define M0_AMB(obj, ptr, field)
#define m0_tl_teardown(name, head, obj)
M0_INTERNAL void m0_fi_disable(const char *fp_func, const char *fp_tag)
static void m0_fi_enable(const char *func, const char *tag)
static void layout_op_cb_launch(struct m0_op_common *oc)
void m0_client_layout_free(struct m0_client_layout *layout)
M0_INTERNAL void ut_m0_client_fini(struct m0_client **instance)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
int m0_composite_layer_idx_key_to_buf(struct m0_composite_layer_idx_key *key, void **out_kbuf, m0_bcount_t *out_klen)
static int composite_sub_io_ops_build(struct m0_obj *cobj, struct m0_op *cop, struct composite_sub_io *sio_arr, int nr_subobjs)
static void ut_m0_layout_capture(void)
static void ut_layout_op_cb_fini(void)
struct m0_op_common ol_oc
void * m0_alloc(size_t size)
static void ut_m0_composite_layer_del(void)
void m0_composite_layer_del(struct m0_client_layout *layout, struct m0_uint128 subobj_id)
static struct m0_op_composite_io * ut_composite_io_op_alloc()
static void ut_m0_op_layout_free(struct m0_op_layout *ol)
static void ut_m0_client_layout_alloc(void)
struct m0_op_common oo_oc
static int composite_layer_idx_extents_extract(struct m0_composite_layer *layer, struct m0_bufvec *keys, struct m0_bufvec *vals, int *rcs, struct m0_tl *ext_list, struct m0_composite_layer_idx_key *max_key)
static void ut_composite_io_op_free(struct m0_op_composite_io *oci)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
struct m0_uint128 ccr_subobj
struct m0_sm_group op_sm_group
static struct m0_op_layout_ops op_layout_dummy_ops
struct m0_ut_suite ut_suite_layout
struct m0_op ** oci_sub_ops
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
#define M0_ALLOC_PTR(ptr)
static struct m0_realm realm
struct m0_entity * op_entity
int m0_composite_layer_add(struct m0_client_layout *layout, struct m0_obj *sub_obj, int priority)
static void layout_op_cb_fini(struct m0_op_common *oc)
static void ut_layout_op_cb_free(void)
static void ut_composite_sub_io_ops_build(void)
const struct m0_op_layout_ops * ol_ops
int m0_client_layout_op(struct m0_obj *obj, enum m0_entity_opcode opcode, struct m0_client_layout *layout, struct m0_op **op)
M0_INTERNAL void m0_sm_move(struct m0_sm *mach, int32_t rc, int state)
const struct m0_client_layout_ops * ml_ops
static struct m0 instance
static void ut_composite_io_op_cb_fini(void)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static int composite_layout_add_layers(struct m0_client_layout *layout, int nr_layers, struct m0_uint128 *layer_ids)
static void m0_fi_enable_once(const char *func, const char *tag)
static int do_composite_io_divide(struct m0_client_composite_layout *clayout, int nr_io_segs, struct io_seg *io_segs, struct composite_sub_io **sio_arr, int *nr_subobjs)
int m0_client_layout_capture(struct m0_client_layout *layout, struct m0_obj *obj, struct m0_client_layout **out)
M0_INTERNAL int ut_suite_layout_init(void)
static void composite_io_op_cb_launch(struct m0_op_common *oc)
static int layout_op_init(struct m0_obj *obj, struct m0_client_layout *layout, enum m0_entity_opcode opcode, struct m0_op *op)
static bool layout_op_invariant(struct m0_op_layout *ol)
#define m0_tl_find(name, var, head,...)
#define m0_tl_for(name, head, obj)
int m0_composite_layer_idx_val_to_buf(struct m0_composite_layer_idx_val *val, void **out_vbuf, m0_bcount_t *out_vlen)
struct m0_sm_conf m0_op_conf
M0_INTERNAL int m0_bufvec_empty_alloc(struct m0_bufvec *bufvec, uint32_t num_segs)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)
static void composite_io_op_cb_free(struct m0_op_common *oc)