diff --git a/src/gausskernel/ddes/adapter/ss_reform_common.cpp b/src/gausskernel/ddes/adapter/ss_reform_common.cpp index 7dc9892a0..63c1abb47 100644 --- a/src/gausskernel/ddes/adapter/ss_reform_common.cpp +++ b/src/gausskernel/ddes/adapter/ss_reform_common.cpp @@ -432,3 +432,12 @@ void SSStandbySetLibpqswConninfo() return; } + +void SSDoradoRefreshMode(ClusterRunMode doradoMode) +{ + LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); + g_instance.dms_cxt.SSReformerControl.clusterRunMode = doradoMode; + SSUpdateReformerCtrl(); + LWLockRelease(ControlFileLock); + ereport(LOG, (errmsg("zatest: SSDoradoRefreshMode change control file cluster run mode to: %d", g_instance.dms_cxt.SSReformerControl.clusterRunMode))); +} diff --git a/src/gausskernel/process/postmaster/postmaster.cpp b/src/gausskernel/process/postmaster/postmaster.cpp index f558ebae5..d2b7eecb9 100644 --- a/src/gausskernel/process/postmaster/postmaster.cpp +++ b/src/gausskernel/process/postmaster/postmaster.cpp @@ -2116,6 +2116,7 @@ int PostmasterMain(int argc, char* argv[]) } else { ereport(FATAL, (errmsg("the options of -z is not recognized"))); } + ereport(LOG, (errmsg("Set dorado cluster run mode %d", g_instance.attr.attr_common.cluster_run_mode))); g_instance.dms_cxt.SSReformerControl.clusterRunMode = (ClusterRunMode)g_instance.attr.attr_common.cluster_run_mode; break; case 'c': @@ -10043,16 +10044,14 @@ static void sigusr1_handler(SIGNAL_ARGS) * in case failover has been performed between two dorado cluster. */ if (SS_REPLICATION_DORADO_CLUSTER) { + SSReadControlFile(REFORM_CTRL_PAGE); g_instance.attr.attr_common.cluster_run_mode = g_instance.dms_cxt.SSReformerControl.clusterRunMode; } if (SS_REPLICATION_MAIN_STANBY_NODE) { ereport(LOG, (errmsg("Failover between two dorado cluster start, change current run mode to primary_cluster"))); g_instance.attr.attr_common.cluster_run_mode = RUN_MODE_PRIMARY; - LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); - g_instance.dms_cxt.SSReformerControl.clusterRunMode = RUN_MODE_PRIMARY; - SSUpdateReformerCtrl(); - LWLockRelease(ControlFileLock); + SSDoradoRefreshMode((ClusterRunMode)g_instance.attr.attr_common.cluster_run_mode); t_thrd.xlog_cxt.server_mode = PRIMARY_MODE; SetHaShmemData(); } @@ -10460,6 +10459,8 @@ static void sigusr1_handler(SIGNAL_ARGS) } if (ENABLE_DMS && CheckPostmasterSignal(PMSIGNAL_DMS_FAILOVER_STARTUP)) { + ereport(LOG,(errmsg("dms failover, update cluster run mode to: %d", g_instance.dms_cxt.SSReformerControl.clusterRunMode))); + g_instance.attr.attr_common.cluster_run_mode = g_instance.dms_cxt.SSReformerControl.clusterRunMode; SShandle_promote_signal(); } diff --git a/src/gausskernel/storage/access/transam/xlog.cpp b/src/gausskernel/storage/access/transam/xlog.cpp index a7fe1c715..fba7a041b 100755 --- a/src/gausskernel/storage/access/transam/xlog.cpp +++ b/src/gausskernel/storage/access/transam/xlog.cpp @@ -3198,10 +3198,6 @@ void XLogWaitFlush(XLogRecPtr recptr) return; } - if (SS_REPLICATION_STANDBY_CLUSTER) { - return; - } - volatile XLogRecPtr flushTo = gs_compare_and_swap_u64(&g_instance.wal_cxt.flushResult, 0, 0); while (XLByteLT(flushTo, recptr)) { diff --git a/src/include/ddes/dms/ss_reform_common.h b/src/include/ddes/dms/ss_reform_common.h index ec5173648..9e1386943 100644 --- a/src/include/ddes/dms/ss_reform_common.h +++ b/src/include/ddes/dms/ss_reform_common.h @@ -51,3 +51,4 @@ int SSCancelTransactionOfAllStandby(SSBroadcastOp type); int SSProcessCancelTransaction(SSBroadcastOp type); int SSXLogFileOpenAnyTLI(XLogSegNo segno, int emode, uint32 sources, char* xlog_path); void SSStandbySetLibpqswConninfo(); +void SSDoradoRefreshMode(ClusterRunMode doradoMode); diff --git a/src/include/replication/ss_cluster_replication.h b/src/include/replication/ss_cluster_replication.h index eebffcff2..09d230247 100644 --- a/src/include/replication/ss_cluster_replication.h +++ b/src/include/replication/ss_cluster_replication.h @@ -33,7 +33,7 @@ const uint32 SS_DORADO_CTL_INFO_SIZE = 512; #define SS_REPLICATION_DORADO_CLUSTER \ - (ENABLE_DSS && g_instance.attr.attr_storage.ss_enable_dorado) + (ENABLE_DMS && ENABLE_DSS && g_instance.attr.attr_storage.ss_enable_dorado) /* Primary Cluster in SS replication */ #define SS_REPLICATION_PRIMARY_CLUSTER \