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

Commitca05ba2

Browse files
committed
Get rid of SetBufferWriteMode(), which was an accident waiting to happen.
In the event of an elog() while the mode was set to immediate write,there was no way for it to be set back to the normal delayed write.The mechanism was a waste of space and cycles anyway, since the only userwas varsup.c, which could perfectly well call FlushBuffer directly.Now it does just that, and the notion of a write mode is gone.
1 parent5717dcb commitca05ba2

File tree

3 files changed

+37
-75
lines changed

3 files changed

+37
-75
lines changed

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.26 2000/01/26 05:56:04 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.27 2000/03/31 02:43:31 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -88,7 +88,6 @@ VariableRelationPutNextXid(TransactionId xid)
8888
{
8989
Bufferbuf;
9090
VariableRelationContentsvar;
91-
intflushmode;
9291

9392
/* ----------------
9493
* We assume that a spinlock has been acquire to guarantee
@@ -105,7 +104,7 @@ VariableRelationPutNextXid(TransactionId xid)
105104

106105
/* ----------------
107106
*read the variable page, update the nextXid field and
108-
*write the page back out to disk.
107+
*write the page back out to disk (with immediate write).
109108
* ----------------
110109
*/
111110
buf=ReadBuffer(VariableRelation,0);
@@ -120,9 +119,7 @@ VariableRelationPutNextXid(TransactionId xid)
120119

121120
TransactionIdStore(xid,&(var->nextXidData));
122121

123-
flushmode=SetBufferWriteMode(BUFFER_FLUSH_WRITE);
124-
WriteBuffer(buf);
125-
SetBufferWriteMode(flushmode);
122+
FlushBuffer(buf, TRUE);
126123
}
127124

128125
/* --------------------------------

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

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,31 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.76 2000/03/14 22:46:27 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.77 2000/03/31 02:43:31 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
1515
/*
1616
*
1717
* BufferAlloc() -- lookup a buffer in the buffer table. If
18-
*it isn't there add it, but do not readit into memory.
18+
*it isn't there add it, but do not readdata into memory.
1919
*This is used when we are about to reinitialize the
2020
*buffer so don't care what the current disk contents are.
21-
*BufferAlloc() pins the new buffer in memory.
21+
*BufferAlloc()alsopins the new buffer in memory.
2222
*
23-
* ReadBuffer() --same as BufferAlloc() but reads the data
23+
* ReadBuffer() --like BufferAlloc() but reads the data
2424
*on a buffer cache miss.
2525
*
2626
* ReleaseBuffer() -- unpin the buffer
2727
*
2828
* WriteNoReleaseBuffer() -- mark the buffer contents as "dirty"
2929
*but don't unpin. The disk IO is delayed until buffer
30-
*replacement if WriteMode is BUFFER_LATE_WRITE.
30+
*replacement.
3131
*
3232
* WriteBuffer() -- WriteNoReleaseBuffer() + ReleaseBuffer()
3333
*
34-
* FlushBuffer() -- as above but never delayed write.
34+
* FlushBuffer() -- Write buffer immediately. Can unpin, or not,
35+
*depending on parameter.
3536
*
3637
* BufferSync() -- flush all dirty buffers in the buffer pool.
3738
*
@@ -70,11 +71,7 @@ extern long int LocalBufferFlushCount;
7071
*/
7172
boolSharedBufferChanged= false;
7273

