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

Commitaf07a82

Browse files
committed
Refactor PinBufferForBlock() to remove checks about persistence.
There are checks in PinBufferForBlock() function to set persistence ofthe relation. This function is called for each block in the relation.Instead, set persistence of the relation before PinBufferForBlock().Nazir Bilal YavuzDiscussion:https://postgr.es/m/CAN55FZ0JKL6vk1xQp6rfOXiNFV1u1H0tJDPPGHWoiO3ea2Wc=A@mail.gmail.com
1 parente00c45f commitaf07a82

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

‎src/backend/storage/aio/read_stream.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ read_stream_begin_relation(int flags,
551551
{
552552
stream->ios[i].op.rel=rel;
553553
stream->ios[i].op.smgr=RelationGetSmgr(rel);
554-
stream->ios[i].op.smgr_persistence=0;
554+
stream->ios[i].op.persistence=rel->rd_rel->relpersistence;
555555
stream->ios[i].op.forknum=forknum;
556556
stream->ios[i].op.strategy=strategy;
557557
}

‎src/backend/storage/buffer/bufmgr.c‎

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ ZeroAndLockBuffer(Buffer buffer, ReadBufferMode mode, bool already_valid)
11041104
staticpg_attribute_always_inlineBuffer
11051105
PinBufferForBlock(Relationrel,
11061106
SMgrRelationsmgr,
1107-
charsmgr_persistence,
1107+
charpersistence,
11081108
ForkNumberforkNum,
11091109
BlockNumberblockNum,
11101110
BufferAccessStrategystrategy,
@@ -1113,14 +1113,13 @@ PinBufferForBlock(Relation rel,
11131113
BufferDesc*bufHdr;
11141114
IOContextio_context;
11151115
IOObjectio_object;
1116-
charpersistence;
11171116

11181117
Assert(blockNum!=P_NEW);
11191118

1120-
if (rel)
1121-
persistence=rel->rd_rel->relpersistence;
1122-
else
1123-
persistence=smgr_persistence;
1119+
/* Persistence should be set before */
1120+
Assert((persistence==RELPERSISTENCE_TEMP||
1121+
persistence==RELPERSISTENCE_PERMANENT||
1122+
persistence==RELPERSISTENCE_UNLOGGED));
11241123

11251124
if (persistence==RELPERSISTENCE_TEMP)
11261125
{
@@ -1195,6 +1194,7 @@ ReadBuffer_common(Relation rel, SMgrRelation smgr, char smgr_persistence,
11951194
ReadBuffersOperationoperation;
11961195
Bufferbuffer;
11971196
intflags;
1197+
charpersistence;
11981198

11991199
/*
12001200
* Backward compatibility path, most code should use ExtendBufferedRel()
@@ -1216,12 +1216,17 @@ ReadBuffer_common(Relation rel, SMgrRelation smgr, char smgr_persistence,
12161216
returnExtendBufferedRel(BMR_REL(rel),forkNum,strategy,flags);
12171217
}
12181218

1219+
if (rel)
1220+
persistence=rel->rd_rel->relpersistence;
1221+
else
1222+
persistence=smgr_persistence;
1223+
12191224
if (unlikely(mode==RBM_ZERO_AND_CLEANUP_LOCK||
12201225
mode==RBM_ZERO_AND_LOCK))
12211226
{
12221227
boolfound;
12231228

1224-
buffer=PinBufferForBlock(rel,smgr,smgr_persistence,
1229+
buffer=PinBufferForBlock(rel,smgr,persistence,
12251230
forkNum,blockNum,strategy,&found);
12261231
ZeroAndLockBuffer(buffer,mode,found);
12271232
returnbuffer;
@@ -1233,7 +1238,7 @@ ReadBuffer_common(Relation rel, SMgrRelation smgr, char smgr_persistence,
12331238
flags=0;
12341239
operation.smgr=smgr;
12351240
operation.rel=rel;
1236-
operation.smgr_persistence=smgr_persistence;
1241+
operation.persistence=persistence;
12371242
operation.forknum=forkNum;
12381243
operation.strategy=strategy;
12391244
if (StartReadBuffer(&operation,
@@ -1264,7 +1269,7 @@ StartReadBuffersImpl(ReadBuffersOperation *operation,
12641269

12651270
buffers[i]=PinBufferForBlock(operation->rel,
12661271
operation->smgr,
1267-
operation->smgr_persistence,
1272+
operation->persistence,
12681273
operation->forknum,
12691274
blockNum+i,
12701275
operation->strategy,
@@ -1410,10 +1415,8 @@ WaitReadBuffers(ReadBuffersOperation *operation)
14101415
buffers=&operation->buffers[0];
14111416
blocknum=operation->blocknum;
14121417
forknum=operation->forknum;
1418+
persistence=operation->persistence;
14131419

1414-
persistence=operation->rel
1415-
?operation->rel->rd_rel->relpersistence
1416-
:RELPERSISTENCE_PERMANENT;
14171420
if (persistence==RELPERSISTENCE_TEMP)
14181421
{
14191422
io_context=IOCONTEXT_NORMAL;

‎src/include/storage/bufmgr.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ struct ReadBuffersOperation
117117
/* The following members should be set by the caller. */
118118
Relationrel;/* optional */
119119
structSMgrRelationData*smgr;
120-
charsmgr_persistence;/* optional if rel != NULL */
120+
charpersistence;
121121
ForkNumberforknum;
122122
BufferAccessStrategystrategy;
123123

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp