Re: [CLOBBER_CACHE]Server crashed with segfault 11 while executing clusterdb

Amul Sul <sulamul@gmail.com>

From: Amul Sul <sulamul@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>, Michael Paquier <michael@paquier.xyz>, Noah Misch <noah@leadboat.com>, Neha Sharma <neha.sharma@enterprisedb.com>, Amit Langote <amitlangote09@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-07-13T03:48:05Z
Lists: pgsql-hackers
Thanks a lot Tom.

On Tue, Jul 13, 2021 at 2:37 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> Amul Sul <sulamul@gmail.com> writes:
> > [ v5_Add-RelationGetSmgr-inline-function.patch ]
>
> Pushed with minor cosmetic adjustments.
>
> RelationCopyStorage() kind of gives me the willies.
> It's not really an smgr-level function, but we call it
> everywhere with smgr pointers that belong to relcache entries:
>
>         /* copy main fork */
> -       RelationCopyStorage(rel->rd_smgr, dstrel, MAIN_FORKNUM,
> +       RelationCopyStorage(RelationGetSmgr(rel), dstrel, MAIN_FORKNUM,
>                                                 rel->rd_rel->relpersistence);
>
> So that would fail hard if a relcache flush could occur inside
> that function.  It seems impossible today, so I settled for
> just annotating the function to that effect.  But it won't
> surprise me a bit if somebody breaks it in future due to not
> having read/understood the comment.
>
>                         regards, tom lane



Commits

  1. Replace RelationOpenSmgr() with RelationGetSmgr().

  2. Avoid possible crash while finishing up a heap rewrite.

  3. Redefine pg_class.reltuples to be -1 before the first VACUUM or ANALYZE.