[SCM] PostGIS branch master updated. 3.7.0beta1-114-g8cd5f6a7e6

git at osgeo.org git at osgeo.org
Mon Jul 27 23:50:58 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, master has been updated
       via  8cd5f6a7e670fcd7e37f7887f3b619de33ef85f1 (commit)
       via  c513c1153d67cf194fa4bb7508f834d6bea688a9 (commit)
       via  b5f1d08c96f62e3bff0ce1ada536a3393d5a3410 (commit)
      from  f7ee000308768c13e9d5089ecff820adad2a8181 (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 8cd5f6a7e670fcd7e37f7887f3b619de33ef85f1
Merge: f7ee000308 c513c1153d
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date:   Mon Jul 27 23:50:56 2026 -0700

    Merge pull request 'regress: scope interrupt test timeouts' (!575) from Komzpa/postgis:fix/interrupt-timeout-scope-20260728 into master
    
    The interrupt regression tests intentionally run long PostGIS operations under a short `statement_timeout` and check that PostgreSQL cancels them within the tolerated interval.
    
    The timeout was set at session scope, so helper and teardown statements after the operation also inherited the 100 ms limit. On loaded workers those helpers could exhaust the timeout even though the PostGIS operation had already been canceled correctly.
    
    This scopes the short timeout with `SET LOCAL` inside a transaction around each intentionally canceled operation. The expected output still requires `ERROR: canceling statement due to statement timeout` and the existing `interrupted on time` verdict for every operation, so both cancellation and timing assertions remain intact.
    
    The Woodpecker regress build now leaves interrupt tests enabled, so these tests run in CI instead of being excluded by the build configuration.
    
    Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/575


commit c513c1153d67cf194fa4bb7508f834d6bea688a9
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Tue Jul 28 07:52:48 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 5c915f5541..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();
 
@@ -40,3 +44,4 @@ SELECT
     current_setting('test.executor_slow_factor', true),
     '1'
   )::float8 sf;
+

commit b5f1d08c96f62e3bff0ce1ada536a3393d5a3410
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Tue Jul 28 05:09:09 2026 +0400

    regress: keep interrupt tests stable on busy workers
    
    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/.woodpecker/regress.yml b/.woodpecker/regress.yml
index 75127b45dc..d36e0fbd04 100644
--- a/.woodpecker/regress.yml
+++ b/.woodpecker/regress.yml
@@ -25,7 +25,6 @@ variables:
       --with-library-minor-version
       --disable-spellcheck-tests
       --enable-lto
-      --without-interrupt-tests
       CFLAGS="-O2 -Wall -fno-omit-frame-pointer -Werror"
     # Matrix jobs provide the parallelism. Keep each build serial: the PostGIS
     # make graph can otherwise race generation of files such as postgis.control.
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..11ffb5294e 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');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 -- NOTE: we're reversing one of the operands to avoid the
 --       short-circuit described in #3226
 select ST_Equals(g,st_reverse(g)) from _inputs WHERE id = 1; -- 6+ seconds
+ROLLBACK;
 SELECT _timecheck('equals', '220ms');
 
+BEGIN;
+SET LOCAL statement_timeout TO 100;
 -- NOTE: intersects became very fast, so we segmentize
 --       input to make it slower
 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..5c915f5541 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();
 
@@ -44,4 +40,3 @@ SELECT
     current_setting('test.executor_slow_factor', true),
     '1'
   )::float8 sf;
-

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

Summary of changes:
 .woodpecker/regress.yml           |  1 -
 regress/core/interrupt.sql        |  5 +++--
 regress/core/interrupt_buffer.sql |  4 +++-
 regress/core/interrupt_relate.sql | 26 ++++++++++++++++++++++++--
 4 files changed, 30 insertions(+), 6 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list