[SCM] PostGIS branch stable-3.5 updated. 3.5.7-104-g36c1a703f5

git at osgeo.org git at osgeo.org
Sun Aug 9 09:56:31 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  36c1a703f5846d898c08fd32473858613c64fbb9 (commit)
       via  530d094fb22f55b3e71eab1fc212de62f45afda3 (commit)
       via  207ae9af8a2caf12885c4c1cd629ba1df9964d6a (commit)
      from  a3192f3232f67d539bfcfc373c5b31d8c2175475 (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 36c1a703f5846d898c08fd32473858613c64fbb9
Merge: a3192f3232 530d094fb2
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date:   Sun Aug 9 09:56:30 2026 -0700

    Merge pull request 'regress: backport interrupt timing baseline to stable-3.5' (!621) from Komzpa/postgis:fix/interrupt-relative-timing-stable-3.5-20260729 into stable-3.5
    
    Backport of the interrupt regression timing fix from GT-619 to stable-3.5.\n\nThe relate interrupt checks now compare timeout latency to same-machine uninterrupted runtime, so loaded workers do not fail only because their absolute wall-clock reporting is slow. The assertion remains meaningful because a build that stops propagating PostgreSQL cancellation into GEOS reaches the local baseline and reports interrupted late.\n\nReferences https://gitea.osgeo.org/postgis/postgis/pulls/619
    
    Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/621


commit 530d094fb22f55b3e71eab1fc212de62f45afda3
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Wed Jul 29 19:19:26 2026 +0400

    regress: keep interrupt relate input bounded

diff --git a/regress/core/interrupt_relate.sql b/regress/core/interrupt_relate.sql
index fb29babd73..0e0e85ff63 100644
--- a/regress/core/interrupt_relate.sql
+++ b/regress/core/interrupt_relate.sql
@@ -6,7 +6,7 @@ SELECT 1::int as id, ST_Collect(g) g FROM (
    ST_Point(cos(radians(x)),sin(radians(270-x))),
    ST_Point(sin(radians(x)),cos(radians(60-x)))
    ) g
- FROM generate_series(1,1440) x
+ FROM generate_series(1,720) x
  ) foo
 ;
 

commit 207ae9af8a2caf12885c4c1cd629ba1df9964d6a
Author: Darafei Praliaskouski <me at komzpa.net>
Date:   Wed Jul 29 02:32:22 2026 +0400

    regress: compare interrupt timing to local baseline

diff --git a/NEWS b/NEWS
index 4319b581d9..d93cf87035 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,9 @@ PostGIS 3.5.8
 
 * Bug Fixes *
 
+  - GT-619, Make interrupt regression tests compare timeout latency to
+    same-machine uninterrupted runtime, avoiding false failures under
+    slow CI load (Darafei Praliaskouski)
   - GT-569, Initialize GSERIALIZED peek test fixtures so check-unit stays
     clean under Valgrind (Darafei Praliaskouski)
   - GT-582, Make the computed-columns regression test assert the query plan
diff --git a/regress/core/interrupt.sql b/regress/core/interrupt.sql
index 78f30166e4..c9fc993b6a 100644
--- a/regress/core/interrupt.sql
+++ b/regress/core/interrupt.sql
@@ -17,4 +17,7 @@ SELECT _timecheck('segmentize', '300ms');
 -- Not affected by old timeout
 SELECT '1',ST_AsText(ST_Segmentize('LINESTRING(0 0,4 0)'::geometry, 2));
 
+DROP FUNCTION _timecheck(text);
 DROP FUNCTION _timecheck(text, interval);
+DROP FUNCTION _timecheck_baseline(text);
+DROP FUNCTION _timecheck_start();
diff --git a/regress/core/interrupt_buffer.sql b/regress/core/interrupt_buffer.sql
index fd942e1e6d..204ecae936 100644
--- a/regress/core/interrupt_buffer.sql
+++ b/regress/core/interrupt_buffer.sql
@@ -29,3 +29,6 @@ SELECT _timecheck('buffer', '350ms');
 SELECT '1', ST_NPoints(ST_Buffer('POINT(4 0)'::geometry, 2, 1));
 
 DROP FUNCTION _timecheck(text, interval);
+DROP FUNCTION _timecheck(text);
+DROP FUNCTION _timecheck_baseline(text);
+DROP FUNCTION _timecheck_start();
diff --git a/regress/core/interrupt_relate.sql b/regress/core/interrupt_relate.sql
index 9df2262d71..fb29babd73 100644
--- a/regress/core/interrupt_relate.sql
+++ b/regress/core/interrupt_relate.sql
@@ -6,7 +6,7 @@ SELECT 1::int as id, ST_Collect(g) g FROM (
    ST_Point(cos(radians(x)),sin(radians(270-x))),
    ST_Point(sin(radians(x)),cos(radians(60-x)))
    ) g
- FROM generate_series(1,720) x
+ FROM generate_series(1,1440) x
  ) foo
 ;
 
