@@ -4284,6 +4284,8 @@ InitControlFile(uint64 sysidentifier, uint32 data_checksum_version)
4284
4284
* processes get the current value from. (Maybe it should go just there?)
4285
4285
*/
4286
4286
XLogCtl -> data_checksum_version = data_checksum_version ;
4287
+
4288
+ elog (LOG , "InitControlFile %p data_checksum_version %u" , XLogCtl , ControlFile -> data_checksum_version );
4287
4289
}
4288
4290
4289
4291
static void
@@ -4623,6 +4625,8 @@ ReadControlFile(void)
4623
4625
(SizeOfXLogLongPHD - SizeOfXLogShortPHD );
4624
4626
4625
4627
CalculateCheckpointSegments ();
4628
+
4629
+ elog (LOG , "ReadControlFile ControlFile->data_checksum_version = %u" , ControlFile -> data_checksum_version );
4626
4630
}
4627
4631
4628
4632
/*
@@ -4758,6 +4762,8 @@ SetDataChecksumsOnInProgress(void)
4758
4762
XLogCtl -> data_checksum_version = PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION ;
4759
4763
SpinLockRelease (& XLogCtl -> info_lck );
4760
4764
4765
+ elog (LOG , "SetDataChecksumsOnInProgress XLogCtl->data_checksum_version = %u" , XLogCtl -> data_checksum_version );
4766
+
4761
4767
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON );
4762
4768
4763
4769
END_CRIT_SECTION ();
@@ -4823,6 +4829,8 @@ SetDataChecksumsOn(void)
4823
4829
XLogCtl -> data_checksum_version = PG_DATA_CHECKSUM_VERSION ;
4824
4830
SpinLockRelease (& XLogCtl -> info_lck );
4825
4831
4832
+ elog (LOG , "SetDataChecksumsOn XLogCtl->data_checksum_version = %u" , XLogCtl -> data_checksum_version );
4833
+
4826
4834
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_ON );
4827
4835
4828
4836
END_CRIT_SECTION ();
@@ -4861,6 +4869,7 @@ SetDataChecksumsOff(void)
4861
4869
/* If data checksums are already disabled there is nothing to do */
4862
4870
if (XLogCtl -> data_checksum_version == 0 )
4863
4871
{
4872
+ elog (LOG , "SetDataChecksumsOff XLogCtl->data_checksum_version = %u (SKIP)" , XLogCtl -> data_checksum_version );
4864
4873
SpinLockRelease (& XLogCtl -> info_lck );
4865
4874
return ;
4866
4875
}
@@ -4885,6 +4894,8 @@ SetDataChecksumsOff(void)
4885
4894
XLogCtl -> data_checksum_version = PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION ;
4886
4895
SpinLockRelease (& XLogCtl -> info_lck );
4887
4896
4897
+ elog (LOG , "SetDataChecksumsOff XLogCtl->data_checksum_version = %u" , XLogCtl -> data_checksum_version );
4898
+
4888
4899
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF );
4889
4900
4890
4901
END_CRIT_SECTION ();
@@ -4905,6 +4916,8 @@ SetDataChecksumsOff(void)
4905
4916
}
4906
4917
else
4907
4918
{
4919
+ elog (LOG , "SetDataChecksumsOff XLogCtl->data_checksum_version = %u (SKIP)" , XLogCtl -> data_checksum_version );
4920
+
4908
4921
/*
4909
4922
* Ending up here implies that the checksums state is "inprogress-on"
4910
4923
* or "inprogress-off" and we can transition directly to "off" from
@@ -4942,13 +4955,16 @@ bool
4942
4955
AbsorbChecksumsOnInProgressBarrier (void )
4943
4956
{
4944
4957
/* XXX can't we check we're in OFF or INPROGRESSS_ON? */
4958
+ elog (LOG , "AbsorbChecksumsOnInProgressBarrier" );
4945
4959
SetLocalDataChecksumVersion (PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION );
4946
4960
return true;
4947
4961
}
4948
4962
4949
4963
bool
4950
4964
AbsorbChecksumsOnBarrier (void )
4951
4965
{
4966
+ elog (LOG , "AbsorbChecksumsOnBarrier" );
4967
+
4952
4968
/*
4953
4969
* If the process was spawned between updating XLogCtl and emitting the
4954
4970
* barrier it will have seen the updated value, so for the first barrier
@@ -4967,6 +4983,7 @@ bool
4967
4983
AbsorbChecksumsOffInProgressBarrier (void )
4968
4984
{
4969
4985
/* XXX can't we check we're in ON or INPROGRESSS_OFF? */
4986
+ elog (LOG , "AbsorbChecksumsOffInProgressBarrier" );
4970
4987
SetLocalDataChecksumVersion (PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION );
4971
4988
return true;
4972
4989
}
@@ -4975,6 +4992,7 @@ bool
4975
4992
AbsorbChecksumsOffBarrier (void )
4976
4993
{
4977
4994
/* XXX can't we check we're in INPROGRESSS_OFF? */
4995
+ elog (LOG , "AbsorbChecksumsOffBarrier" );
4978
4996
SetLocalDataChecksumVersion (0 );
4979
4997
return true;
4980
4998
}
@@ -4990,6 +5008,7 @@ AbsorbChecksumsOffBarrier(void)
4990
5008
void
4991
5009
InitLocalDataChecksumVersion (void )
4992
5010
{
5011
+ elog (LOG , "InitLocalDataChecksumVersion XLogCtl->data_checksum_version = %u" , XLogCtl -> data_checksum_version );
4993
5012
SpinLockAcquire (& XLogCtl -> info_lck );
4994
5013
SetLocalDataChecksumVersion (XLogCtl -> data_checksum_version );
4995
5014
SpinLockRelease (& XLogCtl -> info_lck );
@@ -5004,6 +5023,7 @@ InitLocalDataChecksumVersion(void)
5004
5023
void
5005
5024
SetLocalDataChecksumVersion (uint32 data_checksum_version )
5006
5025
{
5026
+ elog (LOG , "SetLocalDataChecksumVersion %u" , data_checksum_version );
5007
5027
LocalDataChecksumVersion = data_checksum_version ;
5008
5028
5009
5029
switch (LocalDataChecksumVersion )
@@ -5499,9 +5519,15 @@ XLOGShmemInit(void)
5499
5519
XLogCtl -> InstallXLogFileSegmentActive = false;
5500
5520
XLogCtl -> WalWriterSleeping = false;
5501
5521
5522
+ elog (LOG , "XLogCtl->data_checksum_version %u ControlFile->data_checksum_version %u" ,
5523
+ XLogCtl -> data_checksum_version , ControlFile -> data_checksum_version );
5524
+
5502
5525
/* use the checksum info from control file */
5503
5526
XLogCtl -> data_checksum_version = ControlFile -> data_checksum_version ;
5504
5527
5528
+ elog (LOG , "XLogCtl->data_checksum_version %u ControlFile->data_checksum_version %u (UPDATED)" ,
5529
+ XLogCtl -> data_checksum_version , ControlFile -> data_checksum_version );
5530
+
5505
5531
SetLocalDataChecksumVersion (XLogCtl -> data_checksum_version );
5506
5532
5507
5533
SpinLockInit (& XLogCtl -> Insert .insertpos_lck );
@@ -6635,6 +6661,8 @@ StartupXLOG(void)
6635
6661
*/
6636
6662
CompleteCommitTsInitialization ();
6637
6663
6664
+ elog (LOG , "StartupXLOG XLogCtl->data_checksum_version = %u" , XLogCtl -> data_checksum_version );
6665
+
6638
6666
/*
6639
6667
* If we reach this point with checksums being enabled ("inprogress-on"
6640
6668
* state), we notify the user that they need to manually restart the
@@ -6652,6 +6680,9 @@ StartupXLOG(void)
6652
6680
* we know that we have a state where all backends have stopped validating
6653
6681
* checksums and we can move to off instead of prompting the user to
6654
6682
* perform any action.
6683
+ *
6684
+ * XXX Is it safe to access the data_checksum_version without holding the
6685
+ * spinlock?
6655
6686
*/
6656
6687
if (XLogCtl -> data_checksum_version == PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION )
6657
6688
{
@@ -6660,6 +6691,8 @@ StartupXLOG(void)
6660
6691
SpinLockAcquire (& XLogCtl -> info_lck );
6661
6692
XLogCtl -> data_checksum_version = 0 ;
6662
6693
SpinLockRelease (& XLogCtl -> info_lck );
6694
+
6695
+ elog (LOG , "StartupXLOG XLogCtl->data_checksum_version = %u (UPDATED)" , XLogCtl -> data_checksum_version );
6663
6696
}
6664
6697
6665
6698
/*
@@ -7523,6 +7556,8 @@ CreateCheckPoint(int flags)
7523
7556
*/
7524
7557
checkPoint .data_checksum_version = XLogCtl -> data_checksum_version ;
7525
7558
7559
+ elog (WARNING , "CREATECHECKPOINT XLogCtl->data_checksum_version %u" , XLogCtl -> data_checksum_version );
7560
+
7526
7561
if (shutdown )
7527
7562
{
7528
7563
XLogRecPtr curInsert = XLogBytePosToRecPtr (Insert -> CurrBytePos );
@@ -7778,6 +7813,10 @@ CreateCheckPoint(int flags)
7778
7813
ControlFile -> minRecoveryPoint = InvalidXLogRecPtr ;
7779
7814
ControlFile -> minRecoveryPointTLI = 0 ;
7780
7815
7816
+ elog (LOG , "CreateCheckPoint data_checksum_version %u %u" ,
7817
+ ControlFile -> data_checksum_version ,
7818
+ checkPoint .data_checksum_version );
7819
+
7781
7820
/* make sure we start with the checksum version as of the checkpoint */
7782
7821
ControlFile -> data_checksum_version = checkPoint .data_checksum_version ;
7783
7822
@@ -7928,6 +7967,10 @@ CreateEndOfRecoveryRecord(void)
7928
7967
ControlFile -> minRecoveryPoint = recptr ;
7929
7968
ControlFile -> minRecoveryPointTLI = xlrec .ThisTimeLineID ;
7930
7969
7970
+ elog (LOG , "CreateEndOfRecoveryRecord data_checksum_version %u xlog %u" ,
7971
+ ControlFile -> data_checksum_version ,
7972
+ XLogCtl -> data_checksum_version );
7973
+
7931
7974
/* start with the latest checksum version (as of the end of recovery) */
7932
7975
ControlFile -> data_checksum_version = XLogCtl -> data_checksum_version ;
7933
7976
@@ -8101,6 +8144,14 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record)
8101
8144
XLogCtl -> lastCheckPointEndPtr = record -> EndRecPtr ;
8102
8145
XLogCtl -> lastCheckPoint = * checkPoint ;
8103
8146
SpinLockRelease (& XLogCtl -> info_lck );
8147
+
8148
+ elog (LOG , "RecoveryRestartPoint lastCheckPointRecPtr %X/%X XLogCtl->lastCheckPointEndPtr %X/%X redo %X/%X checksums xlogctl %u record %d file %u" ,
8149
+ LSN_FORMAT_ARGS (XLogCtl -> lastCheckPointRecPtr ),
8150
+ LSN_FORMAT_ARGS (XLogCtl -> lastCheckPointEndPtr ),
8151
+ LSN_FORMAT_ARGS (XLogCtl -> lastCheckPoint .redo ),
8152
+ XLogCtl -> lastCheckPoint .data_checksum_version ,
8153
+ checkPoint -> data_checksum_version ,
8154
+ ControlFile -> data_checksum_version );
8104
8155
}
8105
8156
8106
8157
/*
@@ -8138,6 +8189,9 @@ CreateRestartPoint(int flags)
8138
8189
lastCheckPoint = XLogCtl -> lastCheckPoint ;
8139
8190
SpinLockRelease (& XLogCtl -> info_lck );
8140
8191
8192
+ elog (LOG , "CreateRestartPoint lastCheckPointRecPtr %X/%X lastCheckPointEndPtr %X/%X" ,
8193
+ LSN_FORMAT_ARGS (lastCheckPointRecPtr ), LSN_FORMAT_ARGS (lastCheckPointEndPtr ));
8194
+
8141
8195
/*
8142
8196
* Check that we're still in recovery mode. It's ok if we exit recovery
8143
8197
* mode after this check, the restart point is valid anyway.
@@ -8166,9 +8220,11 @@ CreateRestartPoint(int flags)
8166
8220
if (XLogRecPtrIsInvalid (lastCheckPointRecPtr ) ||
8167
8221
lastCheckPoint .redo <= ControlFile -> checkPointCopy .redo )
8168
8222
{
8169
- ereport (DEBUG2 ,
8170
- (errmsg_internal ("skipping restartpoint, already performed at %X/%X" ,
8171
- LSN_FORMAT_ARGS (lastCheckPoint .redo ))));
8223
+ ereport (LOG ,
8224
+ (errmsg_internal ("CreateRestartPoint: skipping restartpoint, already performed at %X/%X <= %X/%X lastCheckPointRecPtr %X/%X" ,
8225
+ LSN_FORMAT_ARGS (lastCheckPoint .redo ),
8226
+ LSN_FORMAT_ARGS (ControlFile -> checkPointCopy .redo ),
8227
+ LSN_FORMAT_ARGS (lastCheckPointRecPtr ))));
8172
8228
8173
8229
UpdateMinRecoveryPoint (InvalidXLogRecPtr , true);
8174
8230
if (flags & CHECKPOINT_IS_SHUTDOWN )
@@ -8236,6 +8292,8 @@ CreateRestartPoint(int flags)
8236
8292
* end-of-recovery checkpoint.
8237
8293
*/
8238
8294
LWLockAcquire (ControlFileLock , LW_EXCLUSIVE );
8295
+ elog (LOG , "CreateRestartPoint ControlFile->checkPointCopy.redo %X/%X lastCheckPoint.redo %X/%X" ,
8296
+ LSN_FORMAT_ARGS (ControlFile -> checkPointCopy .redo ), LSN_FORMAT_ARGS (lastCheckPoint .redo ));
8239
8297
if (ControlFile -> checkPointCopy .redo < lastCheckPoint .redo )
8240
8298
{
8241
8299
/*
@@ -8274,11 +8332,17 @@ CreateRestartPoint(int flags)
8274
8332
ControlFile -> state = DB_SHUTDOWNED_IN_RECOVERY ;
8275
8333
}
8276
8334
8335
+ elog (LOG , "CreateRestartPoint data_checksum_version %u %u" ,
8336
+ ControlFile -> data_checksum_version ,
8337
+ lastCheckPoint .data_checksum_version );
8338
+
8277
8339
/* we shall start with the latest checksum version */
8278
8340
ControlFile -> data_checksum_version = lastCheckPoint .data_checksum_version ;
8279
8341
8280
8342
UpdateControlFile ();
8281
8343
}
8344
+ else
8345
+ elog (LOG , "CreateRestartPoint: skipped ControlFile update" );
8282
8346
LWLockRelease (ControlFileLock );
8283
8347
8284
8348
/*
@@ -9136,13 +9200,25 @@ xlog_redo(XLogReaderState *record)
9136
9200
{
9137
9201
xl_checksum_state state ;
9138
9202
uint64 barrier ;
9203
+ XLogRecPtr checkpointLsn ;
9204
+ uint32 value ,
9205
+ value_last ;
9139
9206
9140
9207
memcpy (& state , XLogRecGetData (record ), sizeof (xl_checksum_state ));
9141
9208
9142
9209
SpinLockAcquire (& XLogCtl -> info_lck );
9210
+ value_last = XLogCtl -> data_checksum_version ;
9143
9211
XLogCtl -> data_checksum_version = state .new_checksumtype ;
9144
9212
SpinLockRelease (& XLogCtl -> info_lck );
9145
9213
9214
+ LWLockAcquire (ControlFileLock , LW_EXCLUSIVE );
9215
+ checkpointLsn = ControlFile -> checkPoint ;
9216
+ value = ControlFile -> data_checksum_version ;
9217
+ LWLockRelease (ControlFileLock );
9218
+
9219
+ elog (LOG , "XLOG_CHECKSUMS xlog_redo %X/%X control checkpoint %X/%X control %u last %u record %u" ,
9220
+ LSN_FORMAT_ARGS (lsn ), LSN_FORMAT_ARGS (checkpointLsn ), value , value_last , state .new_checksumtype );
9221
+
9146
9222
/*
9147
9223
* Block on a procsignalbarrier to await all processes having seen the
9148
9224
* change to checksum status. Once the barrier has been passed we can
@@ -9151,22 +9227,26 @@ xlog_redo(XLogReaderState *record)
9151
9227
switch (state .new_checksumtype )
9152
9228
{
9153
9229
case PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION :
9230
+ elog (LOG , "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON" );
9154
9231
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON );
9155
9232
WaitForProcSignalBarrier (barrier );
9156
9233
break ;
9157
9234
9158
9235
case PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION :
9236
+ elog (LOG , "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF" );
9159
9237
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF );
9160
9238
WaitForProcSignalBarrier (barrier );
9161
9239
break ;
9162
9240
9163
9241
case PG_DATA_CHECKSUM_VERSION :
9242
+ elog (LOG , "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_ON" );
9164
9243
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_ON );
9165
9244
WaitForProcSignalBarrier (barrier );
9166
9245
break ;
9167
9246
9168
9247
default :
9169
9248
Assert (state .new_checksumtype == 0 );
9249
+ elog (LOG , "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_OFF" );
9170
9250
barrier = EmitProcSignalBarrier (PROCSIGNAL_BARRIER_CHECKSUM_OFF );
9171
9251
WaitForProcSignalBarrier (barrier );
9172
9252
break ;
0 commit comments