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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy