From b0a69f6e9fd3ce39f12fbc43531fd4de293322a5 Mon Sep 17 00:00:00 2001 From: chenzhikai <895543892@qq.com> Date: Mon, 19 Jun 2023 16:54:56 +0800 Subject: [PATCH] =?UTF-8?q?=20=E8=A7=A3=E5=86=B3dorado=20sharestorage=20in?= =?UTF-8?q?it=E5=A4=B1=E8=B4=A5=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/ddes/adapter/ss_dms_callback.cpp | 5 +++++ src/gausskernel/process/threadpool/knl_instance.cpp | 1 + src/gausskernel/storage/access/transam/xlog.cpp | 4 ++++ src/include/ddes/dms/ss_dms_recovery.h | 1 + 4 files changed, 11 insertions(+) diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index a9fb5b67dc..49ce885895 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -1800,6 +1800,11 @@ static int CBMarkNeedFlush(void *db_handle, char *pageid) void DmsCallbackThreadShmemInit(unsigned char need_startup, char **reg_data) { + /* in dorado mode, we need to wait sharestorageinit finished */ + while (!g_instance.dms_cxt.SSRecoveryInfo.dorado_sharestorage_inited && + g_instance.attr.attr_storage.xlog_file_path != 0) { + pg_usleep(REFORM_WAIT_TIME); + } IsUnderPostmaster = true; // to add cnt, avoid postmain execute proc_exit to free shmem now (void)pg_atomic_add_fetch_u32(&g_instance.dms_cxt.inDmsThreShmemInitCnt, 1); diff --git a/src/gausskernel/process/threadpool/knl_instance.cpp b/src/gausskernel/process/threadpool/knl_instance.cpp index 8dda0bb12d..7906757494 100755 --- a/src/gausskernel/process/threadpool/knl_instance.cpp +++ b/src/gausskernel/process/threadpool/knl_instance.cpp @@ -193,6 +193,7 @@ static void knl_g_dms_init(knl_g_dms_context *dms_cxt) dms_cxt->SSRecoveryInfo.in_ondemand_recovery = false; dms_cxt->SSRecoveryInfo.startup_need_exit_normally = false; dms_cxt->SSRecoveryInfo.recovery_trapped_in_page_request = false; + dms_cxt->SSRecoveryInfo.dorado_sharestorage_inited = false; dms_cxt->log_timezone = NULL; pg_atomic_init_u32(&dms_cxt->inDmsThreShmemInitCnt, 0); pg_atomic_init_u32(&dms_cxt->inProcExitCnt, 0); diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index eb8978df3d..9f3a8472d4 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -18721,6 +18721,10 @@ void ShareStorageInit() securec_check_ss(errorno, "", ""); UpdatePostgresqlFile("xlog_file_size", option); } + + if (ENABLE_DMS) { + g_instance.dms_cxt.SSRecoveryInfo.dorado_sharestorage_inited = true; + } } } diff --git a/src/include/ddes/dms/ss_dms_recovery.h b/src/include/ddes/dms/ss_dms_recovery.h index 265362c410..2d29673908 100644 --- a/src/include/ddes/dms/ss_dms_recovery.h +++ b/src/include/ddes/dms/ss_dms_recovery.h @@ -86,6 +86,7 @@ typedef struct ss_recovery_info { bool startup_need_exit_normally; //used in alive failover bool recovery_trapped_in_page_request; //used in alive failover bool in_ondemand_recovery; + bool dorado_sharestorage_inited; // used in dorado mode } ss_recovery_info_t; extern bool SSRecoveryNodes(); -- Gitee