Em ter., 17 de jun. de 2025 às 10:43, Tomas Vondra <to...@vondra.me>
escreveu:

> On 6/17/25 15:09, Aleksander Alekseev wrote:
> > Hi,
> >
> >>> We would be in serious trouble if RelationReloadNailed() could be
> >>> called for a non-existing relation. Wouldn't Assert() be more
> >>> appropriate?
> >>
> >> IMO, I think no.
> >>
> >> In all paths, this check is done, why would this be the only exception?
> >
> > We use Asserts() for cases that shouldn't happen in practice for
> > performance reasons. Since this code doesn't crash I suspect this is
> > one of such cases. Unless you are aware of a specific scenario that
> > makes the code crash of course.
> >
>
> Right. Assert() are for checks that we don't expect to ever fail, so we
> don't want to keep them in production builds. I believe this is exactly
> such case, because the code is about "nailed" catalogs, that we need to
> access very early (e.g. before being able to access pg_class).
>
> There's only ~10 of such catalogs (look for formrdesc calls), and if we
> get a failure here, it's not clear to me we can really keep the system
> running anyway. It's not just the usual "relcache miss" and if the user
> retries it will probably work fine. The catalog is borked, and who knows
> in what way.
>
> My opinion is that adding a "elog(ERROR)" here would be misleading, as
> it implies it's something we expect. And mostly pointless. I can imagine
> adding an Assert, but I don't quite see how is that better than just
> hitting a segfault a couple lines later.
>
To me this is a contradiction, whether you consider waiting for a segfault
or consider adding an Assert.
For the user it is better to have a log, where he can quickly find the
problem, rather than having to investigate on his own.

best regards,
Ranier Vilela

Reply via email to