Replication status in logical replication
Masahiko Sawada <sawada.mshk@gmail.com>
From: Masahiko Sawada <sawada.mshk@gmail.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-03-22T02:50:12Z
Lists: pgsql-hackers
Attachments
- logical_repl_caught_up.patch (application/octet-stream) patch
Hi all, When using logical replication, I ran into a situation where the pg_stat_replication.state is not updated until any wal record is sent after started up. For example, I set up logical replication with 2 subscriber and restart the publisher server, but I see the following status for a while (maybe until autovacuum run). =# select application_name, state, sent_location, write_location, flush_location, replay_location, sync_state from pg_stat_replication ; application_name | state | sent_location | write_location | flush_location | replay_location | sync_state ------------------+---------+---------------+----------------+----------------+-----------------+------------ node1 | catchup | 0/16329F8 | 0/16329F8 | 0/16329F8 | 0/16329F8 | potential node2 | catchup | 0/16329F8 | 0/16329F8 | 0/16329F8 | 0/16329F8 | async (2 rows) It seems that all wal senders have caught up but pg_stat_replication.state is still "catchup". The reason of this behavior is that WalSndCaughtUp is updated only in WalSndWaitForWal in logical replication during running, and in logical_read_xlog_page always try to read next wal record (i.g. it calls WalSndWaitForWal(targetPagePtr + reqLen)). So WalSndWaitForWal cannot update WalSndCaughtUp until any new wal record is created after started up and wal sender read it. Attached patch fixes this behavior by updating WalSndCaughtUp before trying to read next WAL if already caught up. Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center
Commits
-
Make logical WAL sender report streaming state appropriately
- 98e2c298c2f5 9.4.19 landed
- 19648375cc30 9.5.14 landed
- d5eb1fe0dc71 9.6.10 landed
- 11abea37d5d1 10.5 landed
- 0414ac6a1eb2 11.0 landed
- 9a7b7adc130a 12.0 landed