Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sL2Do-00D9hM-LK for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Jun 2024 15:00:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1sL2Dm-00A2Ds-UX for pgsql-hackers@arkaria.postgresql.org; Sat, 22 Jun 2024 15:00:07 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sL2Dm-00A2Dk-JX for pgsql-hackers@lists.postgresql.org; Sat, 22 Jun 2024 15:00:06 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1sL2Dk-003017-Ab for pgsql-hackers@lists.postgresql.org; Sat, 22 Jun 2024 15:00:06 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-52cd790645eso1424872e87.3 for ; Sat, 22 Jun 2024 08:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719068403; x=1719673203; darn=lists.postgresql.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=xcm9h9FLjyFGB+WxYOQsXB+ospsm9AQOA0CV14DIV/Y=; b=ILjGl+dDDrsKqiAOGzvSpHSNip8pbjiCF6lhnEQBkWpmErpMdckqLGODqX4Wx5++Vc DOyg4zb75aEjjVK0TuXY4pVoFKyzaJ36EPXBfLHYJhPCcRQOUcFO/yMXEBa3Mky2xh+y iIUDSp4Hhx6zJK/WkZXBSzAgSEgLd3X6wjAyaHRDK2A/iRySBtn/Lx7/8RiCPmO+EpXJ PeDwK34CZgAmOxONqrRicLu/FTukAFT0wECaW+dLNQlo8NrEvufvB/MO6nQSl0cCNgkF j2kL6uAqeYgmEO0LrBb4+x/uFyWCTE5AarITykj7oWKAWiHwUjm+beeNWZHc6SuB5irF 2cbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719068403; x=1719673203; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xcm9h9FLjyFGB+WxYOQsXB+ospsm9AQOA0CV14DIV/Y=; b=Gl3KJXM2bR0XlPimbr3aUEgL8yevnLQiPdSCizyh1Gq5FOu18Ixb8dgkB3ePwJy6s9 zDTKBctBKBs8l9T+4yS+ig0lHVwejQbXIbsnPoM27dioPSgiWxOEjy7PZwojMSJx1IQ5 sHXc55nujLVSaGZiO2g4DgFCibnQiMjA50hwVj2qdUlFDthng1SZRv+yjZapYyT3eV0L 5bCxGyYsvBx2bl9pW9qMypNUe1Sm8/8RHhnmC2GLs1x075lgsSt7MG3N9nPIZuM5drsH 8toa3e9rNdIYmwV4sikBICG293vvOlIOrCkLylRDdMBhaeDKmkd4IQ8wtb4jW/JabtSc vZjQ== X-Forwarded-Encrypted: i=1; AJvYcCUOtWm9/S7sFM2j9i0el6yJVsTltdBzhAp4+HyLt+inQdJL4PAnzZc415v7IeR5AaKI4vHcJiAwua+tcB+IAXIZuopGe4tz6U40EY+l9UPXPd5k X-Gm-Message-State: AOJu0YyMtuNv2te4OYpzGp7WiYkVuM7IQQJ4F2YV0UUBFnS5wfndWKUh ciNSHqj35+8SRy9cyL4Ft+WZg5giiiWtKpTOvNkpEkqRu91ZxPuO X-Google-Smtp-Source: AGHT+IH/ziAC9eComKoNUbrE0y1WMoPwHFBxMB/oXFiLZ9YKT8nebCOz92t65l4iz4bjaMErkkIk0A== X-Received: by 2002:a19:4351:0:b0:52c:ccb4:ec70 with SMTP id 2adb3069b0e04-52ce061a292mr431661e87.22.1719068403107; Sat, 22 Jun 2024 08:00:03 -0700 (PDT) Received: from [1.0.0.7] ([178.155.17.134]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-52cd6451c65sm509223e87.295.2024.06.22.08.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 22 Jun 2024 08:00:02 -0700 (PDT) Message-ID: <4db099c8-4a52-3cc4-e970-14539a319466@gmail.com> Date: Sat, 22 Jun 2024 18:00:01 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [EXTERNAL] Re: Add non-blocking version of PQcancel Content-Language: en-US To: Noah Misch , Jelte Fennema-Nio , Alvaro Herrera Cc: Tom Lane , Jacob Champion , Denis Laxalde , vignesh C , Thomas Munro , Greg Stark , "Gregory Stark (as CFM)" , Jelte Fennema , Daniel Gustafsson , Peter Eisentraut , Andres Freund , Justin Pryzby , Robert Haas , pgsql-hackers@lists.postgresql.org, Etsuro Fujita References: <202403281753.ku5k2jvaw5fo@alvherre.pgsql> <3643677.1711648979@sss.pgh.pa.us> <20240329221724.03@rfd.leadboat.com> From: Alexander Lakhin In-Reply-To: <20240329221724.03@rfd.leadboat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello hackers, 30.03.2024 01:17, Noah Misch wrote: > On Fri, Mar 29, 2024 at 09:17:55AM +0100, Jelte Fennema-Nio wrote: >> On Thu, 28 Mar 2024 at 19:03, Tom Lane wrote: >>> Could we make this test bulletproof by using an injection point? >>> If not, I remain of the opinion that we're better off without it. >> Possibly, and if so, I agree that would be better than the currently >> added test. But I honestly don't feel like spending the time on >> creating such a test. > The SQL test is more representative of real applications, and it's way simpler > to understand. In general, I prefer 6-line SQL tests that catch a problem 10% > of the time over injection point tests that catch it 100% of the time. For > low detection rate to be exciting, it needs to be low enough to have a serious > chance of all buildfarm members reporting green for the bad commit. With ~115 > buildfarm members running in the last day, 0.1% detection rate would have been > low enough to bother improving, but 4% would be high enough to call it good. As a recent buildfarm failure on orlingo (which tests asan-enabled builds) [1] shows, that test can still fail: 70/70 postgresql:postgres_fdw-running / postgres_fdw-running/regress               ERROR           278.67s exit status 1 @@ -2775,6 +2775,7 @@  SET LOCAL statement_timeout = '10ms';  select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long  ERROR:  canceling statement due to statement timeout +WARNING:  could not get result of cancel request due to timeout  COMMIT; (from the next run we can see normal duration: "postgres_fdw-running/regress               OK                6.30s ") I reproduced the failure with an asan-enabled build on a slowed-down VM and as far as I can see, it's caused by the following condition in ProcessInterrupts():                 /*                  * If we are reading a command from the client, just ignore the cancel                  * request --- sending an extra error message won't accomplish                  * anything.  Otherwise, go ahead and throw the error.                  */                 if (!DoingCommandRead)                 {                         LockErrorCleanup();                         ereport(ERROR, (errcode(ERRCODE_QUERY_CANCELED),                                          errmsg("canceling statement due to user request")));                 } I think this failure can be reproduced easily (without asan/slowing down) with this modification: @@ -4630,6 +4630,7 @@ PostgresMain(const char *dbname, const char *username)              idle_session_timeout_enabled = false;          } +if (rand() % 10 == 0) pg_usleep(10000);          /*           * (5) disable async signal conditions again.           * Running this test in a loop (for ((i=1;i<=100;i++)); do \ echo "iteration $i"; make -s check -C contrib/postgres_fdw/ || break; \ done), I get: ... iteration 56 # +++ regress check in contrib/postgres_fdw +++ # initializing database system by copying initdb template # using temp instance on port 55312 with PID 991332 ok 1         - postgres_fdw                            20093 ms 1..1 # All 1 tests passed. iteration 57 # +++ regress check in contrib/postgres_fdw +++ # initializing database system by copying initdb template # using temp instance on port 55312 with PID 992152 not ok 1     - postgres_fdw                            62064 ms 1..1 ... --- .../contrib/postgres_fdw/expected/postgres_fdw.out 2024-06-22 02:52:42.991574907 +0000 +++ .../contrib/postgres_fdw/results/postgres_fdw.out 2024-06-22 14:43:43.949552927 +0000 @@ -2775,6 +2775,7 @@  SET LOCAL statement_timeout = '10ms';  select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long  ERROR:  canceling statement due to statement timeout +WARNING:  could not get result of cancel request due to timeout  COMMIT; I also came across another failure of the test: @@ -2774,7 +2774,7 @@  BEGIN;  SET LOCAL statement_timeout = '10ms';  select count(*) from ft1 CROSS JOIN ft2 CROSS JOIN ft4 CROSS JOIN ft5; -- this takes very long -ERROR:  canceling statement due to statement timeout +ERROR:  canceling statement due to user request  COMMIT; which is reproduced with a sleep added here: @@ -1065,6 +1065,7 @@ exec_simple_query(const char *query_string)       */      parsetree_list = pg_parse_query(query_string); +pg_usleep(11000); [1] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=olingo&dt=2024-06-20%2009%3A52%3A04 Best regards, Alexander