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

Commit 50fea27

Browse files
tvondraCommitfest Bot
authored and
Commitfest Bot
committed
debug stuff
1 parent 393e345 commit 50fea27

File tree

6 files changed

+160
-3
lines changed

6 files changed

+160
-3
lines changed

src/backend/access/transam/xlog.c

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4284,6 +4284,8 @@ InitControlFile(uint64 sysidentifier, uint32 data_checksum_version)
42844284
* processes get the current value from. (Maybe it should go just there?)
42854285
*/
42864286
XLogCtl->data_checksum_version = data_checksum_version;
4287+
4288+
elog(LOG, "InitControlFile %p data_checksum_version %u", XLogCtl, ControlFile->data_checksum_version);
42874289
}
42884290

42894291
static void
@@ -4623,6 +4625,8 @@ ReadControlFile(void)
46234625
(SizeOfXLogLongPHD - SizeOfXLogShortPHD);
46244626

46254627
CalculateCheckpointSegments();
4628+
4629+
elog(LOG, "ReadControlFile ControlFile->data_checksum_version = %u", ControlFile->data_checksum_version);
46264630
}
46274631

46284632
/*
@@ -4758,6 +4762,8 @@ SetDataChecksumsOnInProgress(void)
47584762
XLogCtl->data_checksum_version = PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION;
47594763
SpinLockRelease(&XLogCtl->info_lck);
47604764

4765+
elog(LOG, "SetDataChecksumsOnInProgress XLogCtl->data_checksum_version = %u", XLogCtl->data_checksum_version);
4766+
47614767
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON);
47624768

47634769
END_CRIT_SECTION();
@@ -4823,6 +4829,8 @@ SetDataChecksumsOn(void)
48234829
XLogCtl->data_checksum_version = PG_DATA_CHECKSUM_VERSION;
48244830
SpinLockRelease(&XLogCtl->info_lck);
48254831

4832+
elog(LOG, "SetDataChecksumsOn XLogCtl->data_checksum_version = %u", XLogCtl->data_checksum_version);
4833+
48264834
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_ON);
48274835

48284836
END_CRIT_SECTION();
@@ -4861,6 +4869,7 @@ SetDataChecksumsOff(void)
48614869
/* If data checksums are already disabled there is nothing to do */
48624870
if (XLogCtl->data_checksum_version == 0)
48634871
{
4872+
elog(LOG, "SetDataChecksumsOff XLogCtl->data_checksum_version = %u (SKIP)", XLogCtl->data_checksum_version);
48644873
SpinLockRelease(&XLogCtl->info_lck);
48654874
return;
48664875
}
@@ -4885,6 +4894,8 @@ SetDataChecksumsOff(void)
48854894
XLogCtl->data_checksum_version = PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION;
48864895
SpinLockRelease(&XLogCtl->info_lck);
48874896

4897+
elog(LOG, "SetDataChecksumsOff XLogCtl->data_checksum_version = %u", XLogCtl->data_checksum_version);
4898+
48884899
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF);
48894900

48904901
END_CRIT_SECTION();
@@ -4905,6 +4916,8 @@ SetDataChecksumsOff(void)
49054916
}
49064917
else
49074918
{
4919+
elog(LOG, "SetDataChecksumsOff XLogCtl->data_checksum_version = %u (SKIP)", XLogCtl->data_checksum_version);
4920+
49084921
/*
49094922
* Ending up here implies that the checksums state is "inprogress-on"
49104923
* or "inprogress-off" and we can transition directly to "off" from
@@ -4942,13 +4955,16 @@ bool
49424955
AbsorbChecksumsOnInProgressBarrier(void)
49434956
{
49444957
/* XXX can't we check we're in OFF or INPROGRESSS_ON? */
4958+
elog(LOG, "AbsorbChecksumsOnInProgressBarrier");
49454959
SetLocalDataChecksumVersion(PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION);
49464960
return true;
49474961
}
49484962

