mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Revert "Teach DSM registry to ERROR if attaching to an uninitialized entry."
This reverts commit 1165a933aa (and the corresponding commits on
the back-branches). In a follow-up commit, we'll teach the
registry to retry entry initialization instead of leaving it in a
permanently failed state.
Reviewed-by: Robert Haas <robertmhaas@gmail.com>
Discussion: https://postgr.es/m/E1vJHUk-006I7r-37%40gemulon.postgresql.org
Backpatch-through: 17
This commit is contained in:
@@ -45,7 +45,6 @@ typedef struct DSMRegistryEntry
|
|||||||
char name[64];
|
char name[64];
|
||||||
dsm_handle handle;
|
dsm_handle handle;
|
||||||
size_t size;
|
size_t size;
|
||||||
bool initialized;
|
|
||||||
} DSMRegistryEntry;
|
} DSMRegistryEntry;
|
||||||
|
|
||||||
static const dshash_parameters dsh_params = {
|
static const dshash_parameters dsh_params = {
|
||||||
@@ -159,12 +158,8 @@ GetNamedDSMSegment(const char *name, size_t size,
|
|||||||
entry = dshash_find_or_insert(dsm_registry_table, name, found);
|
entry = dshash_find_or_insert(dsm_registry_table, name, found);
|
||||||
if (!(*found))
|
if (!(*found))
|
||||||
{
|
{
|
||||||
dsm_segment *seg;
|
|
||||||
|
|
||||||
entry->initialized = false;
|
|
||||||
|
|
||||||
/* Initialize the segment. */
|
/* Initialize the segment. */
|
||||||
seg = dsm_create(size, 0);
|
dsm_segment *seg = dsm_create(size, 0);
|
||||||
|
|
||||||
dsm_pin_segment(seg);
|
dsm_pin_segment(seg);
|
||||||
dsm_pin_mapping(seg);
|
dsm_pin_mapping(seg);
|
||||||
@@ -174,17 +169,13 @@ GetNamedDSMSegment(const char *name, size_t size,
|
|||||||
|
|
||||||
if (init_callback)
|
if (init_callback)
|
||||||
(*init_callback) (ret);
|
(*init_callback) (ret);
|
||||||
|
|
||||||
entry->initialized = true;
|
|
||||||
}
|
}
|
||||||
else if (!entry->initialized)
|
|
||||||
ereport(ERROR,
|
|
||||||
(errmsg("requested DSM segment \"%s\" failed initialization",
|
|
||||||
name)));
|
|
||||||
else if (entry->size != size)
|
else if (entry->size != size)
|
||||||
|
{
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errmsg("requested DSM segment \"%s\" does not match size of existing entry",
|
(errmsg("requested DSM segment size does not match size of "
|
||||||
name)));
|
"existing segment")));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dsm_segment *seg = dsm_find_mapping(entry->handle);
|
dsm_segment *seg = dsm_find_mapping(entry->handle);
|
||||||
|
|||||||
Reference in New Issue
Block a user