Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 5b0740d

Browse files
committed
WAL
1 parent 2f4c9d3 commit 5b0740d

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
bits8 bit2;
187187
BitIndex offset;
188188

189+
#ifdef XLOG
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
Index index;
228232
BitIndex offset;
229233

234+
#ifdef XLOG
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/25 20: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+
#ifdef XLOG
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/24 20: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
extern bool SharedBufferChanged;
178178

179+
void RecordTransactionCommit(void);
180+
179181
static void AbortTransaction(void);
180182
static void AtAbort_Cache(void);
181183
static void AtAbort_Locks(void);
@@ -191,7 +193,6 @@ static void AtStart_Memory(void);
191193
static void CleanupTransaction(void);
192194
static void CommitTransaction(void);
193195
static void RecordTransactionAbort(void);
194-
static void RecordTransactionCommit(void);
195196
static void StartTransaction(void);
196197

197198
/* ----------------
@@ -220,7 +221,7 @@ int XactIsoLevel;
220221
#ifdef XLOG
221222
#include "access/xlogutils.h"
222223

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

225226
void xact_redo(XLogRecPtr lsn, XLogRecord *record);
226227
void xact_undo(XLogRecPtr lsn, XLogRecord *record);
@@ -658,8 +659,8 @@ AtStart_Memory(void)
658659
* -cim 3/18/90
659660
* --------------------------------
660661
*/
661-
static void
662-
RecordTransactionCommit(void)
662+
void
663+
RecordTransactionCommit()
663664
{
664665
TransactionId xid;
665666
int leak;
@@ -683,6 +684,8 @@ RecordTransactionCommit(void)
683684
struct timeval delay;
684685
XLogRecPtr recptr;
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
static char readBuf[BLCKSZ];
221221
static XLogRecord *nextRecord = NULL;
222222

223+
static bool InRedo = false;
224+
223225
XLogRecPtr
224226
XLogInsert(RmgrId rmid, uint8 info, char *hdr, uint32 hdrlen, char *buf, uint32 buflen)
225227
{
@@ -481,6 +483,19 @@ XLogFlush(XLogRecPtr record)
481483
unsigned i = 0;
482484
bool force_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
char buffer[MAXLOGRECSZ + SizeOfXLogRecord];
1262-
int recovery = 0;
12631277
bool sie_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
else if (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
#ifdef NOT_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)