Re: Time delayed LR (WAS Re: logical replication restrictions)

From: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
To: osumi(dot)takamichi(at)fujitsu(dot)com
Cc: smithpb2250(at)gmail(dot)com, vignesh21(at)gmail(dot)com, kuroda(dot)hayato(at)fujitsu(dot)com, shveta(dot)malik(at)gmail(dot)com, dilipbalaut(at)gmail(dot)com, amit(dot)kapila16(at)gmail(dot)com, euler(at)eulerto(dot)com, m(dot)melihmutlu(at)gmail(dot)com, andres(at)anarazel(dot)de, marcos(at)f10(dot)com(dot)br, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Time delayed LR (WAS Re: logical replication restrictions)
Date: 2023-01-24 02:45:35
Message-ID: 20230124.114535.1107425862791533999.horikyota.ntt@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> Attached the updated patch v19.

+ maybe_delay_apply(TransactionId xid, TimestampTz finish_ts)

I look this spelling strange. How about maybe_apply_delay()?

send_feedback():
+ * If the subscriber side apply is delayed (because of time-delayed
+ * replication) then do not tell the publisher that the received latest
+ * LSN is already applied and flushed, otherwise, it leads to the
+ * publisher side making a wrong assumption of logical replication
+ * progress. Instead, we just send a feedback message to avoid a publisher
+ * timeout during the delay.
*/
- if (!have_pending_txes)
+ if (!have_pending_txes && !in_delayed_apply)
flushpos = writepos = recvpos;

Honestly I don't like this wart. The reason for this is the function
assumes recvpos = applypos but we actually call it while holding
unapplied changes, that is, applypos < recvpos.

Couldn't we maintain an additional static variable "last_applied"
along with last_received? In this case the condition cited above
would be as follows and in_delayed_apply will become unnecessary.

+ if (!have_pending_txes && last_received == last_applied)

The function is a static function and always called with a variable
last_received that has the same scope with the function, as the first
parameter. Thus we can remove the first parameter then let the
function directly look at the both two varaibles instead.

regards.

--
Kyotaro Horiguchi
NTT Open Source Software Center

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message houzj.fnst@fujitsu.com 2023-01-24 02:55:07 RE: wake up logical workers after ALTER SUBSCRIPTION
Previous Message wangw.fnst@fujitsu.com 2023-01-24 02:45:09 RE: Logical replication timeout problem