@@ -16,29 +16,69 @@ SELECT 1::int as id, ST_Collect(g) g FROM (
 -- IM9 based predicates
 -----------------------------
 
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Contains(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('contains');
+END;
+$$;
+
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_Contains(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('contains', '220ms');
+SELECT _timecheck('contains');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Covers(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('covers');
+END;
+$$;
 
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_Covers(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('covers', '220ms');
+SELECT _timecheck('covers');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_CoveredBy(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('coveredby');
+END;
+$$;
 
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_CoveredBy(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('coveredby', '250ms');
+SELECT _timecheck('coveredby');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Crosses(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('crosses');
+END;
+$$;
 
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_Crosses(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('crosses', '220ms');
+SELECT _timecheck('crosses');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Equals(g,st_reverse(g)) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('equals');
+END;
+$$;
 
 -- NOTE: we're reversing one of the operands to avoid the
 --       short-circuit described in #3226
@@ -46,7 +86,15 @@ 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');
+SELECT _timecheck('equals');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Intersects(g,ST_Segmentize(g,1e-4)) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('intersects');
+END;
+$$;
 
 -- NOTE: intersects became very fast, so we segmentize
 --       input to make it slower
@@ -54,19 +102,38 @@ 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');
+SELECT _timecheck('intersects');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Overlaps(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('overlaps');
+END;
+$$;
 
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_Overlaps(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('overlaps', '220ms');
+SELECT _timecheck('overlaps');
+
+DO $$
+BEGIN
+  PERFORM _timecheck_start();
+  PERFORM ST_Relate(g,g) FROM _inputs WHERE id = 1;
+  PERFORM _timecheck_baseline('relate');
+END;
+$$;
 
 BEGIN;
 SET LOCAL statement_timeout TO 100;
 select ST_Relate(g,g) from _inputs WHERE id = 1; -- 6+ seconds
 ROLLBACK;
-SELECT _timecheck('relate', '220ms');
+SELECT _timecheck('relate');
 
+DROP FUNCTION _timecheck(text);
 DROP FUNCTION _timecheck(text, interval);
+DROP FUNCTION _timecheck_baseline(text);
+DROP FUNCTION _timecheck_start();
 DROP TABLE _inputs;
diff --git a/regress/utils/timecheck.sql b/regress/utils/timecheck.sql
index 75f3bbbbd0..c28fe265e3 100644
--- a/regress/utils/timecheck.sql
+++ b/regress/utils/timecheck.sql
@@ -1,3 +1,21 @@
+CREATE FUNCTION _timecheck_start() RETURNS void
+AS $$
+BEGIN
+  UPDATE _time SET t = clock_timestamp();
+END;
+$$ LANGUAGE 'plpgsql' VOLATILE;
+
+CREATE FUNCTION _timecheck_baseline(label text) RETURNS void
+AS $$
+BEGIN
+  INSERT INTO _time_baseline
+  SELECT label, clock_timestamp() - t
+  FROM _time;
+
+  UPDATE _time SET t = clock_timestamp();
+END;
+$$ LANGUAGE 'plpgsql' VOLATILE;
+
 CREATE FUNCTION _timecheck(label text, tolerated interval) RETURNS text
 AS $$
 DECLARE
@@ -37,6 +55,43 @@ BEGIN
 END;
 $$ LANGUAGE 'plpgsql' VOLATILE;
 
+CREATE FUNCTION _timecheck(label text) RETURNS text
+AS $$
+DECLARE
+  ret TEXT;
+  lap INTERVAL;
+	rec RECORD;
+BEGIN
+	-- We use now() here to get the time at the
+	-- start of the transaction, which started when
+	-- this function was called, so the earliest
+	-- possible time
+  SELECT now() - t lap, b.baseline, b.baseline * 0.9 tolerated
+	FROM _time t
+	JOIN _time_baseline b ON b.label = _timecheck.label
+	INTO rec;
+
+	RAISE DEBUG 'Uninterrupted baseline: %', rec.baseline;
+	RAISE DEBUG 'Resulting tolerance: %', rec.tolerated;
+
+  IF rec.lap < rec.tolerated THEN
+		ret := format(
+			'%s interrupted on time',
+			label
+		);
+  ELSE
+		ret := format(
+			'%s interrupted late: %s (%s tolerated)',
+			label, rec.lap, rec.tolerated
+		);
+  END IF;
+
+  UPDATE _time SET t = clock_timestamp();
+
+  RETURN ret;
+END;
+$$ LANGUAGE 'plpgsql' VOLATILE;
+
 CREATE TEMPORARY TABLE _time AS
 SELECT
 	now() t,
@@ -45,3 +100,7 @@ SELECT
     '1'
   )::float8 sf;
 
+CREATE TEMPORARY TABLE _time_baseline (
+  label text PRIMARY KEY,
+  baseline interval NOT NULL
+);

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

Summary of changes:
 NEWS | 3 +++
 1 file changed, 3 insertions(+)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list