aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xact.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/xact.c')
-rw-r--r--src/backend/access/transam/xact.c123
1 files changed, 65 insertions, 58 deletions
diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c
index 044afd582dd..43966d5ab6f 100644
--- a/src/backend/access/transam/xact.c
+++ b/src/backend/access/transam/xact.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.288 2010/02/20 21:24:01 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.289 2010/02/26 02:00:34 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -139,9 +139,9 @@ typedef struct TransactionStateData
int nChildXids; /* # of subcommitted child XIDs */
int maxChildXids; /* allocated size of childXids[] */
Oid prevUser; /* previous CurrentUserId setting */
- int prevSecContext; /* previous SecurityRestrictionContext */
+ int prevSecContext; /* previous SecurityRestrictionContext */
bool prevXactReadOnly; /* entry-time xact r/o state */
- bool startedInRecovery; /* did we start in recovery? */
+ bool startedInRecovery; /* did we start in recovery? */
struct TransactionStateData *parent; /* back link to parent */
} TransactionStateData;
@@ -178,7 +178,7 @@ static TransactionStateData TopTransactionStateData = {
* unreportedXids holds XIDs of all subtransactions that have not yet been
* reported in a XLOG_XACT_ASSIGNMENT record.
*/
-static int nUnreportedXids;
+static int nUnreportedXids;
static TransactionId unreportedXids[PGPROC_MAX_CACHED_SUBXIDS];
static TransactionState CurrentTransactionState = &TopTransactionStateData;
@@ -452,25 +452,28 @@ AssignTransactionId(TransactionState s)
* include the top-level xid and all the subxids that have not yet been
* reported using XLOG_XACT_ASSIGNMENT records.
*
- * This is required to limit the amount of shared memory required in a
- * hot standby server to keep track of in-progress XIDs. See notes for
+ * This is required to limit the amount of shared memory required in a hot
+ * standby server to keep track of in-progress XIDs. See notes for
* RecordKnownAssignedTransactionIds().
*
- * We don't keep track of the immediate parent of each subxid,
- * only the top-level transaction that each subxact belongs to. This
- * is correct in recovery only because aborted subtransactions are
- * separately WAL logged.
+ * We don't keep track of the immediate parent of each subxid, only the
+ * top-level transaction that each subxact belongs to. This is correct in
+ * recovery only because aborted subtransactions are separately WAL
+ * logged.
*/
if (isSubXact && XLogStandbyInfoActive())
{
unreportedXids[nUnreportedXids] = s->transactionId;
nUnreportedXids++;
- /* ensure this test matches similar one in RecoverPreparedTransactions() */
+ /*
+ * ensure this test matches similar one in
+ * RecoverPreparedTransactions()
+ */
if (nUnreportedXids >= PGPROC_MAX_CACHED_SUBXIDS)
{
XLogRecData rdata[2];
- xl_xact_assignment xlrec;
+ xl_xact_assignment xlrec;
/*
* xtop is always set by now because we recurse up transaction
@@ -899,6 +902,7 @@ RecordTransactionCommit(void)
nchildren = xactGetCommittedChildren(&children);
nmsgs = xactGetCommittedInvalidationMessages(&invalMessages,
&RelcacheInitFileInval);
+
/*
* If we haven't been assigned an XID yet, we neither can, nor do we want
* to write a COMMIT record.
@@ -1098,10 +1102,9 @@ static void
AtCCI_LocalCache(void)
{
/*
- * Make any pending relation map changes visible. We must do this
- * before processing local sinval messages, so that the map changes
- * will get reflected into the relcache when relcache invals are
- * processed.
+ * Make any pending relation map changes visible. We must do this before
+ * processing local sinval messages, so that the map changes will get
+ * reflected into the relcache when relcache invals are processed.
*/
AtCCI_RelationMap();
@@ -1227,9 +1230,9 @@ AtSubCommit_childXids(void)
*
* Note: We rely on the fact that the XID of a child always follows that
* of its parent. By copying the XID of this subtransaction before the
- * XIDs of its children, we ensure that the array stays ordered.
- * Likewise, all XIDs already in the array belong to subtransactions
- * started and subcommitted before us, so their XIDs must precede ours.
+ * XIDs of its children, we ensure that the array stays ordered. Likewise,
+ * all XIDs already in the array belong to subtransactions started and
+ * subcommitted before us, so their XIDs must precede ours.
*/
s->parent->childXids[s->parent->nChildXids] = s->transactionId;
@@ -1457,10 +1460,10 @@ AtSubAbort_childXids(void)
s->maxChildXids = 0;
/*
- * We could prune the unreportedXids array here. But we don't bother.
- * That would potentially reduce number of XLOG_XACT_ASSIGNMENT records
- * but it would likely introduce more CPU time into the more common
- * paths, so we choose not to do that.
+ * We could prune the unreportedXids array here. But we don't bother. That
+ * would potentially reduce number of XLOG_XACT_ASSIGNMENT records but it
+ * would likely introduce more CPU time into the more common paths, so we
+ * choose not to do that.
*/
}
@@ -2162,7 +2165,7 @@ AbortTransaction(void)
/*
* do abort processing
*/
- AfterTriggerEndXact(false); /* 'false' means it's abort */
+ AfterTriggerEndXact(false); /* 'false' means it's abort */
AtAbort_Portals();
AtEOXact_LargeObject(false);
AtAbort_Notify();
@@ -4362,9 +4365,9 @@ xact_redo_commit(xl_xact_commit *xlrec, TransactionId xid, XLogRecPtr lsn)
/*
* Make sure nextXid is beyond any XID mentioned in the record.
*
- * We don't expect anyone else to modify nextXid, hence we
- * don't need to hold a lock while checking this. We still acquire
- * the lock to modify it, though.
+ * We don't expect anyone else to modify nextXid, hence we don't need to
+ * hold a lock while checking this. We still acquire the lock to modify
+ * it, though.
*/
if (TransactionIdFollowsOrEquals(max_xid,
ShmemVariableCache->nextXid))
@@ -4400,8 +4403,8 @@ xact_redo_commit(xl_xact_commit *xlrec, TransactionId xid, XLogRecPtr lsn)
* protocol during recovery to provide information on database
* consistency for when users try to set hint bits. It is important
* that we do not set hint bits until the minRecoveryPoint is past
- * this commit record. This ensures that if we crash we don't see
- * hint bits set on changes made by transactions that haven't yet
+ * this commit record. This ensures that if we crash we don't see hint
+ * bits set on changes made by transactions that haven't yet
* recovered. It's unlikely but it's good to be safe.
*/
TransactionIdAsyncCommitTree(xid, xlrec->nsubxacts, sub_xids, lsn);
@@ -4413,17 +4416,17 @@ xact_redo_commit(xl_xact_commit *xlrec, TransactionId xid, XLogRecPtr lsn)
/*
* Send any cache invalidations attached to the commit. We must
- * maintain the same order of invalidation then release locks
- * as occurs in .
+ * maintain the same order of invalidation then release locks as
+ * occurs in .
*/
ProcessCommittedInvalidationMessages(inval_msgs, xlrec->nmsgs,
- XactCompletionRelcacheInitFileInval(xlrec),
- xlrec->dbId, xlrec->tsId);
+ XactCompletionRelcacheInitFileInval(xlrec),
+ xlrec->dbId, xlrec->tsId);
/*
- * Release locks, if any. We do this for both two phase and normal
- * one phase transactions. In effect we are ignoring the prepare
- * phase and just going straight to lock release.
+ * Release locks, if any. We do this for both two phase and normal one
+ * phase transactions. In effect we are ignoring the prepare phase and
+ * just going straight to lock release.
*/
StandbyReleaseLockTree(xid, xlrec->nsubxacts, sub_xids);
}
@@ -4446,15 +4449,16 @@ xact_redo_commit(xl_xact_commit *xlrec, TransactionId xid, XLogRecPtr lsn)
}
/*
- * We issue an XLogFlush() for the same reason we emit ForceSyncCommit() in
- * normal operation. For example, in DROP DATABASE, we delete all the files
- * belonging to the database, and then commit the transaction. If we crash
- * after all the files have been deleted but before the commit, you have an
- * entry in pg_database without any files. To minimize the window for that,
- * we use ForceSyncCommit() to rush the commit record to disk as quick as
- * possible. We have the same window during recovery, and forcing an
- * XLogFlush() (which updates minRecoveryPoint during recovery) helps
- * to reduce that problem window, for any user that requested ForceSyncCommit().
+ * We issue an XLogFlush() for the same reason we emit ForceSyncCommit()
+ * in normal operation. For example, in DROP DATABASE, we delete all the
+ * files belonging to the database, and then commit the transaction. If we
+ * crash after all the files have been deleted but before the commit, you
+ * have an entry in pg_database without any files. To minimize the window
+ * for that, we use ForceSyncCommit() to rush the commit record to disk as
+ * quick as possible. We have the same window during recovery, and forcing
+ * an XLogFlush() (which updates minRecoveryPoint during recovery) helps
+ * to reduce that problem window, for any user that requested
+ * ForceSyncCommit().
*/
if (XactCompletionForceSyncCommit(xlrec))
XLogFlush(lsn);
@@ -4480,9 +4484,11 @@ xact_redo_abort(xl_xact_abort *xlrec, TransactionId xid)
max_xid = TransactionIdLatest(xid, xlrec->nsubxacts, sub_xids);
/* Make sure nextXid is beyond any XID mentioned in the record */
- /* We don't expect anyone else to modify nextXid, hence we
- * don't need to hold a lock while checking this. We still acquire
- * the lock to modify it, though.
+
+ /*
+ * We don't expect anyone else to modify nextXid, hence we don't need to
+ * hold a lock while checking this. We still acquire the lock to modify
+ * it, though.
*/
if (TransactionIdFollowsOrEquals(max_xid,
ShmemVariableCache->nextXid))
@@ -4496,12 +4502,13 @@ xact_redo_abort(xl_xact_abort *xlrec, TransactionId xid)
if (InHotStandby)
{
/*
- * If a transaction completion record arrives that has as-yet unobserved
- * subtransactions then this will not have been fully handled by the call
- * to RecordKnownAssignedTransactionIds() in the main recovery loop in
- * xlog.c. So we need to do bookkeeping again to cover that case. This is
- * confusing and it is easy to think this call is irrelevant, which has
- * happened three times in development already. Leave it in.
+ * If a transaction completion record arrives that has as-yet
+ * unobserved subtransactions then this will not have been fully
+ * handled by the call to RecordKnownAssignedTransactionIds() in the
+ * main recovery loop in xlog.c. So we need to do bookkeeping again to
+ * cover that case. This is confusing and it is easy to think this
+ * call is irrelevant, which has happened three times in development
+ * already. Leave it in.
*/
RecordKnownAssignedTransactionIds(max_xid);
}
@@ -4631,8 +4638,8 @@ xact_desc_commit(StringInfo buf, xl_xact_commit *xlrec)
msgs = (SharedInvalidationMessage *) &xacts[xlrec->nsubxacts];
if (XactCompletionRelcacheInitFileInval(xlrec))
- appendStringInfo(buf, "; relcache init file inval dbid %u tsid %u",
- xlrec->dbId, xlrec->tsId);
+ appendStringInfo(buf, "; relcache init file inval dbid %u tsid %u",
+ xlrec->dbId, xlrec->tsId);
appendStringInfo(buf, "; inval msgs:");
for (i = 0; i < xlrec->nmsgs; i++)
@@ -4738,8 +4745,8 @@ xact_desc(StringInfo buf, uint8 xl_info, char *rec)
/*
* Note that we ignore the WAL record's xid, since we're more
- * interested in the top-level xid that issued the record
- * and which xids are being reported here.
+ * interested in the top-level xid that issued the record and which
+ * xids are being reported here.
*/
appendStringInfo(buf, "xid assignment xtop %u: ", xlrec->xtop);
xact_desc_assignment(buf, xlrec);