Skip to content
Snippets Groups Projects
Commit 92f4786f authored by Simon Riggs's avatar Simon Riggs
Browse files

Additional test for each commit in sync rep path to plug minute

possibility of race condition that would effect performance only.
Requested by Robert Haas. Re-arrange related comments.
parent bfa4440c
No related branches found
No related tags found
No related merge requests found
......@@ -114,21 +114,28 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN)
/* Reset the latch before adding ourselves to the queue. */
ResetLatch(&MyProc->waitLatch);
/*
* Set our waitLSN so WALSender will know when to wake us, and add
* ourselves to the queue.
*/
LWLockAcquire(SyncRepLock, LW_EXCLUSIVE);
Assert(MyProc->syncRepState == SYNC_REP_NOT_WAITING);
if (!WalSndCtl->sync_standbys_defined)
{
/*
* We don't wait for sync rep if WalSndCtl->sync_standbys_defined is
* not set. See SyncRepUpdateSyncStandbysDefined.
*
* Also check that the standby hasn't already replied. Unlikely
* race condition but we'll be fetching that cache line anyway
* so its likely to be a low cost check.
*/
if (!WalSndCtl->sync_standbys_defined ||
XLByteLE(XactCommitLSN, WalSndCtl->lsn))
{
LWLockRelease(SyncRepLock);
return;
}
/*
* Set our waitLSN so WALSender will know when to wake us, and add
* ourselves to the queue.
*/
MyProc->waitLSN = XactCommitLSN;
MyProc->syncRepState = SYNC_REP_WAITING;
SyncRepQueueInsert();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment