add openGauss 3.1.0 feature code

This commit is contained in:
yanghao
2022-09-03 16:22:35 +08:00
parent 801d945a3d
commit b919f404e8
2759 changed files with 521358 additions and 366321 deletions

View File

@ -57,7 +57,7 @@
#ifdef MEMORY_CONTEXT_TRACK
#include "memory_func.h"
#endif
#include "utils/mem_snapshot.h"
ThreadPoolSessControl::ThreadPoolSessControl(MemoryContext context)
{
@ -628,7 +628,7 @@ void ThreadPoolSessControl::getSessionClientInfo(Tuplestorestate* tupStore, Tupl
}
void ThreadPoolSessControl::getSessionMemoryContextInfo(const char* ctx_name,
StringInfoData* buf, knl_sess_control** sess)
StringInfoDataHuge* buf, knl_sess_control** sess)
{
#ifdef MEMORY_CONTEXT_TRACK
AutoMutexLock alock(&m_sessCtrlock);
@ -670,6 +670,95 @@ void ThreadPoolSessControl::getSessionMemoryContextInfo(const char* ctx_name,
#endif
}
void ThreadPoolSessControl::getSessionMemoryContextSpace(StringInfoDataHuge* buf, knl_sess_control** sess)
{
AutoMutexLock alock(&m_sessCtrlock);
knl_sess_control* ctrl = NULL;
Dlelem* elem = NULL;
PG_TRY();
{
HOLD_INTERRUPTS();
alock.lock();
/* collect all the Memory Context status, put in data */
elem = DLGetHead(&m_activelist);
while (elem != NULL) {
ctrl = (knl_sess_control*)DLE_VAL(elem);
*sess = ctrl;
if (ctrl->sess) {
(void)syscalllockAcquire(&ctrl->sess->utils_cxt.deleMemContextMutex);
RecursiveUnSharedMemoryContext(ctrl->sess->top_mem_cxt, buf);
(void)syscalllockRelease(&ctrl->sess->utils_cxt.deleMemContextMutex);
}
elem = DLGetSucc(elem);
}
alock.unLock();
RESUME_INTERRUPTS();
}
PG_CATCH();
{
if (*sess != NULL) {
ctrl = *sess;
(void)syscalllockRelease(&ctrl->sess->utils_cxt.deleMemContextMutex);
}
alock.unLock();
PG_RE_THROW();
}
PG_END_TRY();
}
bool ThreadPoolSessControl::CheckSessionCanTerminate(const Oid roleId)
{
if (superuser_arg(roleId) || systemDBA_arg(roleId)) {
return false;
}
if (isMonitoradmin(roleId)) {
return false;
}
return true;
}
SessMemoryUsage* ThreadPoolSessControl::getSessionMemoryUsage(int* num)
{
AutoMutexLock alock(&m_sessCtrlock);
knl_sess_control* ctrl = NULL;
Dlelem* elem = NULL;
HOLD_INTERRUPTS();
alock.lock();
SessMemoryUsage* result = (SessMemoryUsage*)palloc(m_activeSessionCount * sizeof(SessMemoryUsage));
int index = 0;
elem = DLGetHead(&m_activelist);
while (elem != NULL) {
ctrl = (knl_sess_control*)DLE_VAL(elem);
knl_session_context* sess = ctrl->sess;
if (sess && CheckSessionCanTerminate(sess->proc_cxt.MyRoleId)) {
result[index].sessid = sess->session_id;
result[index].usedSize = sess->stat_cxt.trackedBytes;
/* BackendStatusArray may not assigned while new connection init */
if (t_thrd.shemem_ptr_cxt.BackendStatusArray != NULL) {
result[index].state = (int)t_thrd.shemem_ptr_cxt.BackendStatusArray[sess->session_ctr_index].st_state;
} else {
result[index].state = STATE_IDLE;
}
index++;
}
elem = DLGetSucc(elem);
}
alock.unLock();
RESUME_INTERRUPTS();
*num = index;
return result;
}
knl_session_context* ThreadPoolSessControl::GetSessionByIdx(int idx)
{
if (IsValidCtrlIndex(idx)) {
@ -759,7 +848,7 @@ TransactionId ThreadPoolSessControl::ListAllSessionGttFrozenxids(int maxSize,
TransactionId result = InvalidTransactionId;
int i = 0;
if (u_sess->attr.attr_storage.max_active_gtt <= 0) {
if (g_instance.attr.attr_storage.max_active_gtt <= 0) {
return 0;
}
@ -770,10 +859,6 @@ TransactionId ThreadPoolSessControl::ListAllSessionGttFrozenxids(int maxSize,
*n = 0;
}
if (u_sess->attr.attr_storage.max_active_gtt <= 0) {
return InvalidTransactionId;
}
if (RecoveryInProgress()) {
return InvalidTransactionId;
}