49494963
bool
49504964
AbsorbChecksumsOnBarrier(void)
49514965
{
4966+
elog(LOG, "AbsorbChecksumsOnBarrier");
4967+
49524968
/*
49534969
* If the process was spawned between updating XLogCtl and emitting the
49544970
* barrier it will have seen the updated value, so for the first barrier
@@ -4967,6 +4983,7 @@ bool
49674983
AbsorbChecksumsOffInProgressBarrier(void)
49684984
{
49694985
/* XXX can't we check we're in ON or INPROGRESSS_OFF? */
4986+
elog(LOG, "AbsorbChecksumsOffInProgressBarrier");
49704987
SetLocalDataChecksumVersion(PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION);
49714988
return true;
49724989
}
@@ -4975,6 +4992,7 @@ bool
49754992
AbsorbChecksumsOffBarrier(void)
49764993
{
49774994
/* XXX can't we check we're in INPROGRESSS_OFF? */
4995+
elog(LOG, "AbsorbChecksumsOffBarrier");
49784996
SetLocalDataChecksumVersion(0);
49794997
return true;
49804998
}
@@ -4990,6 +5008,7 @@ AbsorbChecksumsOffBarrier(void)
49905008
void
49915009
InitLocalDataChecksumVersion(void)
49925010
{
5011+
elog(LOG, "InitLocalDataChecksumVersion XLogCtl->data_checksum_version = %u", XLogCtl->data_checksum_version);
49935012
SpinLockAcquire(&XLogCtl->info_lck);
49945013
SetLocalDataChecksumVersion(XLogCtl->data_checksum_version);
49955014
SpinLockRelease(&XLogCtl->info_lck);
@@ -5004,6 +5023,7 @@ InitLocalDataChecksumVersion(void)
50045023
void
50055024
SetLocalDataChecksumVersion(uint32 data_checksum_version)
50065025
{
5026+
elog(LOG, "SetLocalDataChecksumVersion %u", data_checksum_version);
50075027
LocalDataChecksumVersion = data_checksum_version;
50085028

50095029
switch (LocalDataChecksumVersion)
@@ -5499,9 +5519,15 @@ XLOGShmemInit(void)
54995519
XLogCtl->InstallXLogFileSegmentActive = false;
55005520
XLogCtl->WalWriterSleeping = false;
55015521

5522+
elog(LOG, "XLogCtl->data_checksum_version %u ControlFile->data_checksum_version %u",
5523+
XLogCtl->data_checksum_version, ControlFile->data_checksum_version);
5524+
55025525
/* use the checksum info from control file */
55035526
XLogCtl->data_checksum_version = ControlFile->data_checksum_version;
55045527

5528+
elog(LOG, "XLogCtl->data_checksum_version %u ControlFile->data_checksum_version %u (UPDATED)",
5529+
XLogCtl->data_checksum_version, ControlFile->data_checksum_version);
5530+
55055531
SetLocalDataChecksumVersion(XLogCtl->data_checksum_version);
55065532

55075533
SpinLockInit(&XLogCtl->Insert.insertpos_lck);
@@ -6635,6 +6661,8 @@ StartupXLOG(void)
66356661
*/
66366662
CompleteCommitTsInitialization();
66376663

6664+
elog(LOG, "StartupXLOG XLogCtl->data_checksum_version = %u", XLogCtl->data_checksum_version);
6665+
66386666
/*
66396667
* If we reach this point with checksums being enabled ("inprogress-on"
66406668
* state), we notify the user that they need to manually restart the
@@ -6652,6 +6680,9 @@ StartupXLOG(void)
66526680
* we know that we have a state where all backends have stopped validating
66536681
* checksums and we can move to off instead of prompting the user to
66546682
* perform any action.
6683+
*
6684+
* XXX Is it safe to access the data_checksum_version without holding the
6685+
* spinlock?
66556686
*/
66566687
if (XLogCtl->data_checksum_version == PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION)
66576688
{
@@ -6660,6 +6691,8 @@ StartupXLOG(void)
66606691
SpinLockAcquire(&XLogCtl->info_lck);
66616692
XLogCtl->data_checksum_version = 0;
66626693
SpinLockRelease(&XLogCtl->info_lck);
6694+
6695+
elog(LOG, "StartupXLOG XLogCtl->data_checksum_version = %u (UPDATED)", XLogCtl->data_checksum_version);
66636696
}
66646697

66656698
/*
@@ -7523,6 +7556,8 @@ CreateCheckPoint(int flags)
75237556
*/
75247557
checkPoint.data_checksum_version = XLogCtl->data_checksum_version;
75257558

7559+
elog(WARNING, "CREATECHECKPOINT XLogCtl->data_checksum_version %u", XLogCtl->data_checksum_version);
7560+
75267561
if (shutdown)
75277562
{
75287563
XLogRecPtr curInsert = XLogBytePosToRecPtr(Insert->CurrBytePos);
@@ -7778,6 +7813,10 @@ CreateCheckPoint(int flags)
77787813
ControlFile->minRecoveryPoint = InvalidXLogRecPtr;
77797814
ControlFile->minRecoveryPointTLI = 0;
77807815

7816+
elog(LOG, "CreateCheckPoint data_checksum_version %u %u",
7817+
ControlFile->data_checksum_version,
7818+
checkPoint.data_checksum_version);
7819+
77817820
/* make sure we start with the checksum version as of the checkpoint */
77827821
ControlFile->data_checksum_version = checkPoint.data_checksum_version;
77837822

@@ -7928,6 +7967,10 @@ CreateEndOfRecoveryRecord(void)
79287967
ControlFile->minRecoveryPoint = recptr;
79297968
ControlFile->minRecoveryPointTLI = xlrec.ThisTimeLineID;
79307969

7970+
elog(LOG, "CreateEndOfRecoveryRecord data_checksum_version %u xlog %u",
7971+
ControlFile->data_checksum_version,
7972+
XLogCtl->data_checksum_version);
7973+
79317974
/* start with the latest checksum version (as of the end of recovery) */
79327975
ControlFile->data_checksum_version = XLogCtl->data_checksum_version;
79337976

@@ -8101,6 +8144,14 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record)
81018144
XLogCtl->lastCheckPointEndPtr = record->EndRecPtr;
81028145
XLogCtl->lastCheckPoint = *checkPoint;
81038146
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);
81048155
}
81058156

