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

Commitfef0c83

Browse files
author
Neil Conway
committed
I posted some bufmgr cleanup a few weeks ago, but it conflicted with
some concurrent changes Jan was making to the bufmgr. Here's anupdated version of the patch -- it should apply cleanly to CVSHEAD and passes the regression tests.This patch makes the following changes: - remove the UnlockAndReleaseBuffer() and UnlockAndWriteBuffer() macros, and replace uses of them with calls to the appropriate functions. - remove a bunch of #ifdef BMTRACE code: it is ugly & broken (i.e. it doesn't compile) - make BufferReplace() return a bool, not an int - cleanup some logic in bufmgr.c; should be functionality equivalent to the previous code, just cleaner now - remove the BM_PRIVATE flag as it is unused - improve a few comments, etc.
1 parent81e9455 commitfef0c83

File tree

10 files changed

+133
-322
lines changed

10 files changed

+133
-322
lines changed

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

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.158 2003/11/29 19:51:40 pgsql Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.159 2003/12/14 00:34:47 neilc Exp $
1212
*
1313
*
1414
* INTERFACE ROUTINES
@@ -2110,7 +2110,8 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
21102110

21112111
if (XLByteLE(lsn,PageGetLSN(page)))
21122112
{
2113-
UnlockAndReleaseBuffer(buffer);
2113+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2114+
ReleaseBuffer(buffer);
21142115
return;
21152116
}
21162117

@@ -2135,7 +2136,8 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record)
21352136

21362137
PageSetLSN(page,lsn);
21372138
PageSetSUI(page,ThisStartUpID);/* prev sui */
2138-
UnlockAndWriteBuffer(buffer);
2139+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2140+
WriteBuffer(buffer);
21392141
}
21402142

21412143
staticvoid
@@ -2170,7 +2172,8 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
21702172
{
21712173
if (XLByteLE(lsn,PageGetLSN(page)))/* changes are applied */
21722174
{
2173-
UnlockAndReleaseBuffer(buffer);
2175+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2176+
ReleaseBuffer(buffer);
21742177
return;
21752178
}
21762179
}
@@ -2199,7 +2202,8 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
21992202
htup->t_ctid=xlrec->target.tid;
22002203
PageSetLSN(page,lsn);
22012204
PageSetSUI(page,ThisStartUpID);
2202-
UnlockAndWriteBuffer(buffer);
2205+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2206+
WriteBuffer(buffer);
22032207
return;
22042208
}
22052209

@@ -2249,7 +2253,8 @@ heap_xlog_insert(bool redo, XLogRecPtr lsn, XLogRecord *record)
22492253

22502254
if (XLByteLE(lsn,PageGetLSN(page)))/* changes are applied */
22512255
{
2252-
UnlockAndReleaseBuffer(buffer);
2256+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2257+
ReleaseBuffer(buffer);
22532258
return;
22542259
}
22552260

@@ -2282,7 +2287,8 @@ heap_xlog_insert(bool redo, XLogRecPtr lsn, XLogRecord *record)
22822287
elog(PANIC,"heap_insert_redo: failed to add tuple");
22832288
PageSetLSN(page,lsn);
22842289
PageSetSUI(page,ThisStartUpID);/* prev sui */
2285-
UnlockAndWriteBuffer(buffer);
2290+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2291+
WriteBuffer(buffer);
22862292
return;
22872293
}
22882294

@@ -2332,7 +2338,8 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
23322338
{
23332339
if (XLByteLE(lsn,PageGetLSN(page)))/* changes are applied */
23342340
{
2335-
UnlockAndReleaseBuffer(buffer);
2341+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2342+
ReleaseBuffer(buffer);
23362343
if (samepage)
23372344
return;
23382345
gotonewt;
@@ -2378,7 +2385,8 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move)
23782385
gotonewsame;
23792386
PageSetLSN(page,lsn);
23802387
PageSetSUI(page,ThisStartUpID);
2381-
UnlockAndWriteBuffer(buffer);
2388+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2389+
WriteBuffer(buffer);
23822390
gotonewt;
23832391
}
23842392

@@ -2421,7 +2429,8 @@ newsame:;
24212429

24222430
if (XLByteLE(lsn,PageGetLSN(page)))/* changes are applied */
24232431
{
2424-
UnlockAndReleaseBuffer(buffer);
2432+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2433+
ReleaseBuffer(buffer);
24252434
return;
24262435
}
24272436

@@ -2474,7 +2483,8 @@ newsame:;
24742483
elog(PANIC,"heap_update_redo: failed to add tuple");
24752484
PageSetLSN(page,lsn);
24762485
PageSetSUI(page,ThisStartUpID);/* prev sui */
2477-
UnlockAndWriteBuffer(buffer);
2486+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2487+
WriteBuffer(buffer);
24782488
return;
24792489
}
24802490

