@@ -850,10 +850,6 @@ typedef struct XLogPageReadPrivate
850
850
static TimestampTz XLogReceiptTime = 0 ;
851
851
static XLogSource XLogReceiptSource = XLOG_FROM_ANY ;
852
852
853
- /* State information for XLOG reading */
854
- static XLogRecPtr ReadRecPtr ; /* start of last record read */
855
- static XLogRecPtr EndRecPtr ; /* end+1 of last record read */
856
-
857
853
/*
858
854
* Local copies of equivalent fields in the control file. When running
859
855
* crash recovery, minRecoveryPoint is set to InvalidXLogRecPtr as we
@@ -4475,8 +4471,6 @@ ReadRecord(XLogReaderState *xlogreader, int emode,
4475
4471
char * errormsg ;
4476
4472
4477
4473
record = XLogReadRecord (xlogreader , & errormsg );
4478
- ReadRecPtr = xlogreader -> ReadRecPtr ;
4479
- EndRecPtr = xlogreader -> EndRecPtr ;
4480
4474
if (record == NULL )
4481
4475
{
4482
4476
/*
@@ -4505,7 +4499,7 @@ ReadRecord(XLogReaderState *xlogreader, int emode,
4505
4499
* shouldn't loop anymore in that case.
4506
4500
*/
4507
4501
if (errormsg )
4508
- ereport (emode_for_corrupt_record (emode , EndRecPtr ),
4502
+ ereport (emode_for_corrupt_record (emode , xlogreader -> EndRecPtr ),
4509
4503
(errmsg_internal ("%s" , errormsg ) /* already translated */ ));
4510
4504
}
4511
4505
@@ -4523,7 +4517,7 @@ ReadRecord(XLogReaderState *xlogreader, int emode,
4523
4517
wal_segment_size );
4524
4518
XLogFileName (fname , xlogreader -> seg .ws_tli , segno ,
4525
4519
wal_segment_size );
4526
- ereport (emode_for_corrupt_record (emode , EndRecPtr ),
4520
+ ereport (emode_for_corrupt_record (emode , xlogreader -> EndRecPtr ),
4527
4521
(errmsg ("unexpected timeline ID %u in log segment %s, offset %u" ,
4528
4522
xlogreader -> latestPageTLI ,
4529
4523
fname ,
@@ -4565,9 +4559,9 @@ ReadRecord(XLogReaderState *xlogreader, int emode,
4565
4559
/* initialize minRecoveryPoint to this record */
4566
4560
LWLockAcquire (ControlFileLock , LW_EXCLUSIVE );
4567
4561
ControlFile -> state = DB_IN_ARCHIVE_RECOVERY ;
4568
- if (ControlFile -> minRecoveryPoint < EndRecPtr )
4562
+ if (ControlFile -> minRecoveryPoint < xlogreader -> EndRecPtr )
4569
4563
{
4570
- ControlFile -> minRecoveryPoint = EndRecPtr ;
4564
+ ControlFile -> minRecoveryPoint = xlogreader -> EndRecPtr ;
4571
4565
ControlFile -> minRecoveryPointTLI = replayTLI ;
4572
4566
}
4573
4567
/* update local copy */
@@ -7501,7 +7495,7 @@ StartupXLOG(void)
7501
7495
if (checkPoint .redo < RecPtr )
7502
7496
XLogCtl -> replayEndRecPtr = checkPoint .redo ;
7503
7497
else
7504
- XLogCtl -> replayEndRecPtr = EndRecPtr ;
7498
+ XLogCtl -> replayEndRecPtr = xlogreader -> EndRecPtr ;
7505
7499
XLogCtl -> replayEndTLI = replayTLI ;
7506
7500
XLogCtl -> lastReplayedEndRecPtr = XLogCtl -> replayEndRecPtr ;
7507
7501
XLogCtl -> lastReplayedTLI = XLogCtl -> replayEndTLI ;
@@ -7557,7 +7551,7 @@ StartupXLOG(void)
7557
7551
7558
7552
ereport (LOG ,
7559
7553
(errmsg ("redo starts at %X/%X" ,
7560
- LSN_FORMAT_ARGS (ReadRecPtr ))));
7554
+ LSN_FORMAT_ARGS (xlogreader -> ReadRecPtr ))));
7561
7555
7562
7556
/* Prepare to report progress of the redo phase. */
7563
7557
if (!StandbyMode )
@@ -7572,7 +7566,7 @@ StartupXLOG(void)
7572
7566
7573
7567
if (!StandbyMode )
7574
7568
ereport_startup_progress ("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X" ,
7575
- LSN_FORMAT_ARGS (ReadRecPtr ));
7569
+ LSN_FORMAT_ARGS (xlogreader -> ReadRecPtr ));
7576
7570
7577
7571
#ifdef WAL_DEBUG
7578
7572
if (XLOG_DEBUG ||
@@ -7686,7 +7680,8 @@ StartupXLOG(void)
7686
7680
if (newReplayTLI != replayTLI )
7687
7681
{
7688
7682
/* Check that it's OK to switch to this TLI */
7689
- checkTimeLineSwitch (EndRecPtr , newReplayTLI ,
7683
+ checkTimeLineSwitch (xlogreader -> EndRecPtr ,
7684
+ newReplayTLI ,
7690
7685
prevReplayTLI , replayTLI );
7691
7686
7692
7687
/* Following WAL records should be run with new TLI */
@@ -7700,7 +7695,7 @@ StartupXLOG(void)
7700
7695
* so that XLogFlush will update minRecoveryPoint correctly.
7701
7696
*/
7702
7697
SpinLockAcquire (& XLogCtl -> info_lck );
7703
- XLogCtl -> replayEndRecPtr = EndRecPtr ;
7698
+ XLogCtl -> replayEndRecPtr = xlogreader -> EndRecPtr ;
7704
7699
XLogCtl -> replayEndTLI = replayTLI ;
7705
7700
SpinLockRelease (& XLogCtl -> info_lck );
7706
7701
@@ -7732,7 +7727,7 @@ StartupXLOG(void)
7732
7727
* successfully replayed.
7733
7728
*/
7734
7729
SpinLockAcquire (& XLogCtl -> info_lck );
7735
- XLogCtl -> lastReplayedEndRecPtr = EndRecPtr ;
7730
+ XLogCtl -> lastReplayedEndRecPtr = xlogreader -> EndRecPtr ;
7736
7731
XLogCtl -> lastReplayedTLI = replayTLI ;
7737
7732
SpinLockRelease (& XLogCtl -> info_lck );
7738
7733
@@ -7748,7 +7743,7 @@ StartupXLOG(void)
7748
7743
}
7749
7744
7750
7745
/* Remember this record as the last-applied one */
7751
- LastRec = ReadRecPtr ;
7746
+ LastRec = xlogreader -> ReadRecPtr ;
7752
7747
7753
7748
/* Allow read-only connections if we're consistent now */
7754
7749
CheckRecoveryConsistency ();
@@ -7761,7 +7756,7 @@ StartupXLOG(void)
7761
7756
* (possibly bogus) future WAL segments on the old
7762
7757
* timeline.
7763
7758
*/
7764
- RemoveNonParentXlogFiles (EndRecPtr , replayTLI );
7759
+ RemoveNonParentXlogFiles (xlogreader -> EndRecPtr , replayTLI );
7765
7760
7766
7761
/*
7767
7762
* Wake up any walsenders to notice that we are on a new
@@ -7829,7 +7824,7 @@ StartupXLOG(void)
7829
7824
7830
7825
ereport (LOG ,
7831
7826
(errmsg ("redo done at %X/%X system usage: %s" ,
7832
- LSN_FORMAT_ARGS (ReadRecPtr ),
7827
+ LSN_FORMAT_ARGS (xlogreader -> ReadRecPtr ),
7833
7828
pg_rusage_show (& ru0 ))));
7834
7829
xtime = GetLatestXTime ();
7835
7830
if (xtime )
@@ -7904,7 +7899,7 @@ StartupXLOG(void)
7904
7899
*/
7905
7900
XLogBeginRead (xlogreader , LastRec );
7906
7901
record = ReadRecord (xlogreader , PANIC , false, replayTLI );
7907
- EndOfLog = EndRecPtr ;
7902
+ EndOfLog = xlogreader -> EndRecPtr ;
7908
7903
7909
7904
/*
7910
7905
* EndOfLogTLI is the TLI in the filename of the XLOG segment containing
@@ -8013,7 +8008,7 @@ StartupXLOG(void)
8013
8008
* between here and writing the end-of-recovery record.
8014
8009
*/
8015
8010
writeTimeLineHistory (newTLI , recoveryTargetTLI ,
8016
- EndRecPtr , reason );
8011
+ xlogreader -> EndRecPtr , reason );
8017
8012
8018
8013
/*
8019
8014
* Since there might be a partial WAL segment named RECOVERYXLOG, get
@@ -9647,7 +9642,7 @@ CheckPointGuts(XLogRecPtr checkPointRedo, int flags)
9647
9642
* startup process.)
9648
9643
*/
9649
9644
static void
9650
- RecoveryRestartPoint (const CheckPoint * checkPoint )
9645
+ RecoveryRestartPoint (const CheckPoint * checkPoint , XLogReaderState * record )
9651
9646
{
9652
9647
/*
9653
9648
* Also refrain from creating a restartpoint if we have seen any
@@ -9670,8 +9665,8 @@ RecoveryRestartPoint(const CheckPoint *checkPoint)
9670
9665
* work out the next time it wants to perform a restartpoint.
9671
9666
*/
9672
9667
SpinLockAcquire (& XLogCtl -> info_lck );
9673
- XLogCtl -> lastCheckPointRecPtr = ReadRecPtr ;
9674
- XLogCtl -> lastCheckPointEndPtr = EndRecPtr ;
9668
+ XLogCtl -> lastCheckPointRecPtr = record -> ReadRecPtr ;
9669
+ XLogCtl -> lastCheckPointEndPtr = record -> EndRecPtr ;
9675
9670
XLogCtl -> lastCheckPoint = * checkPoint ;
9676
9671
SpinLockRelease (& XLogCtl -> info_lck );
9677
9672
}
@@ -10468,7 +10463,7 @@ xlog_redo(XLogReaderState *record)
10468
10463
(errmsg ("unexpected timeline ID %u (should be %u) in checkpoint record" ,
10469
10464
checkPoint .ThisTimeLineID , replayTLI )));
10470
10465
10471
- RecoveryRestartPoint (& checkPoint );
10466
+ RecoveryRestartPoint (& checkPoint , record );
10472
10467
}
10473
10468
else if (info == XLOG_CHECKPOINT_ONLINE )
10474
10469
{
@@ -10524,7 +10519,7 @@ xlog_redo(XLogReaderState *record)
10524
10519
(errmsg ("unexpected timeline ID %u (should be %u) in checkpoint record" ,
10525
10520
checkPoint .ThisTimeLineID , replayTLI )));
10526
10521
10527
- RecoveryRestartPoint (& checkPoint );
10522
+ RecoveryRestartPoint (& checkPoint , record );
10528
10523
}
10529
10524
else if (info == XLOG_OVERWRITE_CONTRECORD )
10530
10525
{
@@ -10690,8 +10685,8 @@ xlog_redo(XLogReaderState *record)
10690
10685
if (!fpw )
10691
10686
{
10692
10687
SpinLockAcquire (& XLogCtl -> info_lck );
10693
- if (XLogCtl -> lastFpwDisableRecPtr < ReadRecPtr )
10694
- XLogCtl -> lastFpwDisableRecPtr = ReadRecPtr ;
10688
+ if (XLogCtl -> lastFpwDisableRecPtr < record -> ReadRecPtr )
10689
+ XLogCtl -> lastFpwDisableRecPtr = record -> ReadRecPtr ;
10695
10690
SpinLockRelease (& XLogCtl -> info_lck );
10696
10691
}
10697
10692
@@ -12586,7 +12581,7 @@ XLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen,
12586
12581
* errmsg_internal() because the message was already translated.
12587
12582
*/
12588
12583
if (xlogreader -> errormsg_buf [0 ])
12589
- ereport (emode_for_corrupt_record (emode , EndRecPtr ),
12584
+ ereport (emode_for_corrupt_record (emode , xlogreader -> EndRecPtr ),
12590
12585
(errmsg_internal ("%s" , xlogreader -> errormsg_buf )));
12591
12586
12592
12587
/* reset any error XLogReaderValidatePageHeader() might have set */
0 commit comments