[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