前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL启动恢复过程中日志源的切换

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

作者头像
星哥玩云
发布2022-08-17 20:11:17
2760
发布2022-08-17 20:11:17
举报
文章被收录于专栏:开源部署

日志源会在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; }

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档