回合6.0.0[bugfix] 修复实时构建流控有概率出现主机收到挂掉节点的消息的问题
This commit is contained in:
committed by
jinyangzhen
parent
2b1934d28f
commit
4beef76427
@ -1140,7 +1140,14 @@ bool SSGetOldestXminFromAllStandby(TransactionId xmin, TransactionId xmax, Commi
|
||||
} while (ret != DMS_SUCCESS);
|
||||
}
|
||||
|
||||
/* broadcast to standby node update realtime-build logctrl enable */
|
||||
/**
|
||||
* @brief Priamry node broadcast to standby node update realtime-build logctrl enable.
|
||||
*
|
||||
* @param canncelInReform true: happend when primary node reload recovery_time_target,
|
||||
* need to canncel broadcast in reform;
|
||||
* false happend when primary node enable recovery_time_target
|
||||
* before reform finish, wait until broadcast finish.
|
||||
*/
|
||||
void SSBroadcastRealtimeBuildLogCtrlEnable(bool canncelInReform)
|
||||
{
|
||||
dms_context_t dms_ctx;
|
||||
@ -1161,6 +1168,10 @@ void SSBroadcastRealtimeBuildLogCtrlEnable(bool canncelInReform)
|
||||
.check_session_kill = (unsigned char)true
|
||||
};
|
||||
|
||||
if (canncelInReform && SS_IN_REFORM) {
|
||||
return;
|
||||
}
|
||||
|
||||
do {
|
||||
ret = dms_broadcast_msg(&dms_ctx, &dms_broad_info);
|
||||
if (ret == DMS_SUCCESS || (canncelInReform && SS_IN_REFORM)) {
|
||||
@ -1175,6 +1186,9 @@ void SSBroadcastRealtimeBuildLogCtrlEnable(bool canncelInReform)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Primary node notify standby nodes whether enable or disable recovery_time_target.
|
||||
*/
|
||||
int SSUpdateRealtimeBuildLogCtrl(char* data, uint32 len)
|
||||
{
|
||||
if (unlikely(len != sizeof(SSBroadcastRealtimeBuildLogCtrl))) {
|
||||
@ -1249,7 +1263,13 @@ int SSGetStandbyRealtimeBuildPtr(char* data, uint32 len)
|
||||
SSBroadcastRealtimeBuildPtr *receiveMessage = (SSBroadcastRealtimeBuildPtr *)data;
|
||||
XLogRecPtr realtimePtr = receiveMessage->realtimeBuildPtr;
|
||||
int srcId = receiveMessage->srcInstId;
|
||||
|
||||
if (((0x1 << srcId) & g_instance.dms_cxt.SSReformInfo.new_bitmap) == 0) {
|
||||
ereport(WARNING, (errmodule(MOD_DMS),
|
||||
errmsg("[SS][On-demand] Get invalid realtime-build ptr from standby inst_id: %d, "
|
||||
"replayEndRecPtr: %X/%X, ignore it.",
|
||||
srcId, (uint32)(realtimePtr >> 32), (uint32)realtimePtr)));
|
||||
return DMS_SUCCESS;
|
||||
}
|
||||
realtime_build_ctrl_t *rtBuildCtrl = &g_instance.dms_cxt.SSRecoveryInfo.rtBuildCtrl[srcId];
|
||||
if (g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus == DISABLE) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = ENABLE_LOG_CTRL;
|
||||
|
||||
@ -178,10 +178,10 @@ typedef struct ss_recovery_info {
|
||||
bool disaster_cluster_promoting; // standby cluster is promoting
|
||||
volatile ondemand_recovery_pause_status_t ondemand_recovery_pause_status;
|
||||
bool realtime_build_in_reform; // used to avoid starting realtime build during reform
|
||||
volatile realtime_build_log_ctrl_status realtimeBuildLogCtrlStatus;
|
||||
slock_t sleepTimeSyncLock;
|
||||
volatile int globalSleepTime;
|
||||
realtime_build_ctrl_t rtBuildCtrl[DMS_MAX_INSTANCES];
|
||||
volatile realtime_build_log_ctrl_status realtimeBuildLogCtrlStatus; // used in realtime build log ctrl
|
||||
slock_t sleepTimeSyncLock; // used in realtime build log ctrl
|
||||
volatile int globalSleepTime; // used in realtime build log ctrl
|
||||
realtime_build_ctrl_t rtBuildCtrl[DMS_MAX_INSTANCES]; // used in realtime build log ctrl
|
||||
} ss_recovery_info_t;
|
||||
|
||||
typedef struct ondemand_htab_ctrl {
|
||||
|
||||
Reference in New Issue
Block a user