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

Commit10a8ab5

Browse files
committed
Merge branch 'PGPRO9622_ptrack1_2' into PGPRO9_6
2 parents65a7e1d +214c007 commit10a8ab5

File tree

15 files changed

+85
-3
lines changed

15 files changed

+85
-3
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include"access/transam.h"
2020
#include"access/htup_details.h"
2121
#include"access/xlog.h"
22+
#include"access/ptrack.h"
2223
#include"catalog/catalog.h"
2324
#include"miscadmin.h"
2425
#include"pgstat.h"
@@ -228,6 +229,7 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin,
228229
}
229230

230231
/* Any error while applying the changes is critical */
232+
ptrack_add_block(relation,BufferGetBlockNumber(buffer));
231233
START_CRIT_SECTION();
232234

233235
/* Have we found any prunable items? */

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include"utils/inval.h"
2929
#include"utils/array.h"
3030
#include"utils/relfilenodemap.h"
31+
#include"utils/builtins.h"
3132
#include<unistd.h>
3233
#include<sys/stat.h>
3334

@@ -661,3 +662,13 @@ pg_ptrack_get_and_clear(PG_FUNCTION_ARGS)
661662

662663
PG_RETURN_BYTEA_P(ptrack_get_and_clear(PG_GETARG_OID(0),PG_GETARG_OID(1)));
663664
}
665+
666+
/*
667+
* Returns ptrack version currently in use.
668+
*/
669+
PG_FUNCTION_INFO_V1(ptrack_version);
670+
Datum
671+
ptrack_version(PG_FUNCTION_ARGS)
672+
{
673+
PG_RETURN_TEXT_P(cstring_to_text(PTRACK_VERSION));
674+
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
#include"access/tuptoaster.h"
115115
#include"access/xact.h"
116116
#include"access/xloginsert.h"
117+
#include"access/ptrack.h"
117118

118119
#include"catalog/catalog.h"
119120

@@ -330,11 +331,15 @@ end_heap_rewrite(RewriteState state)
330331
if (state->rs_buffer_valid)
331332
{
332333
if (state->rs_use_wal)
334+
{
335+
/* Don't forget to set ptrack bit even if we're skipping bufmgr stage */
336+
ptrack_add_block_redo(state->rs_new_rel->rd_node,state->rs_blockno);
333337
log_newpage(&state->rs_new_rel->rd_node,
334338
MAIN_FORKNUM,
335339
state->rs_blockno,
336340
state->rs_buffer,
337341
true);
342+
}
338343
RelationOpenSmgr(state->rs_new_rel);
339344

340345
PageSetChecksumInplace(state->rs_buffer,state->rs_blockno);
@@ -679,11 +684,15 @@ raw_heap_insert(RewriteState state, HeapTuple tup)
679684

680685
/* XLOG stuff */
681686
if (state->rs_use_wal)
687+
{
688+
/* Don't forget to set ptrack bit even if we're skipping bufmgr stage */
689+
ptrack_add_block_redo(state->rs_new_rel->rd_node,state->rs_blockno);
682690
log_newpage(&state->rs_new_rel->rd_node,
683691
MAIN_FORKNUM,
684692
state->rs_blockno,
685693
page,
686694
true);
695+
}
687696

688697
/*
689698
* Now write the page. We say isTemp = true even if it's not a

‎src/backend/access/nbtree/nbtree.c‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include"access/nbtree.h"
2222
#include"access/relscan.h"
2323
#include"access/xlog.h"
24+
#include"access/ptrack.h"
2425
#include"catalog/index.h"
2526
#include"commands/vacuum.h"
2627
#include"storage/indexfsm.h"
@@ -253,9 +254,13 @@ btbuildempty(Relation index)
253254
PageSetChecksumInplace(metapage,BTREE_METAPAGE);
254255
smgrwrite(index->rd_smgr,INIT_FORKNUM,BTREE_METAPAGE,
255256
(char*)metapage, true);
257+
258+
/* Don't forget to set ptrack bit even if we're skipping bufmgr stage */
259+
ptrack_add_block_redo(index->rd_smgr->smgr_rnode.node,BTREE_METAPAGE);
256260
log_newpage(&index->rd_smgr->smgr_rnode.node,INIT_FORKNUM,
257261
BTREE_METAPAGE,metapage, false);
258-
262+
/* Ensure rd_smgr is open (could have been closed by relcache flush!) */
263+
RelationOpenSmgr(index);
259264
/*
260265
* An immediate sync is required even if we xlog'd the page, because the
261266
* write did not go through shared_buffers and therefore a concurrent

‎src/backend/access/nbtree/nbtsort.c‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
#include"access/nbtree.h"
7070
#include"access/xlog.h"
7171
#include"access/xloginsert.h"
72+
#include"access/ptrack.h"
7273
#include"miscadmin.h"
7374
#include"storage/smgr.h"
7475
#include"tcop/tcopprot.h"
@@ -276,8 +277,12 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
276277
/* XLOG stuff */
277278
if (wstate->btws_use_wal)
278279
{
280+
/* Don't forget to set ptrack bit even if we're skipping bufmgr stage */
281+
ptrack_add_block_redo(wstate->index->rd_node,blkno);
279282
/* We use the heap NEWPAGE record type for this */
280283
log_newpage(&wstate->index->rd_node,MAIN_FORKNUM,blkno,page, true);
284+
/* Ensure rd_smgr is open (could have been closed by relcache flush!) */
285+
RelationOpenSmgr(wstate->index);
281286
}
282287

283288
/*

‎src/backend/access/spgist/spgdoinsert.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple,
215215
xlrec.nodeI=0;
216216

217217
ptrack_add_block(index,BufferGetBlockNumber(current->buffer));
218+
if (parent->buffer)
219+
ptrack_add_block(index,BufferGetBlockNumber(parent->buffer));
218220
START_CRIT_SECTION();
219221

220222
if (current->offnum==InvalidOffsetNumber||

‎src/backend/access/spgist/spginsert.c‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,13 @@ spgbuildempty(Relation index)
196196
log_newpage(&index->rd_smgr->smgr_rnode.node,INIT_FORKNUM,
197197
SPGIST_NULL_BLKNO,page, true);
198198

199+
/* Don't forget to set ptrack bit even if we're skipping bufmgr stage */
200+
ptrack_add_block_redo(index->rd_smgr->smgr_rnode.node,SPGIST_METAPAGE_BLKNO);
201+
ptrack_add_block_redo(index->rd_smgr->smgr_rnode.node,SPGIST_ROOT_BLKNO);
202+
ptrack_add_block_redo(index->rd_smgr->smgr_rnode.node,SPGIST_NULL_BLKNO);
203+
204+
/* Ensure rd_smgr is open (could have been closed by relcache flush!) */
205+
RelationOpenSmgr(index);
199206
/*
200207
* An immediate sync is required even if we xlog'd the pages, because the
201208
* writes did not go through shared buffers and therefore a concurrent

‎src/backend/access/transam/xlog.c‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include"access/xloginsert.h"
3636
#include"access/xlogreader.h"
3737
#include"access/xlogutils.h"
38+
#include"access/ptrack.h"
3839
#include"catalog/catversion.h"
3940
#include"catalog/pg_control.h"
4041
#include"catalog/pg_database.h"
@@ -9479,6 +9480,11 @@ xlog_redo(XLogReaderState *record)
94799480
elseif (info==XLOG_FPI||info==XLOG_FPI_FOR_HINT)
94809481
{
94819482
Bufferbuffer;
9483+
RelFileNodernode;
9484+
BlockNumberblkno;
9485+
9486+
XLogRecGetBlockTag(record,0,&rnode,NULL,&blkno);
9487+
ptrack_add_block_redo(rnode,blkno);
94829488

94839489
/*
94849490
* Full-page image (FPI) records contain nothing else but a backup

‎src/backend/access/transam/xloginsert.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include"access/xlog.h"
2424
#include"access/xlog_internal.h"
2525
#include"access/xloginsert.h"
26+
#include"access/ptrack.h"
2627
#include"catalog/pg_control.h"
2728
#include"common/pg_lzcompress.h"
2829
#include"miscadmin.h"

‎src/backend/access/transam/xlogutils.c‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,8 +550,6 @@ CreateFakeRelcacheEntry(RelFileNode rnode)
550550
FakeRelCacheEntryfakeentry;
551551
Relationrel;
552552

553-
Assert(InRecovery);
554-
555553
/* Allocate the Relation struct and all related space in one block. */
556554
fakeentry=palloc0(sizeof(FakeRelCacheEntryData));
557555
rel= (Relation)fakeentry;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp