From ded16a65b4f314294a612df0ea05129a9ac5d8d4 Mon Sep 17 00:00:00 2001 From: dongning12 Date: Thu, 12 Jan 2023 22:17:02 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=85=B1=E4=BA=AB=E5=AD=98=E5=82=A8]=20dw=20a?= =?UTF-8?q?dapt=20shared=5Fstorage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_dms_recovery.cpp | 1 + src/gausskernel/process/threadpool/knl_instance.cpp | 1 + src/gausskernel/storage/access/transam/xlog.cpp | 11 ++++++++++- src/include/access/double_write.h | 8 ++++++-- src/include/knl/knl_instance.h | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp index 713799341..b1c12ddb5 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_recovery.cpp @@ -329,4 +329,5 @@ void ss_failover_dw_init() ckpt_shutdown_pagewriter(); g_instance.dms_cxt.SSRecoveryInfo.in_flushcopy = false; ss_failover_dw_init_internal(); + g_instance.dms_cxt.dw_init = true; } \ No newline at end of file diff --git a/src/gausskernel/process/threadpool/knl_instance.cpp b/src/gausskernel/process/threadpool/knl_instance.cpp index d9055eedb..d36c897ce 100755 --- a/src/gausskernel/process/threadpool/knl_instance.cpp +++ b/src/gausskernel/process/threadpool/knl_instance.cpp @@ -197,6 +197,7 @@ static void knl_g_dms_init(knl_g_dms_context *dms_cxt) dms_cxt->ckptRedo = InvalidXLogRecPtr; dms_cxt->resetSyscache = false; dms_cxt->finishedRecoverOldPrimaryDWFile = false; + dms_cxt->dw_init = false; } static void knl_g_tests_init(knl_g_tests_context* tests_cxt) diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index ca69309e9..7dd6d8a5a 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -9678,10 +9678,19 @@ void StartupXLOG(void) * in SS Switchover, skip dw init since we didn't do ShutdownXLOG */ - if (!SS_PERFORMING_SWITCHOVER && !SSFAILOVER_TRIGGER && !ENABLE_DMS) { + if ((ENABLE_REFORM && ((SS_REFORM_REFORMER && !SSFAILOVER_TRIGGER && !SS_PRIMARY_DEMOTED) || + (SS_REFORM_PARTNER && SS_STANDBY_PROMOTING))) || + !ENABLE_DMS || !ENABLE_REFORM) { /* process assist file of chunk recycling */ dw_ext_init(); dw_init(); + if (ENABLE_DMS) { + g_instance.dms_cxt.dw_init = true; + } + } + + if (SS_IN_FAILOVER && SS_REFORM_REFORMER) { + ss_failover_dw_init(); } /* Recover meta of undo subsystem. */ diff --git a/src/include/access/double_write.h b/src/include/access/double_write.h index d1c8963d6..f5fad0a69 100644 --- a/src/include/access/double_write.h +++ b/src/include/access/double_write.h @@ -271,8 +271,12 @@ void dw_ext_init(); */ inline bool dw_enabled() { - if (ENABLE_DMS) { - return false; + if (ENABLE_DMS && ENABLE_REFORM) { + if ((SS_STANDBY_PROMOTING && t_thrd.role != STARTUP && !g_instance.dms_cxt.dw_init) || + (SS_STANDBY_MODE && !SS_STANDBY_PROMOTING) || SS_PRIMARY_DEMOTED || + (SS_STANDBY_FAILOVER && t_thrd.role != STARTUP && !g_instance.dms_cxt.dw_init)) { + return false; + } } return (ENABLE_INCRE_CKPT && g_instance.attr.attr_storage.enable_double_write); } diff --git a/src/include/knl/knl_instance.h b/src/include/knl/knl_instance.h index 815aa6e46..82cc19006 100755 --- a/src/include/knl/knl_instance.h +++ b/src/include/knl/knl_instance.h @@ -1199,6 +1199,7 @@ typedef struct knl_g_dms_context { XLogRecPtr ckptRedo; bool resetSyscache; bool finishedRecoverOldPrimaryDWFile; + bool dw_init; } knl_g_dms_context; typedef struct knl_instance_context {