81068157
/*
@@ -8138,6 +8189,9 @@ CreateRestartPoint(int flags)
81388189
lastCheckPoint = XLogCtl->lastCheckPoint;
81398190
SpinLockRelease(&XLogCtl->info_lck);
81408191

8192+
elog(LOG, "CreateRestartPoint lastCheckPointRecPtr %X/%X lastCheckPointEndPtr %X/%X",
8193+
LSN_FORMAT_ARGS(lastCheckPointRecPtr), LSN_FORMAT_ARGS(lastCheckPointEndPtr));
8194+
81418195
/*
81428196
* Check that we're still in recovery mode. It's ok if we exit recovery
81438197
* mode after this check, the restart point is valid anyway.
@@ -8166,9 +8220,11 @@ CreateRestartPoint(int flags)
81668220
if (XLogRecPtrIsInvalid(lastCheckPointRecPtr) ||
81678221
lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
81688222
{
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))));
81728228

81738229
UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
81748230
if (flags & CHECKPOINT_IS_SHUTDOWN)
@@ -8236,6 +8292,8 @@ CreateRestartPoint(int flags)
82368292
* end-of-recovery checkpoint.
82378293
*/
82388294
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));
82398297
if (ControlFile->checkPointCopy.redo < lastCheckPoint.redo)
82408298
{
82418299
/*
@@ -8274,11 +8332,17 @@ CreateRestartPoint(int flags)
82748332
ControlFile->state = DB_SHUTDOWNED_IN_RECOVERY;
82758333
}
82768334

8335+
elog(LOG, "CreateRestartPoint data_checksum_version %u %u",
8336+
ControlFile->data_checksum_version,
8337+
lastCheckPoint.data_checksum_version);
8338+
82778339
/* we shall start with the latest checksum version */
82788340
ControlFile->data_checksum_version = lastCheckPoint.data_checksum_version;
82798341

82808342
UpdateControlFile();
82818343
}
8344+
else
8345+
elog(LOG, "CreateRestartPoint: skipped ControlFile update");
82828346
LWLockRelease(ControlFileLock);
82838347

