From dfb3d5cae3163ebc9073cc762adec966f17e2f33 Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot Date: Fri, 17 Feb 2023 11:30:21 +0000 Subject: [PATCH v1] Change ndeletable in _hash_vacuum_one_page() from int to uint16 deletable in _hash_vacuum_one_page() is assigned to xl_hash_vacuum_one_page.ntuples which has been changed to uint16 in a previous commit. This commit ensures that the assigned value has the same type. Doing so produces those cascading changes: _hash_vacuum_one_page index_compute_xid_horizon_for_tuples gistprunepage PageIndexMultiDelete gistXLogDelete PageIndexMultiDelete spgRedoVacuumRedirect vacuumRedirectAndPlaceholder spgPageIndexMultiDelete moveLeafs doPickSplit _bt_delitems_vacuum btvacuumpage _bt_delitems_delete _bt_delitems_delete_check hash_xlog_move_page_contents gistvacuumpage gistXLogUpdate gistplacetopage hashbucketcleanup which also fixed others missmatch on the way. Also in some places the types have been changed from OffsetNumber to uint16. Even if at the time of this commit the OffsetNumber is defined as uint16, it's better to match the functions arguments types they are linked to. --- src/backend/access/gist/gist.c | 6 +++--- src/backend/access/gist/gistvacuum.c | 2 +- src/backend/access/gist/gistxlog.c | 4 ++-- src/backend/access/hash/hash.c | 2 +- src/backend/access/hash/hash_xlog.c | 8 ++++---- src/backend/access/hash/hashinsert.c | 2 +- src/backend/access/index/genam.c | 2 +- src/backend/access/nbtree/nbtpage.c | 14 +++++++------- src/backend/access/nbtree/nbtree.c | 4 ++-- src/backend/access/spgist/spgdoinsert.c | 8 ++++---- src/backend/access/spgist/spgvacuum.c | 4 ++-- src/backend/access/spgist/spgxlog.c | 2 +- src/backend/storage/page/bufpage.c | 12 ++++++++---- src/include/access/genam.h | 2 +- src/include/access/gist_private.h | 4 ++-- src/include/access/nbtree.h | 4 ++-- src/include/access/spgist_private.h | 2 +- src/include/storage/bufpage.h | 2 +- 18 files changed, 44 insertions(+), 40 deletions(-) 14.8% src/backend/access/gist/ 11.6% src/backend/access/hash/ 25.0% src/backend/access/nbtree/ 11.2% src/backend/access/spgist/ 14.3% src/backend/storage/page/ 20.1% src/include/access/ diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index ba394f08f6..587fb04585 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -573,8 +573,8 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, { if (RelationNeedsWAL(rel)) { - OffsetNumber ndeloffs = 0, - deloffs[1]; + uint16 ndeloffs = 0; + OffsetNumber deloffs[1]; if (OffsetNumberIsValid(oldoffnum)) { @@ -1642,7 +1642,7 @@ static void gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel) { OffsetNumber deletable[MaxIndexTuplesPerPage]; - int ndeletable = 0; + uint16 ndeletable = 0; OffsetNumber offnum, maxoff; diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index 3f60d3274d..c72401508c 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -310,7 +310,7 @@ restart: else if (GistPageIsLeaf(page)) { OffsetNumber todelete[MaxOffsetNumber]; - int ntodelete = 0; + uint16 ntodelete = 0; int nremain; GISTPageOpaque opaque = GistPageGetOpaque(page); OffsetNumber maxoff = PageGetMaxOffsetNumber(page); diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c index f65864254a..47f9dd0a86 100644 --- a/src/backend/access/gist/gistxlog.c +++ b/src/backend/access/gist/gistxlog.c @@ -631,7 +631,7 @@ gistXLogPageReuse(Relation rel, BlockNumber blkno, FullTransactionId deleteXid) */ XLogRecPtr gistXLogUpdate(Buffer buffer, - OffsetNumber *todelete, int ntodelete, + OffsetNumber *todelete, uint16 ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf) { @@ -671,7 +671,7 @@ gistXLogUpdate(Buffer buffer, * standby queries and needs special handling. */ XLogRecPtr -gistXLogDelete(Buffer buffer, OffsetNumber *todelete, int ntodelete, +gistXLogDelete(Buffer buffer, OffsetNumber *todelete, uint16 ntodelete, TransactionId snapshotConflictHorizon) { gistxlogDelete xlrec; diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index eb258337d6..49d70232e4 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -709,7 +709,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf, Buffer next_buf; Page page; OffsetNumber deletable[MaxOffsetNumber]; - int ndeletable = 0; + uint16 ndeletable = 0; bool retain_pin = false; bool clear_dead_marking = false; diff --git a/src/backend/access/hash/hash_xlog.c b/src/backend/access/hash/hash_xlog.c index f38b42efb9..6f7ee8b7ee 100644 --- a/src/backend/access/hash/hash_xlog.c +++ b/src/backend/access/hash/hash_xlog.c @@ -591,11 +591,11 @@ hash_xlog_move_page_contents(XLogReaderState *record) if (len > 0) { - OffsetNumber *unused; - OffsetNumber *unend; + uint16 *unused; + uint16 *unend; - unused = (OffsetNumber *) ptr; - unend = (OffsetNumber *) ((char *) ptr + len); + unused = (uint16 *) ptr; + unend = (uint16 *) ((char *) ptr + len); if ((unend - unused) > 0) PageIndexMultiDelete(page, unused, unend - unused); diff --git a/src/backend/access/hash/hashinsert.c b/src/backend/access/hash/hashinsert.c index a604e31891..014008f99f 100644 --- a/src/backend/access/hash/hashinsert.c +++ b/src/backend/access/hash/hashinsert.c @@ -372,7 +372,7 @@ static void _hash_vacuum_one_page(Relation rel, Relation hrel, Buffer metabuf, Buffer buf) { OffsetNumber deletable[MaxOffsetNumber]; - int ndeletable = 0; + uint16 ndeletable = 0; OffsetNumber offnum, maxoff; Page page = BufferGetPage(buf); diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 722927aeba..c837ff7a2f 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -295,7 +295,7 @@ index_compute_xid_horizon_for_tuples(Relation irel, Relation hrel, Buffer ibuf, OffsetNumber *itemnos, - int nitems) + uint16 nitems) { TM_IndexDeleteOp delstate; TransactionId snapshotConflictHorizon = InvalidTransactionId; diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 3feee28d19..ddc6ad0e45 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -42,8 +42,8 @@ static void _bt_log_reuse_page(Relation rel, BlockNumber blkno, FullTransactionId safexid); static void _bt_delitems_delete(Relation rel, Buffer buf, TransactionId snapshotConflictHorizon, - OffsetNumber *deletable, int ndeletable, - BTVacuumPosting *updatable, int nupdatable); + OffsetNumber *deletable, uint16 ndeletable, + BTVacuumPosting *updatable, uint16 nupdatable); static char *_bt_delitems_update(BTVacuumPosting *updatable, int nupdatable, OffsetNumber *updatedoffsets, Size *updatedbuflen, bool needswal); @@ -1164,8 +1164,8 @@ _bt_pageinit(Page page, Size size) */ void _bt_delitems_vacuum(Relation rel, Buffer buf, - OffsetNumber *deletable, int ndeletable, - BTVacuumPosting *updatable, int nupdatable) + OffsetNumber *deletable, uint16 ndeletable, + BTVacuumPosting *updatable, uint16 nupdatable) { Page page = BufferGetPage(buf); BTPageOpaque opaque; @@ -1295,8 +1295,8 @@ _bt_delitems_vacuum(Relation rel, Buffer buf, static void _bt_delitems_delete(Relation rel, Buffer buf, TransactionId snapshotConflictHorizon, - OffsetNumber *deletable, int ndeletable, - BTVacuumPosting *updatable, int nupdatable) + OffsetNumber *deletable, uint16 ndeletable, + BTVacuumPosting *updatable, uint16 nupdatable) { Page page = BufferGetPage(buf); BTPageOpaque opaque; @@ -1532,7 +1532,7 @@ _bt_delitems_delete_check(Relation rel, Buffer buf, Relation heapRel, Page page = BufferGetPage(buf); TransactionId snapshotConflictHorizon; OffsetNumber postingidxoffnum = InvalidOffsetNumber; - int ndeletable = 0, + uint16 ndeletable = 0, nupdatable = 0; OffsetNumber deletable[MaxIndexTuplesPerPage]; BTVacuumPosting updatable[MaxIndexTuplesPerPage]; diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 1cc88da032..ba07fd4c7f 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -1151,9 +1151,9 @@ backtrack: else if (P_ISLEAF(opaque)) { OffsetNumber deletable[MaxIndexTuplesPerPage]; - int ndeletable; + uint16 ndeletable; BTVacuumPosting updatable[MaxIndexTuplesPerPage]; - int nupdatable; + uint16 nupdatable; OffsetNumber offnum, minoff, maxoff; diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index 3554edcc9a..7b59ba87a9 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -130,7 +130,7 @@ cmpOffsetNumbers(const void *a, const void *b) */ void spgPageIndexMultiDelete(SpGistState *state, Page page, - OffsetNumber *itemnos, int nitems, + OffsetNumber *itemnos, uint16 nitems, int firststate, int reststate, BlockNumber blkno, OffsetNumber offnum) { @@ -389,8 +389,8 @@ moveLeafs(Relation index, SpGistState *state, SPPageDesc *current, SPPageDesc *parent, SpGistLeafTuple newLeafTuple, bool isNulls) { + uint16 nDelete; int i, - nDelete, nInsert, size; Buffer nbuf; @@ -711,8 +711,8 @@ doPickSplit(Relation index, SpGistState *state, char *leafdata, *leafptr; SPPageDesc saveCurrent; - int nToDelete, - nToInsert, + uint16 nToDelete; + int nToInsert, maxToInclude; in.level = level; diff --git a/src/backend/access/spgist/spgvacuum.c b/src/backend/access/spgist/spgvacuum.c index 3adb18f2d8..64d9803cef 100644 --- a/src/backend/access/spgist/spgvacuum.c +++ b/src/backend/access/spgist/spgvacuum.c @@ -493,8 +493,8 @@ vacuumRedirectAndPlaceholder(Relation index, Buffer buffer) { Page page = BufferGetPage(buffer); SpGistPageOpaque opaque = SpGistPageGetOpaque(page); - OffsetNumber i, - max = PageGetMaxOffsetNumber(page), + uint16 i; + OffsetNumber max = PageGetMaxOffsetNumber(page), firstPlaceholder = InvalidOffsetNumber; bool hasNonPlaceholder = false; bool hasUpdate = false; diff --git a/src/backend/access/spgist/spgxlog.c b/src/backend/access/spgist/spgxlog.c index b071b59c8a..34b14b01a8 100644 --- a/src/backend/access/spgist/spgxlog.c +++ b/src/backend/access/spgist/spgxlog.c @@ -886,7 +886,7 @@ spgRedoVacuumRedirect(XLogReaderState *record) { Page page = BufferGetPage(buffer); SpGistPageOpaque opaque = SpGistPageGetOpaque(page); - int i; + uint16 i; /* Convert redirect pointers to plain placeholders */ for (i = 0; i < xldata->nToPlaceholder; i++) diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index 92994f8f39..f71ab47496 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -1158,7 +1158,7 @@ PageIndexTupleDelete(Page page, OffsetNumber offnum) * of item numbers to be deleted in item number order! */ void -PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems) +PageIndexMultiDelete(Page page, OffsetNumber *itemnos, uint16 nitems) { PageHeader phdr = (PageHeader) page; Offset pd_lower = phdr->pd_lower; @@ -1177,6 +1177,7 @@ PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems) int nextitm; OffsetNumber offnum; bool presorted = true; /* For now */ + int nbitems = nitems; Assert(nitems <= MaxIndexTuplesPerPage); @@ -1188,10 +1189,13 @@ PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems) * * TODO: tune the magic number here */ - if (nitems <= 2) + if (nbitems <= 2) { - while (--nitems >= 0) - PageIndexTupleDelete(page, itemnos[nitems]); + /* + * Be careful that nbitems has to be an int and not an uint16. + */ + while (--nbitems >= 0) + PageIndexTupleDelete(page, itemnos[nbitems]); return; } diff --git a/src/include/access/genam.h b/src/include/access/genam.h index 83dbee0fe6..4e9d9dc0a1 100644 --- a/src/include/access/genam.h +++ b/src/include/access/genam.h @@ -208,7 +208,7 @@ extern TransactionId index_compute_xid_horizon_for_tuples(Relation irel, Relation hrel, Buffer ibuf, OffsetNumber *itemnos, - int nitems); + uint16 nitems); /* * heap-or-index access to system catalogs (in genam.c) diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index 8af33d7b40..46e9b3799e 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -444,12 +444,12 @@ extern void gistXLogPageReuse(Relation rel, BlockNumber blkno, FullTransactionId deleteXid); extern XLogRecPtr gistXLogUpdate(Buffer buffer, - OffsetNumber *todelete, int ntodelete, + OffsetNumber *todelete, uint16 ntodelete, IndexTuple *itup, int ituplen, Buffer leftchildbuf); extern XLogRecPtr gistXLogDelete(Buffer buffer, OffsetNumber *todelete, - int ntodelete, TransactionId snapshotConflictHorizon); + uint16 ntodelete, TransactionId snapshotConflictHorizon); extern XLogRecPtr gistXLogSplit(bool page_is_leaf, SplitedPageLayout *dist, diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 8f48960f9d..a52a8a926f 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -1216,8 +1216,8 @@ extern bool _bt_conditionallockbuf(Relation rel, Buffer buf); extern void _bt_upgradelockbufcleanup(Relation rel, Buffer buf); extern void _bt_pageinit(Page page, Size size); extern void _bt_delitems_vacuum(Relation rel, Buffer buf, - OffsetNumber *deletable, int ndeletable, - BTVacuumPosting *updatable, int nupdatable); + OffsetNumber *deletable, uint16 ndeletable, + BTVacuumPosting *updatable, uint16 nupdatable); extern void _bt_delitems_delete_check(Relation rel, Buffer buf, Relation heapRel, TM_IndexDeleteOp *delstate); diff --git a/src/include/access/spgist_private.h b/src/include/access/spgist_private.h index c6ef46fc20..6a144145d2 100644 --- a/src/include/access/spgist_private.h +++ b/src/include/access/spgist_private.h @@ -534,7 +534,7 @@ extern bool spgproperty(Oid index_oid, int attno, extern void spgUpdateNodeLink(SpGistInnerTuple tup, int nodeN, BlockNumber blkno, OffsetNumber offset); extern void spgPageIndexMultiDelete(SpGistState *state, Page page, - OffsetNumber *itemnos, int nitems, + OffsetNumber *itemnos, uint16 nitems, int firststate, int reststate, BlockNumber blkno, OffsetNumber offnum); extern bool spgdoinsert(Relation index, SpGistState *state, diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index 424ecba028..293bfd54be 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -500,7 +500,7 @@ extern Size PageGetFreeSpaceForMultipleTuples(Page page, int ntups); extern Size PageGetExactFreeSpace(Page page); extern Size PageGetHeapFreeSpace(Page page); extern void PageIndexTupleDelete(Page page, OffsetNumber offnum); -extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, int nitems); +extern void PageIndexMultiDelete(Page page, OffsetNumber *itemnos, uint16 nitems); extern void PageIndexTupleDeleteNoCompact(Page page, OffsetNumber offnum); extern bool PageIndexTupleOverwrite(Page page, OffsetNumber offnum, Item newtup, Size newsize); -- 2.34.1