!6725 【bugfix】修复资源池化流控日志打印错误的问题

Merge pull request !6725 from 周聪/bugfix_log_ctrl_output_pr
This commit is contained in:
opengauss_bot
2024-11-26 12:02:30 +00:00
committed by Gitee
6 changed files with 34 additions and 14 deletions

View File

@ -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.

View File

@ -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()) {

View File

@ -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];

View File

@ -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,

View File

@ -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)));

View File

@ -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];