diff --git a/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp b/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp index a59e65d4e..6912b8272 100644 --- a/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp +++ b/src/gausskernel/storage/access/transam/extreme_rto/dispatcher.cpp @@ -979,7 +979,18 @@ static bool DispatchDataBaseRecord(XLogReaderState *record, List *expectedTLIs, static bool DispatchTableSpaceRecord(XLogReaderState *record, List *expectedTLIs, TimestampTz recordXTime) { bool isNeedFullSync = false; - DispatchRecordWithoutPage(record, expectedTLIs); + uint8 info = (XLogRecGetInfo(record) & (~XLR_INFO_MASK)); + if (info == XLOG_TBLSPC_DROP) { + RedoItem *item = GetRedoItemPtr(record); + ReferenceRedoItem(item); + for (uint32 i = 0; i < g_dispatcher->pageLineNum; ++i) { + ReferenceRedoItem(item); + AddPageRedoItem(g_dispatcher->pageLines[i].batchThd, item); + } + AddTxnRedoItem(g_dispatcher->trxnLine.managerThd, item); + } else { + DispatchRecordWithoutPage(record, expectedTLIs); + } g_dispatcher->needImmediateCheckpoint = true; return isNeedFullSync; } diff --git a/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp b/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp index 4f7423fa9..61d9dbef7 100644 --- a/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp +++ b/src/gausskernel/storage/access/transam/extreme_rto/page_redo.cpp @@ -809,6 +809,9 @@ bool PageManagerRedoDistributeItems(void **eleArry, uint32 eleNum) RedoPageManagerDoDropAction(preState, hashMap); break; case BLOCK_DATA_DROP_TBLSPC_TYPE: + /* just make sure any other ddl before drop tblspc is done */ + XLogBlockParseStateRelease(preState); + break; case BLOCK_DATA_CREATE_DATABASE_TYPE: case BLOCK_DATA_CREATE_TBLSPC_TYPE: RedoPageManagerDistributeBlockRecord(hashMap, NULL);