手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2019-02-25] 来源:Linux社区  作者:yanzongshuai [字体: ]

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

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;
}

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2019-02/157095.htm

linux
相关资讯       PostgreSQL日志源 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款