RE: Non-superuser subscription owners - Mailing list pgsql-hackers

From houzj.fnst@fujitsu.com
Subject RE: Non-superuser subscription owners
Date
Msg-id OS0PR01MB5716E596E4FB83DE46F592FE948C9@OS0PR01MB5716.jpnprd01.prod.outlook.com
Whole thread Raw
In response to Re: Non-superuser subscription owners  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
On Saturday, April 1, 2023 4:00 AM Robert Haas <robertmhaas@gmail.com>

Hi,

> 
> On Thu, Mar 30, 2023 at 9:49 PM houzj.fnst@fujitsu.com
> <houzj.fnst@fujitsu.com> wrote:
> > It looks like the super user check is out of a transaction, I haven't
> > checked why it only failed on one BF animal, but it seems we can put
> > the check into the transaction like the following:
> 
> That looks like a reasonable fix but I can't reproduce the problem locally. I
> thought the reason why that machine sees the problem might be that it uses
> -DRELCACHE_FORCE_RELEASE, but I tried that option here and the tests still pass.
> Anyone ideas how to reproduce?

I think it's a timing problem because superuser_arg() function will cache the
roleid that passed in last time, so it might not search the syscache to hit the
Assert() check each time. And in the regression test, the roleid cache happened
to be invalidated before the superuser_arg() by some concurrently ROLE change(
maybe in subscription.sql and publication.sql).

I can reproduce it by using gdb and starting another session to change the ROLE.

When the apply worker starts, use the gdb to block the apply worker in the
transaction before the super user check. Then start another session to ALTER
ROLE to invalidate the roleid cache in superuser_arg() which will cause the
apply worker to search the syscache and hit the Assert().

--
        origin_startpos = replorigin_session_get_progress(false);
B*        CommitTransactionCommand();

        /* Is the use of a password mandatory? */
        must_use_password = MySubscription->passwordrequired &&
            ! superuser_arg(MySubscription->owner);
--

Best Regards,
Hou zj

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: WL_SOCKET_ACCEPT fairness on Windows
Next
From: Andres Freund
Date:
Subject: Re: WL_SOCKET_ACCEPT fairness on Windows