|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <limits.h>#include "common/hashfn.h"#include "lib/dshash.h"#include "storage/lwlock.h"#include "utils/dsa.h"
Go to the source code of this file.
Data Structures | |
| struct | dshash_table_item |
| struct | dshash_partition |
| struct | dshash_table_control |
| struct | dshash_table |
Typedefs | |
| typedef struct dshash_partition | dshash_partition |
| typedef struct dshash_table_control | dshash_table_control |
| #define ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME | ( | hash_table | ) |
Definition at line 197 of file dshash.c.
| #define BUCKET_INDEX_FOR_PARTITION | ( | partition, | |
| size_log2 | |||
| ) | ((partition) << NUM_SPLITS(size_log2)) |
| #define BUCKETS_PER_PARTITION | ( | size_log2 | ) | (((size_t) 1) << NUM_SPLITS(size_log2)) |
| #define DSHASH_NUM_PARTITIONS (1 << DSHASH_NUM_PARTITIONS_LOG2) |
| #define ENTRY_FROM_ITEM | ( | item | ) | ((char *)(item) + MAXALIGN(sizeof(dshash_table_item))) |
| #define ITEM_FROM_ENTRY | ( | entry | ) |
| #define MAX_COUNT_PER_PARTITION | ( | hash_table | ) |
| #define NUM_SPLITS | ( | size_log2 | ) | (size_log2 - DSHASH_NUM_PARTITIONS_LOG2) |
| #define PARTITION_FOR_BUCKET_INDEX | ( | bucket_idx, | |
| size_log2 | |||
| ) | ((bucket_idx) >> NUM_SPLITS(size_log2)) |
| #define PARTITION_FOR_HASH | ( | hash | ) | (hash >> ((sizeof(dshash_hash) * CHAR_BIT) - DSHASH_NUM_PARTITIONS_LOG2)) |
| #define PARTITION_LOCK | ( | hash_table, | |
| i | |||
| ) | (&(hash_table)->control->partitions[(i)].lock) |
Definition at line 1087 of file dshash.c.
References dshash_table::arg, dshash_parameters::copy_function, dshash_parameters::key_size, and dshash_table::params.
Referenced by insert_into_bucket().
|
static |
Definition at line 834 of file dshash.c.
References Assert, BUCKET_FOR_HASH, dshash_table::control, dshash_partition::count, delete_item_from_bucket(), fb(), dshash_table_item::hash, hash(), LWLockHeldByMe(), PARTITION_FOR_HASH, PARTITION_LOCK, and dshash_table_control::partitions.
Referenced by dshash_delete_current(), and dshash_delete_entry().
|
static |
Definition at line 1037 of file dshash.c.
References dshash_table::area, dsa_free(), dsa_get_address(), DsaPointerIsValid, fb(), next, and dshash_table_item::next.
Referenced by delete_item().
|
static |
Definition at line 1008 of file dshash.c.
References dshash_table::area, dsa_free(), dsa_get_address(), DsaPointerIsValid, ENTRY_FROM_ITEM, equal_keys(), fb(), next, and dshash_table_item::next.
Referenced by dshash_delete_key().
| dshash_table * dshash_attach | ( | dsa_area * | area, |
| const dshash_parameters * | params, | ||
| dshash_table_handle | handle, | ||
| void * | arg | ||
| ) |
Definition at line 272 of file dshash.c.
References dshash_table::area, dshash_table::arg, arg, Assert, dshash_table::buckets, dshash_table::control, dsa_get_address(), DSHASH_MAGIC, fb(), dshash_table_control::magic, palloc_object, dshash_table::params, and dshash_table::size_log2.
Referenced by GetNamedDSHash(), init_dsm_registry(), initGlobalChannelTable(), logicalrep_launcher_attach_dshmem(), pgstat_attach_shmem(), and SharedRecordTypmodRegistryAttach().
| dshash_table * dshash_create | ( | dsa_area * | area, |
| const dshash_parameters * | params, | ||
| void * | arg | ||
| ) |
Definition at line 208 of file dshash.c.
References dshash_table::area, dshash_table::arg, arg, dshash_table_control::buckets, dshash_table::buckets, dshash_table::control, DSA_ALLOC_NO_OOM, DSA_ALLOC_ZERO, dsa_allocate, dsa_allocate_extended(), dsa_free(), dsa_get_address(), DsaPointerIsValid, DSHASH_MAGIC, DSHASH_NUM_PARTITIONS, DSHASH_NUM_PARTITIONS_LOG2, ereport, errcode(), errdetail(), errmsg(), ERROR, fb(), dshash_table_control::handle, i, dshash_table_control::lwlock_tranche_id, LWLockInitialize(), dshash_table_control::magic, palloc_object, dshash_table::params, dshash_table_control::partitions, partitions, dshash_table_control::size_log2, dshash_table::size_log2, and dshash_parameters::tranche_id.
Referenced by GetNamedDSHash(), init_dsm_registry(), initGlobalChannelTable(), logicalrep_launcher_attach_dshmem(), SharedRecordTypmodRegistryInit(), and StatsShmemInit().
| void dshash_delete_current | ( | dshash_seq_status * | status | ) |
Definition at line 759 of file dshash.c.
References Assert, dshash_table::control, dshash_seq_status::curitem, delete_item(), DSHASH_MAGIC, dshash_seq_status::exclusive, fb(), dshash_table_item::hash, dshash_seq_status::hash_table, LW_EXCLUSIVE, LWLockHeldByMeInMode(), dshash_table_control::magic, PARTITION_FOR_HASH, PARTITION_LOCK, and PG_USED_FOR_ASSERTS_ONLY.
Referenced by CleanupListenersOnExit(), and pgstat_free_entry().
| void dshash_delete_entry | ( | dshash_table * | hash_table, |
| void * | entry | ||
| ) |
Definition at line 543 of file dshash.c.
References Assert, dshash_table::control, delete_item(), DSHASH_MAGIC, fb(), dshash_table_item::hash, ITEM_FROM_ENTRY, LW_EXCLUSIVE, LWLockHeldByMeInMode(), LWLockRelease(), dshash_table_control::magic, PARTITION_FOR_HASH, and PARTITION_LOCK.
Referenced by pgstat_free_entry(), pgstat_get_entry_ref(), and RemoveListenerFromChannel().
| bool dshash_delete_key | ( | dshash_table * | hash_table, |
| const void * | key | ||
| ) |
Definition at line 505 of file dshash.c.
References Assert, ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, BUCKET_FOR_HASH, dshash_table::control, dshash_partition::count, delete_key_from_bucket(), DSHASH_MAGIC, ensure_valid_bucket_pointers(), fb(), hash(), hash_key(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), dshash_table_control::magic, PARTITION_FOR_HASH, PARTITION_LOCK, and dshash_table_control::partitions.
Referenced by ApplyLauncherForgetWorkerStartTime(), and find_or_make_matching_shared_tupledesc().
| void dshash_destroy | ( | dshash_table * | hash_table | ) |
Definition at line 325 of file dshash.c.
References dshash_table::area, Assert, dshash_table_control::buckets, dshash_table::buckets, dshash_table::control, dsa_free(), dsa_get_address(), DsaPointerIsValid, DSHASH_MAGIC, ensure_valid_bucket_pointers(), fb(), dshash_table_control::handle, i, dshash_table_control::magic, dshash_table_item::next, NUM_BUCKETS, pfree(), and dshash_table::size_log2.
| void dshash_detach | ( | dshash_table * | hash_table | ) |
Definition at line 309 of file dshash.c.
References ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, and pfree().
Referenced by pgstat_detach_shmem(), shared_record_typmod_registry_detach(), and StatsShmemInit().
| void dshash_dump | ( | dshash_table * | hash_table | ) |
Definition at line 780 of file dshash.c.
References dshash_table::area, Assert, ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, BUCKET_INDEX_FOR_PARTITION, dshash_table::buckets, dshash_table::control, dsa_get_address(), DsaPointerIsValid, DSHASH_MAGIC, DSHASH_NUM_PARTITIONS, ensure_valid_bucket_pointers(), fb(), fprintf, i, j, LW_SHARED, LWLockAcquire(), LWLockHeldByMe(), LWLockRelease(), dshash_table_control::magic, dshash_table_item::next, PARTITION_LOCK, dshash_table_control::partitions, and dshash_table::size_log2.
| void * dshash_find | ( | dshash_table * | hash_table, |
| const void * | key, | ||
| bool | exclusive | ||
| ) |
Definition at line 392 of file dshash.c.
References Assert, ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, BUCKET_FOR_HASH, dshash_table::control, DSHASH_MAGIC, ensure_valid_bucket_pointers(), ENTRY_FROM_ITEM, fb(), find_in_bucket(), hash(), hash_key(), LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), dshash_table_control::magic, PARTITION_FOR_HASH, and PARTITION_LOCK.
Referenced by ApplyLauncherGetWorkerStartTime(), ApplyPendingListenActions(), find_or_make_matching_shared_tupledesc(), get_val_in_hash(), lookup_rowtype_tupdesc_internal(), pgstat_drop_entry(), pgstat_get_entry_ref(), pgstat_release_entry_ref(), and SignalBackends().
| void * dshash_find_or_insert | ( | dshash_table * | hash_table, |
| const void * | key, | ||
| bool * | found | ||
| ) |
Definition at line 435 of file dshash.c.
References Assert, ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, BUCKET_FOR_HASH, dshash_table::control, DSHASH_MAGIC, ensure_valid_bucket_pointers(), ENTRY_FROM_ITEM, fb(), find_in_bucket(), dshash_table_item::hash, hash(), hash_key(), insert_into_bucket(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), dshash_table_control::magic, MAX_COUNT_PER_PARTITION, PARTITION_FOR_HASH, PARTITION_LOCK, dshash_table_control::partitions, resize(), and dshash_table::size_log2.
Referenced by ApplyLauncherSetWorkerStartTime(), find_or_make_matching_shared_tupledesc(), GetNamedDSA(), GetNamedDSHash(), GetNamedDSMSegment(), pgstat_get_entry_ref(), pgstat_read_statsfile(), PrepareTableEntriesForListen(), set_val_in_hash(), and SharedRecordTypmodRegistryInit().
| dshash_table_handle dshash_get_hash_table_handle | ( | dshash_table * | hash_table | ) |
Definition at line 369 of file dshash.c.
References Assert, dshash_table::control, DSHASH_MAGIC, dshash_table_control::handle, and dshash_table_control::magic.
Referenced by GetNamedDSHash(), init_dsm_registry(), initGlobalChannelTable(), logicalrep_launcher_attach_dshmem(), SharedRecordTypmodRegistryInit(), and StatsShmemInit().
| dshash_hash dshash_memhash | ( | const void * | v, |
| size_t | size, | ||
| void * | arg | ||
| ) |
Definition at line 583 of file dshash.c.
References tag_hash().
| void dshash_release_lock | ( | dshash_table * | hash_table, |
| void * | entry | ||
| ) |
Definition at line 560 of file dshash.c.
References Assert, dshash_table::control, DSHASH_MAGIC, fb(), dshash_table_item::hash, ITEM_FROM_ENTRY, LWLockRelease(), dshash_table_control::magic, PARTITION_FOR_HASH, and PARTITION_LOCK.
Referenced by ApplyLauncherGetWorkerStartTime(), ApplyLauncherSetWorkerStartTime(), ApplyPendingListenActions(), find_or_make_matching_shared_tupledesc(), get_val_in_hash(), GetNamedDSA(), GetNamedDSHash(), GetNamedDSMSegment(), lookup_rowtype_tupdesc_internal(), pgstat_acquire_entry_ref(), pgstat_drop_entry_internal(), pgstat_get_entry_ref(), pgstat_read_statsfile(), pgstat_release_entry_ref(), PrepareTableEntriesForListen(), set_val_in_hash(), SharedRecordTypmodRegistryInit(), and SignalBackends().
| void dshash_seq_init | ( | dshash_seq_status * | status, |
| dshash_table * | hash_table, | ||
| bool | exclusive | ||
| ) |
Definition at line 640 of file dshash.c.
References dshash_seq_status::curbucket, dshash_seq_status::curitem, dshash_seq_status::curpartition, dshash_seq_status::exclusive, fb(), dshash_seq_status::hash_table, InvalidDsaPointer, dshash_seq_status::nbuckets, and dshash_seq_status::pnextitem.
Referenced by CleanupListenersOnExit(), pg_get_dsm_registry_allocations(), pgstat_build_snapshot(), pgstat_drop_database_and_contents(), pgstat_drop_matching_entries(), pgstat_reset_matching_entries(), and pgstat_write_statsfile().
| void * dshash_seq_next | ( | dshash_seq_status * | status | ) |
Definition at line 659 of file dshash.c.
References dshash_table::area, Assert, ASSERT_NO_PARTITION_LOCKS_HELD_BY_ME, dshash_table::buckets, dshash_table::control, dshash_seq_status::curbucket, dshash_seq_status::curitem, dshash_seq_status::curpartition, dsa_get_address(), DsaPointerIsValid, ensure_valid_bucket_pointers(), ENTRY_FROM_ITEM, dshash_seq_status::exclusive, fb(), dshash_seq_status::hash_table, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockHeldByMeInMode(), LWLockRelease(), dshash_seq_status::nbuckets, dshash_table_item::next, NUM_BUCKETS, PARTITION_FOR_BUCKET_INDEX, PARTITION_LOCK, dshash_seq_status::pnextitem, dshash_table_control::size_log2, and dshash_table::size_log2.
Referenced by CleanupListenersOnExit(), pg_get_dsm_registry_allocations(), pgstat_build_snapshot(), pgstat_drop_database_and_contents(), pgstat_drop_matching_entries(), pgstat_reset_matching_entries(), and pgstat_write_statsfile().
| void dshash_seq_term | ( | dshash_seq_status * | status | ) |
Definition at line 749 of file dshash.c.
References dshash_seq_status::curpartition, dshash_seq_status::hash_table, LWLockRelease(), and PARTITION_LOCK.
Referenced by CleanupListenersOnExit(), pg_get_dsm_registry_allocations(), pgstat_build_snapshot(), pgstat_drop_database_and_contents(), pgstat_drop_matching_entries(), pgstat_reset_matching_entries(), and pgstat_write_statsfile().
| dshash_hash dshash_strhash | ( | const void * | v, |
| size_t | size, | ||
| void * | arg | ||
| ) |
|
inlinestatic |
Definition at line 939 of file dshash.c.
References dshash_table::area, dshash_table_control::buckets, dshash_table::buckets, dshash_table::control, dsa_get_address(), dshash_table_control::size_log2, and dshash_table::size_log2.
Referenced by dshash_delete_key(), dshash_destroy(), dshash_dump(), dshash_find(), dshash_find_or_insert(), and dshash_seq_next().
Definition at line 1076 of file dshash.c.
References a, dshash_table::arg, b, dshash_parameters::compare_function, dshash_parameters::key_size, and dshash_table::params.
Referenced by delete_key_from_bucket(), and find_in_bucket().
|
inlinestatic |
Definition at line 953 of file dshash.c.
References dshash_table::area, dsa_get_address(), DsaPointerIsValid, ENTRY_FROM_ITEM, equal_keys(), fb(), and dshash_table_item::next.
Referenced by dshash_find(), and dshash_find_or_insert().
|
inlinestatic |
Definition at line 1065 of file dshash.c.
References dshash_table::arg, dshash_parameters::hash_function, dshash_parameters::key_size, and dshash_table::params.
Referenced by compute_tsvector_stats(), dshash_delete_key(), dshash_find(), and dshash_find_or_insert().
|
static |
Definition at line 988 of file dshash.c.
References dshash_table::area, copy_key(), dsa_allocate, dsa_get_address(), ENTRY_FROM_ITEM, dshash_parameters::entry_size, fb(), insert_item_into_bucket(), MAXALIGN, and dshash_table::params.
Referenced by dshash_find_or_insert().
|
static |
Definition at line 972 of file dshash.c.
References dshash_table::area, Assert, dsa_get_address(), fb(), and dshash_table_item::next.
Referenced by insert_into_bucket(), and resize().
|
static |
Definition at line 860 of file dshash.c.
References dshash_table::area, Assert, BUCKET_INDEX_FOR_HASH_AND_SIZE, dshash_table_control::buckets, dshash_table::buckets, dshash_table::control, DSA_ALLOC_HUGE, DSA_ALLOC_ZERO, dsa_allocate_extended(), dsa_free(), dsa_get_address(), DsaPointerIsValid, DSHASH_NUM_PARTITIONS, fb(), dshash_table_item::hash, i, insert_item_into_bucket(), LW_EXCLUSIVE, LWLockAcquire(), LWLockHeldByMe(), LWLockRelease(), dshash_table_item::next, PARTITION_LOCK, and dshash_table_control::size_log2.
Referenced by dshash_find_or_insert().