Re: v13: CLUSTER segv with wal_level=minimal and parallel index creation
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: noah@leadboat.com
Cc: tgl@sss.pgh.pa.us, pryzby@telsasoft.com, pgsql-hackers@postgresql.org
Date: 2020-09-08T00:13:53Z
Lists: pgsql-hackers
Attachments
At Mon, 7 Sep 2020 02:32:55 -0700, Noah Misch <noah@leadboat.com> wrote in > On Mon, Sep 07, 2020 at 05:40:36PM +0900, Kyotaro Horiguchi wrote: > > At Mon, 07 Sep 2020 13:45:28 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in > > > The cause is that the worker had received pending-sync entry correctly > > > but not never created a relcache entry for the relation using > > > RelationBuildDesc. So the rd_firstRelfilenodeSubid is not correctly > > > set. > > > > > > I'm investigating it. > > > > Relcaches are loaded from a file with old content at parallel worker > > startup. The relcache entry is corrected by invalidation at taking a > > lock but pending syncs are not considered. > > > > Since parallel workers don't access the files so we can just ignore > > the assertion safely, but I want to rd_firstRelfilenodeSubid flag at > > invalidation, as attached PoC patch. > > > [patch: When RelationInitPhysicalAddr() handles a mapped relation, re-fill > > rd_firstRelfilenodeSubid from RelFileNodeSkippingWAL(), like > > RelationBuildDesc() would do.] > > As a PoC, this looks promising. Thanks. Would you add a test case such that > the following demonstrates the bug in the absence of your PoC? > > printf '%s\n%s\n%s\n' 'log_statement = all' 'wal_level = minimal' 'max_wal_senders = 0' >/tmp/minimal.conf > make check TEMP_CONFIG=/tmp/minimal.conf Mmm. I was close to add some tests to 018_wal_optimize.pl but your suggestion seems better. I added several ines to create_index.sql. > Please have the test try both a nailed-and-mapped relation and a "nailed, but > not mapped" relation. I am fairly confident that your PoC fixes the former > case, but the latter may need additional code. Mmm. You're right. I choosed pg_amproc_fam_proc_index as nailed-but-not-mapped index. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Fix rd_firstRelfilenodeSubid for nailed relations, in parallel workers.
- 6f15be5bedfc 13.0 landed
- fe4d022c8e17 14.0 landed
-
Skip WAL for new relfilenodes, under wal_level=minimal.
- c6b92041d385 13.0 cited