Revert "Allow parallel workers to cope with a newly-created session user ID."
This reverts commit 216201027d90e99a0a2b2d2efba85dc0aac94c62. 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.
This commit is contained in:
parent
216201027d
commit
33c5baff66
@ -1401,6 +1401,10 @@ ParallelWorkerMain(Datum main_arg)
|
|||||||
libraryspace = shm_toc_lookup(toc, PARALLEL_KEY_LIBRARY, false);
|
libraryspace = shm_toc_lookup(toc, PARALLEL_KEY_LIBRARY, false);
|
||||||
StartTransactionCommand();
|
StartTransactionCommand();
|
||||||
RestoreLibraryState(libraryspace);
|
RestoreLibraryState(libraryspace);
|
||||||
|
|
||||||
|
/* Restore GUC values from launching backend. */
|
||||||
|
gucspace = shm_toc_lookup(toc, PARALLEL_KEY_GUC, false);
|
||||||
|
RestoreGUCState(gucspace);
|
||||||
CommitTransactionCommand();
|
CommitTransactionCommand();
|
||||||
|
|
||||||
/* Crank up a transaction state appropriate to a parallel worker. */
|
/* Crank up a transaction state appropriate to a parallel worker. */
|
||||||
@ -1442,14 +1446,6 @@ ParallelWorkerMain(Datum main_arg)
|
|||||||
*/
|
*/
|
||||||
InvalidateSystemCaches();
|
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
|
* Restore current role id. Skip verifying whether session user is
|
||||||
* allowed to become this role and blindly restore the leader's state for
|
* allowed to become this role and blindly restore the leader's state for
|
||||||
|
@ -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
|
* 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.
|
* 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,
|
* As in check_transaction_read_only, allow it if not inside a transaction.
|
||||||
* or if restoring state in a parallel worker.
|
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
check_XactIsoLevel(int *newval, void **extra, GucSource source)
|
check_XactIsoLevel(int *newval, void **extra, GucSource source)
|
||||||
{
|
{
|
||||||
int newXactIsoLevel = *newval;
|
int newXactIsoLevel = *newval;
|
||||||
|
|
||||||
if (newXactIsoLevel != XactIsoLevel &&
|
if (newXactIsoLevel != XactIsoLevel && IsTransactionState())
|
||||||
IsTransactionState() && !InitializingParallelWorker)
|
|
||||||
{
|
{
|
||||||
if (FirstSnapshotSet)
|
if (FirstSnapshotSet)
|
||||||
{
|
{
|
||||||
@ -563,10 +561,6 @@ check_XactIsoLevel(int *newval, void **extra, GucSource source)
|
|||||||
bool
|
bool
|
||||||
check_transaction_deferrable(bool *newval, void **extra, GucSource source)
|
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())
|
if (IsSubTransaction())
|
||||||
{
|
{
|
||||||
GUC_check_errcode(ERRCODE_ACTIVE_SQL_TRANSACTION);
|
GUC_check_errcode(ERRCODE_ACTIVE_SQL_TRANSACTION);
|
||||||
|
@ -1221,21 +1221,3 @@ SELECT 1 FROM tenk1_vw_sec
|
|||||||
(9 rows)
|
(9 rows)
|
||||||
|
|
||||||
rollback;
|
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;
|
|
||||||
|
@ -464,12 +464,3 @@ SELECT 1 FROM tenk1_vw_sec
|
|||||||
WHERE (SELECT sum(f1) FROM int4_tbl WHERE f1 < unique1) < 100;
|
WHERE (SELECT sum(f1) FROM int4_tbl WHERE f1 < unique1) < 100;
|
||||||
|
|
||||||
rollback;
|
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;
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user