Re: Unnecessary confirm work on logical replication

Поиск
Список
Период
Сортировка
От Emre Hasegeli
Тема Re: Unnecessary confirm work on logical replication
Дата
Msg-id CAE2gYzx6H4TaoagPOCghD+Na=uKcD95PXSqvLZ5ECQUyGf=xRA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Unnecessary confirm work on logical replication  (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>)
Ответы Re: Unnecessary confirm work on logical replication  (Tomas Vondra <tomas.vondra@enterprisedb.com>)
Список pgsql-hackers
> In fact, the WAL sender always starts reading WAL from restart_lsn,
> which in turn is always <= confirmed_flush_lsn. While reading WAL, WAL
> sender may read XLOG_RUNNING_XACTS WAL record with lsn <=
> confirmed_flush_lsn. While processing XLOG_RUNNING_XACTS record it may
> update its restart_lsn and catalog_xmin with current_lsn = lsn fo
> XLOG_RUNNING_XACTS record. In this situation current_lsn <=
> confirmed_flush_lsn.

This can only happen when the WAL sender is restarted.  However in
this case, the restart_lsn and catalog_xmin should have already been
persisted by the previous run of the WAL sender.

I still doubt these calls are necessary.  I think there is a
complicated chicken and egg problem here.  Here is my logic:

1) LogicalConfirmReceivedLocation() is called explicitly when
confirmed_flush is sent by the replication client.

2) LogicalConfirmReceivedLocation() is the only place that updates
confirmed_flush.

3) The replication client can only send a confirmed_flush for a
current_lsn it has already received.

4) These two functions have already run for any current_lsn the
replication client has received.

5) These two functions call LogicalConfirmReceivedLocation() only if
current_lsn <= confirmed_flush.

Thank you for your patience.



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Jonathan S. Katz"
Дата:
Сообщение: Re: When to drop src/tools/msvc support
Следующее
От: David Rowley
Дата:
Сообщение: Re: An oversight in ExecInitAgg for grouping sets