@@ -2523,7 +2533,8 @@ _heap_unlock_tuple(void *data)
25232533
elog(PANIC,"_heap_unlock_tuple: invalid xmax in rollback");
25242534
htup->t_infomask &= ~HEAP_XMAX_UNLOGGED;
25252535
htup->t_infomask |=HEAP_XMAX_INVALID;
2526-
UnlockAndWriteBuffer(buffer);
2536+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
2537+
WriteBuffer(buffer);
25272538
return;
25282539
}
25292540

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

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.8 2003/11/29 19:51:40 pgsql Exp $
11+
* $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.9 2003/12/14 00:34:47 neilc Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -69,7 +69,8 @@ forget_matching_split(Relation reln, RelFileNode node,
6969
btitem= (BTItem)PageGetItem(page,PageGetItemId(page,offnum));
7070
rightblk=ItemPointerGetBlockNumber(&(btitem->bti_itup.t_tid));
7171
Assert(ItemPointerGetOffsetNumber(&(btitem->bti_itup.t_tid))==P_HIKEY);
72-
UnlockAndReleaseBuffer(buffer);
72+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
73+
ReleaseBuffer(buffer);
7374

7475
foreach(l,incomplete_splits)
7576
{
@@ -137,7 +138,8 @@ _bt_restore_meta(Relation reln, XLogRecPtr lsn,
137138

138139
PageSetLSN(metapg,lsn);
139140
PageSetSUI(metapg,ThisStartUpID);
140-
UnlockAndWriteBuffer(metabuf);
141+
LockBuffer(metabuf,BUFFER_LOCK_UNLOCK);
142+
WriteBuffer(metabuf);
141143
}
142144

143145
staticvoid
@@ -184,7 +186,10 @@ btree_xlog_insert(bool redo, bool isleaf, bool ismeta,
184186
if (redo)
185187
{
186188
if (XLByteLE(lsn,PageGetLSN(page)))
187-
UnlockAndReleaseBuffer(buffer);
189+
{
190+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
191+
ReleaseBuffer(buffer);
192+
}
188193
else
189194
{
190195
if (PageAddItem(page, (Item)datapos,datalen,
@@ -194,7 +199,8 @@ btree_xlog_insert(bool redo, bool isleaf, bool ismeta,
194199

195200
PageSetLSN(page,lsn);
196201
PageSetSUI(page,ThisStartUpID);
197-
UnlockAndWriteBuffer(buffer);
202+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
203+
WriteBuffer(buffer);
198204
}
199205
}
200206
else
@@ -203,7 +209,10 @@ btree_xlog_insert(bool redo, bool isleaf, bool ismeta,
203209
elog(PANIC,"btree_insert_undo: bad page LSN");
204210

205211
if (!P_ISLEAF(pageop))
206-
UnlockAndReleaseBuffer(buffer);
212+
{
213+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
214+
ReleaseBuffer(buffer);
215+
}
207216
else
208217
elog(PANIC,"btree_insert_undo: unimplemented");
209218
}
@@ -275,7 +284,8 @@ btree_xlog_split(bool redo, bool onleft, bool isroot,
275284

276285
PageSetLSN(page,lsn);
277286
PageSetSUI(page,ThisStartUpID);
278-
UnlockAndWriteBuffer(buffer);
287+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
288+
WriteBuffer(buffer);
279289
}
280290
else
281291
{
@@ -310,7 +320,8 @@ btree_xlog_split(bool redo, bool onleft, bool isroot,
310320

311321
PageSetLSN(page,lsn);
312322
PageSetSUI(page,ThisStartUpID);
313-
UnlockAndWriteBuffer(buffer);
323+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
324+
WriteBuffer(buffer);
314325
}
315326
else
316327
{
@@ -334,15 +345,19 @@ btree_xlog_split(bool redo, bool onleft, bool isroot,
334345
elog(PANIC,"btree_split_redo: uninitialized next right page");
335346

336347
if (XLByteLE(lsn,PageGetLSN(page)))
337-
UnlockAndReleaseBuffer(buffer);
348+
{
349+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
350+
ReleaseBuffer(buffer);
351+
}
338352
else
339353
{
340354
pageop= (BTPageOpaque)PageGetSpecialPointer(page);
341355
pageop->btpo_prev=rightsib;
342356

343357
PageSetLSN(page,lsn);
344358
PageSetSUI(page,ThisStartUpID);
345-
UnlockAndWriteBuffer(buffer);
359+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
360+
WriteBuffer(buffer);
346361
}
347362
}
348363
}
@@ -385,7 +400,8 @@ btree_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
385400

386401
if (XLByteLE(lsn,PageGetLSN(page)))
387402
{
388-
UnlockAndReleaseBuffer(buffer);
403+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
404+
ReleaseBuffer(buffer);
389405
return;
390406
}
391407

@@ -407,7 +423,8 @@ btree_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record)
407423

408424
PageSetLSN(page,lsn);
409425
PageSetSUI(page,ThisStartUpID);
410-
UnlockAndWriteBuffer(buffer);
426+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
427+
WriteBuffer(buffer);
411428
}
412429

413430
staticvoid
@@ -445,7 +462,10 @@ btree_xlog_delete_page(bool redo, bool ismeta,
445462
if (PageIsNew((PageHeader)page))
446463
elog(PANIC,"btree_delete_page_redo: uninitialized parent page");
447464
if (XLByteLE(lsn,PageGetLSN(page)))
448-
UnlockAndReleaseBuffer(buffer);
465+
{
466+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
467+
ReleaseBuffer(buffer);
468+
}
449469
else
450470
{
451471
OffsetNumberpoffset;
@@ -472,7 +492,8 @@ btree_xlog_delete_page(bool redo, bool ismeta,
472492

473493
PageSetLSN(page,lsn);
474494
PageSetSUI(page,ThisStartUpID);
475-
UnlockAndWriteBuffer(buffer);
495+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
496+
WriteBuffer(buffer);
476497
}
477498
}
478499

@@ -486,15 +507,19 @@ btree_xlog_delete_page(bool redo, bool ismeta,
486507
if (PageIsNew((PageHeader)page))
487508
elog(PANIC,"btree_delete_page_redo: uninitialized right sibling");
488509
if (XLByteLE(lsn,PageGetLSN(page)))
489-
UnlockAndReleaseBuffer(buffer);
510+
{
511+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
512+
ReleaseBuffer(buffer);
513+
}
490514
else
491515
{
492516
pageop= (BTPageOpaque)PageGetSpecialPointer(page);
493517
pageop->btpo_prev=leftsib;
494518

495519
PageSetLSN(page,lsn);
496520
PageSetSUI(page,ThisStartUpID);
497-
UnlockAndWriteBuffer(buffer);
521+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
522+
WriteBuffer(buffer);
498523
}
499524
}
500525

@@ -510,15 +535,19 @@ btree_xlog_delete_page(bool redo, bool ismeta,
510535
if (PageIsNew((PageHeader)page))
511536
elog(PANIC,"btree_delete_page_redo: uninitialized left sibling");
512537
if (XLByteLE(lsn,PageGetLSN(page)))
513-
UnlockAndReleaseBuffer(buffer);
538+
{
539+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
540+
ReleaseBuffer(buffer);
541+
}
514542
else
515543
{
516544
pageop= (BTPageOpaque)PageGetSpecialPointer(page);
517545
pageop->btpo_next=rightsib;
518546

519547
PageSetLSN(page,lsn);
520548
PageSetSUI(page,ThisStartUpID);
521-
UnlockAndWriteBuffer(buffer);
549+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
550+
WriteBuffer(buffer);
522551
}
523552
}
524553
}
@@ -543,7 +572,8 @@ btree_xlog_delete_page(bool redo, bool ismeta,
543572

544573
PageSetLSN(page,lsn);
545574
PageSetSUI(page,ThisStartUpID);
546-
UnlockAndWriteBuffer(buffer);
575+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
576+
WriteBuffer(buffer);
547577
}
548578
else
549579
{
@@ -606,7 +636,8 @@ btree_xlog_newroot(bool redo, XLogRecPtr lsn, XLogRecord *record)
606636

607637
PageSetLSN(page,lsn);
608638
PageSetSUI(page,ThisStartUpID);
609-
UnlockAndWriteBuffer(buffer);
639+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
640+
WriteBuffer(buffer);
610641

611642
_bt_restore_meta(reln,lsn,
612643
xlrec->rootblk,xlrec->level,
@@ -668,7 +699,8 @@ btree_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record)
668699

669700
PageSetLSN(page,lsn);
670701
PageSetSUI(page,ThisStartUpID);
671-
UnlockAndWriteBuffer(buffer);
702+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
703+
WriteBuffer(buffer);
672704
}
673705

674706

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.127 2003/12/12 18:45:08 petere Exp $
10+
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.128 2003/12/14 00:34:47 neilc Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1712,7 +1712,8 @@ RestoreBkpBlocks(XLogRecord *record, XLogRecPtr lsn)
17121712
memcpy((char*)page,blk,BLCKSZ);
17131713
PageSetLSN(page,lsn);
17141714
PageSetSUI(page,ThisStartUpID);
1715-
UnlockAndWriteBuffer(buffer);
1715+
LockBuffer(buffer,BUFFER_LOCK_UNLOCK);
1716+
WriteBuffer(buffer);
17161717
}
17171718
}
17181719

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp