本文主要是介绍opengauss pending启动转主备代码分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
opengauss以pending启动时,也会执行StartupXLOG,并且replay wal,ApplyRedoRecord()会被调用。
当对pending状态的gaussdb,执行gs_ctl notify -M primary 时,会启动walsender等线程。
gs_ctl与gaussdb之间的交互不是通过socket连接,而是通过kill发信号,postmaster注册SIGUSR1和SIGCHLD信号,gs_ctl发SIGUSR1和SIGCHLD信号给postmaster线程,然后信号处理函数 sigusr1_handler 和 reaper被调用。
在这些信号处理函数中启动线程(walreceiver、walwriter、walsender等),启动线程调用initialize_util_thread() ,可以在postmaster.cpp中搜initialize_util_thread,查看启动线程的位置。
当对 pending 状态的 gaussdb,执行gs_ctl notify -M standby 时,会启动 walreceiver 和 walwriter线程。
而在 pending 状态启动时,就已经调用了与各种 wal record 对应的 resource manager 的redo函数了,也就是说如果有问题,在pending启动时就会有问题。
这篇关于opengauss pending启动转主备代码分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!