!6725 【bugfix】修复资源池化流控日志打印错误的问题
Merge pull request !6725 from 周聪/bugfix_log_ctrl_output_pr
This commit is contained in:
@ -7009,7 +7009,7 @@ static void assign_dcf_flow_control_rto(int newval, void *extra)
|
||||
if (ENABLE_DMS && !SS_DISASTER_CLUSTER && t_thrd.proc_cxt.MyProcPid == PostmasterPid) {
|
||||
// clean realtime-build log ctrl cache, before realtime-build log ctrl enable.
|
||||
if (g_instance.dms_cxt.dmsInited && SS_PRIMARY_MODE && oldval == 0 && newval > 0) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = false;
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
SpinLockInit(&g_instance.dms_cxt.SSRecoveryInfo.sleepTimeSyncLock);
|
||||
g_instance.dms_cxt.SSRecoveryInfo.globalSleepTime = 0;
|
||||
errno_t rc = memset_s(g_instance.dms_cxt.SSRecoveryInfo.rtBuildCtrl,
|
||||
@ -7021,7 +7021,7 @@ static void assign_dcf_flow_control_rto(int newval, void *extra)
|
||||
g_instance.attr.attr_storage.dms_attr.realtime_build_target_rto = newval;
|
||||
// make realtime-build logctrl disable, when recovery_time_target is set to 0;
|
||||
if (g_instance.dms_cxt.dmsInited && SS_PRIMARY_MODE && oldval > 0 && newval == 0) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = false;
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
}
|
||||
|
||||
// notify nodes, start or stop realtime-build log ctrl.
|
||||
|
||||
@ -1941,11 +1941,11 @@ static void FailoverCleanBackends()
|
||||
|
||||
static void RestartRealtimeBuildCtrl()
|
||||
{
|
||||
if (SS_IN_REFORM && g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl) {
|
||||
if (SS_IN_REFORM && g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus > DISABLE) {
|
||||
ereport(LOG, (errmsg("[SS reform][On-demand] reform happened, disable realtime build log ctrl, "
|
||||
"and will make it enable again after reform if needed.")));
|
||||
}
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = false;
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
SpinLockInit(&g_instance.dms_cxt.SSRecoveryInfo.sleepTimeSyncLock);
|
||||
g_instance.dms_cxt.SSRecoveryInfo.globalSleepTime = 0;
|
||||
errno_t rc = memset_s(g_instance.dms_cxt.SSRecoveryInfo.rtBuildCtrl,
|
||||
@ -2098,7 +2098,7 @@ static void CBReformStartNotify(void *db_handle, dms_reform_start_context_t *rs_
|
||||
g_instance.dms_cxt.SSReformInfo.old_bitmap = g_instance.dms_cxt.SSReformerControl.list_stable;
|
||||
ereport(LOG, (errmodule(MOD_DMS), errmsg("[SS reform] old cluster node bitmap: %lu", g_instance.dms_cxt.SSReformInfo.old_bitmap)));
|
||||
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = false;
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
if (g_instance.dms_cxt.SSRecoveryInfo.in_failover) {
|
||||
FailoverCleanBackends();
|
||||
} else if (SSBackendNeedExitScenario()) {
|
||||
|
||||
@ -1177,11 +1177,18 @@ int SSUpdateRealtimeBuildLogCtrl(char* data, uint32 len)
|
||||
if (unlikely(len != sizeof(SSBroadcastRealtimeBuildLogCtrl))) {
|
||||
return DMS_ERROR;
|
||||
}
|
||||
if (!ENABLE_ONDEMAND_REALTIME_BUILD) {
|
||||
if (!ENABLE_ONDEMAND_REALTIME_BUILD || !SS_STANDBY_MODE) {
|
||||
return DMS_SUCCESS;
|
||||
}
|
||||
SSBroadcastRealtimeBuildLogCtrl *logCtrlEnable = (SSBroadcastRealtimeBuildLogCtrl *)data;
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = logCtrlEnable->enableLogCtrl;
|
||||
|
||||
realtime_build_log_ctrl_status oldState = g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus;
|
||||
if (!logCtrlEnable->enableLogCtrl) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
} else if (oldState == DISABLE) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = ENABLE_LOG_CTRL;
|
||||
}
|
||||
|
||||
ereport(LOG, (errmodule(MOD_DMS),
|
||||
errmsg("[On-demand] Update standby realtime-build log ctrl %s, "
|
||||
"enableLogCtrl: %s, enable_ondemand_realtime_build: true.",
|
||||
@ -1240,12 +1247,12 @@ int SSGetStandbyRealtimeBuildPtr(char* data, uint32 len)
|
||||
XLogRecPtr realtimePtr = receiveMessage->realtimeBuildPtr;
|
||||
int srcId = receiveMessage->srcInstId;
|
||||
|
||||
if (!g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl = true;
|
||||
if (g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus == DISABLE) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = ENABLE_LOG_CTRL;
|
||||
ereport(LOG, (errmodule(MOD_DMS),
|
||||
errmsg("[SS][On-demand] Get realtime-build ptr from standby inst_id: %d,"
|
||||
"enable realtime-build log ctrl, replayEndRecPtr: %X/%X",
|
||||
SS_PRIMARY_ID, (uint32)(realtimePtr >> 32), (uint32)realtimePtr)));
|
||||
srcId, (uint32)(realtimePtr >> 32), (uint32)realtimePtr)));
|
||||
}
|
||||
realtime_build_ctrl_t *rtBuildCtrl = &g_instance.dms_cxt.SSRecoveryInfo.rtBuildCtrl[srcId];
|
||||
|
||||
|
||||
@ -215,7 +215,7 @@ static void knl_g_dms_init(knl_g_dms_context *dms_cxt)
|
||||
dms_cxt->SSRecoveryInfo.disaster_cluster_promoting = false;
|
||||
dms_cxt->SSRecoveryInfo.dorado_sharestorage_inited = false;
|
||||
dms_cxt->SSRecoveryInfo.ondemand_recovery_pause_status = NOT_PAUSE;
|
||||
dms_cxt->SSRecoveryInfo.enableRealtimeBuildLogCtrl = false;
|
||||
dms_cxt->SSRecoveryInfo.realtimeBuildLogCtrlStatus = DISABLE;
|
||||
dms_cxt->SSRecoveryInfo.globalSleepTime = 0;
|
||||
dms_cxt->SSRecoveryInfo.sleepTimeSyncLock = (slock_t)0;
|
||||
errno_t rc = memset_s(dms_cxt->SSRecoveryInfo.rtBuildCtrl,
|
||||
|
||||
@ -2525,6 +2525,13 @@ static void LogCtrlReportRealtimeBuildPtr()
|
||||
g_dispatcher->reportTime = currentTime;
|
||||
return;
|
||||
}
|
||||
if (g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus == ENABLE_LOG_CTRL) {
|
||||
g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus = ENABLE_REPORT_PTR;
|
||||
ereport(LOG, (errmodule(MOD_DMS),
|
||||
errmsg("[SS][On-demand] send primary node %d realtime-build ptr start, realtime-build %X/%X",
|
||||
SS_PRIMARY_ID, (uint32)(minEnd >> 32), (uint32)minEnd)));
|
||||
}
|
||||
|
||||
ereport(DEBUG4, (errmodule(MOD_DMS),
|
||||
errmsg("[SS][On-demand] send primary node %d realtime-build ptr start, realtime-build %X/%X",
|
||||
SS_PRIMARY_ID, (uint32)(minEnd >> 32), (uint32)minEnd)));
|
||||
|
||||
@ -63,9 +63,9 @@
|
||||
!g_instance.attr.attr_storage.ss_enable_dorado && \
|
||||
!g_instance.attr.attr_storage.ss_stream_cluster)
|
||||
#define SS_PRIMARY_ENABLE_TARGET_RTO (ENABLE_REALTIME_BUILD_TARGET_RTO && \
|
||||
SS_NORMAL_PRIMARY && g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl > 0)
|
||||
SS_NORMAL_PRIMARY && g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus > DISABLE)
|
||||
#define SS_STANDBY_ENABLE_TARGET_RTO (SS_NORMAL_STANDBY && \
|
||||
SS_ONDEMAND_REALTIME_BUILD_NORMAL && g_instance.dms_cxt.SSRecoveryInfo.enableRealtimeBuildLogCtrl > 0)
|
||||
SS_ONDEMAND_REALTIME_BUILD_NORMAL && g_instance.dms_cxt.SSRecoveryInfo.realtimeBuildLogCtrlStatus > DISABLE)
|
||||
#define REFORM_CTRL_VERSION 1
|
||||
typedef struct st_reformer_ctrl {
|
||||
uint32 version;
|
||||
@ -148,6 +148,12 @@ typedef struct realtime_build_log_ctrl {
|
||||
int sleepTime;
|
||||
} realtime_build_ctrl_t;
|
||||
|
||||
typedef enum st_realtime_build_log_ctrl_status {
|
||||
DISABLE = 0, // realtime-build log ctrl disable
|
||||
ENABLE_LOG_CTRL, // primary: receive realtime-build ptr, standby: receive enable log ctrl message
|
||||
ENABLE_REPORT_PTR // standby: start to report realtime-build ptr
|
||||
} realtime_build_log_ctrl_status;
|
||||
|
||||
typedef struct ss_recovery_info {
|
||||
bool recovery_pause_flag;
|
||||
volatile failover_ckpt_status_t failover_ckpt_status;
|
||||
@ -172,7 +178,7 @@ 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 bool enableRealtimeBuildLogCtrl;
|
||||
volatile realtime_build_log_ctrl_status realtimeBuildLogCtrlStatus;
|
||||
slock_t sleepTimeSyncLock;
|
||||
volatile int globalSleepTime;
|
||||
realtime_build_ctrl_t rtBuildCtrl[DMS_MAX_INSTANCES];
|
||||
|
||||
Reference in New Issue
Block a user