备节点初始化时不做gs_ctl init,而是做gs_basebackup,OG创建basebackup不同于PG,我们直接使用superuser做basebackup,并且携带用户名和密码,因此对Patroni代码做了修改,涉及文件:
patroni/postgresql/config.py
patroni/postgresql/bootstrap.py
patroni/ha.py
src/bin/pg_basebackup/streamutil.h
src/bin/pg_basebackup/streamutil.cpp
src/bin/pg_basebackup/pg_basebackup.cpp
备节点调用gs_basebackup初始化后,还会调用write_postgresql_conf(),以patroni.yml里的参数值,来重新覆盖postgresql.conf,会把postgresql.base.conf和postgresql.conf合成为postgresql.conf。
patroni/postgresql/config.py:def replication()

源码中使用replication用户信息的地方,实际是superuser的用户信息。
patroni/postgresql/bootstrap.py:def create_replica(),修改传给 gs_basebackup 的参数。

patroni/postgresql/bootstrap.py:def basebackup() ,实际调用gs_basebackup的代码,调用前创建数据目录。

用属性_basebackup_executed标记basebackup是否成功执行了,这个属性在rewind时会用到。

patroni/ha.py:def recover()、def follow()



-----------------------------------------------------------------------------------------------------------------------------
opengauss 5.0.0以后这部分修改不再需要了。
为了让Patroni能够使用gs_basebackup,对OG的gs_basebackup也做了修改:
src/bin/pg_basebackup/streamutil.h:

增加setdbpassword函数,用于接收--no-password传来的密码参数
src/bin/pg_basebackup/streamutil.cpp:

src/bin/pg_basebackup/pg_basebackup.cpp:

用--no-password或-w传入密码。