aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access')
-rw-r--r--src/backend/access/heap/heapam.c44
-rw-r--r--src/backend/access/nbtree/nbtxlog.c32
2 files changed, 15 insertions, 61 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index de061279a14..5cd4f005c65 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.281 2010/01/10 04:26:36 rhaas Exp $
+ * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.282 2010/01/14 11:08:00 sriggs Exp $
*
*
* INTERFACE ROUTINES
@@ -4139,16 +4139,7 @@ heap_xlog_cleanup_info(XLogRecPtr lsn, XLogRecord *record)
xl_heap_cleanup_info *xlrec = (xl_heap_cleanup_info *) XLogRecGetData(record);
if (InHotStandby)
- {
- VirtualTransactionId *backends;
-
- backends = GetConflictingVirtualXIDs(xlrec->latestRemovedXid,
- InvalidOid,
- true);
- ResolveRecoveryConflictWithVirtualXIDs(backends,
- "VACUUM index cleanup",
- CONFLICT_MODE_ERROR);
- }
+ ResolveRecoveryConflictWithSnapshot(xlrec->latestRemovedXid);
/*
* Actual operation is a no-op. Record type exists to provide a means
@@ -4180,16 +4171,7 @@ heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record, bool clean_move)
* no queries running for which the removed tuples are still visible.
*/
if (InHotStandby)
- {
- VirtualTransactionId *backends;
-
- backends = GetConflictingVirtualXIDs(xlrec->latestRemovedXid,
- InvalidOid,
- true);
- ResolveRecoveryConflictWithVirtualXIDs(backends,
- "VACUUM heap cleanup",
- CONFLICT_MODE_ERROR);
- }
+ ResolveRecoveryConflictWithSnapshot(xlrec->latestRemovedXid);
RestoreBkpBlocks(lsn, record, true);
@@ -4259,25 +4241,7 @@ heap_xlog_freeze(XLogRecPtr lsn, XLogRecord *record)
* consider the frozen xids as running.
*/
if (InHotStandby)
- {
- VirtualTransactionId *backends;
-
- /*
- * XXX: Using cutoff_xid is overly conservative. Even if cutoff_xid
- * is recent enough to conflict with a backend, the actual values
- * being frozen might not be. With a typical vacuum_freeze_min_age
- * setting in the ballpark of millions of transactions, it won't make
- * a difference, but it might if you run a manual VACUUM FREEZE.
- * Typically the cutoff is much earlier than any recently deceased
- * tuple versions removed by this vacuum, so don't worry too much.
- */
- backends = GetConflictingVirtualXIDs(cutoff_xid,
- InvalidOid,
- true);
- ResolveRecoveryConflictWithVirtualXIDs(backends,
- "VACUUM heap freeze",
- CONFLICT_MODE_ERROR);
- }
+ ResolveRecoveryConflictWithSnapshot(cutoff_xid);
RestoreBkpBlocks(lsn, record, false);
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index 55f05bdc2c9..9e2ebd9a9f5 100644
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.57 2010/01/02 16:57:35 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.58 2010/01/14 11:08:00 sriggs Exp $
*
*-------------------------------------------------------------------------
*/
@@ -822,28 +822,18 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record)
* just once when that arrives. After that any we know that no conflicts
* exist from individual btree vacuum records on that index.
*/
- if (InHotStandby)
+ if (InHotStandby && info == XLOG_BTREE_DELETE)
{
- if (info == XLOG_BTREE_DELETE)
- {
- xl_btree_delete *xlrec = (xl_btree_delete *) XLogRecGetData(record);
- VirtualTransactionId *backends;
-
- /*
- * XXX Currently we put everybody on death row, because
- * currently _bt_delitems() supplies InvalidTransactionId.
- * This can be fairly painful, so providing a better value
- * here is worth some thought and possibly some effort to
- * improve.
- */
- backends = GetConflictingVirtualXIDs(xlrec->latestRemovedXid,
- InvalidOid,
- true);
+ xl_btree_delete *xlrec = (xl_btree_delete *) XLogRecGetData(record);
- ResolveRecoveryConflictWithVirtualXIDs(backends,
- "b-tree delete",
- CONFLICT_MODE_ERROR);
- }
+ /*
+ * XXX Currently we put everybody on death row, because
+ * currently _bt_delitems() supplies InvalidTransactionId.
+ * This can be fairly painful, so providing a better value
+ * here is worth some thought and possibly some effort to
+ * improve.
+ */
+ ResolveRecoveryConflictWithSnapshot(xlrec->latestRemovedXid);
}
/*