Thread: 'WARNING: you don't own a lock of type ExclusiveLock' is printed during the GRANT command on PostgreSQL16.5
'WARNING: you don't own a lock of type ExclusiveLock' is printed during the GRANT command on PostgreSQL16.5
From
"Aya Iwata (Fujitsu)"
Date:
Hi developers, During our tests on November release, we discovered a "WARNING: you don't own a lock of type ExclusiveLock" that occurred at a strange time in GRANT command. [Details] Version: 16.5 OS: Linux Build options: --prefix=/xxx/xxx/xxx' '--with-ssl=openssl' '--without-icu Build and install command: make all make install Reproduction procedure: 1. Set binaries bin and lib path 2. Initiate the server using initdb command 3. create folder for tablespace 4. start the server usaing pg_ctl command 5. execute the following commands: This is only possible when psql executes each command individually. $ psql -d postgres -c "CREATE USER nmluser1;" CREATE ROLE $ psql -d postgres -c "CREATE TABLESPACE test_tblspace LOCATION '/xxx /xxx/pgsql16.5/tbs';" CREATE TABLESPACE $ psql -d postgres -c "CREATE DATABASE enc_testdb;" CREATE DATABASE $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE postgres TO nmluser1;" GRANT $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE enc_testdb TO nmluser1;" GRANT $ psql -d postgres -c "GRANT CREATE ON TABLESPACE test_tblspace TO nmluser1;" WARNING: you don't own a lock of type ExclusiveLock GRANT [Investigated] - This WARNING did not occur when tested with FEP16.4 using the same "Reproduction procedure:" - This WARNING did not occur when running CREATE ROLE through GRANT in a single session connected to psql. - Also, it did not happen when running 'psql -f' with an .sql file - We have run similar tests in the November releases of v12 through v17, but this is not reported by the tester in thosereleases. -- Therefore, we have not tried this "Reproduction procedure:" on versions other than 16.5 and 16.4. - This WARNING message appears in several places, and after modifying the source code to know which elog it is, seemed to come from ReleaseSysCache() in ExecGrant_common() Regards, Aya Iwata Fujitsu
Re: 'WARNING: you don't own a lock of type ExclusiveLock' is printed during the GRANT command on PostgreSQL16.5
From
Noah Misch
Date:
On Wed, Nov 20, 2024 at 05:11:07AM +0000, Aya Iwata (Fujitsu) wrote: > During our tests on November release, > we discovered a "WARNING: you don't own a lock of type ExclusiveLock" that occurred at a strange time in GRANT command. > > [Details] > Version: > 16.5 > 1. Set binaries bin and lib path > 2. Initiate the server using initdb command > 3. create folder for tablespace > 4. start the server usaing pg_ctl command > 5. execute the following commands: > > This is only possible when psql executes each command individually. > $ psql -d postgres -c "CREATE USER nmluser1;" > CREATE ROLE > $ psql -d postgres -c "CREATE TABLESPACE test_tblspace LOCATION '/xxx /xxx/pgsql16.5/tbs';" > CREATE TABLESPACE > $ psql -d postgres -c "CREATE DATABASE enc_testdb;" > CREATE DATABASE > $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE postgres TO nmluser1;" > GRANT > $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE enc_testdb TO nmluser1;" > GRANT > $ psql -d postgres -c "GRANT CREATE ON TABLESPACE test_tblspace TO nmluser1;" > WARNING: you don't own a lock of type ExclusiveLock > GRANT > > > [Investigated] > - This WARNING did not occur when tested with FEP16.4 using the same "Reproduction procedure:" > - This WARNING did not occur when running CREATE ROLE through GRANT in a single session connected to psql. > - Also, it did not happen when running 'psql -f' with an .sql file > - We have run similar tests in the November releases of v12 through v17, but this is not reported by the tester in thosereleases. > -- Therefore, we have not tried this "Reproduction procedure:" on versions other than 16.5 and 16.4. > - This WARNING message appears in several places, and after modifying the source code to know which elog it is, > seemed to come from ReleaseSysCache() in ExecGrant_common() Thanks for the report. This seems reasonably likely to come from a defect in commit 51ff46d. I will look into it.
RE: 'WARNING: you don't own a lock of type ExclusiveLock' is printed during the GRANT command on PostgreSQL16.5
From
"Aya Iwata (Fujitsu)"
Date:
Hi, >Did you ever see the WARNING with a DATABASE command, or just with a >TABLESPACE command? We tried this, but there is no WARNING on GRANT xxx ON DATABASE command. But I did notice a warning while REVOKE xxx ON TABLESPACE. $ psql -x -p 5432 -d postgres -c "REVOKE CREATE ON TABLESPACE test_tbl_spc FROM nmluser1;" WARNING: you don't own a lock of type ExclusiveLock REVOKE So both GRANT and REVOKE command on TABLESPACE seems to throw an WARNING. Best Regards, Aya Iwata Fujitsu > -----Original Message----- > From: Noah Misch <noah@leadboat.com> > Sent: Thursday, November 21, 2024 10:11 AM > To: Iwata, Aya/岩田 彩 <iwata.aya@fujitsu.com> > Cc: pgsql-bugs@lists.postgresql.org > Subject: Re: 'WARNING: you don't own a lock of type ExclusiveLock' is printed > during the GRANT command on PostgreSQL16.5 > > On Tue, Nov 19, 2024 at 10:27:42PM -0800, Noah Misch wrote: > > On Wed, Nov 20, 2024 at 05:11:07AM +0000, Aya Iwata (Fujitsu) wrote: > > > During our tests on November release, > > > we discovered a "WARNING: you don't own a lock of type ExclusiveLock" > that occurred at a strange time in GRANT command. > > > > This is only possible when psql executes each command individually. > > > $ psql -d postgres -c "CREATE USER nmluser1;" > > > CREATE ROLE > > > $ psql -d postgres -c "CREATE TABLESPACE test_tblspace LOCATION > '/xxx /xxx/pgsql16.5/tbs';" > > > CREATE TABLESPACE > > > $ psql -d postgres -c "CREATE DATABASE enc_testdb;" > > > CREATE DATABASE > > > $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE postgres > TO nmluser1;" > > > GRANT > > > $ psql -d postgres -c "GRANT ALL PRIVILEGES ON DATABASE > enc_testdb TO nmluser1;" > > > GRANT > > > $ psql -d postgres -c "GRANT CREATE ON TABLESPACE test_tblspace TO > nmluser1;" > > > WARNING: you don't own a lock of type ExclusiveLock > > > GRANT > > Did you ever see the WARNING with a DATABASE command, or just with a > TABLESPACE command? > > > Thanks for the report. This seems reasonably likely to come from a defect in > > commit 51ff46d. I will look into it. > > Yes, that commit had us reading cc_relisshared before that field got > initialized. I can reproduce the WARNING in v16+, with GRANT TABLESPACE. > Before a cache's initialization cc_relisshared==false, so > SearchSysCacheLocked1() used the wrong locktag. The attached patch is > about > right. At a minimum, I still need to work on the details in its log message.
Re: 'WARNING: you don't own a lock of type ExclusiveLock' is printed during the GRANT command on PostgreSQL16.5
From
Noah Misch
Date:
On Mon, Nov 25, 2024 at 05:54:50AM +0000, Aya Iwata (Fujitsu) wrote: > >Did you ever see the WARNING with a DATABASE command, or just with a > >TABLESPACE command? > > We tried this, but there is no WARNING on GRANT xxx ON DATABASE command. > > But I did notice a warning while REVOKE xxx ON TABLESPACE. > > $ psql -x -p 5432 -d postgres -c "REVOKE CREATE ON TABLESPACE test_tbl_spc FROM nmluser1;" > WARNING: you don't own a lock of type ExclusiveLock > REVOKE > > So both GRANT and REVOKE command on TABLESPACE seems to throw an WARNING. That makes sense. I've pushed postgr.es/c/4ba84de for this.