解决延迟回放同时remoteapply时不阻塞的问题
This commit is contained in:
@ -356,6 +356,8 @@ static LogDispatcher *CreateDispatcher()
|
||||
newDispatcher->totalCostTime = 0;
|
||||
newDispatcher->txnCostTime = 0;
|
||||
newDispatcher->pprCostTime = 0;
|
||||
newDispatcher->dispatchReadRecPtr = 0;
|
||||
newDispatcher->dispatchEndRecPtr = 0;
|
||||
return newDispatcher;
|
||||
}
|
||||
|
||||
@ -551,6 +553,9 @@ void DispatchRedoRecordToFile(XLogReaderState *record, List *expectedTLIs, Times
|
||||
isNeedFullSync = true;
|
||||
}
|
||||
|
||||
g_dispatcher->dispatchReadRecPtr = record->ReadRecPtr;
|
||||
g_dispatcher->dispatchEndRecPtr = record->EndRecPtr;
|
||||
|
||||
if (isNeedFullSync)
|
||||
ProcessPendingRecords(true);
|
||||
else if (++g_dispatcher->pendingCount >= g_dispatcher->pendingMax)
|
||||
|
@ -293,9 +293,9 @@ void ApplyReadyTxnLogRecords(TxnRedoWorker *worker, bool forceAll)
|
||||
XLogRecPtr lrEnd;
|
||||
do {
|
||||
GetReplayedRecPtrFromWorkers(&lrRead, &lrEnd);
|
||||
if (XLByteLT(t_thrd.xlog_cxt.EndRecPtr, lrEnd)) {
|
||||
lrEnd = t_thrd.xlog_cxt.EndRecPtr;
|
||||
lrRead = t_thrd.xlog_cxt.ReadRecPtr;
|
||||
if (XLByteLT(g_dispatcher->dispatchEndRecPtr, lrEnd)) {
|
||||
lrEnd = g_dispatcher->dispatchEndRecPtr;
|
||||
lrRead = g_dispatcher->dispatchReadRecPtr;
|
||||
}
|
||||
if (!XLByteEQ(oldReplayedPageLSN, lrEnd)) {
|
||||
SetXLogReplayRecPtr(lrRead, lrEnd);
|
||||
|
@ -61,6 +61,8 @@ typedef struct LogDispatcher {
|
||||
uint32* chosedWorkerIds;
|
||||
uint32 chosedWorkerCount;
|
||||
uint32 readyWorkerCnt;
|
||||
XLogRecPtr dispatchReadRecPtr; /* start of dispatch record read */
|
||||
XLogRecPtr dispatchEndRecPtr; /* end of dispatch record read */
|
||||
bool checkpointNeedFullSync;
|
||||
} LogDispatcher;
|
||||
|
||||
|
Reference in New Issue
Block a user