#include "postgres.h"#include "storage/bufmgr.h"#include "storage/buf_internals.h"
Go to the source code of this file.
Data Structures | |
| struct | BufferLookupEnt |
Functions | |
| Size | BufTableShmemSize (int size) |
| void | InitBufTable (int size) |
| uint32 | BufTableHashCode (BufferTag *tagPtr) |
| int | BufTableLookup (BufferTag *tagPtr, uint32 hashcode) |
| int | BufTableInsert (BufferTag *tagPtr, uint32 hashcode, int buf_id) |
| void | BufTableDelete (BufferTag *tagPtr, uint32 hashcode) |
Variables | |
| static HTAB * | SharedBufHash |
Definition at line 151 of file buf_table.c.
References elog, ERROR, hash_search_with_hash_value(), and among::result.
Referenced by BufferAlloc(), and InvalidateBuffer().
{
BufferLookupEnt *result;
result = (BufferLookupEnt *)
hash_search_with_hash_value(SharedBufHash,
(void *) tagPtr,
hashcode,
HASH_REMOVE,
NULL);
if (!result) /* shouldn't happen */
elog(ERROR, "shared buffer hash table corrupted");
}
Definition at line 81 of file buf_table.c.
References get_hash_value().
Referenced by BufferAlloc(), InvalidateBuffer(), and PrefetchBuffer().
{
return get_hash_value(SharedBufHash, (void *) tagPtr);
}
Definition at line 121 of file buf_table.c.
References Assert, buftag::blockNum, hash_search_with_hash_value(), BufferLookupEnt::id, P_NEW, and among::result.
Referenced by BufferAlloc().
{
BufferLookupEnt *result;
bool found;
Assert(buf_id >= 0); /* -1 is reserved for not-in-table */
Assert(tagPtr->blockNum != P_NEW); /* invalid tag */
result = (BufferLookupEnt *)
hash_search_with_hash_value(SharedBufHash,
(void *) tagPtr,
hashcode,
HASH_ENTER,
&found);
if (found) /* found something already in the table */
return result->id;
result->id = buf_id;
return -1;
}
Definition at line 93 of file buf_table.c.
References hash_search_with_hash_value(), BufferLookupEnt::id, and among::result.
Referenced by BufferAlloc(), and PrefetchBuffer().
{
BufferLookupEnt *result;
result = (BufferLookupEnt *)
hash_search_with_hash_value(SharedBufHash,
(void *) tagPtr,
hashcode,
HASH_FIND,
NULL);
if (!result)
return -1;
return result->id;
}
| Size BufTableShmemSize | ( | int | size | ) |
Definition at line 43 of file buf_table.c.
References hash_estimate_size().
Referenced by StrategyShmemSize().
{
return hash_estimate_size(size, sizeof(BufferLookupEnt));
}
| void InitBufTable | ( | int | size | ) |
Definition at line 53 of file buf_table.c.
References HASHCTL::entrysize, HASHCTL::hash, HASH_ELEM, HASH_FUNCTION, HASH_PARTITION, HASHCTL::keysize, HASHCTL::num_partitions, and ShmemInitHash().
Referenced by StrategyInitialize().
{
HASHCTL info;
/* assume no locking is needed yet */
/* BufferTag maps to Buffer */
info.keysize = sizeof(BufferTag);
info.entrysize = sizeof(BufferLookupEnt);
info.hash = tag_hash;
info.num_partitions = NUM_BUFFER_PARTITIONS;
SharedBufHash = ShmemInitHash("Shared Buffer Lookup Table",
size, size,
&info,
HASH_ELEM | HASH_FUNCTION | HASH_PARTITION);
}
HTAB* SharedBufHash [static] |
Definition at line 35 of file buf_table.c.
1.7.1