Re: pg_recvlogical prints bogus error when interrupted
От | Bharath Rupireddy |
---|---|
Тема | Re: pg_recvlogical prints bogus error when interrupted |
Дата | |
Msg-id | CALj2ACXj5HpNMziFZ_=6ww8eMSJn4Fur4dv=NTpvS4QuxDRwkg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: pg_recvlogical prints bogus error when interrupted (Michael Paquier <michael@paquier.xyz>) |
Ответы |
Re: pg_recvlogical prints bogus error when interrupted
Re: pg_recvlogical prints bogus error when interrupted |
Список | pgsql-hackers |
On Wed, Jul 19, 2023 at 8:04 AM Michael Paquier <michael@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
Вложения
В списке pgsql-hackers по дате отправления: