23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_FDMI 43 #include "fdmi/fops_xc.h" 60 return &
m->fdm_p.fdmp_conn_pool;
73 #define SERVER_ENDPOINT_ADDR "0@lo:12345:34:1" 74 #define SERVER_ENDPOINT "lnet:" SERVER_ENDPOINT_ADDR 77 static void plugin_dock_fopts_init(
void)
80 .
name =
"plugin dock fdmi filters enable",
82 .
xt = m0_fdmi_filters_enable_xc,
88 .
name =
"plugin dock fdmi filters enable reply",
90 .
xt = m0_fdmi_filters_enable_reply_xc,
100 return m->fdm_p.fdmp_conn_pool.cp_rpc_mach;
109 m0_tl_for(fdmi_recs, &
m->fdm_p.fdmp_fdmi_recs, rreg) {
126 reg =
m0_tl_find(fdmi_filters, freg, &
m->fdm_p.fdmp_fdmi_filters,
146 reg =
m0_tl_find(fdmi_recs, rreg, &
m->fdm_p.fdmp_fdmi_recs,
172 return M0_RC(-EINVAL);
175 if (pcb_copy ==
NULL)
176 return M0_RC(-ENOMEM);
181 if (desc_copy ==
NULL)
196 .ffr_desc = desc_copy,
212 fdmi_filters_tlink_init_at_tail(
filter, &
m->fdm_p.fdmp_fdmi_filters);
231 struct m0_fid *filter_ids,
232 uint32_t filter_count)
240 for (idx = 0; idx < filter_count; ++idx) {
253 "filter reg not found: ffid = "FID_SF,
254 FID_P(&filter_ids[idx]));
278 "`release fdmi record` successfully replied: id = " 282 "`release fdmi record` was not replied: id = " 291 fdmi_recs_tlist_remove(rreg);
305 "fdmi record was not found in pdock: id = "U128X_F,
403 fdmi_recs_tlink_init_at_tail(rreg, &
m->fdm_p.fdmp_fdmi_recs);
443 fdmi_recs_tlist_remove(rreg);
456 if (req_data ==
NULL) {
481 "RPC failed to get connection to post release request: " 493 "RPC failed to post release request: id = " 520 uint64_t filter_count)
532 for (idx = 0; idx < filter_count; idx++) {
537 "Filter reg not found: id = "FID_SF,
538 FID_P(&filter_ids[idx]));
543 fdmi_filters_tlist_remove(freg);
573 if (
m->fdm_p.fdmp_dock_inited) {
581 plugin_dock_fopts_init();
584 fdmi_filters_tlist_init(&
m->fdm_p.fdmp_fdmi_filters);
586 fdmi_recs_tlist_init(&
m->fdm_p.fdmp_fdmi_recs);
588 m->fdm_p.fdmp_dock_inited =
true;
651 m->fdm_p.fdmp_dock_inited =
false;
653 fdmi_filters_tlist_fini(&
m->fdm_p.fdmp_fdmi_filters);
656 fdmi_recs_tlist_fini(&
m->fdm_p.fdmp_fdmi_recs);
684 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL int m0_rpc_post(struct m0_rpc_item *item)
m0_time_t ri_resend_interval
const struct m0_fdmi_pd_ops fdmi_pdo
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
static void pdock_record_reg_cleanup(struct m0_rpc_item *item, bool replied)
enum m0_rpc_item_priority ri_prio
struct m0_rpc_machine * m0_fdmi__pdock_conn_pool_rpc_machine()
M0_INTERNAL void m0_rpc_conn_pool_fini(struct m0_rpc_conn_pool *pool)
static struct m0_addb2_mach * m
M0_INTERNAL void m0_fdmi__plugin_dock_stop()
static const char * ep_addr
#define M0_FOP_TYPE_INIT(ft,...)
const m0_time_t M0_TIME_NEVER
static struct io_request req
M0_INTERNAL bool m0_uint128_eq(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
struct m0_fdmi_record_reg * m0_fdmi__pdock_record_reg_find(const struct m0_uint128 *rid)
#define M0_LOG(level,...)
static void deregister_plugin(struct m0_fid *filter_ids, uint64_t filter_count)
M0_INTERNAL int m0_rpc_conn_pool_init(struct m0_rpc_conn_pool *pool, struct m0_rpc_machine *rpc_mach, m0_time_t conn_timeout, uint64_t max_rpcs_in_flight)
static void enable_filters(bool enable, struct m0_fid *filter_ids, uint32_t filter_count)
static void leave(struct m0_locality_chore *chore, struct m0_locality *loc, void *place)
M0_INTERNAL struct m0_fdmi_record_reg * m0_fdmi__pdock_fdmi_record_register(struct m0_fop *fop)
struct m0_fdmi_plugin_ops * ffr_pcb
void * m0_fop_data(const struct m0_fop *fop)
void m0_fop_type_fini(struct m0_fop_type *fopt)
m0_fdmi_rec_type_id_t frr_frt
M0_INTERNAL struct m0_fdmi_module * m0_fdmi_module__get(void)
#define container_of(ptr, type, member)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
static struct m0_xcode_type ** xt[]
m0_time_t m0_time(uint64_t secs, long ns)
const struct m0_sm_conf m0_generic_conf
static struct m0_rpc_item * item
static void release_fdmi_rec(struct m0_uint128 *rec_id, struct m0_fid *filter_id M0_UNUSED)
static struct m0_rm_incoming_ops ri_ops
M0_INTERNAL void m0_ref_put(struct m0_ref *ref)
struct m0_uint128 frr_frid
void m0_ref_init(struct m0_ref *ref, int init_num, void(*release)(struct m0_ref *ref))
#define m0_tl_teardown(name, head, obj)
M0_INTERNAL struct m0_rpc_conn_pool * ut_pdock_conn_pool(void)
M0_INTERNAL int m0_fdmi__plugin_dock_init(void)
struct m0_tl rh_rpc_machines
struct m0_fop_type m0_fop_fdmi_rec_release_fopt
struct m0_fop * m0_fop_get(struct m0_fop *fop)
M0_TL_DESCR_DEFINE(fdmi_filters, "filter regs list", static, struct m0_fdmi_filter_reg, ffr_link, ffr_magic, M0_FDMI_FLTR_MAGIC, M0_FDMI_FLTR_HEAD_MAGIC)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
static void release_replied(struct m0_rpc_item *item)
static int register_filter(const struct m0_fid *fid, const struct m0_fdmi_filter_desc *desc, const struct m0_fdmi_plugin_ops *pcb)
static void test_print_fdmi_rec_list(void)
void(* rio_replied)(struct m0_rpc_item *item)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
M0_INTERNAL int64_t m0_ref_read(const struct m0_ref *ref)
M0_TL_DEFINE(fdmi_filters, static, struct m0_fdmi_filter_reg)
#define M0_FI_ENABLED(tag)
#define M0_ALLOC_PTR(ptr)
const struct m0_rpc_item_ops * ri_ops
struct m0_rpc_item_ops release_ri_ops
struct m0_rpc_session * ri_session
int(* fpo_register_filter)(const struct m0_fid *fid, const struct m0_fdmi_filter_desc *desc, const struct m0_fdmi_plugin_ops *pcb)
struct m0_rpc_item * m0_fop_to_rpc_item(const struct m0_fop *fop)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
void m0_fop_put_lock(struct m0_fop *fop)
static struct m0_fop * fop
struct m0_fdmi_filter_reg * m0_fdmi__pdock_filter_reg_find(const struct m0_fid *fid)
struct m0_uint128 fr_rec_id
struct m0_fop * m0_rpc_item_to_fop(const struct m0_rpc_item *item)
struct m0_rpc_session * frr_sess
static void pdock_record_release(struct m0_ref *ref)
M0_INTERNAL int m0_rpc_conn_pool_get_sync(struct m0_rpc_conn_pool *pool, const char *remote_ep, struct m0_rpc_session **session)
M0_INTERNAL int m0_fdmi__plugin_dock_start(struct m0_reqh *reqh)
struct m0_fdmi_filter_desc * ffr_desc
struct m0_fop_fdmi_record * frr_rec
M0_INTERNAL void m0_fdmi__plugin_dock_fini(void)
#define m0_tl_find(name, var, head,...)
#define m0_tl_for(name, head, obj)
void m0_fop_put(struct m0_fop *fop)
struct m0_rpc_item f_item
static struct m0_rpc_machine rpc_machine
struct m0_fop_type m0_pdock_fdmi_filters_enable_rep_fopt
static int pdock_client_post(struct m0_fop *fop, struct m0_rpc_session *session, const struct m0_rpc_item_ops *ri_ops)
const m0_time_t M0_TIME_IMMEDIATELY
struct m0_fop_type m0_pdock_fdmi_filters_enable_fopt
M0_INTERNAL const char * m0_rpc_item_remote_ep_addr(const struct m0_rpc_item *item)
M0_INTERNAL void m0_rpc_conn_pool_put(struct m0_rpc_conn_pool *pool, struct m0_rpc_session *session)
struct m0_fop * m0_fop_alloc(struct m0_fop_type *fopt, void *data, struct m0_rpc_machine *mach)
const struct m0_fdmi_pd_ops * m0_fdmi_plugin_dock_api_get(void)