Re: pgbnech: allow to cancel queries during benchmark
От | Yugo NAGATA |
---|---|
Тема | Re: pgbnech: allow to cancel queries during benchmark |
Дата | |
Msg-id | 20230906201334.ed792cb57d36cec57f95a74f@sraoss.co.jp обсуждение исходный текст |
Ответ на | Re: pgbnech: allow to cancel queries during benchmark (Yugo NAGATA <nagata@sraoss.co.jp>) |
Ответы |
Re: pgbnech: allow to cancel queries during benchmark
|
Список | pgsql-hackers |
Hi Fabien, On Thu, 10 Aug 2023 12:32:44 +0900 Yugo NAGATA <nagata@sraoss.co.jp> wrote: > On Wed, 9 Aug 2023 11:18:43 +0200 (CEST) > Fabien COELHO <coelho@cri.ensmp.fr> wrote: > > > > > I forgot, about the test: > > > > I think that it should be integrated in the existing > > "001_pgbench_with_server.pl" script, because a TAP script is pretty > > expensive as it creates a cluster, starts it… before running the test. > > Ok. I'll integrate the test into 001. > > > I'm surprise that IPC::Run does not give any access to the process number. > > Anyway, its object interface seems to allow sending signal: > > > > $h->signal("...") > > > > So the code could be simplified to use that after a small delay. > > Thank you for your information. > > I didn't know $h->signal() and I mimicked the way of > src/bin/psql/t/020_cancel.pl to send SIGINT to a running program. I don't > know why the psql test doesn't use the interface, I'll investigate whether > this can be used in our purpose, anyway. I attached the updated patch v3. The changes since the previous patch includes the following; I removed the unnecessary condition (&& false) that you pointed out in [1]. The test was rewritten by using IPC::Run signal() and integrated to "001_pgbench_with_server.pl". This test is skipped on Windows because SIGINT causes to terminate the test itself as discussed in [2] about query cancellation test in psql. I added some comments to describe how query cancellation is handled as I explained in [1]. Also, I found the previous patch didn't work on Windows so fixed it. On non-Windows system, a thread waiting a response of long query can be interrupted by SIGINT, but on Windows, threads do not return from waiting until queries they are running are cancelled. This is because, when the signal is received, the system just creates a new thread to execute the callback function specified by setup_cancel_handler, and other thread continue to run[3]. Therefore, the queries have to be cancelled in the callback function. [1] https://www.postgresql.org/message-id/a58388ac-5411-4760-ea46-71324d8324cb%40mines-paristech.fr [2] https://www.postgresql.org/message-id/20230906004524.2fd6ee049f8a6c6f2690b99c%40sraoss.co.jp [3] https://learn.microsoft.com/en-us/windows/console/handlerroutine Regards, Yugo Nagata > > -- > Yugo NAGATA <nagata@sraoss.co.jp> > > -- Yugo NAGATA <nagata@sraoss.co.jp>
Вложения
В списке pgsql-hackers по дате отправления: