67 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_HA 121 .sd_name =
"M0_HA_LINK_STATE_INIT",
127 .sd_name =
"M0_HA_LINK_STATE_FINI",
132 .sd_name =
"M0_HA_LINK_STATE_START",
138 .sd_name =
"M0_HA_LINK_STATE_STOP",
143 .sd_name =
"M0_HA_LINK_STATE_IDLE",
154 .sd_name =
"M0_HA_LINK_STATE_RECV",
159 .sd_name =
"M0_HA_LINK_STATE_DELIVERY",
164 .sd_name =
"M0_HA_LINK_STATE_RPC_FAILED",
169 .sd_name =
"M0_HA_LINK_STATE_LINK_FAILED",
174 .sd_name =
"M0_HA_LINK_STATE_LINK_REUSED",
179 .sd_name =
"M0_HA_LINK_STATE_DISCONNECTING",
232 M0_ENTRY(
"hl=%p hlc_reqh=%p hlc_reqh_service=%p hlc_rpc_machine=%p",
306 dst->hlcc_rpc_endpoint =
ep;
342 "m0_ha_lq_tag_next(&hl->hln_q_out)=%" PRIu64 " " 343 "m0_ha_lq_tag_delivered(&hl->hln_q_out)=%"PRIu64,
350 "m0_ha_lq_tag_delivered(&hl->hln_q_out)=%" PRIu64 " " 351 "tags_out_new->hlt_confirmed=%"PRIu64,
356 "m0_ha_lq_tag_delivered(&hl->hln_q_out)=%" PRIu64 " " 357 "tags_out_new->hlt_delivered=%"PRIu64,
362 "m0_ha_lq_tag_next(&hl->hln_q_out)=%" PRIu64 " " 363 "tags_out_new->hlt_next=%"PRIu64,
368 "m0_ha_lq_tag_assign(&hl->hln_q_out)=%" PRIu64 " " 369 "tags_out_new->hlt_assign=%"PRIu64,
389 "hlp_id_connection="U128X_F, hl,
394 "hlcc_rpc_endpoint=%s hlcc_max_rpcs_in_flight=%"PRIu64,
448 M0_ENTRY(
"hl=%p hlcc_rpc_service_fid="FID_F" hlcc_rpc_endpoint=%s",
452 "hlcc_connect_timeout=%" PRIu64 " " 453 "hlcc_disconnect_timeout=%" PRIu64 " " 454 "hlcc_resend_interval=%" PRIu64 " " 455 "hlcc_nr_sent_max=%"PRIu64,
498 .hlp_id_remote = *id_dead,
499 .hlp_id_connection = *id_connection,
515 .hlp_id_remote = *id_alive,
516 .hlp_id_connection = *id_connection,
521 .hlt_assign = tags_remote->
hlt_next,
675 .hwc_check_disable =
false,
714 .hwc_check_disable =
false,
730 bool delivered_notified;
739 delivered_notified = wait_ctx->
hwc_tag <
742 if (delivered_notified) {
747 hl, !!delivered_notified);
759 .hwc_check_disable =
false,
769 uint64_t tag_out_assign;
770 uint64_t tag_in_assign;
779 if (!M0_IN(tag_out_assign, (1, 2)))
781 if (!M0_IN(tag_in_assign, (1, 2)))
784 hl, tag_out_assign, tag_in_assign);
811 uint64_t in_delivered)
818 hl, out_next, in_delivered);
829 while (delivered < in_delivered) {
842 uint64_t *in_delivered)
849 *out_next, *in_delivered);
861 "tag=%" PRIu64 " hed_type=%d",
871 uint64_t out_confirmed;
873 uint64_t tag_delivery;
877 tag_recv = in_next > 2 ? in_next :
880 tag_delivery = out_confirmed > 2 ? out_confirmed :
931 M0_ENTRY(
"fom=%p req_fop=%p rep_fop=%p ep=%s",
1043 if (
fom->fo_rep_fop ==
NULL) {
1083 #define _ST(name, flags, allowed) \ 1085 .sd_flags = flags, \ 1087 .sd_allowed = allowed \ 1128 .
scf_name =
"ha_link_outgoing_fom",
1288 "hl=%p ep=%s", old_rc, old_nr, hl,
1298 bool confirmed_updated =
false;
1302 confirmed_updated =
true;
1303 return confirmed_updated;
1308 bool cb_disconnecting;
1318 if (cb_disconnecting) {
1330 M0_LEAVE(
"hl=%p cb_disconnecting=%d cb_reused=%d",
1331 hl, !!cb_disconnecting, !!cb_reused);
1354 bool rpc_event_occurred;
1356 bool reconnect_wait;
1466 if (rpc_event_occurred) {
1510 if (rpc_event_occurred) {
1537 if (reply_rc != 0) {
1539 "reply_rc=%d", reply_rc);
1556 if (reconnect_wait) {
1571 "failed to start, rc=%d",
rc);
1722 buf[buf_len - 1] = 0;
1743 #undef M0_TRACE_SUBSYSTEM bool hln_rpc_event_occurred
struct m0_ha_lq_cfg hlq_q_cfg_out
M0_INTERNAL bool m0_ha_lq_try_unnext(struct m0_ha_lq *lq)
struct m0_sm_group hln_sm_group
M0_INTERNAL int m0_rpc_post(struct m0_rpc_item *item)
struct m0_ha_link_msg_fop hln_req_fop_data
M0_INTERNAL bool m0_ha_link_msg_is_delivered(struct m0_ha_link *hl, uint64_t tag)
m0_time_t ri_resend_interval
M0_INTERNAL const char * m0_rpc_link_end_point(const struct m0_rpc_link *rlink)
M0_INTERNAL void m0_ha_link_service_put(struct m0_reqh_service *service, struct m0_ha_link *hl)
M0_INTERNAL uint64_t m0_ha_lq_enqueue(struct m0_ha_lq *lq, const struct m0_ha_msg *msg)
struct m0_ha_lq_cfg hlq_q_cfg_in
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
static bool ha_link_rpc_wait_cb(struct m0_clink *clink)
M0_INTERNAL void m0_ha_lq_fini(struct m0_ha_lq *lq)
M0_INTERNAL void m0_chan_broadcast_lock(struct m0_chan *chan)
enum m0_rpc_item_priority ri_prio
M0_BASSERT(ARRAY_SIZE(ha_link_sm_states)==M0_HA_LINK_STATE_NR)
static bool ha_link_q_in_confirm_all(struct m0_ha_link *hl)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
static struct m0_addb2_mach * m
const struct m0_fom_type_ops m0_ha_link_outgoing_fom_type_ops
M0_INTERNAL struct m0_ha_msg * m0_ha_lq_next(struct m0_ha_lq *lq)
M0_INTERNAL void m0_ha_link_stop(struct m0_ha_link *hl, struct m0_clink *clink)
M0_INTERNAL void m0_ha_lq_tags_set(struct m0_ha_lq *lq, const struct m0_ha_link_tags *tags)
static void ha_link_msg_received(struct m0_ha_link *hl, const struct m0_ha_msg *msg)
M0_INTERNAL enum m0_ha_msg_type m0_ha_msg_type_get(const struct m0_ha_msg *msg)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
struct m0_chan hln_quiesce_chan
const char * hlcc_rpc_endpoint
M0_INTERNAL bool m0_semaphore_trydown(struct m0_semaphore *semaphore)
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
static void ha_link_outgoing_fom_wakeup(struct m0_ha_link *hl)
const struct m0_fom_type_ops m0_ha_link_incoming_fom_type_ops
m0_time_t hlcc_disconnect_timeout
int(* fo_tick)(struct m0_fom *fom)
M0_INTERNAL void m0_ha_link_wait_arrival(struct m0_ha_link *hl)
M0_INTERNAL bool m0_uint128_eq(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
static uint64_t tag(uint8_t code, uint64_t id)
static bool ha_link_backoff_check(struct m0_ha_link *hl, int rc, uint64_t *nr, int *old_rc, uint64_t *old_nr)
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)
M0_INTERNAL void m0_fop_init(struct m0_fop *fop, struct m0_fop_type *fopt, void *data, void(*fop_release)(struct m0_ref *))
#define M0_LOG(level,...)
M0_INTERNAL struct m0_ha_msg * m0_ha_link_recv(struct m0_ha_link *hl, uint64_t *tag)
static void ha_link_outgoing_fop_release(struct m0_ref *ref)
struct m0_clink hln_rpc_wait
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL uint64_t m0_ha_lq_tag_delivered(const struct m0_ha_lq *lq)
static void ha_link_outgoing_fom_fini(struct m0_fom *fom)
bool hln_fom_enable_wakeup
int(* fto_create)(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
static void ha_link_outgoing_fom_wakeup_ast(struct m0_sm_group *gr, struct m0_sm_ast *ast)
M0_INTERNAL const char * m0_ha_link_state_name(enum m0_ha_link_state state)
static bool m0_is_po2(uint64_t val)
M0_INTERNAL struct m0_ha_link * m0_ha_link_service_find_get(struct m0_reqh_service *service, const struct m0_uint128 *link_id, struct m0_uint128 *connection_id)
struct m0_clink hwc_clink
static bool ha_link_wait_confirmation_check(struct m0_clink *clink)
struct m0_ha_link * hli_hl
M0_INTERNAL uint64_t m0_ha_lq_dequeue(struct m0_ha_lq *lq)
void * m0_fop_data(const struct m0_fop *fop)
M0_INTERNAL void m0_rpc_link_fini(struct m0_rpc_link *rlink)
struct m0_uint128 hlp_id_remote
M0_INTERNAL void m0_ha_link_fops_fini(void)
#define container_of(ptr, type, member)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_ha_link_tags hlp_tags_local
M0_INTERNAL struct m0_chan * m0_ha_link_chan(struct m0_ha_link *hl)
M0_INTERNAL void m0_ha_lq_tags_get(const struct m0_ha_lq *lq, struct m0_ha_link_tags *tags)
static struct m0_rpc_item * item
M0_INTERNAL bool m0_ha_lq_has_next(const struct m0_ha_lq *lq)
M0_INTERNAL void m0_ha_link_flush(struct m0_ha_link *hl)
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
struct m0_reqh_service * hlc_reqh_service
static int ha_link_outgoing_fop_send(struct m0_ha_link *hl)
struct m0_ha_link_conn_cfg hln_conn_cfg
M0_INTERNAL void m0_ha_link_cb_reused(struct m0_ha_link *hl)
M0_INTERNAL void m0_ha_link_start(struct m0_ha_link *hl, struct m0_ha_link_conn_cfg *hl_conn_cfg)
struct m0_fom_type ft_fom_type
uint64_t hln_tag_broadcast_delivery
static bool ha_link_wait_delivery_check(struct m0_clink *clink)
M0_INTERNAL enum m0_ha_link_state m0_ha_link_state_get(struct m0_ha_link *hl)
uint64_t hln_tag_broadcast_recv
M0_INTERNAL void m0_ha_link_send(struct m0_ha_link *hl, const struct m0_ha_msg *msg, uint64_t *tag)
struct m0_rpc_link hln_rpc_link
struct m0_fop hln_outgoing_fop
struct m0_semaphore hwc_sem
M0_INTERNAL const char * m0_rpc_conn_addr(const struct m0_rpc_conn *conn)
static bool ha_link_wait_arrival_check(struct m0_clink *clink)
static struct m0_sm_ast ast[NR]
static struct ha_link_incoming_fom * ha_link_incoming_fom_container(struct m0_fom *fom)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
int32_t m0_rpc_item_generic_reply_rc(const struct m0_rpc_item *reply)
M0_INTERNAL bool m0_ha_lq_is_delivered(const struct m0_ha_lq *lq, uint64_t tag)
struct m0_locality * hln_fom_locality
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_locality fl_locality
M0_INTERNAL bool m0_fom_is_waiting(const struct m0_fom *fom)
struct m0_clink hln_quiesce_wait
static size_t ha_link_outgoing_fom_locality(const struct m0_fom *fom)
struct m0_fop_type * f_type
const struct m0_fom_ops ha_link_incoming_fom_ops
static struct nlx_ping_client_params * params
static size_t ha_link_incoming_fom_locality(const struct m0_fom *fom)
static void ha_link_msg_recv_or_delivery_broadcast(struct m0_ha_link *hl)
M0_INTERNAL void m0_ha_lq_mark_delivered(struct m0_ha_lq *lq, uint64_t tag)
M0_INTERNAL bool m0_sm_timer_is_armed(const struct m0_sm_timer *timer)
struct m0_rpc_machine * m0_fop_rpc_machine(const struct m0_fop *fop)
#define M0_ERR_INFO(rc, fmt,...)
struct m0_uint128 hlp_id_connection
return M0_ERR(-EOPNOTSUPP)
static void ha_link_outgoing_item_sent(struct m0_rpc_item *item)
struct m0_uint128 hlp_id_local
static int ha_link_outgoing_fom_create(struct m0_fop *fop, struct m0_fom **m, struct m0_reqh *reqh)
struct m0_fop_type m0_ha_link_msg_rep_fopt
struct m0_ha_link_cfg hln_cfg
bool hln_cb_disconnecting
M0_INTERNAL void m0_fom_ready(struct m0_fom *fom)
M0_INTERNAL void m0_ha_link_cb_disconnecting(struct m0_ha_link *hl)
struct m0_ha_lq hln_q_out
M0_INTERNAL int m0_ha_link_fops_init(void)
void m0_fom_fini(struct m0_fom *fom)
M0_INTERNAL void m0_ha_link_reconnect_cancel(struct m0_ha_link *hl)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
struct m0_semaphore hln_stop_cond
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL uint64_t m0_ha_lq_tag_confirmed(const struct m0_ha_lq *lq)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
uint64_t hlcc_nr_sent_max
static void ha_link_incoming_fom_fini(struct m0_fom *fom)
m0_time_t m0_time_now(void)
void m0_sm_state_set(struct m0_sm *mach, int state)
struct m0_rpc_machine * hlc_rpc_machine
static const struct m0_rpc_item_ops ha_link_outgoing_item_ops
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)
static void ha_link_cb_disconnecting_reused(struct m0_ha_link *hl)
static const struct m0_sm_conf ha_link_outgoing_fom_conf
struct m0_rpc_item * ri_reply
static struct m0_fom_type ha_link_outgoing_fom_type
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
static void ha_link_wait(struct ha_link_wait_ctx *wait_ctx, bool(*check)(struct m0_clink *clink))
M0_INTERNAL void m0_rpc_link_reset(struct m0_rpc_link *rlink)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_INTERNAL int m0_ha_link_mod_init(void)
uint64_t hlcc_max_rpcs_in_flight
M0_INTERNAL void m0_ha_link_reconnect_begin(struct m0_ha_link *hl, struct m0_ha_link_params *lp)
ha_link_outgoing_fom_state
struct m0_sm_group * lo_grp
static struct m0_sm_state_descr ha_link_outgoing_fom_states[HA_LINK_OUTGOING_STATE_NR]
M0_INTERNAL uint64_t m0_ha_msg_tag(const struct m0_ha_msg *msg)
M0_INTERNAL void m0_ha_link_reconnect_end(struct m0_ha_link *hl, const struct m0_ha_link_conn_cfg *hl_conn_cfg)
bool hln_confirmed_update
void m0_rpc_reply_post(struct m0_rpc_item *request, struct m0_rpc_item *reply)
M0_INTERNAL void m0_fop_fini(struct m0_fop *fop)
bool hln_reconnect_cfg_is_set
M0_INTERNAL void m0_ha_lq_init(struct m0_ha_lq *lq, const struct m0_ha_lq_cfg *lq_cfg)
static struct m0_clink clink[RDWR_REQUEST_MAX]
struct m0_uint128 lmf_id_remote
void(* rio_sent)(struct m0_rpc_item *item)
static struct m0_sm_conf ha_link_sm_conf
M0_INTERNAL uint64_t m0_ha_lq_tag_assign(const struct m0_ha_lq *lq)
struct m0_ha_link_tags hlp_tags_remote
m0_time_t m0_time_add(const m0_time_t t1, const m0_time_t t2)
struct m0_chan hln_stop_chan
M0_INTERNAL uint64_t m0_ha_link_delivered_consume(struct m0_ha_link *hl)
M0_INTERNAL void m0_ha_link_delivered(struct m0_ha_link *hl, struct m0_ha_msg *msg)
M0_INTERNAL void m0_ha_link_wait_confirmation(struct m0_ha_link *hl, uint64_t tag)
static void ha_link_tags_apply(struct m0_ha_link *hl, const struct m0_ha_link_params *lp)
m0_time_t hlcc_reconnect_interval
static int ha_link_conn_cfg_copy(struct m0_ha_link_conn_cfg *dst, const struct m0_ha_link_conn_cfg *src)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
#define _ST(name, flags, allowed)
struct m0_fop_data f_data
struct m0_ha_msg * hln_msg_to_send
static void ha_link_tags_in_out(struct m0_ha_link *hl, uint64_t *out_next, uint64_t *in_delivered)
M0_INTERNAL void m0_ha_link_service_register(struct m0_reqh_service *service, struct m0_ha_link *hl, const struct m0_uint128 *link_id, const struct m0_uint128 *connection_id)
M0_INTERNAL void m0_rpc_link_connect_async(struct m0_rpc_link *rlink, m0_time_t abs_timeout, struct m0_clink *wait_clink)
struct m0_uint128 lmf_id_connection
M0_INTERNAL void m0_ha_link_mod_fini(void)
static void ha_link_conn_cfg_free(struct m0_ha_link_conn_cfg *hl_conn_cfg)
m0_time_t hlcc_resend_interval
struct m0_reqh * hlc_reqh
struct m0_reqh_service_type m0_ha_link_service_type
static void ha_link_outgoing_reconnect_timeout(struct m0_sm_timer *timer)
M0_INTERNAL void m0_sm_timer_cancel(struct m0_sm_timer *timer)
uint64_t lmf_in_delivered
M0_INTERNAL void m0_ha_link_wait_delivery(struct m0_ha_link *hl, uint64_t tag)
M0_INTERNAL void m0_ha_link_service_quiesce(struct m0_reqh_service *service, struct m0_ha_link *hl, struct m0_chan *chan)
struct m0_fom_locality * fo_loc
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
static void ha_link_outgoing_item_replied(struct m0_rpc_item *item)
static int ha_link_incoming_fom_tick(struct m0_fom *fom)
struct m0_reqh_service * fo_service
static int ha_link_outgoing_fom_tick(struct m0_fom *fom)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
static bool ha_link_quiesce_wait_cb(struct m0_clink *clink)
const struct m0_rpc_item_ops * ri_ops
m0_time_t m0_time_from_now(uint64_t secs, long ns)
M0_INTERNAL void m0_ha_link_rpc_endpoint(struct m0_ha_link *hl, char *buf, m0_bcount_t buf_len)
static struct m0_sm_state_descr ha_link_sm_states[]
struct m0_sm_timer hln_reconnect_wait_timer
struct m0_rpc_session * ri_session
struct m0_ha_link_params hlcc_params
struct m0_rpc_item * m0_fop_to_rpc_item(const struct m0_fop *fop)
M0_INTERNAL bool m0_ha_link_tags_eq(const struct m0_ha_link_tags *tags1, const struct m0_ha_link_tags *tags2)
struct m0_ha_link_conn_cfg hln_conn_reconnect_cfg
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
void m0_fop_put_lock(struct m0_fop *fop)
static struct m0_fop * fop
struct m0_mutex hln_stop_chan_lock
static int ha_link_incoming_fom_create(struct m0_fop *fop, struct m0_fom **m, struct m0_reqh *reqh)
static void ha_link_tags_update(struct m0_ha_link *hl, uint64_t out_next, uint64_t in_delivered)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
struct m0_fop * m0_rpc_item_to_fop(const struct m0_rpc_item *item)
m0_time_t hlcc_connect_timeout
M0_INTERNAL void m0_fom_queue(struct m0_fom *fom)
void check(struct workload *w)
struct m0_sm_ast hln_waking_ast
M0_INTERNAL void m0_chan_fini(struct m0_chan *chan)
struct m0_mutex hln_quiesce_chan_lock
#define M0_ASSERT_INFO(cond, fmt,...)
struct m0_rpc_session rlk_sess
M0_INTERNAL void m0_ha_link_reconnect_params(const struct m0_ha_link_params *lp_alive, struct m0_ha_link_params *lp_alive_new, struct m0_ha_link_params *lp_dead_new, const struct m0_uint128 *id_alive, const struct m0_uint128 *id_dead, const struct m0_uint128 *id_connection)
M0_INTERNAL void m0_sm_ast_cancel(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
struct m0_ha_link * hwc_hl
struct m0_uint128 lmf_id_local
void m0_fom_phase_set(struct m0_fom *fom, int phase)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_sm_timer_fini(struct m0_sm_timer *timer)
M0_INTERNAL int m0_ha_link_init(struct m0_ha_link *hl, struct m0_ha_link_cfg *hl_cfg)
M0_INTERNAL void m0_sm_timer_init(struct m0_sm_timer *timer)
static struct m0_dtm_oper_descr reply
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)
M0_INTERNAL void m0_ha_link_fini(struct m0_ha_link *hl)
M0_INTERNAL void m0_ha_link_service_deregister(struct m0_reqh_service *service, struct m0_ha_link *hl)
M0_INTERNAL uint64_t m0_ha_link_not_delivered_consume(struct m0_ha_link *hl)
M0_INTERNAL uint64_t m0_ha_lq_tag_next(const struct m0_ha_lq *lq)
struct m0_pdclust_src_addr src
const struct m0_fom_ops ha_link_outgoing_fom_ops
struct m0_fid hlcc_rpc_service_fid
M0_INTERNAL bool m0_sm_group_is_locked(const struct m0_sm_group *grp)
M0_INTERNAL int m0_sm_timer_start(struct m0_sm_timer *timer, struct m0_sm_group *group, void(*cb)(struct m0_sm_timer *), m0_time_t deadline)
struct m0_rpc_conn * s_conn
M0_INTERNAL struct m0_rpc_session * m0_ha_link_rpc_session(struct m0_ha_link *hl)
static int ha_link_outgoing_fop_replied(struct m0_ha_link *hl)
struct m0_fop_type m0_ha_link_msg_fopt
M0_INTERNAL const char * m0_fom_phase_name(const struct m0_fom *fom, int phase)
struct m0_fop * m0_fop_alloc(struct m0_fop_type *fopt, void *data, struct m0_rpc_machine *mach)
#define M0_IMPOSSIBLE(fmt,...)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)
bool hln_no_new_delivered