diff --git a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp index c63dd9f70..8cbd493c5 100644 --- a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp +++ b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp @@ -1752,6 +1752,7 @@ static const XLogParseBlock g_xlogParseBlockTable[RM_MAX_ID + 1] = { { UBTreeRedoParseToBlock, RM_UBTREE_ID }, { UBTree2RedoParseToBlock, RM_UBTREE2_ID }, { segpage_redo_parse_to_block, RM_SEGPAGE_ID }, + { NULL, RM_REPLORIGIN_ID }, }; inline XLogRecParseState *XLogParseToBlockCommonFunc(XLogReaderState *record, uint32 *blocknum) { diff --git a/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp b/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp index e7f8577a1..c120b6a22 100755 --- a/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp +++ b/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp @@ -142,6 +142,7 @@ static bool DispatchMotRecord(XLogReaderState* record, List* expectedTLIs, Times #endif static bool DispatchBtreeRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); static bool DispatchSegpageSmgrRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); +static bool DispatchRepOriginRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); static bool DispatchUBTreeRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); static bool DispatchUBTree2Record(XLogReaderState* record, List* expectedTLIs, TimestampTz recordXTime); @@ -209,6 +210,7 @@ static const RmgrDispatchData g_dispatchTable[RM_MAX_ID + 1] = { XLOG_UBTREE2_FREEZE }, { DispatchSegpageSmgrRecord, RmgrRecordInfoValid, RM_SEGPAGE_ID, XLOG_SEG_ATOMIC_OPERATION, XLOG_SEG_NEW_PAGE}, + { DispatchRepOriginRecord, RmgrRecordInfoValid, RM_REPLORIGIN_ID, XLOG_REPLORIGIN_SET, XLOG_REPLORIGIN_DROP }, }; void UpdateDispatcherStandbyState(HotStandbyState *state) @@ -1146,6 +1148,13 @@ static bool DispatchSegpageSmgrRecord(XLogReaderState *record, List *expectedTLI return isNeedFullSync; } +/* Run from the dispatcher thread. */ +static bool DispatchRepOriginRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime) +{ + DispatchTxnRecord(record, expectedTLIs, recordXTime, false); + return false; +} + /* Run from the dispatcher thread. */ static bool DispatchCLogRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime) { diff --git a/src/gausskernel/storage/access/transam/parallel_recovery/dispatcher.cpp b/src/gausskernel/storage/access/transam/parallel_recovery/dispatcher.cpp index 67f133e29..fbc44327c 100755 --- a/src/gausskernel/storage/access/transam/parallel_recovery/dispatcher.cpp +++ b/src/gausskernel/storage/access/transam/parallel_recovery/dispatcher.cpp @@ -151,6 +151,7 @@ static bool DispatchUBTree2Record(XLogReaderState *record, List *expectedTLIs, T static bool DispatchMotRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); #endif static bool DispatchSegpageSmgrRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); +static bool DispatchRepOriginRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime); static bool RmgrRecordInfoValid(XLogReaderState *record, uint8 minInfo, uint8 maxInfo); static bool RmgrGistRecordInfoValid(XLogReaderState *record, uint8 minInfo, uint8 maxInfo); @@ -208,6 +209,7 @@ static const RmgrDispatchData g_dispatchTable[RM_MAX_ID + 1] = { XLOG_UBTREE2_FREEZE }, { DispatchSegpageSmgrRecord, RmgrRecordInfoValid, RM_SEGPAGE_ID, XLOG_SEG_ATOMIC_OPERATION, XLOG_SEG_NEW_PAGE }, + { DispatchRepOriginRecord, RmgrRecordInfoValid, RM_REPLORIGIN_ID, XLOG_REPLORIGIN_SET, XLOG_REPLORIGIN_DROP }, }; /* Run from the dispatcher and txn worker thread. */ @@ -1057,6 +1059,13 @@ static bool DispatchSegpageSmgrRecord(XLogReaderState* record, List* expectedTLI return isNeedFullSync; } +/* Run from the dispatcher thread. */ +static bool DispatchRepOriginRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime) +{ + DispatchTxnRecord(record, expectedTLIs, recordXTime, false); + return false; +} + /* Run from the dispatcher thread. */ static bool DispatchCLogRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime) {