Re: [Report Bug With Patch] Rel Cache Bug - Mailing list pgsql-bugs

From Andres Freund
Subject Re: [Report Bug With Patch] Rel Cache Bug
Date
Msg-id 20150325170842.GC451@alap3.anarazel.de
Whole thread Raw
In response to [Report Bug With Patch] Rel Cache Bug  (Jaimin Pan <jaimin.pan@gmail.com>)
List pgsql-bugs
Hi,

On 2015-03-25 21:59:17 +0800, Jaimin Pan wrote:
> I think there is a bug in rel cache rebuild of release 9.4.1.
> it also exists on some other release.
>
> the issue was introduced by 491dd4a97daa6b4de9ee8401ada10ad5da76af46
>
> -- a/src/backend/utils/cache/relcache.c
> +++ b/src/backend/utils/cache/relcache.c
> @@ -2166,9 +2166,9 @@ RelationClearRelation(Relation relation, bool rebuild)
>                 /* ... but actually, we don't have to update newrel->rd_rel
> */
>                 memcpy(relation->rd_rel, newrel->rd_rel, CLASS_TUPLE_SIZE);
>                 /* preserve old tupledesc and rules if no logical change */
> -               if (keep_tupdesc)
> +               if (!keep_tupdesc)
>                         SWAPFIELD(TupleDesc, rd_att);
> -               if (keep_rules)
> +               if (!keep_rules)
>                 {
>                         SWAPFIELD(RuleLock *, rd_rules);
>                         SWAPFIELD(MemoryContext, rd_rulescxt);

> diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c
> index f6520a0..733860c 100644
> --- a/src/backend/utils/cache/relcache.c
> +++ b/src/backend/utils/cache/relcache.c
> @@ -2166,9 +2166,9 @@ RelationClearRelation(Relation relation, bool rebuild)
>          /* ... but actually, we don't have to update newrel->rd_rel */
>          memcpy(relation->rd_rel, newrel->rd_rel, CLASS_TUPLE_SIZE);
>          /* preserve old tupledesc and rules if no logical change */
> -        if (keep_tupdesc)
> +        if (!keep_tupdesc)
>              SWAPFIELD(TupleDesc, rd_att);
> -        if (keep_rules)
> +        if (!keep_rules)
>          {
>              SWAPFIELD(RuleLock *, rd_rules);
>              SWAPFIELD(MemoryContext, rd_rulescxt);

Why do you think this is broken? While certainly not the prettiest code
around it looks ok to me. What it does is to keep the other entries data
around. Which we want if it's possibly referenced.

Greetings,

Andres Freund

--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

pgsql-bugs by date:

Previous
From: jgpedro@gmail.com
Date:
Subject: BUG #12898: Failure loading materialized view with pg_restore
Next
From: Tom Lane
Date:
Subject: Re: [Report Bug With Patch] Rel Cache Bug