Re: Global snapshots - Mailing list pgsql-hackers

From Masahiko Sawada
Subject Re: Global snapshots
Date
Msg-id CAD21AoAp4DWQUCBH5Gp1XHe22ivjxCkjtEc-=0BFCfUzJz=7ag@mail.gmail.com
Whole thread Raw
In response to Re: Global snapshots  (Stas Kelvich <s.kelvich@postgrespro.ru>)
Responses Re: Global snapshots  (Stas Kelvich <s.kelvich@postgrespro.ru>)
List pgsql-hackers
On Fri, May 4, 2018 at 2:11 AM, Stas Kelvich <s.kelvich@postgrespro.ru> wrote:
>
>
>> On 3 May 2018, at 18:28, Masahiko Sawada <sawada.mshk@gmail.com> wrote:
>>
>> On Wed, May 2, 2018 at 1:27 AM, Stas Kelvich <s.kelvich@postgrespro.ru> wrote:
>>> 1) To achieve commit atomicity of different nodes intermediate step is
>>>   introduced: at first running transaction is marked as InDoubt on all nodes,
>>>   and only after that each node commit it and stamps with a given GlobalCSN.
>>>   All readers who ran into tuples of an InDoubt transaction should wait until
>>>   it ends and recheck visibility.
>>
>> I'm concerned that long-running transaction could keep other
>> transactions waiting and then the system gets stuck. Can this happen?
>> and is there any workaround?
>
> InDoubt state is set just before commit, so it is short-lived state.
> During transaction execution global tx looks like an ordinary running
> transaction. Failure during 2PC with coordinator not being able to
> commit/abort this prepared transaction can result in situation where
> InDoubt tuples will be locked for reading, but in such situation
> coordinator should be blamed. Same problems will arise if prepared
> transaction holds locks, for example.

Thank you for explanation! I understood that algorithm. I have two questions.

If I understand correctly, simple writes with ordinary 2PC doesn't
block read who reads that writes. For example, an insertion on a node
doesn't block readers who reads the inserted tuple. But in this global
transaction, the read will be blocked during the global transaction is
InDoubt state. Is that right? InDoubt state will be short-live state
if it's local transaction but I'm not sure in global transaction.
Because during InDoubt state the coordinator has to prepare on all
participant nodes and to assign the global csn to them (and end global
transaction) the global transaction could be in InDoubt state for a
relatively long time. Also, it could be more longer if the
commit/rollback prepared never be performed due to a failure of any
nodes of them.

With this patch, can we start a remote transaction at READ COMMITTED
with imported a global snapshot if the local transaction started at
READ COMMITTED?

Regards,

--
Masahiko Sawada
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center


pgsql-hackers by date:

Previous
From: Masahiko Sawada
Date:
Subject: Re: [HACKERS] Transactions involving multiple postgres foreign servers
Next
From: Paul A Jungwirth
Date:
Subject: Re: SQL:2011 Valid-Time Support