提交 a2b6f41e 编写于 作者: X xs0 提交者: LINGuanRen

alloc trans rpc task by rp_alloc

上级 68cd5587
......@@ -1060,7 +1060,7 @@ LABEL_ITEM_DEF(OB_TRANS_FREEZE_TASK, TransFreezeTask)
LABEL_ITEM_DEF(OB_TRANS_SCHE_CTX, TransScheCtx)
LABEL_ITEM_DEF(OB_TRANS_COORD_CTX, TransCoordCtx)
LABEL_ITEM_DEF(OB_TRANS_PART_CTX, TransPartCtx)
LABEL_ITEM_DEF(OB_TRANS_LOCAL_TASK, TransLocalTask)
LABEL_ITEM_DEF(OB_TRANS_RPC_TASK, TransRpcTask)
LABEL_ITEM_DEF(OB_TRANS_WAIT_TASK, TransWaitTask)
LABEL_ITEM_DEF(OB_TRANS_TENANT_WAIT_QUEUE, TranTenaWaitQue)
LABEL_ITEM_DEF(OB_GTS_TASK, GtsTask)
......
......@@ -48,8 +48,6 @@ int64_t ObPartitionTransCtxMgrFactory::alloc_count_ = 0;
int64_t ObPartitionTransCtxMgrFactory::release_count_ = 0;
const char* ObPartitionTransCtxMgrFactory::mod_type_ = "OB_PARTITION_TRANS_CTX_MGR";
static TransObjFactory<TransRpcTask> trans_rpc_task_factory("OB_TRANS_RPC_TASK");
#define OB_FREE(object, ...) ob_free(object)
#define RP_FREE(object, LABEL) rp_free(object, LABEL)
#define OB_ALLOC(object, LABEL) object##alloc()
......@@ -258,42 +256,12 @@ const char* ObPartitionTransCtxMgrFactory::get_mod_type()
return mod_type_;
}
// TransRpcTaskFactory
TransRpcTask* TransRpcTaskFactory::alloc()
{
return trans_rpc_task_factory.alloc();
}
void TransRpcTaskFactory::release(TransRpcTask* task)
{
if (OB_ISNULL(task)) {
TRANS_LOG(ERROR, "TransRpcTask pointer is null when released", KP(task));
} else {
trans_rpc_task_factory.release(task);
task = NULL;
}
}
int64_t TransRpcTaskFactory::get_alloc_count()
{
return trans_rpc_task_factory.get_alloc_count();
}
int64_t TransRpcTaskFactory::get_release_count()
{
return trans_rpc_task_factory.get_release_count();
}
const char* TransRpcTaskFactory::get_mod_type()
{
return trans_rpc_task_factory.get_mod_type();
}
MAKE_OB_ALLOC(ObDupTablePartitionMgr, OB_DUP_TABLE_PARTITION_MGR)
MAKE_OB_ALLOC(ObGtsRpcProxy, OB_GTS_RPC_PROXY)
MAKE_OB_ALLOC(ObGtsRequestRpc, OB_GTS_REQUEST_RPC)
MAKE_FACTORY_CLASS_IMPLEMENT_USE_RP_ALLOC(ClogBuf, OB_TRANS_CLOG_BUF)
MAKE_FACTORY_CLASS_IMPLEMENT_USE_RP_ALLOC(TransRpcTask, OB_TRANS_RPC_TASK)
MAKE_FACTORY_CLASS_IMPLEMENT_USE_RP_ALLOC(MutatorBuf, OB_TRANS_MUTATOR_BUF)
MAKE_FACTORY_CLASS_IMPLEMENT_USE_RP_ALLOC(SubmitLogTask, OB_TRANS_SUBMIT_LOG_TASK)
MAKE_FACTORY_CLASS_IMPLEMENT_USE_RP_ALLOC(AllocLogIdTask, OB_TRANS_ALLOC_LOG_ID_TASK)
......
......@@ -74,74 +74,6 @@ private:
static int64_t total_release_part_ctx_count_;
};
template <typename T, int64_t STATISTIC_INTERVAL = TRANS_MEM_STAT_INTERVAL>
class TransObjFactory {
public:
explicit TransObjFactory(const char* mod_type) : alloc_count_(0), release_count_(0)
{
(void)snprintf(mod_type_, sizeof(mod_type_) - 1, "%s", mod_type);
}
~TransObjFactory()
{}
T* alloc();
void release(T* obj);
int64_t get_alloc_count()
{
return alloc_count_;
}
int64_t get_release_count()
{
return release_count_;
}
char* get_mod_type()
{
return mod_type_;
}
private:
static const int64_t MOD_TYPE_SIZE = 64;
char mod_type_[MOD_TYPE_SIZE];
int64_t alloc_count_;
int64_t release_count_;
};
template <typename T, int64_t STATISTIC_INTERVAL>
T* TransObjFactory<T, STATISTIC_INTERVAL>::alloc()
{
T* task = NULL;
if (REACH_TIME_INTERVAL(STATISTIC_INTERVAL)) {
TRANS_LOG(INFO,
"transaction memory statistics",
"mod_type",
mod_type_,
K_(alloc_count),
K_(release_count),
"used",
alloc_count_ - release_count_);
}
if (NULL == (task = op_reclaim_alloc(T))) {
TRANS_LOG(WARN, "obj alloc fail", KP(task));
} else {
(void)ATOMIC_FAA(&alloc_count_, 1);
}
return task;
}
template <typename T, int64_t STATISTIC_INTERVAL>
void TransObjFactory<T, STATISTIC_INTERVAL>::release(T* obj)
{
if (NULL == obj) {
TRANS_LOG(ERROR, "task which should be released is null");
} else {
op_reclaim_free(obj);
obj = NULL;
(void)ATOMIC_FAA(&release_count_, 1);
}
}
#define MAKE_FACTORY_CLASS_DEFINE_(object_name, object_name2) \
class object_name##Factory { \
public: \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册