海山数据库(He3DB)源码详解:主备复制SyncRepWaitForLSN

海山数据库(He3DB)源码详解:主备复制SyncRepWaitForLSN

背景

He3DB 采用了先进的存储引擎和查询优化技术,能够快速处理大量数据和复杂查询。无论是 OLTP(在线事务处理)还是 OLAP(在线分析处理)场景,都能提供出色的性能表现。He3DB 具备完善的数据备份和恢复机制,能够在系统故障或数据损坏时快速恢复数据,确保业务的连续性。He3DB 支持水平扩展和垂直扩展,可以轻松应对不断增长的数据需求。He3DB 提供了严格的访问控制和数据加密功能,确保数据的安全性和隐私性。

本文基于He3DB,针对主备复制模块进行源码解读分享

流复制——SyncRepWaitForLSN

SyncRepWaitForLSN主要用于同步复制中的等待特定预写日志(Write-Ahead Log,WAL)位置的处理。

  1. 前期检查与准备
    确保在事务提交期间持有中断,防止后续共享内存队列清理受到外部中断影响
    快速退出条件检查:
    如果用户未请求同步复制(!SyncRepRequested())或者没有定义同步复制备用节点名称(!((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_defined),则直接返回
    根据提交状态调整同步复制等待模式
void
SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
{
   
	char	   *new_status = NULL;
	const char *old_status;
	int			mode;

	Assert(InterruptHoldoffCount > 0);

	if (!SyncRepRequested() ||
		!((volatile WalSndCtlData *) WalSndCtl)->sync_standbys_defined)
		return;

	/* Cap the level for anything other than commit to remote flush only. */
	if (commit)
		mode = SyncRepWaitMode;
	else
		mode = Min(SyncRepWaitMode, SYNC_REP_WAIT_FLUSH);

	Assert(SHMQueueIsDetached(&(MyProc->syncRepLinks)));
	Assert(WalSndCtl != NULL);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值