Motr  M0
req.c File Reference
#include "lib/trace.h"
#include "lib/memory.h"
#include "lib/buf.h"
#include "lib/vec.h"
#include "lib/finject.h"
#include "conf/schema.h"
#include "sm/sm.h"
#include "pool/pool.h"
#include "cas/client.h"
#include "cas/cas.h"
#include "dix/layout.h"
#include "dix/meta.h"
#include "dix/req.h"
#include "dix/client.h"
#include "dix/client_internal.h"
#include "dix/fid_convert.h"
#include "dix/dix_addb.h"
#include "dtm0/dtx.h"
Include dependency graph for req.c:

Go to the source code of this file.

Macros

#define M0_TRACE_SUBSYSTEM   M0_TRACE_SUBSYS_DIX
 

Functions

 M0_TL_DESCR_DEFINE (cas_rop, "cas record operations", M0_INTERNAL, struct m0_dix_cas_rop, crp_linkage, crp_magix, M0_DIX_ROP_MAGIC, M0_DIX_ROP_HEAD_MAGIC)
 
 M0_TL_DEFINE (cas_rop, M0_INTERNAL, struct m0_dix_cas_rop)
 
static void dix_idxop (struct m0_dix_req *req)
 
static void dix_rop (struct m0_dix_req *req)
 
static void dix_rop_units_set (struct m0_dix_req *req)
 
static int dix_cas_rops_alloc (struct m0_dix_req *req)
 
static int dix_cas_rops_fill (struct m0_dix_req *req)
 
static int dix_cas_rops_send (struct m0_dix_req *req)
 
static void dix_ldescr_resolve (struct m0_dix_req *req)
 
static void dix_discovery_completed (struct m0_dix_req *req)
 
static int dix_idxop_reqs_send (struct m0_dix_req *req)
 
static void dix_discovery (struct m0_dix_req *req)
 
static int dix_id_layouts_nr (struct m0_dix_req *req)
 
static int dix_unknown_layouts_nr (struct m0_dix_req *req)
 
static uint32_t dix_rop_tgt_iter_max (struct m0_dix_req *req, struct m0_dix_rec_op *rec_op)
 
static bool dix_req_is_idxop (const struct m0_dix_req *req)
 
static struct m0_sm_groupdix_req_smgrp (const struct m0_dix_req *req)
 
static void dix_to_cas_map (const struct m0_dix_req *dreq, const struct m0_cas_req *creq)
 
M0_INTERNAL void m0_dix_req_lock (struct m0_dix_req *req)
 
M0_INTERNAL void m0_dix_req_unlock (struct m0_dix_req *req)
 
M0_INTERNAL bool m0_dix_req_is_locked (const struct m0_dix_req *req)
 
M0_INTERNAL int m0_dix_req_wait (struct m0_dix_req *req, uint64_t states, m0_time_t to)
 
static void dix_req_init (struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_sm_group *grp, bool meta)
 
M0_INTERNAL void m0_dix_mreq_init (struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_sm_group *grp)
 
M0_INTERNAL void m0_dix_req_init (struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_sm_group *grp)
 
static enum m0_dix_req_state dix_req_state (const struct m0_dix_req *req)
 
static void dix_req_state_set (struct m0_dix_req *req, enum m0_dix_req_state state)
 
static void dix_req_failure (struct m0_dix_req *req, int32_t rc)
 
static int dix_type_layouts_nr (struct m0_dix_req *req, enum dix_layout_type type)
 
static int dix_resolved_nr (struct m0_dix_req *req)
 
static void dix_to_mdix_map (const struct m0_dix_req *req, const struct m0_dix_meta_req *mreq)
 
