Motr  M0
item.c File Reference
#include "lib/trace.h"
#include "lib/memory.h"
#include "lib/tlist.h"
#include "lib/rwlock.h"
#include "lib/misc.h"
#include "lib/errno.h"
#include "lib/finject.h"
#include "conf/obj.h"
#include "ha/epoch.h"
#include "ha/note.h"
#include "motr/magic.h"
#include "addb2/addb2.h"
#include "rpc/addb2.h"
#include "rpc/rpc_internal.h"
#include "rpc/rpc_opcodes_xc.h"
#include "motr/iem.h"
Include dependency graph for item.c:

Go to the source code of this file.

Macros

#define M0_TRACE_SUBSYSTEM   M0_TRACE_SUBSYS_RPC
 
#define HEADER1_XCODE_OBJ(ptr)   M0_XCODE_OBJ(m0_rpc_item_header1_xc, ptr)
 
#define HEADER2_XCODE_OBJ(ptr)   M0_XCODE_OBJ(m0_rpc_item_header2_xc, ptr)
 
#define FOOTER_XCODE_OBJ(ptr)   M0_XCODE_OBJ(m0_rpc_item_footer_xc, ptr)
 

Functions

static int item_entered_in_urgent_state (struct m0_sm *mach)
 
static void item_timer_cb (struct m0_sm_timer *timer)
 
static void item_timedout (struct m0_rpc_item *item)
 
static void item_resend (struct m0_rpc_item *item)
 
static int item_reply_received (struct m0_rpc_item *reply, struct m0_rpc_item **req_out)
 
static bool item_reply_received_fi (struct m0_rpc_item *req, struct m0_rpc_item *reply)
 
static int req_replied (struct m0_rpc_item *req, struct m0_rpc_item *reply)
 
static void rpc_item_xid_unassign (struct m0_rpc_item *item)
 
 M0_TL_DESCR_DEFINE (rpcitem, "rpc item tlist", M0_INTERNAL, struct m0_rpc_item, ri_field, ri_magic, M0_RPC_ITEM_MAGIC, M0_RPC_ITEM_HEAD_MAGIC)
 
 M0_TL_DEFINE (rpcitem, M0_INTERNAL, struct m0_rpc_item)
 
 M0_TL_DESCR_DEFINE (rit, "rpc_item_type_descr", static, struct m0_rpc_item_type, rit_linkage, rit_magic, M0_RPC_ITEM_TYPE_MAGIC, M0_RPC_ITEM_TYPE_HEAD_MAGIC)
 
 M0_TL_DEFINE (rit, static, struct m0_rpc_item_type)
 
 M0_TL_DESCR_DEFINE (ric, "rpc item cache", M0_INTERNAL, struct m0_rpc_item, ri_cache_link, ri_magic, M0_RPC_ITEM_MAGIC, M0_RPC_ITEM_CACHE_HEAD_MAGIC)
 
 M0_TL_DEFINE (ric, M0_INTERNAL, struct m0_rpc_item)
 
 M0_TL_DESCR_DEFINE (pending_item, "pending-item-list", M0_INTERNAL, struct m0_rpc_item, ri_pending_link, ri_magic, M0_RPC_ITEM_MAGIC, M0_RPC_ITEM_PENDING_CACHE_HEAD_MAGIC)
 
 M0_TL_DEFINE (pending_item, M0_INTERNAL, struct m0_rpc_item)
 
 M0_TL_DESCR_DEFINE (xidl, "rpc session xid list", M0_INTERNAL, struct m0_rpc_item, ri_xid_link, ri_magic, M0_RPC_ITEM_MAGIC, M0_RPC_ITEM_XID_LIST_HEAD_MAGIC)
 
 M0_TL_DEFINE (xidl, M0_INTERNAL, struct m0_rpc_item)
 
static bool opcode_is_dup (uint32_t opcode)
 
M0_INTERNAL int m0_rpc_item_module_init (void)
 
M0_INTERNAL void m0_rpc_item_module_fini (void)
 
M0_INTERNAL void m0_rpc_item_type_register (struct m0_rpc_item_type *item_type)
 
M0_INTERNAL void m0_rpc_item_type_deregister (struct m0_rpc_item_type *item_type)
 
M0_INTERNAL struct m0_rpc_item_typem0_rpc_item_type_lookup (uint32_t opcode)
 
M0_INTERNAL bool m0_rpc_item_invariant (const struct m0_rpc_item *item)
 
M0_INTERNAL const char * item_state_name (const struct m0_rpc_item *item)
 
M0_INTERNAL const char * item_kind (const struct m0_rpc_item *item)
 
void m0_rpc_item_init (struct m0_rpc_item *item, const struct m0_rpc_item_type *itype)
 
void m0_rpc_item_fini (struct m0_rpc_item *item)
 
void m0_rpc_item_get (struct m0_rpc_item *item)
 
void m0_rpc_item_put (struct m0_rpc_item *item)
 
void m0_rpc_item_put_lock (struct m0_rpc_item *item)
 
m0_bcount_t m0_rpc_item_size (struct m0_rpc_item *item)
 
m0_bcount_t m0_rpc_item_payload_size (struct m0_rpc_item *item)
 
M0_INTERNAL bool m0_rpc_item_max_payload_exceeded (struct m0_rpc_item *item, struct m0_rpc_session *session)
 
M0_INTERNAL bool m0_rpc_item_is_update (const struct m0_rpc_item *item)
 
