249 uint64_t credit_value)
268 uint64_t credit_value)
286 uint64_t credit_value)
293 uint64_t credit_value)
299 uint64_t credit_value)
554 CREDIT_GET_LOOPS = 10,
574 for (
i = 0;
i < CREDIT_GET_LOOPS;
i++) {
904 }
while (!death_accepted);
static void test_revoke_no_conflict_wait(void)
static void test_no_borrow_flag(void)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
static void remote_ha_state_update(enum rm_server server, enum m0_ha_obj_state new_state)
static void test_simple_borrow(void)
static void test_barrier_overcome(enum rcredits_hier_type hier)
static void rm_ctx_creditor_track(enum rm_server srv_id)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
static void star_hier_config(void)
static const struct m0_rm_incoming_ops server2_incoming_ops
M0_INTERNAL void m0_chan_broadcast_lock(struct m0_chan *chan)
int const char const void size_t int flags
static void server3_in_conflict(struct m0_rm_incoming *in)
static struct m0_rm_remote creditor
struct rm_ctx rm_ctxs[SERVER_NR]
struct m0_rm_remote * ro_creditor
void creditor_cookie_setup(enum rm_server dsrv_id, enum rm_server csrv_id)
static void credit_get_and_hold_nowait(enum rm_server debtor_id, enum m0_rm_incoming_flags flags, uint64_t credit_value)
static const struct m0_rm_incoming_ops server1_incoming_ops
static void test_borrow_non_conflicting(void)
void(* rio_complete)(struct m0_rm_incoming *in, int32_t rc)
const m0_time_t M0_TIME_NEVER
static void test_creditor_recovered(void)
M0_INTERNAL bool m0_semaphore_timeddown(struct m0_semaphore *semaphore, const m0_time_t abs_timeout)
static void rm_ctx_init(struct m0_rm_lock_ctx *ctx, struct m0_client *m0c, struct m0_fid *fid)
struct rm_ut_data rc_test_data
static void test_revoke_conflicting_try(void)
static void wait_for_credit(enum rm_server srv_id)
struct m0_rm_ha_tracker rem_tracker
static void test_revoke_conflicting_wait(void)
static void chain_hier_config(void)
static void test_revoke_with_hop(void)
int const char const void * value
struct m0_rm_owner * rd_owner
static void remote_die(enum rm_server server)
static const struct m0_rm_incoming_ops server3_incoming_ops
static void test_borrow_held_no_conflict(void)
static void test_revoke_no_conflict_try(void)
struct m0_rm_credit rin_want
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_rpc_session * rem_session
M0_INTERNAL int m0_fid_cmp(const struct m0_fid *fid0, const struct m0_fid *fid1)
static void test_debtor_death(void)
static void remote_online(enum rm_server server)
M0_INTERNAL int m0_rm_owner_timedwait(struct m0_rm_owner *owner, uint64_t state, const m0_time_t abs_timeout)
static void remote_credits_utinit(enum rcredits_hier_type hier_type)
static const struct m0_rm_incoming_ops trick2_incoming_ops
static void credit_get_and_hold(enum rm_server debtor_id, enum m0_rm_incoming_flags flags, uint64_t credit_value)
static void trick_in_complete(struct m0_rm_incoming *in, int32_t rc)
M0_INTERNAL const char * m0_rpc_conn_addr(const struct m0_rpc_conn *conn)
static void borrow_and_hold(enum rm_server debtor_id, uint64_t credit_value)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
static enum rm_server test_servers_nr
static void rm_ctx_fini(struct m0_ref *ref)
static void debtor_death_acceptance_wait(enum rm_server dead, enum rm_server waiter)
static void test_creditor_reset(void)
M0_INTERNAL void m0_rm_incoming_init(struct m0_rm_incoming *in, struct m0_rm_owner *owner, enum m0_rm_incoming_type type, enum m0_rm_incoming_policy policy, uint64_t flags)
M0_INTERNAL struct m0_confc * m0_reqh2confc(struct m0_reqh *reqh)
#define M0_FID_TINIT(type, container, key)
static void rm_server_restart(enum rm_server server)
const struct m0_uint128 m0_rm_no_group
static struct m0_confc * confc
static enum m0_rm_incoming_state incoming_state(const struct m0_rm_incoming *in)
#define M0_RM_REMOTE_PUT(remote)
M0_INTERNAL void m0_rm_owner_init_rfid(struct m0_rm_owner *owner, const struct m0_uint128 *group, struct m0_rm_resource *res, struct m0_rm_remote *creditor)
M0_INTERNAL void m0_rm_owner_fini(struct m0_rm_owner *owner)
void rm_ctxs_conf_fini(struct rm_ctx *rm_ctxs, int ctxs_nr)
static void server2_in_complete(struct m0_rm_incoming *in, int32_t rc)
static void test_two_borrows_single_req(void)
static void test_borrow_revoke_single_req(void)
const struct m0_rm_incoming_ops * rin_ops
M0_INTERNAL bool m0_chan_trywait(struct m0_clink *link)
static void held_credit_cache(enum rm_server srv_id)
enum rm_server debtor_id[SERVER_NR - 1]
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
static struct m0_semaphore conflict1_sem
static struct m0_rpc_server_ctx sctx
M0_INTERNAL bool m0_cookie_is_eq(const struct m0_cookie *cookie1, const struct m0_cookie *cookie2)
static void test_barrier_overcome_star(void)
M0_INTERNAL void m0_cookie_init(struct m0_cookie *cookie, const uint64_t *obj)
static struct m0_sm_group * resource_grp(const struct m0_rm_resource *res)
static void server3_in_complete(struct m0_rm_incoming *in, int32_t rc)
static void test_barrier(void)
M0_INTERNAL int m0_rm_ha_subscribe_sync(struct m0_confc *confc, const char *rem_ep, struct m0_rm_ha_tracker *tracker)
void rm_ctxs_conf_init(struct rm_ctx *rm_ctxs, int ctxs_nr)
static void trick1_in_conflict(struct m0_rm_incoming *in)
M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in)
static void credit_get_and_cache(enum rm_server debtor_id, enum m0_rm_incoming_flags flags, uint64_t credit_value)
static void server2_in_conflict(struct m0_rm_incoming *in)
static void server1_in_conflict(struct m0_rm_incoming *in)
#define M0_RM_REMOTE_GET(remote)
static void test_barrier_same_time(void)
static void borrow_and_cache(enum rm_server debtor_id, uint64_t credit_value)
M0_INTERNAL bool m0_chan_timedwait(struct m0_clink *link, const m0_time_t abs_timeout)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
m0_time_t m0_time_from_now(uint64_t secs, long ns)
bool m0_rm_ur_tlist_is_empty(const struct m0_tl *list)
static struct m0_rm_remote * remote
enum rm_server creditor_id
static void test_creditor_death2(void)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static struct m0_semaphore conflict2_sem
M0_INTERNAL void m0_rm_incoming_fini(struct m0_rm_incoming *in)
struct m0_rm_incoming rd_in
struct m0_ut_suite rm_rcredits_ut
static void trick2_in_conflict(struct m0_rm_incoming *in)
M0_INTERNAL void m0_rm_owner_creditor_reset(struct m0_rm_owner *owner, struct m0_rm_remote *creditor)
void rings_utdata_ops_set(struct rm_ut_data *data)
static void test_barrier_overcome_chain(void)
void credits_are_equal(enum rm_server srv_id, enum rm_ut_credits_list list_id, uint64_t value)
static void test_starvation(void)
struct m0_rm_resource * rd_res
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_ha_state_accept(const struct m0_ha_nvec *note, bool ignore_same_state)
static void test_borrow_held_conflicting(void)
void rm_ctx_server_stop(enum rm_server srv_id)
static void credit_setup(enum rm_server srv_id, enum m0_rm_incoming_flags flag, uint64_t value)
#define m0_tl_find(name, var, head,...)
static void server1_in_complete(struct m0_rm_incoming *in, int32_t rc)
static struct m0_semaphore conflict3_sem
static void remote_credits_utfini(void)
struct m0_rm_reserve_prio rin_reserve
static void test_creditor_death(void)
static const struct m0_rm_incoming_ops trick1_incoming_ops
struct m0_rpc_conn * s_conn
void rm_ctx_server_start(enum rm_server srv_id)
M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in)
void rm_ctx_server_owner_windup(enum rm_server srv_id)
#define M0_IMPOSSIBLE(fmt,...)