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

Commit5b0740d

Browse files
committed
WAL
1 parent2f4c9d3 commit5b0740d

File tree

25 files changed

+2828
-271
lines changed

25 files changed

+2828
-271
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.25 2000/01/26 05:56:04 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.26 2000/10/28 16:20:53 vadim Exp $
1212
*
1313
* NOTES
1414
* This file contains support functions for the high
@@ -186,6 +186,10 @@ TransBlockGetXidStatus(Block tblock,
186186
bits8bit2;
187187
BitIndexoffset;
188188

189+
#ifdefXLOG
190+
tblock= (Block) ((char*)tblock+sizeof(XLogRecPtr));
191+
#endif
192+
189193
/* ----------------
190194
*calculate the index into the transaction data where
191195
*our transaction status is located
@@ -227,6 +231,10 @@ TransBlockSetXidStatus(Block tblock,
227231
Indexindex;
228232
BitIndexoffset;
229233

234+
#ifdefXLOG
235+
tblock= (Block) ((char*)tblock+sizeof(XLogRecPtr));
236+
#endif
237+
230238
/* ----------------
231239
*calculate the index into the transaction data where
232240
*we sould store our transaction status.

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

Lines changed: 5 additions & 1 deletion
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.29 2000/07/2520:18:19 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.30 2000/10/28 16:20:53 vadim Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -125,7 +125,11 @@ VariableRelationPutNextXid(TransactionId xid)
125125

126126
TransactionIdStore(xid,&(var->nextXidData));
127127

128+
#ifdefXLOG
129+
WriteBuffer(buf);/* temp */
130+
#else
128131
FlushBuffer(buf, TRUE);
132+
#endif
129133
}
130134

131135
/* --------------------------------

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

Lines changed: 8 additions & 5 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/xact.c,v 1.77 2000/10/2420:06:39 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.78 2000/10/28 16:20:53 vadim Exp $
1212
*
1313
* NOTES
1414
*Transaction aborts can now occur two ways:
@@ -176,6 +176,8 @@
176176

177177
externboolSharedBufferChanged;
178178

179+
voidRecordTransactionCommit(void);
180+
179181
staticvoidAbortTransaction(void);
180182
staticvoidAtAbort_Cache(void);
181183
staticvoidAtAbort_Locks(void);
@@ -191,7 +193,6 @@ static void AtStart_Memory(void);
191193
staticvoidCleanupTransaction(void);
192194
staticvoidCommitTransaction(void);
193195
staticvoidRecordTransactionAbort(void);
194-
staticvoidRecordTransactionCommit(void);
195196
staticvoidStartTransaction(void);
196197

197198
/* ----------------
@@ -220,7 +221,7 @@ intXactIsoLevel;
220221
#ifdefXLOG
221222
#include"access/xlogutils.h"
222223

223-
intCommitDelay=100;
224+
intCommitDelay=5;/* 1/200 sec */
224225

