At Thu, 18 Aug 2022 16:58:24 +0530, Pavan Deolasee <pavan.deolasee@gmail.com> wrote in
> Hi,
>
> On Thu, Aug 18, 2022 at 5:38 AM Andres Freund <andres@anarazel.de> wrote:
>
> > We can't move pgstat shutdown into on_dsm callback because that's too late
> > to
> > allocate *new* dsm segments, which we might need to do while flushing
> > out pending stats.
> >
> > See
> > https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=fa91d4c91f28f4819dc54f93adbd413a685e366a
> > for a way to avoid the problem.
> >
> >
> Thanks for the hint. I will try that approach. I wonder though if there is
> something more we can do. For example, would it make sense to throw a
> WARNING and avoid segfault if pgstat machinery is already shutdown? Just
> worried if the code can be reached from multiple paths and testing all of
> those would be difficult for extension developers, especially given this
> may happen in error recovery path.
I'm not sure how extensions can face this problem, but..
pgstat is designed not to lose reported numbers. The assertion is
manifets that intention. It is not enabled on non-assertion builds
and pgstat enters undefined state then maybe crash after the assertion
point. On the other hand I don't think we want to perform the same
check for the all places the assertion exists on non-assertion builds.
We cannot simply replace the assertion with ereport().
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center