You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by ma...@apache.org on 2025/02/06 06:20:38 UTC
(cloudberry) 02/12: Fix inject_fault suspend cannot be canceled (#17279)
This is an automated email from the ASF dual-hosted git repository.
maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 1527760d7c8eefa47ae8216775a16185705aa557
Author: chaotian <10...@users.noreply.github.com>
AuthorDate: Tue Apr 9 16:19:13 2024 +0800
Fix inject_fault suspend cannot be canceled (#17279)
Check Interrupt by CHECK_FOR_INTERRUPTS() as FaultInjectorTypeSuspend is sleeping in while() loop.
Authored-by: chaotian <ch...@vmware.com>
fix cancel_query
---
src/backend/utils/misc/faultinjector.c | 1 +
src/test/isolation2/expected/cancel_query.out | 32 +++++++++++++++++++++++++++
src/test/isolation2/sql/cancel_query.sql | 12 ++++++++++
3 files changed, 45 insertions(+)
diff --git a/src/backend/utils/misc/faultinjector.c b/src/backend/utils/misc/faultinjector.c
index df456b3bb0..548ea66370 100644
--- a/src/backend/utils/misc/faultinjector.c
+++ b/src/backend/utils/misc/faultinjector.c
@@ -476,6 +476,7 @@ FaultInjector_InjectFaultIfSet_out_of_line(
while ((entry = FaultInjector_LookupHashEntry(entryLocal->faultName)) != NULL &&
entry->faultInjectorType != FaultInjectorTypeResume)
{
+ CHECK_FOR_INTERRUPTS();
pg_usleep(1000000L); // 1 sec
}
diff --git a/src/test/isolation2/expected/cancel_query.out b/src/test/isolation2/expected/cancel_query.out
index 4835593cab..38bda39fe4 100644
--- a/src/test/isolation2/expected/cancel_query.out
+++ b/src/test/isolation2/expected/cancel_query.out
@@ -49,3 +49,35 @@ SELECT gp_inject_fault('zlib_decompress_after_decompress_fn', 'reset', dbid) FRO
Success:
Success:
(8 rows)
+
+CREATE TABLE a_suspend_blocking(a int, b int, c int);
+CREATE
+INSERT INTO a_suspend_blocking select i,i,i from generate_series(1, 100) i;
+INSERT 100
+
+0: SELECT gp_inject_fault_infinite('exec_mpp_query_start', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' AND content >= 0;
+ gp_inject_fault_infinite
+--------------------------
+ Success:
+ Success:
+ Success:
+(3 rows)
+0&: SELECT * FROM a_suspend_blocking; <waiting ...>
+
+1: SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE query LIKE 'SELECT * FROM a_suspend_blocking%';
+ pg_cancel_backend
+-------------------
+ t
+(1 row)
+0<: <... completed>
+ERROR: canceling statement due to user request
+
+SELECT gp_inject_fault_infinite('exec_mpp_query_start', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' AND content >= 0;
+ gp_inject_fault_infinite
+--------------------------
+ Success:
+ Success:
+ Success:
+(3 rows)
+DROP TABLE a_suspend_blocking;
+DROP
diff --git a/src/test/isolation2/sql/cancel_query.sql b/src/test/isolation2/sql/cancel_query.sql
index b53597ded3..8a4860d6eb 100644
--- a/src/test/isolation2/sql/cancel_query.sql
+++ b/src/test/isolation2/sql/cancel_query.sql
@@ -39,3 +39,15 @@ PARTITION BY RANGE(a_date)
1<:
SELECT gp_inject_fault('zlib_decompress_after_decompress_fn', 'reset', dbid) FROM gp_segment_configuration;
+
+CREATE TABLE a_suspend_blocking(a int, b int, c int);
+INSERT INTO a_suspend_blocking select i,i,i from generate_series(1, 100) i;
+
+0: SELECT gp_inject_fault_infinite('exec_mpp_query_start', 'suspend', dbid) FROM gp_segment_configuration WHERE role = 'p' AND content >= 0;
+0&: SELECT * FROM a_suspend_blocking;
+
+1: SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE query LIKE 'SELECT * FROM a_suspend_blocking%';
+0<:
+
+SELECT gp_inject_fault_infinite('exec_mpp_query_start', 'reset', dbid) FROM gp_segment_configuration WHERE role = 'p' AND content >= 0;
+DROP TABLE a_suspend_blocking;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org