Re: Disallow cancellation of waiting for synchronous replication

From: Marco Slot <marco(at)citusdata(dot)com>
To: Maksim Milyutin <milyutinma(at)gmail(dot)com>
Cc: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, dim(at)tapoueh(dot)org
Subject: Re: Disallow cancellation of waiting for synchronous replication
Date: 2019-12-25 11:27:57
Message-ID: CANNhMLC-ekiWBf66zwS-AdF5+sna939Ec2xDF8_QdVRGvjvNJg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Dec 25, 2019, 11:28 Maksim Milyutin <milyutinma(at)gmail(dot)com> wrote:

> But in this case locally committed data becomes visible to new incoming
> transactions that is bad side-effect of this issue.
>

Your application should be prepared for that in any case.

At the point where synchronous replication waits, the commit has already
been written to disk on the primary. If postgres restarts while waiting for
replication then the write becomes immediately visible regardless of
whether it was replicated. I don't think throwing a PANIC actually prevents
that and if it does it's coincidental. Best you can do is signal to the
client that the commit status is unknown.

That's far from ideal, but fixing it requires a much bigger change to
streaming replication. The write should be replicated prior to commit on
the primary, but applied after in a way where unapplied writes on the
secondary can be overwritten/discarded if it turns out they did not commit
on the primary.

Marco

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Sergei Kornilov 2019-12-25 11:30:54 Re: Online checksums patch - once again
Previous Message Sergei Kornilov 2019-12-25 11:01:34 Re: ALTER TABLE support for dropping generation expression