static void dix_layout_find_ast_cb (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
static bool dix_layout_find_clink_cb (struct m0_clink *cl)
 
static void dix_layout_find (struct m0_dix_req *req)
 
static int dix_indices_copy (struct m0_dix **dst_indices, const struct m0_dix *src_indices, uint32_t indices_nr)
 
static int dix_req_indices_copy (struct m0_dix_req *req, const struct m0_dix *indices, uint32_t indices_nr)
 
static struct m0_pool_versiondix_pver_find (const struct m0_dix_req *req, const struct m0_fid *pver_fid)
 
static void dix_idxop_ctx_free (struct m0_dix_idxop_ctx *idxop)
 
static void dix_idxop_item_rc_update (struct m0_dix_item *ditem, struct m0_dix_req *req, const struct m0_dix_cas_req *creq)
 
static void dix_idxop_completed (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
static bool dix_idxop_clink_cb (struct m0_clink *cl)
 
static int dix_idxop_pver_analyse (struct m0_dix_idxop_req *idxop_req, struct m0_dix_req *dreq, uint64_t *creqs_nr)
 
static int dix_idxop_req_send (struct m0_dix_idxop_req *idxop_req, struct m0_dix_req *dreq, uint64_t *reqs_acc)
 
static void dix_idxop_meta_update_ast_cb (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
static bool dix_idxop_meta_update_clink_cb (struct m0_clink *cl)
 
static int dix_idxop_meta_update (struct m0_dix_req *req)
 
static bool dix_item_should_be_sent (const struct m0_dix_req *req, uint32_t i)
 
M0_INTERNAL int m0_dix_create (struct m0_dix_req *req, const struct m0_dix *indices, uint32_t indices_nr, struct m0_dtx *dtx, uint32_t flags)
 
static void addb2_add_dix_req_attrs (const struct m0_dix_req *req)
 
static void dix_discovery_ast (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
void m0_dix_req_cancel (struct m0_dix_req *dreq)
 
M0_INTERNAL int m0_dix_delete (struct m0_dix_req *req, const struct m0_dix *indices, uint64_t indices_nr, struct m0_dtx *dtx, uint32_t flags)
 
M0_INTERNAL int m0_dix_cctgs_lookup (struct m0_dix_req *req, const struct m0_dix *indices, uint32_t indices_nr)
 
static int dix_rec_op_init (struct m0_dix_rec_op *rec_op, struct m0_dix_req *req, struct m0_dix_cli *cli, struct m0_pool_version *pver, struct m0_dix *dix, struct m0_buf *key, uint64_t user_item)
 
static void dix_rec_op_fini (struct m0_dix_rec_op *rec_op)
 
static int dix_cas_rop_alloc (struct m0_dix_req *req, uint32_t sdev, struct m0_dix_cas_rop **cas_rop)
 
static void dix_cas_rop_fini (struct m0_dix_cas_rop *cas_rop)
 
static void dix_cas_rops_fini (struct m0_tl *cas_rops)
 
static int dix_rop_ctx_init (struct m0_dix_req *req, struct m0_dix_rop_ctx *rop, const struct m0_bufvec *keys, uint64_t *indices)
 
static void dix_rop_ctx_fini (struct m0_dix_rop_ctx *rop)
 
static void dix__rop (struct m0_dix_req *req, const struct m0_bufvec *keys, uint64_t *indices)
 
static void dix_item_rc_update (struct m0_dix_req *req, struct m0_cas_req *creq, uint64_t key_idx, struct m0_dix_item *ditem)
 
static bool dix_item_get_has_failed (struct m0_dix_item *item)
 
static bool dix_item_parity_unit_is_last (const struct m0_dix_req *req, const struct m0_dix_item *item)
 
static void dix_get_req_resend (struct m0_dix_req *req)
 
static bool dix_del_phase2_is_needed (const struct m0_dix_rec_op *rec_op)
 
static int dix_rop_del_phase2_rop (struct m0_dix_req *req, struct m0_dix_rop_ctx **out)
 
static void dix_rop_del_phase2 (struct m0_dix_req *req)
 
static void dix_cas_rop_rc_update (struct m0_dix_cas_rop *cas_rop, int rc)
 
static void dix_rop_completed (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
static void dix_rop_one_completed (struct m0_dix_cas_rop *crop)
 
static bool dix_cas_rop_clink_cb (struct m0_clink *cl)
 
static void dix_rop_tgt_iter_begin (const struct m0_dix_req *req, struct m0_dix_rec_op *rec_op)
 
static void dix_rop_tgt_iter_next (const struct m0_dix_req *req, struct m0_dix_rec_op *rec_op, uint64_t *target, bool *is_spare)
 
static int dix_spare_slot_find (struct m0_poolmach_state *pm_state, uint64_t failed_tgt, uint32_t *spare_slot)
 
static struct m0_pool_versiondix_rec_op_pver (struct m0_dix_rec_op *rec_op)
 
static uint32_t dix_rop_max_failures (struct m0_dix_rop_ctx *rop)
 
static uint32_t dix_rec_op_spare_offset (struct m0_dix_rec_op *rec_op)
 
static int dix__spare_target (struct m0_dix_rec_op *rec_op, const struct m0_dix_pg_unit *failed_unit, uint32_t *spare_slot, struct m0_dix_pg_unit **spare_unit, bool with_data)
 
static int dix_spare_target (struct m0_dix_rec_op *rec_op, const struct m0_dix_pg_unit *failed_unit, uint32_t *spare_slot, struct m0_dix_pg_unit **spare_unit)
 
static int dix_spare_target_with_data (struct m0_dix_rec_op *rec_op, const struct m0_dix_pg_unit *failed_unit, uint32_t *spare_slot, struct m0_dix_pg_unit **spare_unit)
 
static void dix_online_unit_choose (struct m0_dix_req *req, struct m0_dix_rec_op *rec_op)
 
static void dix_pg_unit_pd_assign (struct m0_dix_pg_unit *pgu, struct m0_pooldev *pd)
 
static void dix_rop_failed_unit_tgt (struct m0_dix_req *req, struct m0_dix_rec_op *rec_op, uint64_t unit)
 
static void dix_rop_failures_analyse (struct m0_dix_req *req)
 
static bool dix_pg_unit_skip (struct m0_dix_req *req, struct m0_dix_pg_unit *unit)
 
M0_INTERNAL int m0_dix_put (struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys, const struct m0_bufvec *vals, struct m0_dtx *dtx, uint32_t flags)
 
M0_INTERNAL int m0_dix_get (struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys)
 
M0_INTERNAL void m0_dix_get_rep (const struct m0_dix_req *req, uint64_t idx, struct m0_dix_get_reply *rep)
 
M0_INTERNAL int m0_dix_del (struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *keys, struct m0_dtx *dtx, uint32_t flags)
 
M0_INTERNAL int m0_dix_next (struct m0_dix_req *req, const struct m0_dix *index, const struct m0_bufvec *start_keys, const uint32_t *recs_nr, uint32_t flags)
 
M0_INTERNAL void m0_dix_next_rep (const struct m0_dix_req *req, uint64_t key_idx, uint64_t val_idx, struct m0_dix_next_reply *rep)
 
M0_INTERNAL uint32_t m0_dix_next_rep_nr (const struct m0_dix_req *req, uint64_t key_idx)
 
M0_INTERNAL int m0_dix_item_rc (const struct m0_dix_req *req, uint64_t idx)
 
M0_INTERNAL int m0_dix_generic_rc (const struct m0_dix_req *req)
 
M0_INTERNAL int m0_dix_req_rc (const struct m0_dix_req *req)
 
M0_INTERNAL uint64_t m0_dix_req_nr (const struct m0_dix_req *req)
 
M0_INTERNAL void m0_dix_get_rep_mlock (struct m0_dix_req *req, uint64_t idx)
 
M0_INTERNAL void m0_dix_next_rep_mlock (struct m0_dix_req *req, uint32_t key_idx, uint32_t val_idx)
 
static void dix_item_fini (const struct m0_dix_req *req, struct m0_dix_item *item)
 
M0_INTERNAL void m0_dix_req_fini (struct m0_dix_req *req)
 
M0_INTERNAL void m0_dix_req_fini_lock (struct m0_dix_req *req)
 
M0_INTERNAL int m0_dix_copy (struct m0_dix *dst, const struct m0_dix *src)
 
M0_INTERNAL int m0_dix_desc_set (struct m0_dix *dix, const struct m0_dix_ldesc *desc)
 
M0_INTERNAL void m0_dix_fini (struct m0_dix *dix)
 
M0_INTERNAL int m0_dix_sm_conf_init (void)
 
M0_INTERNAL void m0_dix_sm_conf_fini (void)
 

Variables

static struct m0_sm_state_descr dix_req_states []
 
static struct m0_sm_trans_descr dix_req_trans []
 
struct m0_sm_conf dix_req_sm_conf