While working on extending tests for dshash.c [1], I realized that a user that creates a hash table with GetNamedDSHash() has no way to cap the size of the dsa area underpinning the table by using dsa_set_size_limit(). This is because the dsa_area created using this API is not exposed to the user.
This is a gap for users of the GetNamedDSHash() API, because it's very likely that the callers don't want runaway growth of these hash tables.
Attached is a new API, dshash_get_dsa_area() that takes in a dshash_table and returns the area. The caller can then use dsa_set_size_limit() to limit the size.
We could change the GetNamedDSHash() API to take in a size, but that will not be ideal since a caller may want to change the size dynamically after the hash table is created.
I don't have a patch for this yet, but I also think it will make sense for pg_dsm_registry_allocations to also show the max_size
postgres=# select * from pg_dsm_registry_allocations; name | type | size ------------------------+---------+--------- test_dsm_registry_dsa | area | 1048576 test_dsm_registry_hash | hash | 1048576 test_dsm_registry_dsm | segment | 20 (3 rows)