diff options
| author | Simon Riggs <simon@2ndQuadrant.com> | 2010-11-15 09:31:23 +0000 |
|---|---|---|
| committer | Simon Riggs <simon@2ndQuadrant.com> | 2010-11-15 09:31:23 +0000 |
| commit | 102aeedfb9bf01b419563151846ebbd1f01f4a5f (patch) | |
| tree | 796c8af74a88661de7ec4c494f501ec54cb52cca /src | |
| parent | e6b3802518ef46d12c45a9a43594bdb0ae650afc (diff) | |
Avoid spurious Hot Standby conflicts from btree delete records.
Similar conflicts were already avoided for related record types.
Massive over-caution resulted in a usability bug. Clear theoretical
basis for doing this is now confirmed by me.
Request to remove from Heikki (twice), over-caution by me.
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/storage/ipc/standby.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c index 9f71c1a156a..154147e44c2 100644 --- a/src/backend/storage/ipc/standby.c +++ b/src/backend/storage/ipc/standby.c @@ -266,21 +266,13 @@ ResolveRecoveryConflictWithSnapshot(TransactionId latestRemovedXid, RelFileNode /* * If we get passed InvalidTransactionId then we are a little surprised, - * but it is theoretically possible, so spit out a DEBUG1 message, but not - * one that needs translating. - * - * We grab latestCompletedXid instead because this is the very latest - * value it could ever be. + * but it is theoretically possible in normal running. It also happens + * when replaying already applied WAL records after a standby crash or + * restart. If latestRemovedXid is invalid then there is no conflict. That + * rule applies across all record types that suffer from this conflict. */ if (!TransactionIdIsValid(latestRemovedXid)) - { - elog(DEBUG1, "invalid latestremovexXid reported, using latestcompletedxid instead"); - - LWLockAcquire(ProcArrayLock, LW_SHARED); - latestRemovedXid = ShmemVariableCache->latestCompletedXid; - LWLockRelease(ProcArrayLock); - } - Assert(TransactionIdIsValid(latestRemovedXid)); + return; backends = GetConflictingVirtualXIDs(latestRemovedXid, node.dbNode); |
