On Thu, Nov 5, 2020 at 1:39 AM Brad Nicholson <br...@ca.ibm.com> wrote: > > Hi, > > I've recently been seeing a race condition with the restore_command on > replicas using streaming replication. > > On the primary, we are archiving wal files to s3 compatible storage via > pgBackRest. In the recovery.conf section of the postgresql.conf file on the > replicas, we define the restore command as follows: > > restore_command = '/usr/bin/pgbackrest --config > /conf/postgresql/pgbackrest_restore.conf --stanza=formation archive-get %f > "%p"' > > We have a three member setup - m-0, m-1, m-2. Consider the case where m-0 is > the Primary and m-1 and m-2 are replicas connected to the m-0. > > When issuing a switchover (via Patroni) from m-0 to m-1, the connection from > m-2 to m-0 is terminated. The restore_command on m-2 is run, and it looks for > the .history file for the new timeline. If this happens before the history > file is created and pushed to the archive, m-2 will look for the next wal > file on the existing timeline in the archive. It will never be created as the > source has moved on, so this m-2 hangs waiting on that file. The > restore_command on the replica looking for this non-existent file is only run > once. This seems like an odd state to be in. The replica is waiting on a new > file, but it's not actually looking for it. Is this expected, or should the > restore_command be polling for that file?
I am not sure how Patroni does it internally, can you explain the scenario in more detail? Suppose you are executing the promote on m-1 and if the promotion is successful it will switch the timeline and it will create the timeline history file. Now, once the promotion is successful if we change the primary_conninfo on the m-2 then it will restart the walsender and look for the latest .history file which it should find either from direct streaming or through the restore_command. If you are saying that m-2 tried to look for the history file before m-1 created it then it seems like you change the primary_conninfo on m-2 before the m-1 promotion got completed. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com