Nested transactions - Mailing list pgsql-patches

From Alvaro Herrera
Subject Nested transactions
Date
Msg-id 20040608222356.GC13820@dcc.uchile.cl
Whole thread Raw
Responses Re: Nested transactions
Re: Nested transactions
List pgsql-patches
Hackers,

Here is the latest installment of the nested transactions patch.

What's in the current patch:

- transaction block support.  The user can start subtransactions inside
  each transaction block and rollback each one independently.  The
  nesting level has no practical limit, though each transaction tree can
  have at most 2^32 commands (subtransaction start counts as one
  command).

- Most subsystems have a cleanup function called at subtransaction
  abort: deferred triggers, relcache refcount, catcache refcount, smgr
  pending deletes, gist/rtree/hash scan lists, bufmgr refcount,
  on-commit actions.

- SPI closes connections opened during the aborting subtransaction.

- The lock manager releases locks taken by the aborting subtransaction,
  but _holds_ locks taken by a committing subtransaction.  This is
  needed by MVCC semantics.

- A special memory context, CommitContext is created for each
  subtransaction.  It is destroyed if the subtransaction aborts, but
  if it commits then it will be kept until main transaction commit
  (or its parent subtransaction aborts).

- The pg_subtrans module is created to keep the parent Xid of each
  subtransaction.  It's similar (and based on) the pg_clog code.

- The pg_clog Xlog code was moved to Slru and merged with pg_subtrans
  Xlog code.

- When we wait for a transaction to finish (XactLockTableWait), we
  actually wait for the topmost transaction.

- SET TRANSACTION ISOLATION LEVEL and SET READ ONLY are not allowed
  inside a subtransaction.

What's missing to complete the nested transactions work:

- Make GUC vars work correctly.
- Lots of testing.
- Documentation
- Optimizations:
  * the phantom Xid idea is not implemented here.
  * optimize TransactionIdIsInProgress
  * profile
- More regression testing.  Need additional concurrent infrastructure.

Many thanks to:

- Manfred Koizar for making the pg_subtrans code possible and discussion
  on several issues.
- Stephan Szabo for the idea on which the deferred trigger code was
  based.
- Tom Lane for asking the right questions.
- Bruce Momjian for useful ideas.


IMHO this patch should be reviewed and applied to achieve wide testing
as soon as possible before feature freeze.  More changes can be applied
later as available/needed.  (The patch is already huge and contains
several important changes that need careful review.  Adding more to the
mix will only make things more difficult.)

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"No single strategy is always right (Unless the boss says so)"
(Larry Wall)

Attachment

pgsql-patches by date:

Previous
From: Manfred Koizar
Date:
Subject: Re: cost_nonsequential_access()
Next
From: Christopher Kings-Lynne
Date:
Subject: Re: fix schema ownership for database owner on first connection