Thread: [HACKERS] Leftover invalidation handling in RemoveRelations

[HACKERS] Leftover invalidation handling in RemoveRelations

From
Andres Freund
Date:
Hi,

reviewing some citus code copied from postgres I noticed that
RemoveRelations() has the following bit:
    /*     * These next few steps are a great deal like relation_openrv, but we     * don't bother building a relcache
entrysince we don't need it.     *     * Check for shared-cache-inval messages before trying to access the     *
relation. This is needed to cover the case where the name     * identifies a rel that has been dropped and recreated
sincethe     * start of our transaction: if we don't flush the old syscache entry,     * then we'll latch onto that
entryand suffer an error later.     */    AcceptInvalidationMessages();
 
    /* Look up the appropriate relation using namespace search. */    state.relkind = relkind;    state.heapOid =
InvalidOid;   state.concurrent = drop->concurrent;    relOid = RangeVarGetRelidExtended(rel, lockmode, true,
                         false,                                      RangeVarCallbackForDropRelation,
                  (void *) &state);
 

which doesn't seem to make sense - RangeVarGetRelidExtended does
invalidation handling on it's own.

Looks like this was left there in the course of
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=2ad36c4e44c8b513f6155656e1b7a8d26715bb94

ISTM AcceptInvalidationMessages() and preceding comment should just be
removed?

Greetings,

Andres Freund



Re: [HACKERS] Leftover invalidation handling in RemoveRelations

From
Robert Haas
Date:
On Wed, Mar 15, 2017 at 2:40 PM, Andres Freund <andres@anarazel.de> wrote:
> reviewing some citus code copied from postgres I noticed that
> RemoveRelations() has the following bit:
>
>                 /*
>                  * These next few steps are a great deal like relation_openrv, but we
>                  * don't bother building a relcache entry since we don't need it.
>                  *
>                  * Check for shared-cache-inval messages before trying to access the
>                  * relation.  This is needed to cover the case where the name
>                  * identifies a rel that has been dropped and recreated since the
>                  * start of our transaction: if we don't flush the old syscache entry,
>                  * then we'll latch onto that entry and suffer an error later.
>                  */
>                 AcceptInvalidationMessages();
>
>                 /* Look up the appropriate relation using namespace search. */
>                 state.relkind = relkind;
>                 state.heapOid = InvalidOid;
>                 state.concurrent = drop->concurrent;
>                 relOid = RangeVarGetRelidExtended(rel, lockmode, true,
>                                                                                   false,
>                                                                                   RangeVarCallbackForDropRelation,
>                                                                                   (void *) &state);
>
> which doesn't seem to make sense - RangeVarGetRelidExtended does
> invalidation handling on it's own.
>
> Looks like this was left there in the course of
> http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=2ad36c4e44c8b513f6155656e1b7a8d26715bb94
>
> ISTM AcceptInvalidationMessages() and preceding comment should just be
> removed?

Yeah, I don't think that would hurt anything.

(I'm not sure it'll help anything either - the overhead of an extra
AcceptInvalidationMessages() call is quite minimal - but, as you say,
maybe it's worth doing just to discourage future code authors from
including unnecessary fluff.)

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: [HACKERS] Leftover invalidation handling in RemoveRelations

From
Andres Freund
Date:
Hi,

On 2017-03-15 14:46:22 -0400, Robert Haas wrote:
> On Wed, Mar 15, 2017 at 2:40 PM, Andres Freund <andres@anarazel.de> wrote:
> Yeah, I don't think that would hurt anything.
> 
> (I'm not sure it'll help anything either - the overhead of an extra
> AcceptInvalidationMessages() call is quite minimal - but, as you say,
> maybe it's worth doing just to discourage future code authors from
> including unnecessary fluff.)

I don't think there's an actual runtime advantage either - but it's
indeed confusing for others, because it doesn't square with what's
needed.  It's not like the AcceptInvalidationMessages() would actually
make things race-free if used without RangeVarGetRelidExtended()...

- Andres