[patch] Adding an assertion to report too long hash table name
Hi, The max size for the shmem hash table name is SHMEM_INDEX_KEYSIZE - 1. but when the caller uses a longer hash table name, it doesn't report any error, instead it just uses the first SHMEM_INDEX_KEYSIZE -1 chars as the hash table name. I created some shmem hash tables with the same prefix which was longer than SHMEM_INDEX_KEYSIZE - 1, and the size of those hash tables were the same, then only one hash table was created. But I thought those hash tables were created successfully. I know this is a corner case, but it's difficult to figure it out when run into it. So I add an assertion to prevent it. Thanks, Xiaoran Adding-an-assertion-to-report-too-long-hash-table-name.patch Description: Adding-an-assertion-to-report-too-long-hash-table-name.patch
Re: [patch] Adding an assertion to report too long hash table name
Hi, On Sep 29, 2022, 09:38 +0800, Xiaoran Wang , wrote: > Hi, > The max size for the shmem hash table name is SHMEM_INDEX_KEYSIZE - 1. but > when the caller uses a longer hash table name, it doesn't report any error, > insteadit just uses the first SHMEM_INDEX_KEYSIZE -1 chars as the hash table > name. > I created some shmem hash tables with the same prefix which was longer > thanSHMEM_INDEX_KEYSIZE - 1, and the size of those hash tables were the > same,then only one hash table was created. But I thought those hash tables > were createdsuccessfully. > I know this is a corner case, but it's difficult to figure it out when run > into it. So I addan assertion to prevent it. > > Thanks,Xiaoran Seems Postgres doesn’t have a case that strlen(name) >= SHMEM_INDEX_KEYSIZE(48). The max length of name I found is 29: ``` ShmemInitHash("Shared Buffer Lookup Table” ``` But it will help for other Databases built on Postgres or later Postgres in case of forgetting to update SHMEM_INDEX_KEYSIZE when new shmem added with a name longer than current SHMEM_INDEX_KEYSIZE. And we don’t have such assertion now. So, +1 for the patch. Regards, Zhang Mingli
Re: [patch] Adding an assertion to report too long hash table name
LGTM +1 On Thu, Sep 29, 2022 at 9:38 AM Xiaoran Wang wrote: > > Hi, > > The max size for the shmem hash table name is SHMEM_INDEX_KEYSIZE - 1. > but when the caller uses a longer hash table name, it doesn't report any > error, instead > it just uses the first SHMEM_INDEX_KEYSIZE -1 chars as the hash table name. > > I created some shmem hash tables with the same prefix which was longer than > SHMEM_INDEX_KEYSIZE - 1, and the size of those hash tables were the same, > then only one hash table was created. But I thought those hash tables were > created > successfully. > > I know this is a corner case, but it's difficult to figure it out when run > into it. So I add > an assertion to prevent it. > > > Thanks, > Xiaoran -- Regards Junwang Zhao