]> granicus.if.org Git - postgresql/commitdiff
Clarify docs on hot standby lock release
authorSimon Riggs <simon@2ndQuadrant.com>
Tue, 13 Nov 2012 18:58:05 +0000 (15:58 -0300)
committerSimon Riggs <simon@2ndQuadrant.com>
Tue, 13 Nov 2012 18:58:05 +0000 (15:58 -0300)
Andres Freund and Simon Riggs

src/backend/storage/ipc/procarray.c
src/backend/storage/ipc/standby.c

index f65e4383783b493af51a776459a6136fedfbba5c..db917f8aa8db419f91b8b57a6871508dd48da04b 100644 (file)
@@ -1413,6 +1413,11 @@ GetSnapshotData(Snapshot snapshot)
  * 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
  * 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
 GetRunningTransactionData(void)
index 1e51914d05160b2cd42fe672dd6be7c3b4c5efb6..fdec0eb22505a9b61f1bcecd20ef14526086cc6d 100644 (file)
@@ -509,6 +509,10 @@ CheckRecoveryConflictDeadlock(void)
  * RelationLockList, so we can keep track of the various entries made by
  * 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
  * matches the information that we need to keep track of.
  *
@@ -642,8 +646,8 @@ StandbyReleaseAllLocks(void)
 
 /*
  * StandbyReleaseOldLocks
- *             Release standby locks held by XIDs that aren't running, as long
- *             as they're not prepared transactions.
+ *             Release standby locks held by top-level XIDs that aren't running,
+ *             as long as they're not prepared transactions.
  */
 void
 StandbyReleaseOldLocks(int nxids, TransactionId *xids)