Re: Strange assertion using VACOPT_FREEZE in vacuum.c

From: Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>
To: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Strange assertion using VACOPT_FREEZE in vacuum.c
Date: 2015-02-13 23:10:25
Message-ID: 54DE8461.9090300@BlueTreble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2/12/15 10:54 PM, Michael Paquier wrote:
> Hi all,
>
> When calling vacuum(), there is the following assertion using VACOPT_FREEZE:
> Assert((vacstmt->options & VACOPT_VACUUM) ||
> !(vacstmt->options & (VACOPT_FULL | VACOPT_FREEZE)));
> I think that this should be changed with sanity checks based on the
> parameter values of freeze_* in VacuumStmt as we do not set up
> VACOPT_FREEZE when VACUUM is used without options in parenthesis, for
> something like that:
> Assert((vacstmt->options & VACOPT_VACUUM) ||
> - !(vacstmt->options & (VACOPT_FULL | VACOPT_FREEZE)));
> + ((vacstmt->options & VACOPT_FULL) == 0 &&
> + vacstmt->freeze_min_age < 0 &&
> + vacstmt->freeze_table_age < 0 &&
> + vacstmt->multixact_freeze_min_age < 0 &&
> + vacstmt->multixact_freeze_table_age < 0));
> This would also have the advantage to limit the use of VACOPT_FREEZE
> in the query parser.
> A patch is attached.
> Thoughts?

Looks good. Should we also assert that if VACOPT_FREEZE is set then all
the other stuff is 0? I don't know what kind of sanity checks we
normally try and put on the parser, but that seems like a possible hole.
--
Jim Nasby, Data Architect, Blue Treble Consulting
Data in Trouble? Get it in Treble! http://BlueTreble.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2015-02-13 23:25:37 Re: "multiple backends attempting to wait for pincount 1"
Previous Message Kevin Grittner 2015-02-13 23:05:16 Re: "multiple backends attempting to wait for pincount 1"