Re: Snapshot management, final

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: Simon Riggs <simon(at)2ndquadrant(dot)com>, Pg Patches <pgsql-patches(at)postgresql(dot)org>
Subject: Re: Snapshot management, final
Date: 2008-05-12 01:03:25
Message-ID: 2719.1210554205@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Alvaro Herrera <alvherre(at)commandprompt(dot)com> writes:
> Tom Lane wrote:
>> Shouldn't UnregisterSnapshot insist that s_level be equal to current
>> xact nest level?

> It can't check that; consider

> begin;
> savepoint foo;
> declare cur cursor for select (1), (2), (3);
> savepoint bar;
> close cur;
> commit;

Hmm ... but that "close" can't unregister the snapshot immediately,
because you'd lose if the 2nd savepoint gets rolled back, no? Is the
handling of this case even correct at the moment?

ISTM correct handling of this example would require that the "close"
not really discard the snap until commit. Then, given proper ordering
of the cleanup operations at commit, you might be able to still have the
cross-check about s_level in UnregisterSnapshot. (IOW, maybe having
snapshot cleanup be late in the commit sequence wasn't such a good
choice...)

regards, tom lane

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Alvaro Herrera 2008-05-12 01:10:16 Re: Snapshot management, final
Previous Message Alvaro Herrera 2008-05-12 00:55:38 Re: Snapshot management, final