pgsql: Clean up manipulations of hash indexes' hasho_flag field.

Started by Tom Laneabout 9 years ago3 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Clean up manipulations of hash indexes' hasho_flag field.

Standardize on testing a hash index page's type by doing
(opaque->hasho_flag & LH_PAGE_TYPE) == LH_xxx_PAGE
Various places were taking shortcuts like
opaque->hasho_flag & LH_BUCKET_PAGE
which while not actually wrong, is still bad practice because
it encourages use of
opaque->hasho_flag & LH_UNUSED_PAGE
which *is* wrong (LH_UNUSED_PAGE == 0, so the above is constant false).
hash_xlog.c's hash_mask() contained such an incorrect test.

This also ensures that we mask out the additional flag bits that
hasho_flag has accreted since 9.6. pgstattuple's pgstat_hash_page(),
for one, was failing to do that and was thus actively broken.

Also fix assorted comments that hadn't been updated to reflect the
extended usage of hasho_flag, and fix some macros that were testing
just "(hasho_flag & bit)" to use the less dangerous, project-approved
form "((hasho_flag & bit) != 0)".

Coverity found the bug in hash_mask(); I noted the one in
pgstat_hash_page() through code reading.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/2040bb4a0b50ef0434a1a723f00d040ab4f1c06f

Modified Files
--------------
contrib/pageinspect/hashfuncs.c | 12 +++++++-----
contrib/pgstattuple/pgstattuple.c | 2 +-
src/backend/access/hash/hash_xlog.c | 8 +++++---
src/backend/access/hash/hashovfl.c | 2 +-
src/backend/access/hash/hashutil.c | 4 ++--
src/include/access/hash.h | 26 +++++++++++++-------------
6 files changed, 29 insertions(+), 25 deletions(-)

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

#2Amit Kapila
amit.kapila16@gmail.com
In reply to: Tom Lane (#1)
Re: pgsql: Clean up manipulations of hash indexes' hasho_flag field.

On Sat, Apr 15, 2017 at 2:34 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Clean up manipulations of hash indexes' hasho_flag field.

Attached patch to fix one remaining cleanup for the hasho_flag field.

--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Attachments:

change_usage_hashho_flag.patchapplication/octet-stream; name=change_usage_hashho_flag.patchDownload+1-1
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Amit Kapila (#2)
Re: pgsql: Clean up manipulations of hash indexes' hasho_flag field.

Amit Kapila <amit.kapila16@gmail.com> writes:

Attached patch to fix one remaining cleanup for the hasho_flag field.

Pushed, thanks.

regards, tom lane

--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers