Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4b565a1

Browse files
Make visibilitymap_set() return previous state of vmbits
It can be useful to know the state of a relation page's VM bits beforevisibilitymap_set(). visibilitymap_set() has the old value on hand, soreturning it is simple. This commit does not use visibilitymap_set()'snew return value.Author: Melanie PlagemanReviewed-by: Masahiko Sawada, Andres Freund, Nitin Jadhav, Bilal YavuzDiscussion:https://postgr.es/m/flat/CAAKRu_ZQe26xdvAqo4weHLR%3DivQ8J4xrSfDDD8uXnh-O-6P6Lg%40mail.gmail.com#6d8d2b4219394f774889509bf3bdc13d,https://postgr.es/m/ctdjzroezaxmiyah3gwbwm67defsrwj2b5fpfs4ku6msfpxeia%40mwjyqlhwr2wu
1 parentf020baa commit4b565a1

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

‎src/backend/access/heap/visibilitymap.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,10 @@ visibilitymap_pin_ok(BlockNumber heapBlk, Buffer vmbuf)
239239
* You must pass a buffer containing the correct map page to this function.
240240
* Call visibilitymap_pin first to pin the right one. This function doesn't do
241241
* any I/O.
242+
*
243+
* Returns the state of the page's VM bits before setting flags.
242244
*/
243-
void
245+
uint8
244246
visibilitymap_set(Relationrel,BlockNumberheapBlk,BufferheapBuf,
245247
XLogRecPtrrecptr,BuffervmBuf,TransactionIdcutoff_xid,
246248
uint8flags)
@@ -250,6 +252,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
250252
uint8mapOffset=HEAPBLK_TO_OFFSET(heapBlk);
251253
Pagepage;
252254
uint8*map;
255+
uint8status;
253256

254257
#ifdefTRACE_VISIBILITYMAP
255258
elog(DEBUG1,"vm_set %s %d",RelationGetRelationName(rel),heapBlk);
@@ -274,7 +277,8 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
274277
map= (uint8*)PageGetContents(page);
275278
LockBuffer(vmBuf,BUFFER_LOCK_EXCLUSIVE);
276279

277-
if (flags!= (map[mapByte] >>mapOffset&VISIBILITYMAP_VALID_BITS))
280+
status= (map[mapByte] >>mapOffset)&VISIBILITYMAP_VALID_BITS;
281+
if (flags!=status)
278282
{
279283
START_CRIT_SECTION();
280284

@@ -311,6 +315,7 @@ visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf,
311315
}
312316

313317
LockBuffer(vmBuf,BUFFER_LOCK_UNLOCK);
318+
returnstatus;
314319
}
315320

316321
/*

‎src/include/access/visibilitymap.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ extern bool visibilitymap_clear(Relation rel, BlockNumber heapBlk,
3131
externvoidvisibilitymap_pin(Relationrel,BlockNumberheapBlk,
3232
Buffer*vmbuf);
3333
externboolvisibilitymap_pin_ok(BlockNumberheapBlk,Buffervmbuf);
34-
externvoidvisibilitymap_set(Relationrel,BlockNumberheapBlk,BufferheapBuf,
35-
XLogRecPtrrecptr,BuffervmBuf,TransactionIdcutoff_xid,
36-
uint8flags);
34+
externuint8visibilitymap_set(Relationrel,
35+
BlockNumberheapBlk,BufferheapBuf,
36+
XLogRecPtrrecptr,
37+
BuffervmBuf,
38+
TransactionIdcutoff_xid,
39+
uint8flags);
3740
externuint8visibilitymap_get_status(Relationrel,BlockNumberheapBlk,Buffer*vmbuf);
3841
externvoidvisibilitymap_count(Relationrel,BlockNumber*all_visible,BlockNumber*all_frozen);
3942
externBlockNumbervisibilitymap_prepare_truncate(Relationrel,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp