Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Revert "Allow parallel workers to cope with a newly-created session user ID."
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 1 Aug 2024 00:56:30 +0000 (20:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 1 Aug 2024 00:56:30 +0000 (20:56 -0400)
This reverts commit 68855c03878c0c90227e24533ca40127da3578cd.

Some buildfarm animals are failing with "cannot change
"client_encoding" during a parallel operation".  It looks like
assign_client_encoding is unhappy at being asked to roll back a
client_encoding setting after a parallel worker encounters a
failure.  There must be more to it though: why didn't I see this
during local testing?  In any case, it's clear that moving the
RestoreGUCState() call is not as side-effect-free as I thought.
Given that the bug f5f30c22e intended to fix has gone unreported
for years, it's not something that's urgent to fix; I'm not
willing to risk messing with it further with only days to our
next release wrap.

src/backend/access/transam/parallel.c
src/backend/commands/variable.c
src/test/regress/expected/select_parallel.out
src/test/regress/sql/select_parallel.sql

index 9c68d4014300d9e0d58539760941d92b8c99170a..f357804fda09005b6b2e43c062b431e3c2e5cb28 100644 (file)
@@ -1367,6 +1367,10 @@ ParallelWorkerMain(Datum main_arg)
    libraryspace = shm_toc_lookup(toc, PARALLEL_KEY_LIBRARY, false);
    StartTransactionCommand();
    RestoreLibraryState(libraryspace);
+
+   /* Restore GUC values from launching backend. */
+   gucspace = shm_toc_lookup(toc, PARALLEL_KEY_GUC, false);
+   RestoreGUCState(gucspace);
    CommitTransactionCommand();
 
    /* Crank up a transaction state appropriate to a parallel worker. */
@@ -1408,14 +1412,6 @@ ParallelWorkerMain(Datum main_arg)
     */
    InvalidateSystemCaches();
 
-   /*
-    * Restore GUC values from launching backend.  We can't do this earlier,
-    * because GUC check hooks that do catalog lookups need to see the same
-    * database state as the leader.
-    */
-   gucspace = shm_toc_lookup(toc, PARALLEL_KEY_GUC, false);
-   RestoreGUCState(gucspace);
-
    /*
     * Restore current role id.  Skip verifying whether session user is
     * allowed to become this role and blindly restore the leader's state for
index 46a2be1be620df3ecefe9540d41eab57fc7585c3..16fa68c18c68e1271a2e4a577d383c13399334d7 100644 (file)
@@ -519,16 +519,14 @@ check_transaction_read_only(bool *newval, void **extra, GucSource source)
  * We allow idempotent changes at any time, but otherwise this can only be
  * changed in a toplevel transaction that has not yet taken a snapshot.
  *
- * As in check_transaction_read_only, allow it if not inside a transaction,
- * or if restoring state in a parallel worker.
+ * As in check_transaction_read_only, allow it if not inside a transaction.
  */
 bool
 check_XactIsoLevel(int *newval, void **extra, GucSource source)
 {
    int         newXactIsoLevel = *newval;
 
-   if (newXactIsoLevel != XactIsoLevel &&
-       IsTransactionState() && !InitializingParallelWorker)
+   if (newXactIsoLevel != XactIsoLevel && IsTransactionState())
    {
        if (FirstSnapshotSet)
        {
@@ -563,10 +561,6 @@ check_XactIsoLevel(int *newval, void **extra, GucSource source)
 bool
 check_transaction_deferrable(bool *newval, void **extra, GucSource source)
 {
-   /* Just accept the value when restoring state in a parallel worker */
-   if (InitializingParallelWorker)
-       return true;
-
    if (IsSubTransaction())
    {
        GUC_check_errcode(ERRCODE_ACTIVE_SQL_TRANSACTION);
index 27e155e87d38e5774cdf483d9042d8c7df2c4459..49f54d640a1ece226033253083a5d13f2006a0b7 100644 (file)
@@ -1174,21 +1174,3 @@ SELECT 1 FROM tenk1_vw_sec
 (9 rows)
 
 rollback;
--- test that a newly-created session role propagates to workers.
-begin;
-create role regress_parallel_worker;
-set session authorization regress_parallel_worker;
-select current_setting('session_authorization');
-     current_setting     
--------------------------
- regress_parallel_worker
-(1 row)
-
-set force_parallel_mode = 1;
-select current_setting('session_authorization');
-     current_setting     
--------------------------
- regress_parallel_worker
-(1 row)
-
-rollback;
index 35bc8bc495690dd8625929a12cd75f2d34fb1ec0..5a01a98b268938b079c022f276c84ccb22421353 100644 (file)
@@ -454,12 +454,3 @@ SELECT 1 FROM tenk1_vw_sec
   WHERE (SELECT sum(f1) FROM int4_tbl WHERE f1 < unique1) < 100;
 
 rollback;
-
--- test that a newly-created session role propagates to workers.
-begin;
-create role regress_parallel_worker;
-set session authorization regress_parallel_worker;
-select current_setting('session_authorization');
-set force_parallel_mode = 1;
-select current_setting('session_authorization');
-rollback;