!4835 【资源池化】【bugfix】【推进oldesxmin重构】PM线程需要确认dms_auxiliary线程退出,才能走后续的退出流程
Merge pull request !4835 from 董宁/bugfix15_master
This commit is contained in:
@ -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);
|
||||
/*
|
||||
|
@ -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)
|
||||
|
@ -343,6 +343,10 @@ void proc_exit(int code)
|
||||
|
||||
GlobalStatsCleanupFiles();
|
||||
|
||||
if (ENABLE_DMS && AmDmsAuxiliaryProcess()) {
|
||||
g_instance.pid_cxt.DmsAuxiliaryPID = 0;
|
||||
}
|
||||
|
||||
gs_thread_exit(code);
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user