greenplumn CCacheEntry 源码
greenplumn CCacheEntry 代码
文件路径:/src/backend/gporca/libgpos/include/gpos/memory/CCacheEntry.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CCacheEntry.h
//
// @doc:
// Definition of cache class.
//.
// @owner:
//
// @test:
//
//---------------------------------------------------------------------------
#ifndef GPOS_CCACHEENTRY_H_
#define GPOS_CCACHEENTRY_H_
#include "gpos/common/CList.h"
#include "gpos/memory/CMemoryPool.h"
// setting the cache quota to 0 means unlimited
#define UNLIMITED_CACHE_QUOTA 0
// no. of hashtable buckets
#define CACHE_HT_NUM_OF_BUCKETS 1000
using namespace gpos;
namespace gpos
{
//---------------------------------------------------------------------------
// @class:
// CCacheEntry
//
// @doc:
// Definition of cache entry;
//
// Each cache entry is a container that holds information about one
// cached object.
//
//---------------------------------------------------------------------------
template <class T, class K>
class CCacheEntry
{
private:
// allocated memory pool to the cached object
CMemoryPool *m_mp;
// value that needs to be cached
T m_val;
// true if this entry is marked for deletion
BOOL m_deleted;
// gclock counter; an entry is eligible for eviction if this
// counter drops to 0 and the entry is not pinned
ULONG m_g_clock_counter;
public:
// ctor
CCacheEntry(CMemoryPool *mp, K key, T val, ULONG g_clock_counter)
: m_mp(mp),
m_val(val),
m_deleted(false),
m_g_clock_counter(g_clock_counter),
m_key(key)
{
// CCache entry has the ownership now. So ideally any time ref count can't go lesser than 1.
// In destructor, we decrease it from 1 to 0.
IncRefCount();
}
// dtor
virtual ~CCacheEntry()
{
// Decrease ref count of m_stats_comp_val_int to get destroyed by itself if ref count is 0
DecRefCount();
}
// gets the key of cached object
K
Key() const
{
return m_key;
}
// gets the value of cached object
T
Val() const
{
return m_val;
}
// gets the memory pool of cached object
CMemoryPool *
Pmp() const
{
return m_mp;
}
// marks entry as deleted
void
MarkForDeletion()
{
m_deleted = true;
}
// returns true if entry is marked as deleted
BOOL
IsMarkedForDeletion() const
{
return m_deleted;
}
// get value's ref-count
ULONG
RefCount() const
{
return (ULONG) m_val->RefCount();
}
// increments value's ref-count
void
IncRefCount()
{
m_val->AddRef();
}
//decrements value's ref-count
void
DecRefCount()
{
m_val->Release();
}
// sets the gclock counter for an entry; useful for updating counter upon access
void
SetGClockCounter(ULONG g_clock_counter)
{
m_g_clock_counter = g_clock_counter;
}
// decrements the gclock counter for an entry during eviction process
void
DecrementGClockCounter()
{
m_g_clock_counter--;
}
// returns the current value of the gclock counter
ULONG
GetGClockCounter()
{
return m_g_clock_counter;
}
// the following data members are public because they
// need to be used by GPOS_OFFSET macro for list construction
// a pointer to entry's key
K m_key;
// link used to maintain entries in a hashtable
SLink m_link_hash;
// invalid key
static const K m_invalid_key;
}; // CCacheEntry
} // namespace gpos
#endif // GPOS_CCACHEENTRY_H_
// EOF
相关信息
相关文章
greenplumn CMemoryPoolManager 源码
greenplumn CMemoryPoolStatistics 源码
greenplumn CMemoryPoolTracker 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