23 #undef M0_TRACE_SUBSYSTEM 24 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_RPC 81 .sd_name =
"Initialised",
88 .sd_name =
"Establishing",
104 .sd_name =
"Terminating",
109 .sd_name =
"Terminated",
121 .sd_name =
"Finalised",
149 return s->s_conn->c_rpc_machine;
239 rpc_session_tlink_init(
session);
287 rpc_session_tlink_fini(
session);
322 if (rpc_session_tlink_is_in(
session))
405 return M0_RC(-EINVAL);
514 "Invalid session state: expected %s, got %s",
528 session_id =
reply->rser_session_id;
578 return M0_ERR_INFO(-ECANCELED,
"Cancelled session");
581 return M0_ERR_INFO(-EINVAL,
"Session state %s is not valid",
585 return M0_ERR_INFO(-ENOMEDIUM,
"Session connection is NULL");
588 "Session connection rpc machine is NULL");
739 sender_id =
args->rst_sender_id;
740 session_id =
args->rst_session_id;
891 M0_INTERNAL
const char *
895 #define S_CASE(x) case x: return #x 911 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL m0_bcount_t m0_rpc_session_get_max_item_size(const struct m0_rpc_session *session)
M0_INTERNAL void m0_rpc_item_xid_list_fini(struct m0_rpc_session *session)
M0_INTERNAL void m0_sm_fail(struct m0_sm *mach, int fail_state, int32_t rc)
M0_INTERNAL void m0_rpc_session_fini_locked(struct m0_rpc_session *session)
M0_INTERNAL int m0_rpc_session_terminate_sync(struct m0_rpc_session *session, m0_time_t abs_timeout)
M0_INTERNAL void m0_rpc_item_xid_list_init(struct m0_rpc_session *session)
const m0_time_t M0_TIME_NEVER
M0_INTERNAL int m0_rpc_session_create(struct m0_rpc_session *session, struct m0_rpc_conn *conn, m0_time_t abs_timeout)
M0_INTERNAL void m0_fop_init(struct m0_fop *fop, struct m0_fop_type *fopt, void *data, void(*fop_release)(struct m0_ref *))
M0_INTERNAL void m0_rpc_item_replied_invoke(struct m0_rpc_item *req)
void m0_rpc_item_put(struct m0_rpc_item *item)
#define M0_LOG(level,...)
M0_EXTERN struct m0_rpc_session * m0_rpc_conn_session0(const struct m0_rpc_conn *conn)
void m0_rpc_item_get(struct m0_rpc_item *item)
int m0_rpc_session_destroy(struct m0_rpc_session *session, m0_time_t abs_timeout)
M0_INTERNAL void m0_rpc_item_cache_fini(struct m0_rpc_item_cache *ic)
M0_INTERNAL void m0_rpc_conn_remove_session(struct m0_rpc_session *session)
void * m0_fop_data(const struct m0_fop *fop)
static void session_idle_x_busy(struct m0_rpc_session *session)
M0_INTERNAL void m0_rpc_session_fini(struct m0_rpc_session *session)
static struct m0_rpc_session session
#define container_of(ptr, type, member)
static const struct m0_rpc_item_ops session_terminate_item_ops
static struct m0_rpc_item * item
M0_INTERNAL m0_bcount_t m0_rpc_item_onwire_footer_size
M0_INTERNAL bool m0_rpc_session_is_cancelled(struct m0_rpc_session *session)
M0_INTERNAL bool m0_rpc_item_is_request(const struct m0_rpc_item *item)
M0_TL_DEFINE(rpc_session, M0_INTERNAL, struct m0_rpc_session)
M0_INTERNAL bool m0_rpc_session_invariant(const struct m0_rpc_session *session)
struct m0_sm_group rm_sm_grp
M0_INTERNAL int m0_sm_timedwait(struct m0_sm *mach, uint64_t states, m0_time_t deadline)
static void __session_fini(struct m0_rpc_session *session)
M0_INTERNAL m0_bcount_t m0_rpc_item_onwire_header_size
#define M0_ASSERT_EX(cond)
M0_INTERNAL struct m0_rpc_session * m0_rpc_session_search(const struct m0_rpc_conn *conn, uint64_t session_id)
M0_INTERNAL void m0_rpc_conn_add_session(struct m0_rpc_conn *conn, struct m0_rpc_session *session)
struct m0_tl s_pending_cache
M0_INTERNAL bool m0_rpc_machine_is_locked(const struct m0_rpc_machine *machine)
M0_INTERNAL m0_bcount_t m0_rpc_session_get_max_item_payload_size(const struct m0_rpc_session *session)
struct m0_rpc_machine * c_rpc_machine
#define M0_ERR_INFO(rc, fmt,...)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL void m0_rpc_machine_unlock(struct m0_rpc_machine *machine)
M0_INTERNAL void session_state_set(struct m0_rpc_session *session, int state)
M0_INTERNAL int m0_rpc_session_init(struct m0_rpc_session *session, struct m0_rpc_conn *conn)
void(* idle)(const struct m0_addb2_mach *mach)
M0_INTERNAL int m0_rpc__fop_post(struct m0_fop *fop, struct m0_rpc_session *session, const struct m0_rpc_item_ops *ops, m0_time_t abs_timeout)
M0_INTERNAL void m0_rpc_session_hold_busy(struct m0_rpc_session *session)
M0_INTERNAL int m0_rpc_session_terminate(struct m0_rpc_session *session, m0_time_t abs_timeout)
static const struct m0_rpc_item_ops session_establish_item_ops
void m0_sm_state_set(struct m0_sm *mach, int state)
M0_INTERNAL void m0_rpc_session_cancel(struct m0_rpc_session *session)
uint32_t rm_min_recv_size
M0_INTERNAL void m0_rpc_session_item_failed(struct m0_rpc_item *item)
static void session_failed(struct m0_rpc_session *session, int32_t error)
M0_INTERNAL int session_state(const struct m0_rpc_session *session)
struct m0_rpc_item * ri_reply
M0_INTERNAL int m0_rpc_session_timedwait(struct m0_rpc_session *session, uint64_t states, const m0_time_t abs_timeout)
M0_INTERNAL struct m0_rpc_machine * session_machine(const struct m0_rpc_session *s)
M0_INTERNAL void m0_rpc_session_reset(struct m0_rpc_session *session)
M0_INTERNAL int m0_fop_data_alloc(struct m0_fop *fop)
M0_INTERNAL void m0_fop_fini(struct m0_fop *fop)
struct m0_rpc_session * sec_session
struct m0_rpc_machine machine
M0_INTERNAL void m0_rpc_item_pending_cache_fini(struct m0_rpc_session *session)
static struct fdmi_ctx ctx
M0_INTERNAL void m0_rpc_item_pending_cache_init(struct m0_rpc_session *session)
void(* rio_replied)(struct m0_rpc_item *item)
struct m0_rpc_item_cache s_reply_cache
M0_INTERNAL int m0_rpc_session_validate(struct m0_rpc_session *session)
int32_t m0_rpc_item_error(const struct m0_rpc_item *item)
M0_INTERNAL void m0_rpc_session_quiesce(struct m0_rpc_session *session)
struct m0_fop_type m0_rpc_fop_session_establish_fopt
#define M0_FI_ENABLED(tag)
M0_INTERNAL void m0_rpc_session_establish_reply_received(struct m0_rpc_item *item)
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
M0_INTERNAL void m0_rpc_machine_lock(struct m0_rpc_machine *machine)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL int m0_rpc_item_cache_init(struct m0_rpc_item_cache *ic, struct m0_mutex *lock)
M0_INTERNAL int m0_rpc_session_init_locked(struct m0_rpc_session *session, struct m0_rpc_conn *conn)
struct m0_rpc_session * ri_session
M0_TL_DESCR_DEFINE(rpc_session, "rpc-sessions", M0_INTERNAL, struct m0_rpc_session, s_link, s_magic, M0_RPC_SESSION_MAGIC, M0_RPC_SESSION_HEAD_MAGIC)
M0_INTERNAL m0_bcount_t m0_rpc_packet_onwire_footer_size(void)
void m0_rpc_item_cancel_nolock(struct m0_rpc_item *item)
void m0_fop_put_lock(struct m0_fop *fop)
static struct m0_fop * fop
static void session_establish_fop_release(struct m0_ref *ref)
M0_INTERNAL int m0_rpc_session_establish(struct m0_rpc_session *session, m0_time_t abs_timeout)
struct m0_fop * m0_rpc_item_to_fop(const struct m0_rpc_item *item)
#define M0_ASSERT_INFO(cond, fmt,...)
struct m0_rpc_item_cache s_req_cache
M0_INTERNAL bool m0_rpc_session_is_idle(const struct m0_rpc_session *session)
M0_INTERNAL const char * m0_rpc_session_state_to_str(enum m0_rpc_session_state state)
static struct m0_sm_state_descr session_states[]
M0_INTERNAL void m0_rpc_session_terminate_reply_received(struct m0_rpc_item *item)
static const struct m0_sm_conf session_conf
M0_INTERNAL int m0_rpc_rcv_session_terminate(struct m0_rpc_session *session)
M0_INTERNAL int m0_rpc_session_establish_sync(struct m0_rpc_session *session, m0_time_t abs_timeout)
struct m0_fop_type m0_rpc_fop_session_terminate_fopt
static struct m0_dtm_oper_descr reply
#define m0_tl_for(name, head, obj)
static struct m0_addb2_source * s
void m0_fop_put(struct m0_fop *fop)
M0_INTERNAL m0_bcount_t m0_rpc_packet_onwire_header_size(void)
M0_INTERNAL void m0_rpc_session_release(struct m0_rpc_session *session)
static struct m0_sm_state_descr states[C_NR]
struct m0_rpc_conn * s_conn
static struct m0_rpc_conn * item2conn(const struct m0_rpc_item *item)
static int conn_state(const struct m0_rpc_conn *conn)
struct m0_fop * m0_fop_alloc(struct m0_fop_type *fopt, void *data, struct m0_rpc_machine *mach)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)