[SCM] PostGIS branch stable-3.4 updated. 3.4.6-104-g8531cb0616

git at osgeo.org git at osgeo.org
Mon Jul 27 23:51:48 PDT 2026


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, stable-3.4 has been updated
       via  8531cb06162a51b7039953ff086995bdeecf7f32 (commit)
       via  86aa61b2a2f6b717f1a7f9e6649011a3dd2639da (commit)
       via  831e98d5b7c17504794cf1b56d63b51631324bac (commit)
      from  c12e912a12a253032c26b4ca566e782120490cb6 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8531cb06162a51b7039953ff086995bdeecf7f32
Merge: c12e912a12 86aa61b2a2
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date:   Mon Jul 27 23:51:46 2026 -0700

    Merge pull request 'regress: scope interrupt test timeouts for stable-3.4' (!578) from Komzpa/postgis:fix/interrupt-timeout-scope-3.4-20260728 into stable-3.4
    
    Backport of https://gitea.osgeo.org/postgis/postgis/pulls/575 to stable-3.4.
    
    The interrupt regression tests set a short session-level `statement_timeout`, which also constrained helper and teardown statements after the long PostGIS operation had been canceled.
    
    This scopes the timeout with `SET LOCAL` inside a transaction around each intentionally canceled operation. The expected output continues to require both `ERROR: canceling statement due to statement timeout` and the existing `interrupted on time` verdict.
    
    Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/578


commit 86aa61b2a2f6b717f1a7f9e6649011a3dd2639da
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Tue Jul 28 07:52:57 2026 +0400

    regress: keep interrupt timing assertions
    
    Restore the elapsed-time verdict and expected on-time markers. SET LOCAL prevents helper statements from inheriting the short timeout without removing the timing check.

diff --git a/regress/core/interrupt_buffer_expected b/regress/core/interrupt_buffer_expected
index 2e5b6dae29..f7004e0f77 100644
--- a/regress/core/interrupt_buffer_expected
+++ b/regress/core/interrupt_buffer_expected
@@ -1,3 +1,3 @@
 ERROR:  canceling statement due to statement timeout
-buffer interrupted
+buffer interrupted on time
 1|5
diff --git a/regress/core/interrupt_expected b/regress/core/interrupt_expected
index df566321d0..8b22c31aad 100644
--- a/regress/core/interrupt_expected
+++ b/regress/core/interrupt_expected
@@ -1,3 +1,3 @@
 ERROR:  canceling statement due to statement timeout
-segmentize interrupted
+segmentize interrupted on time
 1|LINESTRING(0 0,2 0,4 0)
diff --git a/regress/core/interrupt_relate_expected b/regress/core/interrupt_relate_expected
index 354753a1fb..d050570bfb 100644
--- a/regress/core/interrupt_relate_expected
+++ b/regress/core/interrupt_relate_expected
@@ -1,16 +1,16 @@
 ERROR:  canceling statement due to statement timeout
-contains interrupted
+contains interrupted on time
 ERROR:  canceling statement due to statement timeout
-covers interrupted
+covers interrupted on time
 ERROR:  canceling statement due to statement timeout
-coveredby interrupted
+coveredby interrupted on time
 ERROR:  canceling statement due to statement timeout
-crosses interrupted
+crosses interrupted on time
 ERROR:  canceling statement due to statement timeout
-equals interrupted
+equals interrupted on time
 ERROR:  canceling statement due to statement timeout
-intersects interrupted
+intersects interrupted on time
 ERROR:  canceling statement due to statement timeout
-overlaps interrupted
+overlaps interrupted on time
 ERROR:  canceling statement due to statement timeout
-relate interrupted
+relate interrupted on time
diff --git a/regress/utils/timecheck.sql b/regress/utils/timecheck.sql
index 3ecbbd9091..a578acd3a8 100644
--- a/regress/utils/timecheck.sql
+++ b/regress/utils/timecheck.sql
@@ -19,13 +19,17 @@ BEGIN
 
 	RAISE DEBUG 'Resulting tolerance: %', tolerated;
 
