1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-28 11:44:57 +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:
Nathan Bossart
2025-11-26 11:37:21 -06:00
parent e135e04457
commit 2dd506b859

View File

@@ -93,7 +93,6 @@ typedef struct DSMRegistryEntry
{ {
char name[NAMEDATALEN]; char name[NAMEDATALEN];
DSMREntryType type; DSMREntryType type;
bool initialized;
union union
{ {
NamedDSMState dsm; NamedDSMState dsm;
@@ -217,7 +216,6 @@ GetNamedDSMSegment(const char *name, size_t size,
dsm_segment *seg; dsm_segment *seg;
entry->type = DSMR_ENTRY_TYPE_DSM; entry->type = DSMR_ENTRY_TYPE_DSM;
entry->initialized = false;
/* Initialize the segment. */ /* Initialize the segment. */
seg = dsm_create(size, 0); seg = dsm_create(size, 0);
@@ -230,21 +228,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->type != DSMR_ENTRY_TYPE_DSM) else if (entry->type != DSMR_ENTRY_TYPE_DSM)
ereport(ERROR, ereport(ERROR,
(errmsg("requested DSM segment \"%s\" does not match type of existing entry", (errmsg("requested DSM segment does not match type of existing entry")));
name)));
else if (!entry->initialized)
ereport(ERROR,
(errmsg("requested DSM segment \"%s\" failed initialization",
name)));
else if (entry->dsm.size != size) else if (entry->dsm.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 existing segment")));
name)));
else else
{ {
NamedDSMState *state = &entry->dsm; NamedDSMState *state = &entry->dsm;
@@ -307,7 +297,6 @@ GetNamedDSA(const char *name, bool *found)
NamedDSAState *state = &entry->dsa; NamedDSAState *state = &entry->dsa;
entry->type = DSMR_ENTRY_TYPE_DSA; entry->type = DSMR_ENTRY_TYPE_DSA;
entry->initialized = false;
/* Initialize the LWLock tranche for the DSA. */ /* Initialize the LWLock tranche for the DSA. */
state->tranche = LWLockNewTrancheId(name); state->tranche = LWLockNewTrancheId(name);
@@ -319,17 +308,10 @@ GetNamedDSA(const char *name, bool *found)
/* Store handle for other backends to use. */ /* Store handle for other backends to use. */
state->handle = dsa_get_handle(ret); state->handle = dsa_get_handle(ret);
entry->initialized = true;
} }
else if (entry->type != DSMR_ENTRY_TYPE_DSA) else if (entry->type != DSMR_ENTRY_TYPE_DSA)
ereport(ERROR, ereport(ERROR,
(errmsg("requested DSA \"%s\" does not match type of existing entry", (errmsg("requested DSA does not match type of existing entry")));
name)));
else if (!entry->initialized)
ereport(ERROR,
(errmsg("requested DSA \"%s\" failed initialization",
name)));
else else
{ {
NamedDSAState *state = &entry->dsa; NamedDSAState *state = &entry->dsa;
@@ -390,7 +372,6 @@ GetNamedDSHash(const char *name, const dshash_parameters *params, bool *found)
dsa_area *dsa; dsa_area *dsa;
entry->type = DSMR_ENTRY_TYPE_DSH; entry->type = DSMR_ENTRY_TYPE_DSH;
entry->initialized = false;
/* Initialize the LWLock tranche for the hash table. */ /* Initialize the LWLock tranche for the hash table. */
dsh_state->tranche = LWLockNewTrancheId(name); dsh_state->tranche = LWLockNewTrancheId(name);
@@ -408,17 +389,10 @@ GetNamedDSHash(const char *name, const dshash_parameters *params, bool *found)
/* Store handles for other backends to use. */ /* Store handles for other backends to use. */
dsh_state->dsa_handle = dsa_get_handle(dsa); dsh_state->dsa_handle = dsa_get_handle(dsa);
dsh_state->dsh_handle = dshash_get_hash_table_handle(ret); dsh_state->dsh_handle = dshash_get_hash_table_handle(ret);
entry->initialized = true;
} }
else if (entry->type != DSMR_ENTRY_TYPE_DSH) else if (entry->type != DSMR_ENTRY_TYPE_DSH)
ereport(ERROR, ereport(ERROR,
(errmsg("requested DSHash \"%s\" does not match type of existing entry", (errmsg("requested DSHash does not match type of existing entry")));
name)));
else if (!entry->initialized)
ereport(ERROR,
(errmsg("requested DSHash \"%s\" failed initialization",
name)));
else else
{ {
NamedDSHState *dsh_state = &entry->dsh; NamedDSHState *dsh_state = &entry->dsh;