On Mon, Apr 4, 2016 at 7:49 PM, Etsuro Fujita <fujita.ets...@lab.ntt.co.jp> wrote: > On 2016/03/31 16:38, Etsuro Fujita wrote: >> >> On 2016/03/31 14:07, Noah Misch wrote: >>> >>> On Thu, Mar 24, 2016 at 01:02:57PM +0900, Etsuro Fujita wrote: >>>> >>>> On 2016/03/24 11:14, Michael Paquier wrote: >>>>> >>>>> On Wed, Mar 23, 2016 at 10:05 PM, Thom Brown <t...@linux.com> wrote: >>>>>> >>>>>> I've noticed that you now can't cancel a query if there's DML pushdown >>>>>> to a foreign server. This previously worked while it was sending >>>>>> individual statements as it interrupted and rolled it back. >>>>>> >>>>>> Here's what the local server sees when trying to cancel: >>>>>> >>>>>> # DELETE FROM remote.contacts; >>>>>> ^CCancel request sent >>>>>> DELETE 5000000 >>>>>> >>>>>> This should probably be fixed. > > >>>>> Looking at what has been committed, execute_dml_stmt is using >>>>> PQexecParams, so we'd want to use an asynchronous call and loop on >>>>> PQgetResult with CHECK_FOR_INTERRUPTS() in it. > > >>>> Will fix. > > >>> [This is a generic notification.] > > >> Sorry for not having taken any action. I've been busy with another task >> lately, but I started working on this. I plan to post a patch early >> next week. > > > Here is a patch to fix this issue. As proposed by Michael, I modified > execute_dml_stmt so that it uses PQsendQueryParams, not PQexecParams. Any > comments are welcome.
+ * This is based on pqSocketCheck. + */ + bool + CheckSocket(PGconn *conn) + { + int ret; + + Assert(conn != NULL); Instead of copying again pqSocketQuery, which is as well copied in libpqwalreceiver.c, wouldn't it be better to use WaitLatchOrSocket with the socket returned by PQsocket? -- Michael -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers