From: | Michael Paquier <michael(at)paquier(dot)xyz> |
---|---|
To: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Spinlock is missing when updating two_phase of ReplicationSlot |
Date: | 2023-01-11 05:36:17 |
Message-ID: | Y75K0XU8rn7G3jYj@paquier.xyz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Jan 11, 2023 at 11:07:05AM +0900, Masahiko Sawada wrote:
> I think we should acquire the spinlock when updating fields of the
> replication slot even by its owner. Otherwise readers could see
> inconsistent results. Looking at another place where we update
> two_phase_at, we acquire the spinlock:
>
> SpinLockAcquire(&slot->mutex);
> slot->data.confirmed_flush = ctx->reader->EndRecPtr;
> if (slot->data.two_phase)
> slot->data.two_phase_at = ctx->reader->EndRecPtr;
> SpinLockRelease(&slot->mutex);
>
> It seems to me an oversight of commit a8fd13cab0b. I've attached the
> small patch to fix it.
Looks right to me, the paths updating the data related to the slots
are careful about that, even when it comes to fetching a slot from
MyReplicationSlot. I have been looking around the slot code to see if
there are other inconsistencies, and did not notice anything standing
out. Will fix..
--
Michael
From | Date | Subject | |
---|---|---|---|
Next Message | Nathan Bossart | 2023-01-11 05:47:54 | Re: delay starting WAL receiver |
Previous Message | Michael Paquier | 2023-01-11 05:27:09 | Re: [PATCH] Support using "all" for the db user in pg_ident.conf |