1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-11 10:01:57 +03:00

SERIALIZABLE transactions are actually implemented beneath the covers with

transaction snapshots, i.e. a snapshot registered at the beginning of
a transaction. Change variable naming and comments to reflect this reality
in preparation for a future, truly serializable mode, e.g.
Serializable Snapshot Isolation (SSI).

For the moment transaction snapshots are still used to implement
SERIALIZABLE, but hopefully not for too much longer. Patch by Kevin
Grittner and Dan Ports with review and some minor wording changes by me.
This commit is contained in:
Joe Conway
2010-09-11 18:38:58 +00:00
parent 262c71ab63
commit 5eb15c9942
11 changed files with 49 additions and 49 deletions

View File

@ -19,7 +19,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/time/snapmgr.c,v 1.15 2010/02/26 02:01:15 momjian Exp $
* $PostgreSQL: pgsql/src/backend/utils/time/snapmgr.c,v 1.16 2010/09/11 18:38:56 joe Exp $
*
*-------------------------------------------------------------------------
*/
@ -37,10 +37,10 @@
/*
* CurrentSnapshot points to the only snapshot taken in a serializable
* transaction, and to the latest one taken in a read-committed transaction.
* CurrentSnapshot points to the only snapshot taken in transaction-snapshot
* mode, and to the latest one taken in a read-committed transaction.
* SecondarySnapshot is a snapshot that's always up-to-date as of the current
* instant, even on a serializable transaction. It should only be used for
* instant, even in transaction-snapshot mode. It should only be used for
* special-purpose code (say, RI checking.)
*
* These SnapshotData structs are static to simplify memory allocation
@ -97,11 +97,11 @@ static int RegisteredSnapshots = 0;
bool FirstSnapshotSet = false;
/*
* Remembers whether this transaction registered a serializable snapshot at
* Remembers whether this transaction registered a transaction snapshot at
* start. We cannot trust FirstSnapshotSet in combination with
* IsXactIsoLevelSerializable, because GUC may be reset before us.
* IsolationUsesXactSnapshot(), because GUC may be reset before us.
*/
static bool registered_serializable = false;
static bool registered_xact_snapshot = false;
static Snapshot CopySnapshot(Snapshot snapshot);
@ -130,21 +130,21 @@ GetTransactionSnapshot(void)
FirstSnapshotSet = true;
/*
* In serializable mode, the first snapshot must live until end of
* xact regardless of what the caller does with it, so we must
* In transaction-snapshot mode, the first snapshot must live until
* end of xact regardless of what the caller does with it, so we must
* register it internally here and unregister it at end of xact.
*/
if (IsXactIsoLevelSerializable)
if (IsolationUsesXactSnapshot())
{
CurrentSnapshot = RegisterSnapshotOnOwner(CurrentSnapshot,
TopTransactionResourceOwner);
registered_serializable = true;
registered_xact_snapshot = true;
}
return CurrentSnapshot;
}
if (IsXactIsoLevelSerializable)
if (IsolationUsesXactSnapshot())
return CurrentSnapshot;
CurrentSnapshot = GetSnapshotData(&CurrentSnapshotData);
@ -155,7 +155,7 @@ GetTransactionSnapshot(void)
/*
* GetLatestSnapshot
* Get a snapshot that is up-to-date as of the current instant,
* even if we are executing in SERIALIZABLE mode.
* even if we are executing in transaction-snapshot mode.
*/
Snapshot
GetLatestSnapshot(void)
@ -515,13 +515,13 @@ void
AtEarlyCommit_Snapshot(void)
{
/*
* On a serializable transaction we must unregister our private refcount
* to the serializable snapshot.
* In transaction-snapshot mode we must unregister our private refcount
* to the transaction-snapshot.
*/
if (registered_serializable)
if (registered_xact_snapshot)
UnregisterSnapshotFromOwner(CurrentSnapshot,
TopTransactionResourceOwner);
registered_serializable = false;
registered_xact_snapshot = false;
}
@ -557,5 +557,5 @@ AtEOXact_Snapshot(bool isCommit)
SecondarySnapshot = NULL;
FirstSnapshotSet = false;
registered_serializable = false;
registered_xact_snapshot = false;
}