Commit 68f7fe14 authored by Simon Riggs's avatar Simon Riggs

Clarify docs on hot standby lock release

Andres Freund and Simon Riggs
parent 8f40ad1f
...@@ -1564,6 +1564,11 @@ ProcArrayInstallImportedXmin(TransactionId xmin, TransactionId sourcexid) ...@@ -1564,6 +1564,11 @@ ProcArrayInstallImportedXmin(TransactionId xmin, TransactionId sourcexid)
* We don't worry about updating other counters, we want to keep this as * We don't worry about updating other counters, we want to keep this as
* simple as possible and leave GetSnapshotData() as the primary code for * simple as possible and leave GetSnapshotData() as the primary code for
* that bookkeeping. * that bookkeeping.
*
* Note that if any transaction has overflowed its cached subtransactions
* then there is no real need include any subtransactions. That isn't a
* common enough case to worry about optimising the size of the WAL record,
* and we may wish to see that data for diagnostic purposes anyway.
*/ */
RunningTransactions RunningTransactions
GetRunningTransactionData(void) GetRunningTransactionData(void)
......
...@@ -540,6 +540,10 @@ StandbyTimeoutHandler(void) ...@@ -540,6 +540,10 @@ StandbyTimeoutHandler(void)
* RelationLockList, so we can keep track of the various entries made by * RelationLockList, so we can keep track of the various entries made by
* the Startup process's virtual xid in the shared lock table. * the Startup process's virtual xid in the shared lock table.
* *
* We record the lock against the top-level xid, rather than individual
* subtransaction xids. This means AccessExclusiveLocks held by aborted
* subtransactions are not released as early as possible on standbys.
*
* List elements use type xl_rel_lock, since the WAL record type exactly * List elements use type xl_rel_lock, since the WAL record type exactly
* matches the information that we need to keep track of. * matches the information that we need to keep track of.
* *
...@@ -673,8 +677,8 @@ StandbyReleaseAllLocks(void) ...@@ -673,8 +677,8 @@ StandbyReleaseAllLocks(void)
/* /*
* StandbyReleaseOldLocks * StandbyReleaseOldLocks
* Release standby locks held by XIDs that aren't running, as long * Release standby locks held by top-level XIDs that aren't running,
* as they're not prepared transactions. * as long as they're not prepared transactions.
*/ */
void void
StandbyReleaseOldLocks(int nxids, TransactionId *xids) StandbyReleaseOldLocks(int nxids, TransactionId *xids)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment