On Wed, Jul 19, 2023 at 8:04 AM Michael Paquier <mich...@paquier.xyz> wrote: > > It took me some time to come back to this one, but attached is what I > had in mind. This stuff has three reasons to stop: keepalive, end LSN > or signal. This makes the code easier to follow. > > Thoughts or comments?
Thanks. I have some comments on v5: 1. I don't think we need a stop_lsn variable, the cur_record_lsn can help if it's defined outside the loop. With this, the patch can further be simplified as attached v6. 2. And, I'd prefer not to assume the stop_reason as signal by default. While it works for now because the remaining place where time_to_abort is set to true is only in the signal handler, it is not extensible, if there's another exit condition comes in future that sets time_to_abort to true. 3. pg_log_info("end position %X/%X reached on signal", .... For signal, end position is a bit vague wording and I think we can just say pg_log_info("received interrupt signal, exiting"); like pg_receivewal. We really can't have a valid stop_lsn for signal exit because that depends on when signal arrives in the while loop. If at all, someone wants to know the last received LSN - they can look at the other messages that pg_recvlogical emits - pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot myslot). 4. With v5, it was taking a while to exit after the first CTRL+C, see multiple CTRL+Cs at the end: ubuntu::~/postgres/inst/bin$ ./pg_recvlogical --slot=lsub1_repl_slot --file=lsub1.data --start --verbose pg_recvlogical: starting log streaming at 0/0 (slot lsub1_repl_slot) pg_recvlogical: streaming initiated pg_recvlogical: confirming write up to 0/0, flush to 0/0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) ^Cpg_recvlogical: end position 0/2867D70 reached on signal ^C^C^C^C^C^C^C^C^C^C^C^C ^C^C^C^C^C^C^C^C^C^C^C^C 5. FWIW, on HEAD we'd get the following and the patch emits a better messaging: ubuntu:~/postgres/inst/bin$ ./pg_recvlogical --slot=lsub1_repl_slot --file=lsub1.data --start --dbname='host=localhost port=5432 dbname=postgres user=ubuntu' --verbose pg_recvlogical: starting log streaming at 0/0 (slot lsub1_repl_slot) pg_recvlogical: streaming initiated pg_recvlogical: confirming write up to 0/0, flush to 0/0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) pg_recvlogical: confirming write up to 0/2BFFFD0, flush to 0/2BFFFD0 (slot lsub1_repl_slot) ^Cpg_recvlogical: error: unexpected termination of replication stream: Attaching v6 patch with the above changes to v6. Thoughts? -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com
v6-0001-Fix-pg_recvlogical-error-message-upon-SIGINT-SIGT.patch
Description: Binary data