5 #ifndef ctrlplane_ksync_object_h
6 #define ctrlplane_ksync_object_h
9 #include <tbb/recursive_mutex.h>
12 #include <sandesh/sandesh_trace.h>
43 boost::intrusive::set_member_hook<>
node_;
65 boost::intrusive::set_member_hook<>
node_;
72 typedef boost::intrusive::member_hook<
KSyncEntry,
73 boost::intrusive::set_member_hook<>,
75 typedef boost::intrusive::set<KSyncEntry, KSyncObjectNode>
Tree;
78 boost::intrusive::set_member_hook<>,
80 typedef boost::intrusive::set<KSyncFwdReference, KSyncFwdRefNode>
FwdRefTree;
83 boost::intrusive::set_member_hook<>,
85 typedef boost::intrusive::set<KSyncBackReference, KSyncBackRefNode>
BackRefTree;
90 KSyncObject(
const std::string &name,
int max_index);
96 uint32_t cleanup_time, uint32_t cleanup_intvl,
97 uint16_t entries_per_intvl);
304 #define KSYNC_TRACE(obj, parent, ...)\
306 KSync##obj::TraceMsg(parent->GetKSyncTraceBuf(), __FILE__, __LINE__, ##__VA_ARGS__);\
void UnregisterDb(DBTableBase *table)
virtual KSyncEntry * DBToKSyncEntry(const DBEntry *entry)=0
void set_test_id(DBTableBase::ListenerId id)
KSyncIndexTable index_table_
DBTableBase::ListenerId GetListenerId(DBTableBase *table)
DBTableBase * GetDBTable()
void Notify(DBTablePartBase *partition, DBEntryBase *entry)
DBTableBase::ListenerId id() const
DBTableBase::ListenerId id_
DISALLOW_COPY_AND_ASSIGN(KSyncDBObject)
virtual void CleanupOnDel(KSyncEntry *kentry)
DBTableBase::ListenerId test_id_
virtual DBFilterResp DBEntryFilter(const DBEntry *entry, const KSyncDBEntry *ksync)
void RegisterDb(DBTableBase *table)
KSyncDBObject(const std::string &name)
boost::intrusive::set_member_hook node_
boost::intrusive_ptr< KSyncEntry > KSyncEntryPtr
static std::unique_ptr< KSyncEntry > default_defer_entry_
WorkQueue< KSyncObjectEvent * > * event_queue_
static KSyncEntry * default_defer_entry()
bool Process(KSyncObjectEvent *event)
static KSyncObjectManager * GetInstance()
static KSyncObjectManager * singleton_
void Enqueue(KSyncObjectEvent *event)
static const int kMaxEntriesProcess
static void Unregister(KSyncObject *)
static KSyncObjectManager * Init()
void Delete(KSyncObject *)
boost::intrusive::set< KSyncBackReference, KSyncBackRefNode > BackRefTree
boost::intrusive::member_hook< KSyncEntry, boost::intrusive::set_member_hook<>, &KSyncEntry::node_ > KSyncObjectNode
virtual void NetlinkAck(KSyncEntry *entry, KSyncEntry::KSyncEvent event)
bool IsIndexValid() const
friend void TestTriggerStaleEntryCleanupCb(KSyncObject *obj)
virtual SandeshTraceBufferPtr GetKSyncTraceBuf()
bool StaleEntryCleanupCb()
void FreeInd(KSyncEntry *entry, uint32_t index)
void BackRefReEval(KSyncEntry *key)
void ChangeKey(KSyncEntry *entry, uint32_t arg)
KSyncEntry * Find(const KSyncEntry *key)
static FwdRefTree fwd_ref_tree_
virtual bool DoEventTrace(void)
void Change(KSyncEntry *entry)
boost::intrusive::set< KSyncEntry, KSyncObjectNode > Tree
KSyncEntry * CreateImpl(const KSyncEntry *key)
virtual KSyncEntry * Alloc(const KSyncEntry *key, uint32_t index)=0
void ClearStale(KSyncEntry *entry)
uint32_t stale_entry_cleanup_intvl_
KSyncEntry * Next(const KSyncEntry *entry) const
DISALLOW_COPY_AND_ASSIGN(KSyncObject)
virtual void CleanupOnDel(KSyncEntry *kentry)
void SafeNotifyEvent(KSyncEntry *entry, KSyncEntry::KSyncEvent event)
void BackRefAdd(KSyncEntry *key, KSyncEntry *reference)
boost::intrusive::member_hook< KSyncBackReference, boost::intrusive::set_member_hook<>, &KSyncBackReference::node_ > KSyncBackRefNode
void NetlinkAckInternal(KSyncEntry *entry, KSyncEntry::KSyncEvent event)
void BackRefDel(KSyncEntry *key)
tbb::recursive_mutex lock_
virtual void EmptyTable(void)
virtual void PreFree(KSyncEntry *entry)
uint16_t stale_entries_per_intvl_
boost::intrusive::member_hook< KSyncFwdReference, boost::intrusive::set_member_hook<>, &KSyncFwdReference::node_ > KSyncFwdRefNode
virtual uint32_t GetKey(KSyncEntry *entry)
KSyncEntry * CreateStale(const KSyncEntry *key)
void NotifyEvent(KSyncEntry *entry, KSyncEntry::KSyncEvent event)
KSyncObject(const std::string &name)
KSyncIndexTable index_table_
boost::intrusive::set< KSyncFwdReference, KSyncFwdRefNode > FwdRefTree
virtual void Free(KSyncEntry *entry)
KSyncEntry * GetReference(const KSyncEntry *key)
SandeshTraceBufferPtr KSyncTraceBuf
static BackRefTree back_ref_tree_
Timer * stale_entry_cleanup_timer_
virtual void UpdateKey(KSyncEntry *entry, uint32_t arg)
void InitStaleEntryCleanup(boost::asio::io_context &ios, uint32_t cleanup_time, uint32_t cleanup_intvl, uint16_t entries_per_intvl)
KSyncEntry * Create(const KSyncEntry *key)
void set_delete_scheduled()
std::set< KSyncEntry::KSyncEntryPtr > stale_entry_tree_
void Delete(KSyncEntry *entry)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
bool operator<(const KSyncBackReference &rhs) const
boost::intrusive::set_member_hook node_
KSyncBackReference(KSyncEntry *key, KSyncEntry *ref)
KSyncEntry * back_reference_
KSyncFwdReference(KSyncEntry *key, KSyncEntry *ref)
boost::intrusive::set_member_hook node_
bool operator<(const KSyncFwdReference &rhs) const
KSyncObjectEvent(KSyncObject *obj, Event event)
KSyncEntry::KSyncEntryPtr ref_