summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2012-11-13 15:58:35 -0300
committerSimon Riggs <simon@2ndQuadrant.com>2012-11-13 15:58:35 -0300
commit759340c8f52416cfcd934a25f52894359a5ebed7 (patch)
tree5f4862bd41ad3606b3bdcfe564139fdf7bdd7a7d /src
parentbb745dc46250e14fe9f70a4d016c6af71fee4de4 (diff)
Clarify docs on hot standby lock release
Andres Freund and Simon Riggs
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/ipc/procarray.c5
-rw-r--r--src/backend/storage/ipc/standby.c8
2 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 1dd238f55bf..7805213b31d 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -1394,6 +1394,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)
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 80c595a04be..df9a9a495b6 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -513,6 +513,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.
*
@@ -646,8 +650,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)