82848348
/*
@@ -9136,13 +9200,25 @@ xlog_redo(XLogReaderState *record)
91369200
{
91379201
xl_checksum_state state;
91389202
uint64 barrier;
9203+
XLogRecPtr checkpointLsn;
9204+
uint32 value,
9205+
value_last;
91399206

91409207
memcpy(&state, XLogRecGetData(record), sizeof(xl_checksum_state));
91419208

91429209
SpinLockAcquire(&XLogCtl->info_lck);
9210+
value_last = XLogCtl->data_checksum_version;
91439211
XLogCtl->data_checksum_version = state.new_checksumtype;
91449212
SpinLockRelease(&XLogCtl->info_lck);
91459213

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+
91469222
/*
91479223
* Block on a procsignalbarrier to await all processes having seen the
91489224
* change to checksum status. Once the barrier has been passed we can
@@ -9151,22 +9227,26 @@ xlog_redo(XLogReaderState *record)
91519227
switch (state.new_checksumtype)
91529228
{
91539229
case PG_DATA_CHECKSUM_INPROGRESS_ON_VERSION:
9230+
elog(LOG, "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON");
91549231
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON);
91559232
WaitForProcSignalBarrier(barrier);
91569233
break;
91579234

91589235
case PG_DATA_CHECKSUM_INPROGRESS_OFF_VERSION:
9236+
elog(LOG, "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF");
91599237
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF);
91609238
WaitForProcSignalBarrier(barrier);
91619239
break;
91629240

91639241
case PG_DATA_CHECKSUM_VERSION:
9242+
elog(LOG, "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_ON");
91649243
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_ON);
91659244
WaitForProcSignalBarrier(barrier);
91669245
break;
91679246

91689247
default:
91699248
Assert(state.new_checksumtype == 0);
9249+
elog(LOG, "XLOG_CHECKSUMS emit PROCSIGNAL_BARRIER_CHECKSUM_OFF");
91709250
barrier = EmitProcSignalBarrier(PROCSIGNAL_BARRIER_CHECKSUM_OFF);
91719251
WaitForProcSignalBarrier(barrier);
91729252
break;

src/backend/postmaster/launch_backend.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ postmaster_child_launch(BackendType child_type, int child_slot,
239239
if (IsExternalConnectionBackend(child_type))
240240
((BackendStartupData *) startup_data)->fork_started = GetCurrentTimestamp();
241241

242+
elog(LOG, "postmaster_child_launch: LocalDataChecksumVersion %u xlog %u", GetLocalDataChecksumVersion(),
243+
GetCurrentDataChecksumVersion());
244+
242245
#ifdef EXEC_BACKEND
243246
pid = internal_forkexec(child_process_kinds[child_type].name, child_slot,
244247
startup_data, startup_data_len, client_sock);

src/backend/storage/ipc/procsignal.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,40 @@ ProcessProcSignalBarrier(void)
553553

554554
PG_TRY();
555555
{
556+
/* print info about barriers */
557+
{
558+
uint32 tmp = flags;
559+
560+
elog(LOG, "ProcessProcSignalBarrier flags %u", tmp);
561+
562+
while (tmp != 0)
563+
{
564+
ProcSignalBarrierType type;
565+
566+
type = (ProcSignalBarrierType) pg_rightmost_one_pos32(tmp);
567+
switch (type)
568+
{
569+
case PROCSIGNAL_BARRIER_SMGRRELEASE:
570+
elog(LOG, "PROCSIGNAL_BARRIER_SMGRRELEASE");
571+
break;
572+
case PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON:
573+
elog(LOG, "PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_ON");
574+
break;
575+
case PROCSIGNAL_BARRIER_CHECKSUM_ON:
576+
elog(LOG, "PROCSIGNAL_BARRIER_CHECKSUM_ON");
577+
break;
578+
case PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF:
579+
elog(LOG, "PROCSIGNAL_BARRIER_CHECKSUM_INPROGRESS_OFF");
580+
break;
581+
case PROCSIGNAL_BARRIER_CHECKSUM_OFF:
582+
elog(LOG, "PROCSIGNAL_BARRIER_CHECKSUM_OFF");
583+
break;
584+
}
585+
586+
BARRIER_CLEAR_BIT(tmp, type);
587+
}
588+
}
589+
556590
/*
557591
* Process each type of barrier. The barrier-processing functions
558592
* should normally return true, but may return false if the

0 commit comments

Comments
 (0)