Re: Missing LWLock protection in pgstat_reset_replslot()

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: Missing LWLock protection in pgstat_reset_replslot()
Дата
Msg-id 5e803e21-789d-4399-970f-b6ea56e6df9b@iki.fi
обсуждение исходный текст
Ответ на Missing LWLock protection in pgstat_reset_replslot()  (Bertrand Drouvot <bertranddrouvot.pg@gmail.com>)
Ответы Re: Missing LWLock protection in pgstat_reset_replslot()  (shveta malik <shveta.malik@gmail.com>)
Re: Missing LWLock protection in pgstat_reset_replslot()  (Bertrand Drouvot <bertranddrouvot.pg@gmail.com>)
Список pgsql-hackers
On 01/03/2024 12:15, Bertrand Drouvot wrote:
> Hi hackers,
> 
> I think that pgstat_reset_replslot() is missing LWLock protection. Indeed, we
> don't have any guarantee that the slot is active (then preventing it to be
> dropped/recreated) when this function is executed.

Yes, so it seems at quick glance. We have a similar issue in 
pgstat_fetch_replslot(); it might return stats for wrong slot, if the 
slot is dropped/recreated concurrently. Do we care?

> --- a/src/backend/utils/activity/pgstat_replslot.c
> +++ b/src/backend/utils/activity/pgstat_replslot.c
> @@ -46,6 +46,8 @@ pgstat_reset_replslot(const char *name)
>  
>      Assert(name != NULL);
>  
> +    LWLockAcquire(ReplicationSlotControlLock, LW_SHARED);
> +
>      /* Check if the slot exits with the given name. */
>      slot = SearchNamedReplicationSlot(name, true);

SearchNamedReplicationSlot() will also acquire the lock in LW_SHARED 
mode, when you pass need_lock=true. So that at least should be changed 
to false.

-- 
Heikki Linnakangas
Neon (https://neon.tech)




В списке pgsql-hackers по дате отправления:

Предыдущее
От: 'Alvaro Herrera'
Дата:
Сообщение: Re: Some shared memory chunks are allocated even if related processes won't start
Следующее
От: Andrei Lepikhov
Дата:
Сообщение: Re: POC, WIP: OR-clause support for indexes