怎么实现mysql的hook_MySQL半同步复制--RUN_HOOK

半同步复制只是一个插件,一个动态加载的插件怎么实现事务处理线程等待、停下来呢?

这个插件只是个实现体,在MySQL源码中还是需要支撑这个实现体的框架。即在代码的某些位置,加入一些桩observer,在执行到这些桩的时候,如果有插件在这些observer中注册了实现体,就这执行这些实现体,否则什么也不执行。

RUN_HOOK就是这些桩的调用接口:

#define RUN_HOOK(group, hook, args) (group ##_delegate->is_empty() ? 0 : group ##_delegate->hook args)以RUN_HOOK(binlog_relay_io, thread_start, (thd, mi))为例:

binlog_relay_io_delegate->thread_start(thd,mi)是RUN_HOOK转换后的调用。

int Binlog_relay_IO_delegate::thread_start(THD *thd, Master_info *mi)

{

Binlog_relay_IO_param param;

init_param(&param, mi);

int ret= 0;

FOREACH_OBSERVER(ret, thread_start, thd, (¶m));

return ret;

}关键在FOREACH_OBSERVER这个宏定义:

#define FOREACH_OBSERVER(r, f, thd, args) \

...

for (; info; info= iter++){

if ((

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值