Hi st 7. 8. 2024 v 6:08 odesÃlatel Alexander Korotkov <akorot...@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(+) > >