!4835 【资源池化】【bugfix】【推进oldesxmin重构】PM线程需要确认dms_auxiliary线程退出,才能走后续的退出流程

Merge pull request !4835 from 董宁/bugfix15_master
This commit is contained in:
opengauss_bot
2024-02-05 06:29:42 +00:00
committed by Gitee
4 changed files with 26 additions and 3 deletions

View File

@ -43,6 +43,13 @@ static void dms_auxiliary_request_shutdown_handler(SIGNAL_ARGS)
errno = save_errno;
}
static void dms_auxiliary_siguser1_handler(SIGNAL_ARGS)
{
int save_errno = errno;
latch_sigusr1_handler();
errno = save_errno;
}
static void SetupDmsAuxiliarySignalHook(void)
{
/*
@ -54,7 +61,7 @@ static void SetupDmsAuxiliarySignalHook(void)
(void)gspqsignal(SIGQUIT, dms_auxiliary_request_shutdown_handler); /* hard crash time */
(void)gspqsignal(SIGALRM, SIG_IGN);
(void)gspqsignal(SIGPIPE, SIG_IGN);
(void)gspqsignal(SIGUSR1, SIG_IGN);
(void)gspqsignal(SIGUSR1, dms_auxiliary_siguser1_handler);
(void)gspqsignal(SIGUSR2, SIG_IGN);
(void)gspqsignal(SIGURG, print_stack);
/*

View File

@ -518,6 +518,14 @@ void DMSRefreshLogger(char *log_field, unsigned long long *value)
dms_refresh_logger(log_field, value);
}
static void SSWaitDmsAuxiliaryExit()
{
while (g_instance.pid_cxt.DmsAuxiliaryPID != 0) {
pg_usleep(1);
}
ereport(LOG, (errmsg("[SS] dms auxiliary thread exit")));
}
void DMSUninit()
{
if (!ENABLE_DMS || !g_instance.dms_cxt.dmsInited) {
@ -528,8 +536,11 @@ void DMSUninit()
ereport(LOG, (errmsg("DMS uninit worker threads, DRC, errdesc and DL")));
dms_uninit();
ereport(LOG, (errmsg("dms xmin maintainer thread exit")));
signal_child(g_instance.pid_cxt.DmsAuxiliaryPID, SIGTERM, -1);
if (g_instance.pid_cxt.DmsAuxiliaryPID != 0) {
ereport(LOG, (errmsg("[SS] notify dms auxiliary thread exit")));
signal_child(g_instance.pid_cxt.DmsAuxiliaryPID, SIGTERM, -1);
SSWaitDmsAuxiliaryExit();
}
}
// order: DMS reform finish -> CBReformDoneNotify finish -> startup exit (if has)

View File

@ -343,6 +343,10 @@ void proc_exit(int code)
GlobalStatsCleanupFiles();
if (ENABLE_DMS && AmDmsAuxiliaryProcess()) {
g_instance.pid_cxt.DmsAuxiliaryPID = 0;
}
gs_thread_exit(code);
}

View File

@ -620,6 +620,7 @@ typedef enum {
#define AmDmsReformProcProcess() (t_thrd.role == DMS_WORKER && t_thrd.dms_cxt.is_reform_proc)
#define AmDmsProcess() (t_thrd.role == DMS_WORKER)
#define AmErosRecyclerProcess() (t_thrd.bootstrap_cxt.MyAuxProcType == ExrtoRecyclerProcess)
#define AmDmsAuxiliaryProcess() (t_thrd.role == DMS_AUXILIARY_THREAD)