73-
staticintWriteMode=BUFFER_LATE_WRITE;/* Delayed write is
74-
* default */
75-
7674
staticvoidWaitIO(BufferDesc*buf,SPINLOCKspinlock);
77-
7875
staticvoidStartBufferIO(BufferDesc*buf,boolforInput);
7976
staticvoidTerminateBufferIO(BufferDesc*buf);
8077
staticvoidContinueBufferIO(BufferDesc*buf,boolforInput);
@@ -97,7 +94,6 @@ static Buffer ReadBufferWithBufferLock(Relation relation, BlockNumber blockNum,
9794
boolbufferLockHeld);
9895
staticBufferDesc*BufferAlloc(Relationreln,BlockNumberblockNum,
9996
bool*foundPtr,boolbufferLockHeld);
100-
staticintFlushBuffer(Bufferbuffer,boolrelease);
10197
staticvoidBufferSync(void);
10298
staticintBufferReplace(BufferDesc*bufHdr,boolbufferLockHeld);
10399
voidPrintBufferDescs(void);
@@ -658,8 +654,7 @@ BufferAlloc(Relation reln,
658654
/*
659655
* WriteBuffer
660656
*
661-
*Pushes buffer contents to disk if WriteMode is BUFFER_FLUSH_WRITE.
662-
*Otherwise, marks contents as dirty.
657+
*Marks buffer contents as dirty (actual write happens later).
663658
*
664659
* Assume that buffer is pinned. Assume that reln is
665660
*valid.
@@ -675,28 +670,23 @@ WriteBuffer(Buffer buffer)
675670
{
676671
BufferDesc*bufHdr;
677672

678-
if (WriteMode==BUFFER_FLUSH_WRITE)
679-
returnFlushBuffer(buffer, TRUE);
680-
else
681-
{
673+
if (BufferIsLocal(buffer))
674+
returnWriteLocalBuffer(buffer, TRUE);
682675

683-
if (BufferIsLocal(buffer))
684-
returnWriteLocalBuffer(buffer, TRUE);
676+
if (BAD_BUFFER_ID(buffer))
677+
returnFALSE;
685678

686-
if (BAD_BUFFER_ID(buffer))
687-
return FALSE;
679+
bufHdr=&BufferDescriptors[buffer-1];
688680

689-
bufHdr=&BufferDescriptors[buffer-1];
681+
SharedBufferChanged=true;
690682

691-
SharedBufferChanged= true;
683+
SpinAcquire(BufMgrLock);
684+
Assert(bufHdr->refcount>0);
685+
bufHdr->flags |= (BM_DIRTY |BM_JUST_DIRTIED);
686+
UnpinBuffer(bufHdr);
687+
SpinRelease(BufMgrLock);
688+
CommitInfoNeedsSave[buffer-1]=0;
692689

693-
SpinAcquire(BufMgrLock);
694-
Assert(bufHdr->refcount>0);
695-
bufHdr->flags |= (BM_DIRTY |BM_JUST_DIRTIED);
696-
UnpinBuffer(bufHdr);
697-
SpinRelease(BufMgrLock);
698-
CommitInfoNeedsSave[buffer-1]=0;
699-
}
700690
return TRUE;
701691
}
702692

@@ -778,9 +768,9 @@ DirtyBufferCopy(Oid dbid, Oid relid, BlockNumber blkno, char *dest)
778768
* 'buffer' is known to be dirty/pinned, so there should not be a
779769
* problem reading the BufferDesc members without the BufMgrLock
780770
* (nobody should be able to change tags, flags, etc. out from under
781-
* us).
771+
* us). Unpin if 'release' is TRUE.
782772
*/
783-
staticint
773+
int
784774
FlushBuffer(Bufferbuffer,boolrelease)
785775
{
786776
BufferDesc*bufHdr;
@@ -850,36 +840,27 @@ FlushBuffer(Buffer buffer, bool release)
850840
/*
851841
* WriteNoReleaseBuffer -- like WriteBuffer, but do not unpin the buffer
852842
* when the operation is complete.
853-
*
854-
*We know that the buffer is for a relation in our private cache,
855-
*because this routine is called only to write out buffers that
856-
*were changed by the executing backend.
857843
*/
858844
int
859845
WriteNoReleaseBuffer(Bufferbuffer)
860846
{
861847
BufferDesc*bufHdr;
862848

863-
if (WriteMode==BUFFER_FLUSH_WRITE)
864-
returnFlushBuffer(buffer, FALSE);
865-
else
866-
{
849+
if (BufferIsLocal(buffer))
850+
returnWriteLocalBuffer(buffer, FALSE);
867851

868-
if (BufferIsLocal(buffer))
869-
returnWriteLocalBuffer(buffer, FALSE);
852+
if (BAD_BUFFER_ID(buffer))
853+
returnSTATUS_ERROR;
870854

871-
if (BAD_BUFFER_ID(buffer))
872-
returnSTATUS_ERROR;
855+
bufHdr=&BufferDescriptors[buffer-1];
873856

874-
bufHdr=&BufferDescriptors[buffer-1];
857+
SharedBufferChanged=true;
875858

876-
SharedBufferChanged= true;
859+
SpinAcquire(BufMgrLock);
860+
bufHdr->flags |= (BM_DIRTY |BM_JUST_DIRTIED);
861+
SpinRelease(BufMgrLock);
862+
CommitInfoNeedsSave[buffer-1]=0;
877863

878-
SpinAcquire(BufMgrLock);
879-
bufHdr->flags |= (BM_DIRTY |BM_JUST_DIRTIED);
880-
SpinRelease(BufMgrLock);
881-
CommitInfoNeedsSave[buffer-1]=0;
882-
}
883864
returnSTATUS_OK;
884865
}
885866

@@ -2002,16 +1983,6 @@ _bm_die(Oid dbId, Oid relId, int blkNo, int bufNo,
20021983

20031984
#endif/* BMTRACE */
20041985

2005-
int
2006-
SetBufferWriteMode(intmode)
2007-
{
2008-
intold;
2009-
2010-
old=WriteMode;
2011-
WriteMode=mode;
2012-
returnold;
2013-
}
2014-
20151986
void
20161987
SetBufferCommitInfoNeedsSave(Bufferbuffer)
20171988
{

‎src/include/storage/bufmgr.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: bufmgr.h,v 1.34 2000/01/26 05:58:32 momjian Exp $
10+
* $Id: bufmgr.h,v 1.35 2000/03/31 02:43:30 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -56,12 +56,6 @@ typedef bits16 BufferLock;
5656

5757
externintShowPinTrace;
5858

59-
/*
60-
* BufferWriteModes (settable via SetBufferWriteMode)
61-
*/
62-
#defineBUFFER_FLUSH_WRITE0/* immediate write */
63-
#defineBUFFER_LATE_WRITE1/* delayed write: mark as DIRTY */
64-
6559
/*
6660
* Buffer context lock modes
6761
*/
@@ -165,6 +159,7 @@ extern intWriteBuffer(Buffer buffer);
165159
externintWriteNoReleaseBuffer(Bufferbuffer);
166160
externBufferReleaseAndReadBuffer(Bufferbuffer,Relationrelation,
167161
BlockNumberblockNum);
162+
externintFlushBuffer(Bufferbuffer,boolrelease);
168163

169164
externvoidInitBufferPool(IPCKeykey);
170165
externvoidPrintBufferUsage(FILE*statfp);
@@ -182,7 +177,6 @@ extern void PrintPinnedBufs(void);
182177
externintBufferShmemSize(void);
183178
externintReleaseBuffer(Bufferbuffer);
184179

185-
externintSetBufferWriteMode(intmode);
186180
externvoidSetBufferCommitInfoNeedsSave(Bufferbuffer);
187181

188182
externvoidUnlockBuffers(void);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp