1.解决PITR按recovery_target_time条件测试时,Startup线程卡在RequestCheckpoint处无法继续运行,数据库状态始终处于恢复状态

2.解决PITR按recovery_target_lsn条件测试时,Startup线程没有在指定的lsn位置停止
3.解决主线回合的代码未添加对t_thrd.syncrep_cxt.SyncRepConfig的判空保护,导致自动化用例失败
This commit is contained in:
arcoalien@qq.com 2022-01-05 11:18:15 +08:00
parent a7148f3714
commit 004db02529
2 changed files with 9 additions and 7 deletions

View File

@ -7844,11 +7844,13 @@ static bool recoveryStopsHere(XLogReaderState *record, bool *includeThis)
if (IS_DISASTER_RECOVER_MODE)
update_recovery_barrier();
}
} else if (XLogRecGetRmid(record) == RM_XLOG_ID && record_info == XLOG_RESTORE_POINT) {
xl_restore_point *recordRestorePointData = (xl_restore_point *)XLogRecGetData(record);
recordXtime = recordRestorePointData->rp_time;
rc = strncpy_s(recordRPName, MAXFNAMELEN, recordRestorePointData->rp_name, MAXFNAMELEN - 1);
securec_check(rc, "", "");
} else if (XLogRecGetRmid(record) == RM_XLOG_ID) {
if (record_info == XLOG_RESTORE_POINT) {
xl_restore_point *recordRestorePointData = (xl_restore_point *)XLogRecGetData(record);
recordXtime = recordRestorePointData->rp_time;
rc = strncpy_s(recordRPName, MAXFNAMELEN, recordRestorePointData->rp_name, MAXFNAMELEN - 1);
securec_check(rc, "", "");
}
} else {
return false;
}
@ -8510,7 +8512,7 @@ static void EndRedoXlog()
EndDispatcherContext();
}
ResourceManagerStop();
XLogWaitFlush(t_thrd.xlog_cxt.LogwrtResult->Write);
XLogWaitFlush(t_thrd.xlog_cxt.XactLastRecEnd);
}
int XLogSemas(void)

View File

@ -911,7 +911,7 @@ void ReplicationSlotsComputeRequiredLSN(ReplicationSlotState *repl_slt_state)
repl_slt_state->max_required = max_required;
if (*standby_slots_list == InvalidXLogRecPtr) {
repl_slt_state->quorum_min_required = InvalidXLogRecPtr;
} else {
} else if (t_thrd.syncrep_cxt.SyncRepConfig != NULL) {
for (i = t_thrd.syncrep_cxt.SyncRepConfig->num_sync - 1; i >= 0; i--) {
if (standby_slots_list[i] != InvalidXLogRecPtr) {
repl_slt_state->quorum_min_required = standby_slots_list[i];