OpenGauss(OG)的gs_ctl build 对应 PG的pg_rewind,OG没有pg_rewind这个可执行程序,但是有pg_rewind.cpp这个文件,gs_ctl build会调用pg_rewind.cpp中的gs_increment_build()。
在对Patroni的修改中,原pg_rewind的相关逻辑不再被调用,根据代码可知,只要在patroni.yml中设置use_pg_rewind为false,就能禁用Patroni中pg_rewind所有相关逻辑,而且OG也没有pg_rewind可执行程序(而是用gs_ctl build替代pg_rewind),这也是patroni判断是否禁用pg_rewind的充分条件。
patroni.yml
patroni/postgresql/rewind.py
禁用了原pg_rewind逻辑后,要增加opengauss的rewind逻辑,逻辑要实现下面的功能:
1、启动Patroni时,判断自己为备机后,做一次rewind(如果没有做过basebackup则做basebackup而不是rewind),如果集群中还没有主机,要推迟到下一个run_cycle循环中的follow做rewind,如