Revert "Teach DSM registry to ERROR if attaching to an uninitialized entry."
authorNathan Bossart <[email protected]>
Wed, 26 Nov 2025 17:37:21 +0000 (11:37 -0600)
committerNathan Bossart <[email protected]>
Wed, 26 Nov 2025 17:37:21 +0000 (11:37 -0600)
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 <[email protected]>
Discussion: https://postgr.es/m/E1vJHUk-006I7r-37%40gemulon.postgresql.org
Backpatch-through: 17

src/backend/storage/ipc/dsm_registry.c

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