diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index a9fb5b67dc424cbf2e1a4139dbe142b05881a9ba..49ce8858956affa688508f439a7e9e16909ca505 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 8dda0bb12d31aa8379b308af29541ff3bed66377..7906757494025365949ddc5107f4ca87818ee7c2 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 eb8978df3d158413822d5457ed0daf12daac153c..9f3a8472d41b86422744bb12d9b414106824510c 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 265362c4105c62de9e3549acac6669464d08611b..2d29673908eb18020d483a316be2f55352281a5b 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();