From d3e85e34fadd6919e93b266cc8c7c653c18af0cc Mon Sep 17 00:00:00 2001 From: congzhou2603 Date: Wed, 16 Apr 2025 11:26:14 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90bugfix=E3=80=91=E4=BF=AE=E5=A4=8Dabort?= =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E5=86=85=E5=88=9B=E5=BB=BA=E4=BA=86=E5=A4=A7=E9=87=8F?= =?UTF-8?q?=E6=96=87=E5=8F=AF=E8=83=BD=E4=BC=9A=E5=AF=BC=E8=87=B4abort?= =?UTF-8?q?=E5=8D=A1=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/process/postmaster/pagewriter.cpp | 2 ++ src/gausskernel/storage/sync/knl_usync.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/gausskernel/process/postmaster/pagewriter.cpp b/src/gausskernel/process/postmaster/pagewriter.cpp index 8e18ff3d55..23508ad9dc 100755 --- a/src/gausskernel/process/postmaster/pagewriter.cpp +++ b/src/gausskernel/process/postmaster/pagewriter.cpp @@ -55,6 +55,7 @@ #define MIN(A, B) ((B) < (A) ? (B) : (A)) #define MAX(A, B) ((B) > (A) ? (B) : (A)) #define FULL_CKPT g_instance.ckpt_cxt_ctl->flush_all_dirty_page +#define MAX_SYNC_REQUEST_HALF (g_instance.ckpt_cxt_ctl->incre_ckpt_sync_shmem->max_requests / 2) const float ONE_HALF = 0.5; const int TEN_MILLISECOND = 10; @@ -1288,6 +1289,7 @@ static void ckpt_pagewriter_main_thread_loop(void) candidate_num = get_curr_candidate_nums(CAND_LIST_NORMAL) + get_curr_candidate_nums(CAND_LIST_NVM) + get_curr_candidate_nums(CAND_LIST_SEG); while (get_dirty_page_num() == 0 && candidate_num == (uint32)TOTAL_BUFFER_NUM && + g_instance.ckpt_cxt_ctl->incre_ckpt_sync_shmem->num_requests < MAX_SYNC_REQUEST_HALF && !t_thrd.pagewriter_cxt.shutdown_requested) { rc = WaitLatch(&t_thrd.proc->procLatch, WL_TIMEOUT | WL_POSTMASTER_DEATH, (long)TEN_MILLISECOND); if (rc & WL_POSTMASTER_DEATH) { diff --git a/src/gausskernel/storage/sync/knl_usync.cpp b/src/gausskernel/storage/sync/knl_usync.cpp index 80b6782880..92c40e5346 100644 --- a/src/gausskernel/storage/sync/knl_usync.cpp +++ b/src/gausskernel/storage/sync/knl_usync.cpp @@ -751,6 +751,10 @@ bool PgwrForwardSyncRequest(const FileTag *ftag, SyncRequestType type) if (incre_ckpt_sync_shmem->pagewritermain_pid == 0 || (incre_ckpt_sync_shmem->num_requests >= incre_ckpt_sync_shmem->max_requests && !CompactPageWriterRequestQueue())) { LWLockRelease(sync_queue_lwlock); + if (incre_ckpt_sync_shmem->pagewritermain_pid !=0 && incre_ckpt_sync_shmem->num_requests >= + incre_ckpt_sync_shmem->max_requests) { + SetLatch(g_instance.proc_base->pgwrMainThreadLatch); + } return false; } -- Gitee