温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostgreSQL启动恢复过程中日志源的切换

发布时间:2020-07-23 18:42:34 来源:网络 阅读:563 作者:yzs的专栏 栏目:数据库

日志源会在XLOG_FROM_ARCHIVE->XLOG_FROM_STREAM->XLOG_FROM_ARCHIVE直接切换,只有读取过程中出错,就会切换到另外一个日志源。但实际执行过程中,XLOG_FROM_ARCHIVE出错后会到XLOG_FROM_PG_WAL读取,但是日志源的变量并不会改变。这个需要注意。

PostgreSQL启动恢复过程中日志源的切换

static int
XLogFileReadAnyTLI(XLogSegNo segno, int emode, int source)
{
 
	if (expectedTLEs)
		tles = expectedTLEs;
	else
		tles = readTimeLineHistory(recoveryTargetTLI);
	/*
	1、WaitForWALToBecomeAvailable调用时,source是XLOG_FROM_ARCHIVE时,会使用XLOG_FROM_ANY
	2、使用XLOG_FROM_ANY,会首先从归档中读取xlog,如果open失败,则会使用XLOG_FROM_PG_WAL
	3、外部日志源变量并没有切换
	*/
	foreach(cell, tles){
		TimeLineID	tli = ((TimeLineHistoryEntry *) lfirst(cell))->tli;
		if (tli < curFileTLI)
			break;				/* don't bother looking at too-old TLIs */
		if (source == XLOG_FROM_ANY || source == XLOG_FROM_ARCHIVE){
			fd = XLogFileRead(segno, emode, tli,XLOG_FROM_ARCHIVE, true);
			if (fd != -1){
				if (!expectedTLEs)
					expectedTLEs = tles;
				return fd;
			}
		}
		if (source == XLOG_FROM_ANY || source == XLOG_FROM_PG_WAL){
			fd = XLogFileRead(segno, emode, tli, XLOG_FROM_PG_WAL, true);
			if (fd != -1){
				if (!expectedTLEs)
					expectedTLEs = tles;
				return fd;
			}
		}
	}
	return -1;
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI