Thread: [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
Attachment
LGTM +1 On Thu, Sep 29, 2022 at 9:38 AM Xiaoran Wang <wxiaoran@vmware.com> 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
Hi,
On Sep 29, 2022, 09:38 +0800, Xiaoran Wang <wxiaoran@vmware.com>, 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
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