-	-- The preceding query's expected ERROR proves it was cancelled. Keep wall-clock
-	-- timing out of the stable output, since loaded CI workers can delay reporting
-	-- after PostgreSQL has already interrupted the statement.
-	ret := format(
-		'%s interrupted',
-		label
-	);
+  IF rec.lap <= tolerated THEN
+		ret := format(
+			'%s interrupted on time',
+			label
+		);
+  ELSE
+		ret := format(
+			'%s interrupted late: %s (%s tolerated)',
+			label, rec.lap, tolerated
+		);
+  END IF;
 
   UPDATE _time SET t = clock_timestamp();
 

commit 831e98d5b7c17504794cf1b56d63b51631324bac
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Tue Jul 28 05:14:17 2026 +0400

    regress: keep interrupt tests stable on busy workers
    
    Backport of GT-575.
    
    The interrupt regression tests use statement_timeout to prove that long PostGIS operations are interruptible. Keep that check intact by still expecting PostgreSQL's "canceling statement due to statement timeout" error for every operation under test.
    
    Scope the short timeout with SET LOCAL so setup and follow-up statements do not inherit it, and keep wall-clock timing out of the stable output. Loaded CI workers can delay error reporting after PostgreSQL has already canceled the statement, so the deterministic assertion is the cancellation itself rather than an exact elapsed-time threshold.

diff --git a/NEWS b/NEWS
index 890666e4ef..a9742367e9 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PostGIS 3.4.7
  
 * Bug Fixes *
 
+  - GT-575, Scope interrupt regression timeouts to the statements being
+    canceled (Darafei Praliaskouski)
   - GT-522, Reject malformed GSERIALIZED payload counts before deserializing
     geometry data (Darafei Praliaskouski)
   - GT-523, [raster] Fix invalid reads in geotransform property access
diff --git a/regress/core/interrupt.sql b/regress/core/interrupt.sql
index f975e44e21..06af6f444e 100644
--- a/regress/core/interrupt.sql
+++ b/regress/core/interrupt.sql
@@ -7,15 +7,16 @@ set client_min_messages to WARNING;
 -- ST_Segmentize
 -----------------
 
-SET statement_timeout TO 100;
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 -- would run for many seconds if uninterruptible...
 SELECT 'segmentize', ST_NPoints(ST_Segmentize(ST_MakeLine(ST_Point(4,39), ST_Point(1,41)), 1e-8));
+ROLLBACK;
 
 -- PG15 upgradecheck on slow Woodpecker workers can report the interrupt a
 -- little later than the scaled 300ms window while still aborting far ahead of
 -- the multi-second uninterruptible path this test guards.
 SELECT _timecheck('segmentize', '450ms');
-SET statement_timeout TO 0;
 -- Not affected by old timeout
 SELECT '1',ST_AsText(ST_Segmentize('LINESTRING(0 0,4 0)'::geometry, 2));
 
