diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c index 8d0903c175..9483fd055c 100644 --- a/src/backend/access/transam/timeline.c +++ b/src/backend/access/transam/timeline.c @@ -55,6 +55,7 @@ restoreTimeLineHistoryFiles(TimeLineID begin, TimeLineID end) for (tli = begin; tli < end; tli++) { + elog(LOG, "Trying restoring history file for TLI=%d", tli); if (tli == 1) continue; @@ -95,6 +96,7 @@ readTimeLineHistory(TimeLineID targetTLI) if (ArchiveRecoveryRequested) { + elog(LOG, "Trying reading history file for TLI=%d", targetTLI); TLHistoryFileName(histfname, targetTLI); fromArchive = RestoreArchivedFile(path, histfname, "RECOVERYHISTORY", 0, false); @@ -231,6 +233,7 @@ existsTimeLineHistory(TimeLineID probeTLI) if (ArchiveRecoveryRequested) { + elog(LOG, "Probing history file for TLI=%d", probeTLI); TLHistoryFileName(histfname, probeTLI); RestoreArchivedFile(path, histfname, "RECOVERYHISTORY", 0, false); } diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 8d163f190f..afd6a0ce0a 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -3726,7 +3726,7 @@ XLogFileRead(XLogSegNo segno, int emode, TimeLineID tli, snprintf(activitymsg, sizeof(activitymsg), "waiting for %s", xlogfname); set_ps_display(activitymsg); - + elog(LOG, "Trying fetching history file for TLI=%d", tli); restoredFromArchive = RestoreArchivedFile(path, xlogfname, "RECOVERYXLOG", wal_segment_size, @@ -3820,7 +3820,10 @@ XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source) if (expectedTLEs) tles = expectedTLEs; else + { + elog(LOG, "Loading history file for TLI=%d (2)", recoveryTargetTLI); tles = readTimeLineHistory(recoveryTargetTLI); + } foreach(cell, tles) { @@ -3834,6 +3837,8 @@ XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source) * Skip scanning the timeline ID that the logfile segment to read * doesn't belong to */ + elog(LOG, "scanning segment %lX TLI %d, source %d", segno, tli, source); + if (hent->begin != InvalidXLogRecPtr) { XLogSegNo beginseg = 0; @@ -3860,6 +3865,7 @@ XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source) XLOG_FROM_ARCHIVE, true); if (fd != -1) { + elog(LOG, "found segment %lX TLI %d, from archive", segno, tli); elog(DEBUG1, "got WAL segment from archive"); if (!expectedTLEs) expectedTLEs = tles; @@ -3873,6 +3879,7 @@ XLogFileReadAnyTLI(XLogSegNo segno, int emode, XLogSource source) XLOG_FROM_PG_WAL, true); if (fd != -1) { + elog(LOG, "found segment %lX TLI %d, from PG_WAL", segno, tli); if (!expectedTLEs) expectedTLEs = tles; return fd; @@ -6577,6 +6584,8 @@ StartupXLOG(void) else recoveryTargetTLI = ControlFile->checkPointCopy.ThisTimeLineID; + expectedTLEs = readTimeLineHistory(recoveryTargetTLI); + elog(LOG, "set expectedtles %d, %d", recoveryTargetTLI, list_length(expectedTLEs)); /* * Check for signal files, and if so set up state for offline recovery */ @@ -6866,11 +6875,19 @@ StartupXLOG(void) if (!XLogRecPtrIsInvalid(ControlFile->minRecoveryPoint) && tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) != ControlFile->minRecoveryPointTLI) + { + ListCell *lc; + foreach (lc, expectedTLEs) + { + TimeLineHistoryEntry *tle = (TimeLineHistoryEntry *) lfirst(lc); + elog(LOG, "TLE %d {%X/%X - %X/%X}", tle->tli, LSN_FORMAT_ARGS(tle->begin), LSN_FORMAT_ARGS(tle->end)); + } ereport(FATAL, (errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u", recoveryTargetTLI, LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint), ControlFile->minRecoveryPointTLI))); + } LastRec = RecPtr = checkPointLoc; @@ -8396,7 +8413,7 @@ ReadCheckpointRecord(XLogReaderState *xlogreader, XLogRecPtr RecPtr, XLogBeginRead(xlogreader, RecPtr); record = ReadRecord(xlogreader, LOG, true); - + elog(LOG, "Checkpoint record: TLI=%d, %X/%X, rectargetTLI=%d, exptles=%p", xlogreader->seg.ws_tli, LSN_FORMAT_ARGS(xlogreader->ReadRecPtr), recoveryTargetTLI, expectedTLEs); if (record == NULL) { if (!report) @@ -10211,6 +10228,19 @@ xlog_redo(XLogReaderState *record) CheckPoint checkPoint; memcpy(&checkPoint, XLogRecGetData(record), sizeof(CheckPoint)); + { + struct stat b; + bool f = true; + while (stat("/tmp/hoge", &b) == 0) + { + if (f) + elog(LOG, "WAIT START: CHECKPOINT_ONLINE: TLI=%d", checkPoint.ThisTimeLineID); + f = false; + sleep(1); + } + if (!f) + elog(LOG, "WAIT END: CHECKPOINT_ONLINE"); + } /* In an ONLINE checkpoint, treat the XID counter as a minimum */ LWLockAcquire(XidGenLock, LW_EXCLUSIVE); if (FullTransactionIdPrecedes(ShmemVariableCache->nextXid, @@ -12595,7 +12625,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, * TLI, rather than the position we're reading. */ tli = tliOfPointInHistory(tliRecPtr, expectedTLEs); - + elog(LOG, "%X/%X is on TLI %X", LSN_FORMAT_ARGS(tliRecPtr), tli); if (curFileTLI > 0 && tli < curFileTLI) elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u", LSN_FORMAT_ARGS(tliRecPtr), @@ -12662,7 +12692,11 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, if (readFile < 0) { if (!expectedTLEs) - expectedTLEs = readTimeLineHistory(receiveTLI); + { + + elog(LOG, "Loading expectedTLEs for %d (%d)", recoveryTargetTLI, receiveTLI); + expectedTLEs = readTimeLineHistory(recoveryTargetTLI); + } readFile = XLogFileRead(readSegNo, PANIC, receiveTLI, XLOG_FROM_STREAM, false);