diff options
| author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2008-10-20 19:18:18 +0000 |
|---|---|---|
| committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2008-10-20 19:18:18 +0000 |
| commit | 06da3c570f21394003fc392d80f54862f7dec19f (patch) | |
| tree | 2e4c5dc1cb78d87e12fc1495b084bfaf5e69e737 /src/include/access | |
| parent | 3afffbc902f16f5b9abd2464a2bbc17d9bc63316 (diff) | |
| download | postgresql-06da3c570f21394003fc392d80f54862f7dec19f.tar.gz | |
Rework subtransaction commit protocol for hot standby.
This patch eliminates the marking of subtransactions as SUBCOMMITTED in pg_clog
during their commit; instead they remain in-progress until main transaction
commit. At main transaction commit, the commit protocol is atomic-by-page
instead of one transaction at a time. To avoid a race condition with some
subtransactions appearing committed before others in the case where they span
more than one pg_clog page, we conserve the logic that marks them subcommitted
before marking the parent committed.
Simon Riggs with minor help from me
Diffstat (limited to 'src/include/access')
| -rw-r--r-- | src/include/access/clog.h | 5 | ||||
| -rw-r--r-- | src/include/access/transam.h | 11 |
2 files changed, 7 insertions, 9 deletions
diff --git a/src/include/access/clog.h b/src/include/access/clog.h index 8b640a39d6..ac74c47132 100644 --- a/src/include/access/clog.h +++ b/src/include/access/clog.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/clog.h,v 1.21 2008/01/01 19:45:56 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/clog.h,v 1.22 2008/10/20 19:18:18 alvherre Exp $ */ #ifndef CLOG_H #define CLOG_H @@ -32,7 +32,8 @@ typedef int XidStatus; #define NUM_CLOG_BUFFERS 8 -extern void TransactionIdSetStatus(TransactionId xid, XidStatus status, XLogRecPtr lsn); +extern void TransactionIdSetTreeStatus(TransactionId xid, int nsubxids, + TransactionId *subxids, XidStatus status, XLogRecPtr lsn); extern XidStatus TransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn); extern Size CLOGShmemSize(void); diff --git a/src/include/access/transam.h b/src/include/access/transam.h index 232c59cad3..6b37723cb9 100644 --- a/src/include/access/transam.h +++ b/src/include/access/transam.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/transam.h,v 1.65 2008/03/11 20:20:35 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/transam.h,v 1.66 2008/10/20 19:18:18 alvherre Exp $ * *------------------------------------------------------------------------- */ @@ -139,13 +139,10 @@ extern VariableCache ShmemVariableCache; extern bool TransactionIdDidCommit(TransactionId transactionId); extern bool TransactionIdDidAbort(TransactionId transactionId); extern bool TransactionIdIsKnownCompleted(TransactionId transactionId); -extern void TransactionIdCommit(TransactionId transactionId); -extern void TransactionIdAsyncCommit(TransactionId transactionId, XLogRecPtr lsn); extern void TransactionIdAbort(TransactionId transactionId); -extern void TransactionIdSubCommit(TransactionId transactionId); -extern void TransactionIdCommitTree(int nxids, TransactionId *xids); -extern void TransactionIdAsyncCommitTree(int nxids, TransactionId *xids, XLogRecPtr lsn); -extern void TransactionIdAbortTree(int nxids, TransactionId *xids); +extern void TransactionIdCommitTree(TransactionId xid, int nxids, TransactionId *xids); +extern void TransactionIdAsyncCommitTree(TransactionId xid, int nxids, TransactionId *xids, XLogRecPtr lsn); +extern void TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids); extern bool TransactionIdPrecedes(TransactionId id1, TransactionId id2); extern bool TransactionIdPrecedesOrEquals(TransactionId id1, TransactionId id2); extern bool TransactionIdFollows(TransactionId id1, TransactionId id2); |
