23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_RPC 47 #define CONN_STATE(conn) ((conn)->c_sm.sm_state) 48 #define CONN_RC(conn) ((conn)->c_sm.sm_rc) 49 #define CONN_CHAN(conn) ((conn)->c_sm.sm_chan) 51 #define SESS_STATE(sess) ((sess)->s_sm.sm_state) 52 #define SESS_RC(sess) ((sess)->s_sm.sm_rc) 53 #define SESS_CHAN(sess) ((sess)->s_sm.sm_chan) 150 if (
rc == -ECANCELED)
172 if (
rc == -ECANCELED)
230 "Failure in establishing session" },
258 "Failure in sess termination" },
494 .sd_name =
"Initialised",
500 .sd_name =
"Conn failure",
505 .sd_name =
"Session failure",
510 .sd_name =
"Connection terminating",
515 .sd_name =
"Connection establishing",
522 .sd_name =
"Session establishing",
534 .
scf_name =
"rpc_link connection state machine",
543 .sd_name =
"Initialised",
548 .sd_name =
"Conn failure",
553 .sd_name =
"Session failure",
558 .sd_name =
"Waiting for session is idle",
564 .sd_name =
"Session termination",
571 .sd_name =
"Connection termination",
583 .
scf_name =
"rpc_link disconnection state machine",
609 uint64_t max_rpcs_in_flight)
683 if (wait_clink !=
NULL)
703 cb(rlink, abs_timeout, &
clink);
760 #undef M0_TRACE_SUBSYSTEM const struct m0_fom_ops rpc_link_conn_fom_ops
static int rpc_link_sess_terminate(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
M0_INTERNAL const char * m0_rpc_link_end_point(const struct m0_rpc_link *rlink)
M0_INTERNAL void m0_chan_broadcast_lock(struct m0_chan *chan)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
static const struct m0_fom_type_ops rpc_link_disc_fom_type_ops
M0_INTERNAL int m0_rpc_link_init(struct m0_rpc_link *rlink, struct m0_rpc_machine *mach, struct m0_fid *svc_fid, const char *ep, uint64_t max_rpcs_in_flight)
#define M0_LOG(level,...)
static struct rpc_link_state_transition rpc_link_conn_states[]
int(* fto_create)(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
M0_INTERNAL void m0_fom_callback_init(struct m0_fom_callback *cb)
struct m0_rpc_conn rlk_conn
static void rpc_link_conn_fom_wait_on(struct m0_fom *fom, struct m0_rpc_link *rlink)
static size_t rpc_link_fom_locality(const struct m0_fom *fom)
static struct m0_addb2_mach * mach
M0_INTERNAL void m0_rpc_link_fini(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_fom_wait_on(struct m0_fom *fom, struct m0_chan *chan, struct m0_fom_callback *cb)
M0_INTERNAL void m0_rpc_session_fini(struct m0_rpc_session *session)
#define container_of(ptr, type, member)
static int rpc_link_call_sync(struct m0_rpc_link *rlink, m0_time_t abs_timeout, rpc_link_cb_t cb)
M0_INTERNAL int m0_rpc_conn_terminate(struct m0_rpc_conn *conn, m0_time_t abs_timeout)
static void rpc_link_disc_fom_fini(struct m0_fom *fom)
static int rpc_link_conn_terminated(struct m0_rpc_link *rlink)
M0_INTERNAL const char * m0_rpc_conn_addr(const struct m0_rpc_conn *conn)
M0_INTERNAL void m0_rpc_link_module_fini(void)
static int rpc_link_disc_init(struct m0_rpc_link *rlink)
void m0_fom_init(struct m0_fom *fom, const struct m0_fom_type *fom_type, const struct m0_fom_ops *ops, struct m0_fop *fop, struct m0_fop *reply, struct m0_reqh *reqh)
struct m0_rpc_machine * c_rpc_machine
M0_INTERNAL void m0_rpc_machine_unlock(struct m0_rpc_machine *machine)
static int rpc_link_sess_establish(struct m0_rpc_link *rlink)
const char * rlst_st_desc
static struct m0_sm_state_descr rpc_link_conn_state_descr[]
M0_INTERNAL int m0_rpc_session_init(struct m0_rpc_session *session, struct m0_rpc_conn *conn)
void m0_fom_fini(struct m0_fom *fom)
M0_INTERNAL int m0_rpc_session_terminate(struct m0_rpc_session *session, m0_time_t abs_timeout)
static int rpc_link_sess_established(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
static struct rpc_link_state_transition rpc_link_disc_states[]
M0_INTERNAL void m0_rpc_session_cancel(struct m0_rpc_session *session)
M0_INTERNAL void m0_fom_type_init(struct m0_fom_type *type, uint64_t id, const struct m0_fom_type_ops *ops, const struct m0_reqh_service_type *svc_type, const struct m0_sm_conf *sm)
M0_INTERNAL bool m0_rpc_link_is_connected(const struct m0_rpc_link *rlink)
static int rpc_link_conn_failure(struct m0_rpc_link *rlink)
M0_INTERNAL int session_state(const struct m0_rpc_session *session)
M0_INTERNAL void m0_rpc_link_reset(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
struct m0_mutex rlk_wait_mutex
static const struct m0_fom_type_ops rpc_link_conn_fom_type_ops
struct m0_fom_type rpc_link_conn_fom_type
M0_INTERNAL void m0_rpc_session_reset(struct m0_rpc_session *session)
static void rpc_link_fom_queue(struct m0_rpc_link *rlink, struct m0_clink *wait_clink, const struct m0_fom_type *fom_type, const struct m0_fom_ops *fom_ops)
static int rpc_link_conn_fom_tick(struct m0_fom *fom)
static struct m0_clink clink[RDWR_REQUEST_MAX]
int(* rlst_state_function)(struct m0_rpc_link *)
M0_INTERNAL int m0_rpc_link_disconnect_sync(struct m0_rpc_link *rlink, m0_time_t abs_timeout)
static struct m0_sm_state_descr rpc_link_disc_state_descr[]
M0_INTERNAL int m0_rpc_link_connect_sync(struct m0_rpc_link *rlink, m0_time_t abs_timeout)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
void m0_net_end_point_put(struct m0_net_end_point *ep)
const struct m0_fom_ops rpc_link_disc_fom_ops
M0_INTERNAL void m0_rpc_link_connect_async(struct m0_rpc_link *rlink, m0_time_t abs_timeout, struct m0_clink *wait_clink)
M0_INTERNAL void m0_rpc_machine_lock(struct m0_rpc_machine *machine)
struct m0_fom_type rpc_link_disc_fom_type
static void rpc_link_fom_fini_common(struct m0_fom *fom, bool connected)
static const struct m0_sm_conf rpc_link_conn_sm_conf
M0_INTERNAL int m0_rpc_conn_establish(struct m0_rpc_conn *conn, m0_time_t abs_timeout)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
M0_INTERNAL void m0_fom_callback_cancel(struct m0_fom_callback *cb)
void(* rpc_link_cb_t)(struct m0_rpc_link *, m0_time_t, struct m0_clink *)
static int rpc_link_disc_fom_tick(struct m0_fom *fom)
M0_INTERNAL int m0_rpc_session_establish(struct m0_rpc_session *session, m0_time_t abs_timeout)
M0_INTERNAL void m0_fom_queue(struct m0_fom *fom)
struct m0_fom_callback rlk_fomcb
M0_INTERNAL int m0_rpc_link_module_init(void)
void(* fo_fini)(struct m0_fom *fom)
M0_INTERNAL int m0_rpc_conn_init(struct m0_rpc_conn *conn, struct m0_fid *svc_fid, struct m0_net_end_point *ep, struct m0_rpc_machine *machine, uint64_t max_rpcs_in_flight)
static const struct m0_sm_conf rpc_link_disc_sm_conf
static void fom_type(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
struct m0_rpc_session rlk_sess
M0_INTERNAL void m0_rpc_conn_ha_unsubscribe(struct m0_rpc_conn *conn)
void m0_fom_phase_set(struct m0_fom *fom, int phase)
static int rpc_link_sess_failure(struct m0_rpc_link *rlink)
static void rpc_link_sess_cleanup(struct m0_rpc_link *rlink)
static void rpc_link_sess_fom_wait_on(struct m0_fom *fom, struct m0_rpc_link *rlink)
M0_INTERNAL void m0_rpc_link_disconnect_async(struct m0_rpc_link *rlink, m0_time_t abs_timeout, struct m0_clink *wait_clink)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
static int rpc_link_conn_terminate(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_rpc_conn_reset(struct m0_rpc_conn *conn)
M0_INTERNAL int m0_net_end_point_create(struct m0_net_end_point **epp, struct m0_net_transfer_mc *tm, const char *addr)
M0_INTERNAL void m0_rpc_conn_fini(struct m0_rpc_conn *conn)
static int conn_state(const struct m0_rpc_conn *conn)
static void rpc_link_conn_fom_fini(struct m0_fom *fom)
M0_INTERNAL const char * m0_fom_phase_name(const struct m0_fom *fom, int phase)
static int rpc_link_conn_establish(struct m0_rpc_link *rlink)
struct m0_reqh_service_type m0_rpc_service_type