225226
voidxact_redo(XLogRecPtrlsn,XLogRecord*record);
226227
voidxact_undo(XLogRecPtrlsn,XLogRecord*record);
@@ -658,8 +659,8 @@ AtStart_Memory(void)
658659
* -cim 3/18/90
659660
* --------------------------------
660661
*/
661-
staticvoid
662-
RecordTransactionCommit(void)
662+
void
663+
RecordTransactionCommit()
663664
{
664665
TransactionIdxid;
665666
intleak;
@@ -683,6 +684,8 @@ RecordTransactionCommit(void)
683684
structtimevaldelay;
684685
XLogRecPtrrecptr;
685686

687+
BufmgrCommit();
688+
686689
xlrec.xtime=time(NULL);
687690
/*
688691
* MUST SAVE ARRAY OF RELFILENODE-s TO DROP

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

Lines changed: 56 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.21 2000/10/24 09:56:09 vadim Exp $
9+
* $Header: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v 1.22 2000/10/28 16:20:54 vadim Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -220,6 +220,8 @@ static uint32 readOff = 0;
220220
staticcharreadBuf[BLCKSZ];
221221
staticXLogRecord*nextRecord=NULL;
222222

223+
staticboolInRedo= false;
224+
223225
XLogRecPtr
224226
XLogInsert(RmgrIdrmid,uint8info,char*hdr,uint32hdrlen,char*buf,uint32buflen)
225227
{
@@ -481,6 +483,19 @@ XLogFlush(XLogRecPtr record)
481483
unsignedi=0;
482484
boolforce_lgwr= false;
483485

486+
if (XLOG_DEBUG)
487+
{
488+
fprintf(stderr,"XLogFlush%s%s: rqst %u/%u; wrt %u/%u; flsh %u/%u\n",
489+
(IsBootstrapProcessingMode()) ?"(bootstrap)" :"",
490+
(InRedo) ?"(redo)" :"",
491+
record.xlogid,record.xrecoff,
492+
LgwrResult.Write.xlogid,LgwrResult.Write.xrecoff,
493+
LgwrResult.Flush.xlogid,LgwrResult.Flush.xrecoff);
494+
fflush(stderr);
495+
}
496+
497+
if (IsBootstrapProcessingMode()||InRedo)
498+
return;
484499
if (XLByteLE(record,LgwrResult.Flush))
485500
return;
486501
WriteRqst=LgwrRqst.Write;
@@ -894,7 +909,7 @@ ReadRecord(XLogRecPtr *RecPtr, char *buffer)
894909
record= (XLogRecord*) ((char*)readBuf+RecPtr->xrecoff %BLCKSZ);
895910

896911
got_record:;
897-
if (record->xl_len==0||record->xl_len>
912+
if (record->xl_len>
898913
(BLCKSZ-RecPtr->xrecoff %BLCKSZ-SizeOfXLogRecord))
899914
{
900915
elog(emode,"ReadRecord: invalid record len %u in (%u, %u)",
@@ -1259,7 +1274,6 @@ StartupXLOG()
12591274
LastRec;
12601275
XLogRecord*record;
12611276
charbuffer[MAXLOGRECSZ+SizeOfXLogRecord];
1262-
intrecovery=0;
12631277
boolsie_saved= false;
12641278

12651279
#endif
@@ -1380,16 +1394,15 @@ StartupXLOG()
13801394
elog(STOP,"Invalid Redo/Undo record in shutdown checkpoint");
13811395
if (ControlFile->state==DB_SHUTDOWNED)
13821396
elog(STOP,"Invalid Redo/Undo record in Shutdowned state");
1383-
recovery=1;
1397+
InRecovery=true;
13841398
}
13851399
elseif (ControlFile->state!=DB_SHUTDOWNED)
13861400
{
1387-
if (checkPoint.Shutdown)
1388-
elog(STOP,"Invalid state in control file");
1389-
recovery=1;
1401+
InRecovery= true;
13901402
}
13911403

1392-
if (recovery)
1404+
/* REDO */
1405+
if (InRecovery)
13931406
{
13941407
elog(LOG,"The DataBase system was not properly shut down\n"
13951408
"\tAutomatic recovery is in progress...");
@@ -1401,6 +1414,7 @@ StartupXLOG()
14011414
StopIfError= true;
14021415

14031416
XLogOpenLogRelation();/* open pg_log */
1417+
XLogInitRelationCache();
14041418

14051419
/* Is REDO required ? */
14061420
if (XLByteLT(checkPoint.redo,RecPtr))
@@ -1409,9 +1423,9 @@ StartupXLOG()
14091423
/* read past CheckPoint record */
14101424
record=ReadRecord(NULL,buffer);
14111425

1412-
/* REDO */
14131426
if (record->xl_len!=0)
14141427
{
1428+
InRedo= true;
14151429
elog(LOG,"Redo starts at (%u, %u)",
14161430
ReadRecPtr.xlogid,ReadRecPtr.xrecoff);
14171431
do
@@ -1441,12 +1455,40 @@ StartupXLOG()
14411455
elog(LOG,"Redo done at (%u, %u)",
14421456
ReadRecPtr.xlogid,ReadRecPtr.xrecoff);
14431457
LastRec=ReadRecPtr;
1458+
InRedo= false;
14441459
}
14451460
else
14461461
elog(LOG,"Redo is not required");
1462+
}
1463+
1464+
/* Init xlog buffer cache */
1465+
record=ReadRecord(&LastRec,buffer);
1466+
logId=EndRecPtr.xlogid;
1467+
logSeg= (EndRecPtr.xrecoff-1) /XLogSegSize;
1468+
logOff=0;
1469+
logFile=XLogFileOpen(logId,logSeg, false);
1470+
XLogCtl->xlblocks[0].xlogid=logId;
1471+
XLogCtl->xlblocks[0].xrecoff=
1472+
((EndRecPtr.xrecoff-1) /BLCKSZ+1)*BLCKSZ;
1473+
Insert=&XLogCtl->Insert;
1474+
memcpy((char*) (Insert->currpage),readBuf,BLCKSZ);
1475+
Insert->currpos= ((char*)Insert->currpage)+
1476+
(EndRecPtr.xrecoff+BLCKSZ-XLogCtl->xlblocks[0].xrecoff);
1477+
Insert->PrevRecord=LastRec;
1478+
1479+
LgwrRqst.Write=LgwrRqst.Flush=
1480+
LgwrResult.Write=LgwrResult.Flush=EndRecPtr;
1481+
1482+
XLogCtl->Write.LgwrResult=LgwrResult;
1483+
Insert->LgwrResult=LgwrResult;
1484+
1485+
XLogCtl->LgwrRqst=LgwrRqst;
1486+
XLogCtl->LgwrResult=LgwrResult;
14471487

14481488
#ifdefNOT_USED
1449-
/* UNDO */
1489+
/* UNDO */
1490+
if (InRecovery)
1491+
{
14501492
RecPtr=ReadRecPtr;
14511493
if (XLByteLT(checkPoint.undo,RecPtr))
14521494
{
@@ -1465,29 +1507,16 @@ StartupXLOG()
14651507
}
14661508
else
14671509
elog(LOG,"Undo is not required");
1468-
#endif
14691510
}
1511+
#endif
14701512

1471-
/* Init xlog buffer cache */
1472-
record=ReadRecord(&LastRec,buffer);
1473-
logId=EndRecPtr.xlogid;
1474-
logSeg= (EndRecPtr.xrecoff-1) /XLogSegSize;
1475-
logOff=0;
1476-
logFile=XLogFileOpen(logId,logSeg, false);
1477-
XLogCtl->xlblocks[0].xlogid=logId;
1478-
XLogCtl->xlblocks[0].xrecoff=
1479-
((EndRecPtr.xrecoff-1) /BLCKSZ+1)*BLCKSZ;
1480-
Insert=&XLogCtl->Insert;
1481-
memcpy((char*) (Insert->currpage),readBuf,BLCKSZ);
1482-
Insert->currpos= ((char*)Insert->currpage)+
1483-
(EndRecPtr.xrecoff+BLCKSZ-XLogCtl->xlblocks[0].xrecoff);
1484-
Insert->PrevRecord=ControlFile->checkPoint;
1485-
1486-
if (recovery)
1513+
if (InRecovery)
14871514
{
14881515
CreateCheckPoint(true);
14891516
StopIfError=sie_saved;
1517+
XLogCloseRelationCache();
14901518
}
1519+
InRecovery= false;
14911520

14921521
#endif/* XLOG */
14931522

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp