[PATCH] Send catalog_xmin separately in hot standby feedback
От | Craig Ringer |
---|---|
Тема | [PATCH] Send catalog_xmin separately in hot standby feedback |
Дата | |
Msg-id | CAMsr+YFi-LV7S8ehnwUiZnb=1h_14PwQ25d-vyUNq-f5S5r=Zg@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: [PATCH] Send catalog_xmin separately in hot standby feedback
(Craig Ringer <craig@2ndquadrant.com>)
|
Список | pgsql-hackers |
Hi all Currently hot standby feedback sends GetOldestXmin()'s result to the upstream as the required xmin. GetOldestXmin() returns a slot's catalog_xmin if that's the lowest xmin on the system. That's fine so long as we don't do logical decoding on standbys, but if we start allowing logical slots on standbys it'll cause the master to retain too much bloat since it'll pin the master's xmin (not catalog_xmin) down based on the catalog_xmin of any slots on the downstream. To fix that, add new fields to the hot standby feedback protocol message to carry a separate catalog_xmin. This doesn't need any special care for backward compatibility because the only thing that has any business sending hot standby feedback is a physical standby and they're required to be the same major version as the master. If someone tries to connect with a standby of the wrong version they'll fail long before this, and even if they didn't they'd just get an error saying there's not enough data in the message. pg_basebackup, pg_recvlogical and pg_receivexlog don't send hot standby feedback messages. I'm posting this now because Petr was interested in it for his work on logical replication. I'll be following it a subsequent patch to allow logical slot creation on physical replicas if they're using a slot to talk to the master and have hot_standby_feedback enabled, just so you know the direction this is going in. Passes 'make check', src/bin/pg_basebackup and src/test/recovery TAP tests. I haven't added specific tests for this functionality since there isn't (yet) a way to set catalog_xmin separately on a physical standby without a dedicated test module. The logical decoding timeline following patch[1] is also relevant for this, since it is required for logical decoding on standby to survive promotion. Next steps will be: * Expose information about whether or not a slot is in use from walreceiver.c * Allow logical slots to be created on replicas if hot_standby_feedback is enabled and a logical slot is in use. Return null as the exported snapshot ID when creating over the walsender protocol, since we can't export a snapshot on a standby due to the need to allocate an xid. (That can be addressed separately). * Now that recovery tests are possible, write the recovery test suite for logical decoding on standby * Auto-drop replication slots when dropping a database in dbase_redo * Add a safety mechanism to stop users disabling hs feedback on the replica or stopping using a physical slot to the upstream while logical slots exist on the replica. Or mark such logical slots as unusable using a new persistent field on the slot. Not trivial because we must allow crash recovery without a slot to upstream (obviously), and should preferably also allow fallback to archive recovery when server with slot is temporarily unreachable. Must also consider handling of physical slot with catalog_xmin set from cascading physical replica with logical slots on it. * Extend the logical replication patch to add support for following physical failover using this functionality, likely in 11.0. [1] https://commitfest.postgresql.org/10/779/ I'll add this to the next CF, but I realise the inability to test it standalone may mean it can only be committed as part of a series along with full support for logical decoding from standby. -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Вложения
В списке pgsql-hackers по дате отправления:
Следующее
От: Pavan DeolaseeДата:
Сообщение: Re: Patch: Write Amplification Reduction Method (WARM)