worker_spi: Fix test failure with BGWORKER_BYPASS_ALLOWCONN
authorMichael Paquier <michael@paquier.xyz>
Fri, 6 Oct 2023 00:56:55 +0000 (09:56 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 6 Oct 2023 00:56:55 +0000 (09:56 +0900)
A bgworker can spawn parallel workers of its own when executing queries,
and if the worker uses BGWORKER_BYPASS_ALLOWCONN while the database it
is connected to does not allow connections, a parallel worker would fail
to startup.  In the case of this module, the step checking for the
presence of the schema to create was spawning a worker, failing the last
test introduced by 991bb0f9653c.

This issue could be reproduced with debug_parallel_query = 'regress',
for example.

Per buildfarm member crake.

src/test/modules/worker_spi/worker_spi.c

index 5d81cf45639a1dce0939331b3631616c95386338..1c619d4b1897dc44820aa6bd08c0d8aad5f39035 100644 (file)
@@ -173,6 +173,15 @@ worker_spi_main(Datum main_arg)
        BackgroundWorkerInitializeConnection(worker_spi_database,
                                             worker_spi_role, flags);
 
+   /*
+    * Disable parallel query for workers started with BYPASS_ALLOWCONN so as
+    * these don't attempt connections to the database that may not allow
+    * that.
+    */
+   if (flags & BGWORKER_BYPASS_ALLOWCONN)
+       SetConfigOption("max_parallel_workers_per_gather", "0",
+                       PGC_USERSET, PGC_S_OVERRIDE);
+
    elog(LOG, "%s initialized with %s.%s",
         MyBgworkerEntry->bgw_name, table->schema, table->name);
    initialize_worker_spi(table);