Return DSA area for hash table from GetNamedDSHash() - Mailing list pgsql-hackers

From Sami Imseih
Subject Return DSA area for hash table from GetNamedDSHash()
Date
Msg-id CAA5RZ0tKfCVqFnMZtavM42H63ha2Haf_C4mbJNWqkaW30cPW1w@mail.gmail.com
Whole thread Raw
Responses Re: Return DSA area for hash table from GetNamedDSHash()
Re: Return DSA area for hash table from GetNamedDSHash()
List pgsql-hackers
Hi,

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)

Thoughts?


[1] [https://www.postgresql.org/message-id/acXCJODjsCytdpwT%40paquier.xyz]

--
Sami Imseih
Amazon Web Services (AWS)

Attachment

pgsql-hackers by date:

Previous
From: Jim Jones
Date:
Subject: Re: VACUUM FULL, CLUSTER, and REPACK block on other sessions' temp tables
Next
From: Zsolt Parragi
Date:
Subject: Re: SLOPE - Planner optimizations on monotonic expressions.