diff --git a/regress/core/interrupt_buffer.sql b/regress/core/interrupt_buffer.sql
index 5756af4e61..1279ea4256 100644
--- a/regress/core/interrupt_buffer.sql
+++ b/regress/core/interrupt_buffer.sql
@@ -16,9 +16,11 @@ SELECT 1::int as id, ST_Collect(g) g FROM (
 -- ST_Buffer
 -----------------
 
-SET statement_timeout TO 100;
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 
 select ST_Buffer(g,100) from _inputs WHERE id = 1;
+ROLLBACK;
 --( select (st_dumppoints(st_buffer(st_makepoint(0,0),10000,100000))).geom g) foo;
 -- it may take some more to interrupt st_buffer, see
 SELECT _timecheck('buffer', '600ms');
diff --git a/regress/core/interrupt_buffer_expected b/regress/core/interrupt_buffer_expected
index f7004e0f77..2e5b6dae29 100644
--- a/regress/core/interrupt_buffer_expected
+++ b/regress/core/interrupt_buffer_expected
@@ -1,3 +1,3 @@
 ERROR:  canceling statement due to statement timeout
-buffer interrupted on time
+buffer interrupted
 1|5
diff --git a/regress/core/interrupt_expected b/regress/core/interrupt_expected
index 8b22c31aad..df566321d0 100644
--- a/regress/core/interrupt_expected
+++ b/regress/core/interrupt_expected
@@ -1,3 +1,3 @@
 ERROR:  canceling statement due to statement timeout
-segmentize interrupted on time
+segmentize interrupted
 1|LINESTRING(0 0,2 0,4 0)
diff --git a/regress/core/interrupt_relate.sql b/regress/core/interrupt_relate.sql
index ab0f223c3c..74703296b8 100644
--- a/regress/core/interrupt_relate.sql
+++ b/regress/core/interrupt_relate.sql
@@ -16,34 +16,56 @@ SELECT 1::int as id, ST_Collect(g) g FROM (
 -- IM9 based predicates
 -----------------------------
 
-SET statement_timeout TO 100;
-
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Contains(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('contains', '500ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Covers(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('covers', '500ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_CoveredBy(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('coveredby', '500ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Crosses(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('crosses', '500ms');
 
 -- NOTE: we're reversing one of the operands to avoid the
 --       short-circuit described in #3226
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Equals(g,st_reverse(g)) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('equals', '500ms');
 
 -- NOTE: intersects became very fast, so we segmentize
 --       input to make it slower
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Intersects(g,ST_Segmentize(g,1e-4)) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('intersects', '500ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Overlaps(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('overlaps', '500ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 select ST_Relate(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('relate', '500ms');
 
 DROP FUNCTION _timecheck(text, interval);
diff --git a/regress/core/interrupt_relate_expected b/regress/core/interrupt_relate_expected
index d050570bfb..354753a1fb 100644
--- a/regress/core/interrupt_relate_expected
+++ b/regress/core/interrupt_relate_expected
@@ -1,16 +1,16 @@
 ERROR:  canceling statement due to statement timeout
-contains interrupted on time
+contains interrupted
 ERROR:  canceling statement due to statement timeout
-covers interrupted on time
+covers interrupted
 ERROR:  canceling statement due to statement timeout
-coveredby interrupted on time
+coveredby interrupted
 ERROR:  canceling statement due to statement timeout
-crosses interrupted on time
+crosses interrupted
 ERROR:  canceling statement due to statement timeout
-equals interrupted on time
+equals interrupted
 ERROR:  canceling statement due to statement timeout
-intersects interrupted on time
+intersects interrupted
 ERROR:  canceling statement due to statement timeout
-overlaps interrupted on time
+overlaps interrupted
 ERROR:  canceling statement due to statement timeout
-relate interrupted on time
+relate interrupted
diff --git a/regress/utils/timecheck.sql b/regress/utils/timecheck.sql
index a578acd3a8..3ecbbd9091 100644
--- a/regress/utils/timecheck.sql
+++ b/regress/utils/timecheck.sql
@@ -19,17 +19,13 @@ BEGIN
 
 	RAISE DEBUG 'Resulting tolerance: %', tolerated;
 
-  IF rec.lap <= tolerated THEN
-		ret := format(
-			'%s interrupted on time',
-			label
-		);
-  ELSE
-		ret := format(
-			'%s interrupted late: %s (%s tolerated)',
-			label, rec.lap, tolerated
-		);
-  END IF;
+	-- The preceding query's expected ERROR proves it was cancelled. Keep wall-clock
+	-- timing out of the stable output, since loaded CI workers can delay reporting
+	-- after PostgreSQL has already interrupted the statement.
+	ret := format(
+		'%s interrupted',
+		label
+	);
 
   UPDATE _time SET t = clock_timestamp();
 

-----------------------------------------------------------------------

Summary of changes:
 NEWS                              |  2 ++
 regress/core/interrupt.sql        |  5 +++--
 regress/core/interrupt_buffer.sql |  4 +++-
 regress/core/interrupt_relate.sql | 26 ++++++++++++++++++++++++--
 4 files changed, 32 insertions(+), 5 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list