28 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_DTM0 48 .sd_name =
"inprogress",
52 .sd_name =
"executed",
56 .sd_name =
"executed-all",
170 "A DTX in INPROGRESS+ state must be a part of the log.");
199 const struct m0_fop *pa_fop)
202 M0_PRE(pa_idx < dtx->dd_txd.dtd_ps.dtp_nr);
224 const struct m0_fid *pa_sfid)
237 M0_PRE(pa_idx < dtx->dd_txd.dtd_ps.dtp_nr);
248 "User service is not in the conf cache.");
252 return M0_ERR_INFO(-ENOENT,
"Process the service belongs to " 253 "is not a part of the conf cache.");
263 " the remote process that runs" 264 " this user service.");
270 pa->
p_fid = rdtms_fid;
349 "ignoring P msg for " DTID0_F ".",
429 "Non-executed PAs should not exist " 477 const struct m0_fid *pa_sfid)
485 const struct m0_fop *pa_fop)
528 #undef M0_TRACE_SUBSYSTEM static int dtx_close(struct m0_dtm0_dtx *dtx)
M0_INTERNAL int m0_dtm0_tx_desc_init(struct m0_dtm0_tx_desc *td, uint32_t nr_pa)
struct m0_dtm0_dtx * tx_dtx
M0_INTERNAL void m0_sm_conf_init(struct m0_sm_conf *conf)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
struct m0_dtx dd_ancient_dtx
M0_INTERNAL int m0_dtx0_open(struct m0_dtx *dtx, uint32_t nr)
static struct m0_dtm0_dtx * dtx_alloc(struct m0_dtm0_service *svc, struct m0_sm_group *grp)
struct m0_dtm0_dtx dlr_dtx
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
static struct m0_sm_state_descr dtx_states[]
M0_INTERNAL void m0_dtm0_dtx_pmsg_post(struct m0_dtm0_dtx *dtx, struct m0_fop *fop)
static struct io_request req
static struct m0_sm_group * grp
M0_INTERNAL struct m0_conf_obj * m0_conf_cache_lookup(const struct m0_conf_cache *cache, const struct m0_fid *id)
#define M0_LOG(level,...)
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_dtx0_done(struct m0_dtx *dtx)
static void dtx_fini(struct m0_dtm0_dtx *dtx)
static struct m0_sm_trans_descr dtx_trans[]
M0_INTERNAL int m0_dtx0_txd_copy(const struct m0_dtx *dtx, struct m0_dtm0_tx_desc *dst)
M0_INTERNAL int m0_dtx0_close(struct m0_dtx *dtx)
void * m0_fop_data(const struct m0_fop *fop)
M0_INTERNAL void m0_dtx0_prepare(struct m0_dtx *dtx)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL bool m0_sm_addb2_counter_init(struct m0_sm *sm)
M0_INTERNAL void m0_be_dtm0_volatile_log_update(struct m0_be_dtm0_log *log, struct m0_dtm0_log_rec *rec)
struct m0_sm_group rm_sm_grp
struct m0_be_dtm0_log * dos_log
M0_INTERNAL void m0_dtm0_tx_desc_apply(struct m0_dtm0_tx_desc *tgt, const struct m0_dtm0_tx_desc *upd)
struct m0_dtm0_tid dtd_id
static struct m0_sm_ast ast[NR]
#define M0_RC_INFO(rc, fmt,...)
M0_INTERNAL struct m0_dtx * m0_dtx0_alloc(struct m0_dtm0_service *svc, struct m0_sm_group *grp)
#define M0_ERR_INFO(rc, fmt,...)
M0_INTERNAL void m0_dtm0_dtx_domain_init(void)
static int dtx_fid_assign(struct m0_dtm0_dtx *dtx, uint32_t pa_idx, const struct m0_fid *pa_sfid)
M0_INTERNAL struct m0_confc * m0_reqh2confc(struct m0_reqh *reqh)
#define M0_AMB(obj, ptr, field)
M0_INTERNAL int m0_be_dtm0_volatile_log_insert(struct m0_be_dtm0_log *log, struct m0_dtm0_log_rec *rec)
static int dtx_log_insert(struct m0_dtm0_dtx *dtx)
M0_INTERNAL void m0_dtm0_clk_src_now(struct m0_dtm0_clk_src *cs, struct m0_dtm0_ts *now)
static void dtx_exec_all_ast_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
void m0_sm_state_set(struct m0_sm *mach, int state)
struct m0_conf_obj * m0_conf_obj_grandparent(const struct m0_conf_obj *obj)
struct m0_fid rs_service_fid
M0_INTERNAL bool m0_dtm0_tid__invariant(const struct m0_dtm0_tid *tid)
struct m0_dtm0_clk_src dos_clk_src
struct m0_conf_cache cc_cache
M0_INTERNAL void m0_dtm0_dtx_domain_fini(void)
static void dtx_fop_assign(struct m0_dtm0_dtx *dtx, uint32_t pa_idx, const struct m0_fop *pa_fop)
struct m0_fop * m0_fop_get(struct m0_fop *fop)
struct m0_sm_group * sm_grp
static void dtx_executed(struct m0_dtm0_dtx *dtx, uint32_t idx)
#define M0_CONF_CAST(ptr, type)
static void dtx_init(struct m0_dtm0_dtx *dtx, struct m0_dtm0_service *svc, struct m0_sm_group *grp)
static int dtx_open(struct m0_dtm0_dtx *dtx, uint32_t nr_pa)
const struct m0_fop * dd_fop
M0_INTERNAL int m0_conf_process2service_get(struct m0_confc *confc, const struct m0_fid *process_fid, enum m0_conf_service_type stype, struct m0_fid *sfid)
M0_INTERNAL int m0_dtm0_tx_desc_copy(const struct m0_dtm0_tx_desc *src, struct m0_dtm0_tx_desc *dst)
struct m0_conf_obj pc_obj
struct m0_dtm0_tx_pa * dtp_pa
#define dtds_forall(__txd, __exp)
M0_INTERNAL void m0_dtx0_executed(struct m0_dtx *dtx, uint32_t pa_idx)
static void dtx_done(struct m0_dtm0_dtx *dtx)
M0_INTERNAL int m0_dtx0_fid_assign(struct m0_dtx *dtx, uint32_t pa_idx, const struct m0_fid *pa_sfid)
M0_INTERNAL void m0_dtx0_fop_assign(struct m0_dtx *dtx, uint32_t pa_idx, const struct m0_fop *pa_fop)
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
struct m0_dtm0_service * dd_dtms
#define M0_ALLOC_PTR(ptr)
struct m0_dtm0_dtx * p_dtx
static struct m0_net_test_service svc
M0_INTERNAL enum m0_dtm0_dtx_state m0_dtx0_sm_state(const struct m0_dtx *dtx)
void m0_fop_put_lock(struct m0_fop *fop)
static struct m0_fop * fop
M0_INTERNAL bool m0_dtm0_tx_desc_state_eq(const struct m0_dtm0_tx_desc *txd, enum m0_dtm0_tx_pa_state state)
struct m0_dtm0_tx_participants dtd_ps
struct m0_rconfc rh_rconfc
#define M0_ASSERT_INFO(cond, fmt,...)
struct m0_sm_conf m0_dtx_sm_conf
struct m0_sm_ast dd_exec_all_ast
M0_INTERNAL void m0_sm_conf_fini(struct m0_sm_conf *conf)
M0_INTERNAL bool m0_sm_conf_is_initialized(const struct m0_sm_conf *conf)
M0_INTERNAL bool m0_fid_is_valid(const struct m0_fid *fid)
struct m0_rpc_machine * ri_rmachine
struct m0_rpc_item f_item
static void dtx_prepare(struct m0_dtm0_dtx *dtx)
M0_INTERNAL void m0_dtm0_tx_desc_fini(struct m0_dtm0_tx_desc *td)
struct m0_reqh_service dos_generic
static void dtx_log_update(struct m0_dtm0_dtx *dtx)
M0_INTERNAL bool m0_sm_group_is_locked(const struct m0_sm_group *grp)
static void dtx_persistent_ast_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
struct m0_dtm0_tx_desc dd_txd
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)