M0_INTERNAL bool m0_rpc_item_is_request (const struct m0_rpc_item *item)
 
M0_INTERNAL bool m0_rpc_item_is_reply (const struct m0_rpc_item *item)
 
M0_INTERNAL bool m0_rpc_item_is_oneway (const struct m0_rpc_item *item)
 
static bool rpc_item_needs_xid (const struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_xid_min_update (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_xid_assign (struct m0_rpc_item *item)
 
M0_INTERNAL bool m0_rpc_item_xid_check (struct m0_rpc_item *item, struct m0_rpc_item **next)
 
M0_INTERNAL void m0_rpc_item_sm_init (struct m0_rpc_item *item, enum m0_rpc_item_dir dir)
 
M0_INTERNAL void m0_rpc_item_sm_fini (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_change_state (struct m0_rpc_item *item, enum m0_rpc_item_state state)
 
M0_INTERNAL void m0_rpc_item_failed (struct m0_rpc_item *item, int32_t rc)
 
int m0_rpc_item_timedwait (struct m0_rpc_item *item, uint64_t states, m0_time_t timeout)
 
int m0_rpc_item_wait_for_reply (struct m0_rpc_item *item, m0_time_t timeout)
 
static void item_cancel_fi (struct m0_rpc_item *item)
 
void m0_rpc_item_cancel_nolock (struct m0_rpc_item *item)
 
void m0_rpc_item_cancel (struct m0_rpc_item *item)
 
void m0_rpc_item_cancel_init (struct m0_rpc_item *item)
 
int32_t m0_rpc_item_error (const struct m0_rpc_item *item)
 
M0_INTERNAL int m0_rpc_item_timer_start (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_timer_stop (struct m0_rpc_item *item)
 
static int item_conn_test (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_send (struct m0_rpc_item *item)
 
M0_INTERNAL const char * m0_rpc_item_remote_ep_addr (const struct m0_rpc_item *item)
 
M0_INTERNAL const char * m0_rpc_item_opname (const struct m0_rpc_item *item)
 
M0_INTERNAL const char * m0_rpc_item_type_name (const struct m0_rpc_item_type *item_type)
 
M0_INTERNAL int m0_rpc_item_received (struct m0_rpc_item *item, struct m0_rpc_machine *machine)
 
static void item__on_reply_postprocess (struct m0_rpc_item *item)
 
static void addb2_add_rpc_attrs (const struct m0_rpc_item *req)
 
M0_INTERNAL void m0_rpc_item_process_reply (struct m0_rpc_item *req, struct m0_rpc_item *reply)
 
M0_INTERNAL void m0_rpc_item_send_reply (struct m0_rpc_item *req, struct m0_rpc_item *reply)
 
M0_INTERNAL int m0_rpc_item_cache_init (struct m0_rpc_item_cache *ic, struct m0_mutex *lock)
 
M0_INTERNAL void m0_rpc_item_cache_fini (struct m0_rpc_item_cache *ic)
 
M0_INTERNAL bool m0_rpc_item_cache__invariant (struct m0_rpc_item_cache *ic)
 
M0_INTERNAL bool m0_rpc_item_cache_add (struct m0_rpc_item_cache *ic, struct m0_rpc_item *item, m0_time_t deadline)
 
static void rpc_item_cache_del (struct m0_rpc_item_cache *ic, struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_cache_del (struct m0_rpc_item_cache *ic, uint64_t xid)
 
M0_INTERNAL struct m0_rpc_itemm0_rpc_item_cache_lookup (struct m0_rpc_item_cache *ic, uint64_t xid)
 
M0_INTERNAL void m0_rpc_item_cache_purge (struct m0_rpc_item_cache *ic)
 
M0_INTERNAL void m0_rpc_item_cache_clear (struct m0_rpc_item_cache *ic)
 
M0_INTERNAL void m0_rpc_item_xid_list_init (struct m0_rpc_session *session)
 
M0_INTERNAL void m0_rpc_item_xid_list_fini (struct m0_rpc_session *session)
 
M0_INTERNAL void m0_rpc_item_pending_cache_init (struct m0_rpc_session *session)
 
static void pending_cache_drain (struct m0_rpc_session *session)
 
M0_INTERNAL void m0_rpc_item_pending_cache_fini (struct m0_rpc_session *session)
 
M0_INTERNAL void m0_rpc_item_pending_cache_add (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_pending_cache_del (struct m0_rpc_item *item)
 
M0_INTERNAL void m0_rpc_item_replied_invoke (struct m0_rpc_item *req)
 
M0_INTERNAL void m0_rpc_item_sent_invoke (struct m0_rpc_item *item)
 

Variables

const struct m0_sm_conf outgoing_item_sm_conf
 
const struct m0_sm_conf incoming_item_sm_conf
 
static struct m0_tl rpc_item_types_list
 
static struct m0_rwlock rpc_item_types_lock
 
M0_INTERNAL m0_bcount_t m0_rpc_item_onwire_header_size
 
M0_INTERNAL m0_bcount_t m0_rpc_item_onwire_footer_size
 
static struct m0_sm_state_descr outgoing_item_states []
 
static struct m0_sm_state_descr incoming_item_states []
 

Macro Definition Documentation

◆ M0_TRACE_SUBSYSTEM

#define M0_TRACE_SUBSYSTEM   M0_TRACE_SUBSYS_RPC

Definition at line 23 of file item.c.