MySQL半同步复制--reserve_header
来源:互联网 发布:数据融合方法概论 编辑:程序博客网 时间:2024/06/06 20:52
mysql_binlog_send->reset_transmit_packet->RUN_HOOK(binlog_transmit, reserve_header, (thd, flags, packet))--
ReplSemiSyncBase:kSyncHeader[2],这里为在packet头部拷贝2字节,
固定值作为MAGIC NUMBER,只有slave开启semisync才会保留额外的
packet头部比特位,不管master是否开启了semisync
const unsigned char ReplSemiSyncBase::kPacketMagicNum = 0xef;
const unsigned char ReplSemiSyncBase::kSyncHeader[2] ={ReplSemiSyncBase::kPacketMagicNum, 0};
repl_semi_reserve_header
每次发送event前,如果是半同步都需要添加3个字节。
int ReplSemiSyncMaster::reserveSyncHeader(unsigned char *header, unsigned long size){ const char *kWho = "ReplSemiSyncMaster::reserveSyncHeader"; function_enter(kWho); int hlen=0; //如果slave没有开启半同步,则不需要添加额外字节内容 if (!is_semi_sync_slave()) { hlen= 0; } else { /* No enough space for the extra header, disable semi-sync master */ if (sizeof(kSyncHeader) > size) { disableMaster(); return 0; } /* Set the magic number and the sync status. By default, no sync * is required. */ memcpy(header, kSyncHeader, sizeof(kSyncHeader)); hlen= sizeof(kSyncHeader); } return function_exit(kWho, hlen);}用于在packet的头部预留字节,以维护和slave的交互信息,目前预留3字节
ReplSemiSyncBase:kSyncHeader[2],这里为在packet头部拷贝2字节,
固定值作为MAGIC NUMBER,只有slave开启semisync才会保留额外的
packet头部比特位,不管master是否开启了semisync
const unsigned char ReplSemiSyncBase::kPacketMagicNum = 0xef;
const unsigned char ReplSemiSyncBase::kSyncHeader[2] ={ReplSemiSyncBase::kPacketMagicNum, 0};
阅读全文