Re: pgsql: Introduce hash_search_with_hash_value() function - Mailing list pgsql-committers

From Pavel Stehule
Subject Re: pgsql: Introduce hash_search_with_hash_value() function
Date
Msg-id CAFj8pRBN65zcR62uOy+wbM61yVJ0P7G-m6tgZZc3NVQRsCz5nw@mail.gmail.com
Whole thread Raw
In response to pgsql: Introduce hash_search_with_hash_value() function  (Alexander Korotkov <akorotkov@postgresql.org>)
Responses Re: pgsql: Introduce hash_search_with_hash_value() function
List pgsql-committers
Hi

st 7. 8. 2024 v 6:08 odesílatel Alexander Korotkov <akorotkov@postgresql.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?

Regards

Pavel



Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d0f020037e19c33c74d683eb7e0c7cc5725294b4

Modified Files
--------------
src/backend/utils/hash/dynahash.c | 38 ++++++++++++++++++++++++++++++++++++++
src/include/utils/hsearch.h       |  5 +++++
2 files changed, 43 insertions(+)

pgsql-committers by date:

Previous
From: Alexander Korotkov
Date:
Subject: pgsql: Optimize InvalidateAttoptCacheCallback() and TypeCacheTypCallbac
Next
From: Peter Eisentraut
Date:
Subject: pgsql: Revert ECPG's use of pnstrdup()