Re: pgsql: Introduce hash_search_with_hash_value() function

From: Alexander Korotkov <aekorotkov(at)gmail(dot)com>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Alexander Korotkov <akorotkov(at)postgresql(dot)org>, pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: Re: pgsql: Introduce hash_search_with_hash_value() function
Date: 2024-08-07 08:52:13
Message-ID: CAPpHfdtzGJqB=qAvPqgJZZR7vyrgaAuV8dNbd1kX2VKOqnEtdQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Hi, Pavel!

On Wed, Aug 7, 2024 at 9:35 AM Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> wrote:
> st 7. 8. 2024 v 6:08 odesílatel Alexander Korotkov <akorotkov(at)postgresql(dot)org> napsal:
>>
>> Introduce hash_search_with_hash_value() function
>>
>> This new function iterates hash entries with given hash values. This function
>> is designed to avoid full sequential hash search in the syscache invalidation
>> callbacks.
>>
>> Discussion: https://postgr.es/m/5812a6e5-68ae-4d84-9d85-b443176966a1%40sigaev.ru
>> Author: Teodor Sigaev
>> Reviewed-by: Aleksander Alekseev, Tom Lane, Michael Paquier, Roman Zharkov
>> Reviewed-by: Andrei Lepikhov
>
>
> I tried to use hash_seq_init_with_hash_value in session variables patch, but it doesn't work there.
>
> <-->if (!sessionvars)
> <--><-->return;
>
> elog(NOTICE, "%u", hashvalue);
>
>
> <-->hash_seq_init(&status, sessionvars);
>
> <-->while ((svar = (SVariable) hash_seq_search(&status)) != NULL)
> <-->{
> <--><-->if (hashvalue == 0 || svar->hashvalue == hashvalue)
> <--><-->{
> <--><--><-->elog(NOTICE, "FOUND OLD");
> <--><--><-->svar->is_valid = false;
> <--><-->}
> <-->}
>
>
>
> <-->/*
> <--> * If the hashvalue is not specified, we have to recheck all currently
> <--> * used session variables. Since we can't tell the exact session variable
> <--> * from its hashvalue, we have to iterate over all items in the hash bucket.
> <--> */
> <-->if (hashvalue == 0)
> <--><-->hash_seq_init(&status, sessionvars);
> <-->else
> <--><-->hash_seq_init_with_hash_value(&status, sessionvars, hashvalue);
>
> <-->while ((svar = (SVariable) hash_seq_search(&status)) != NULL)
> <-->{
> <--><-->Assert(hashvalue == 0 || svar->hashvalue == hashvalue);
>
> elog(NOTICE, "found");
>
> <--><-->svar->is_valid = false;
> <--><-->needs_validation = true;
> <-->}
> }
>
> Old methods found an entry, but new not.
>
> What am I doing wrong?

I'm trying to check this. Applying this patch [1], but got conflicts.
Could you please, rebase the patch, so I can recheck the issue?

Links.
1. https://www.postgresql.org/message-id/flat/CAFj8pRD053CY_N4%3D6SvPe7ke6xPbh%3DK50LUAOwjC3jm8Me9Obg%40mail.gmail.com

------
Regards,
Alexander Korotkov
Supabase

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2024-08-07 09:07:13 Re: pgsql: Fix more holes with SLRU code in need of int64 for segment numbe
Previous Message Heikki Linnakangas 2024-08-07 07:51:31 pgsql: Make fallback MD5 implementation thread-safe on big-endian syste

Browse pgsql-hackers by date

  From Date Subject
Next Message Aleksander Alekseev 2024-08-07 09:15:50 Re: Fsync (flush) all inserted WAL records
Previous Message Michael Banck 2024-08-07 08:43:41 Re: Enable data checksums by default