| From: | Fujii Masao <masao(dot)fujii(at)gmail(dot)com> |
|---|---|
| To: | Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> |
| Cc: | Rintaro Ikeda <ikedarintarof(at)oss(dot)nttdata(dot)com>, Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp>, Jakub Wartak <jakub(dot)wartak(at)enterprisedb(dot)com>, "Hayato Kuroda (Fujitsu)" <kuroda(dot)hayato(at)fujitsu(dot)com>, "slpmcf(at)gmail(dot)com" <slpmcf(at)gmail(dot)com>, "boekewurm+postgres(at)gmail(dot)com" <boekewurm+postgres(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, Srinath Reddy Sadipiralla <srinath2133(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com> |
| Subject: | Re: Suggestion to add --continue-client-on-abort option to pgbench |
| Date: | 2025-11-06 16:38:27 |
| Message-ID: | CAHGQGwFfzps_ekApaRHTxyzDVqifY5tjZ+PUH40aemUp4ehTyQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, Nov 6, 2025 at 8:38 AM Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> wrote:
> I just eyeball reviewed v20 and got a doubt:
Thanks for the review!
> +static void
> +discardAvailableResults(CState *st)
> +{
> + PGresult *res = NULL;
> +
> + for (;;)
> + {
> + res = PQgetResult(st->con);
> +
> + /*
> + * Read and discard results until PQgetResult() returns NULL (no more
> + * results) or a connection failure is detected. If the pipeline
> + * status is PQ_PIPELINE_ABORTED, more results may still be available
> + * even after PQgetResult() returns NULL, so continue reading in that
> + * case.
> + */
> + if ((res == NULL && PQpipelineStatus(st->con) != PQ_PIPELINE_ABORTED) ||
> + PQstatus(st->con) == CONNECTION_BAD)
> + break;
> +
> + PQclear(res);
> + }
> + PQclear(res);
> +}
> ```
>
> If pipeline is aborted and no more results, then the “if” will be "true && false”. And in this case, I guess PQstatus(st->con) != CONNECTION_BAD because it’s not a connection error, then overall, the “if” will be “false”, and it falls into an infinite loop.
Can this situation actually happen? It would be helpful if you could share
the custom script that triggers it.
When the pipeline is aborted, PGRES_PIPELINE_SYNC should arrive afterward,
changing the status from PQ_PIPELINE_ABORTED to PQ_PIPELINE_ON. That should
make the condition true and prevent an infinite loop, right?
Regards,
--
Fujii Masao
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Robert Haas | 2025-11-06 16:45:47 | Re: pg_plan_advice |
| Previous Message | Álvaro Herrera | 2025-11-06 16:37:57 | Re: psql --help=variables missing csv_fieldsep |