[SCM] PostGIS branch stable-3.5 updated. 3.5.7-93-gfc7e257021
git at osgeo.org
git at osgeo.org
Mon Jul 27 23:53:06 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.5 has been updated
via fc7e2570210368a0bed13c83bb24bb77b580c566 (commit)
via 9b2d80466103af73031ccd5492fb52897136a011 (commit)
via 9bf03624350d1388a23212d650d9f454928e74c2 (commit)
from 651a6f80c368051fc44ced0121ca69371c9f2876 (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 fc7e2570210368a0bed13c83bb24bb77b580c566
Merge: 651a6f80c3 9b2d804661
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date: Mon Jul 27 23:53:05 2026 -0700
Merge pull request 'regress: scope interrupt test timeouts for stable-3.5' (!577) from Komzpa/postgis:fix/interrupt-timeout-scope-3.5-20260728 into stable-3.5
Backport of https://gitea.osgeo.org/postgis/postgis/pulls/575 to stable-3.5.
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/577
commit 9b2d80466103af73031ccd5492fb52897136a011
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 08f2af7df8..75f3bbbbd0 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 9bf03624350d1388a23212d650d9f454928e74c2
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 bf75f75b1b..744a3e5311 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PostGIS 3.5.8
* 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 616e74fd76..78f30166e4 100644
--- a/regress/core/interrupt.sql
+++ b/regress/core/interrupt.sql
@@ -7,12 +7,13 @@ 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;
SELECT _timecheck('segmentize', '300ms');
-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 949fc7e285..fd942e1e6d 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', '350ms');
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 d80dacf1cf..9df2262d71 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', '220ms');
+BEGIN;
+SET LOCAL statement_timeout TO 100;
select ST_Covers(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
SELECT _timecheck('covers', '220ms');
+BEGIN;
+SET LOCAL statement_timeout TO 100;
select ST_CoveredBy(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
SELECT _timecheck('coveredby', '250ms');
+BEGIN;
+SET LOCAL statement_timeout TO 100;
select ST_Crosses(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
SELECT _timecheck('crosses', '220ms');
-- 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', '220ms');
-- 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', '210ms');
+BEGIN;
+SET LOCAL statement_timeout TO 100;
select ST_Overlaps(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
SELECT _timecheck('overlaps', '220ms');
+BEGIN;
+SET LOCAL statement_timeout TO 100;
select ST_Relate(g,g) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
SELECT _timecheck('relate', '220ms');
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 75f3bbbbd0..08f2af7df8 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