Skip to content

Commit 5e76afe

Browse files
RekGRpthclaude
andcommitted
test: cover pg_task.limit/run concurrency caps in all three suites
work_sleep()'s claiming query LIMIT clause is LEAST(run - currently held, "limit") - both were left at their generous defaults (limit 1000, run INT_MAX) by every existing test, so neither had ever actually constrained anything. Add a case per file that lowers each GUC to 1 via ALTER SYSTEM (work_sleep reads them live through current_setting(), so a session-level SET wouldn't reach the dispatcher) and asserts that with three long-running tasks inserted at once, at least one gets dispatched and at least one stays behind in PLAN - proving the cap actually throttles intake. Same claiming logic runs once in work_sleep() regardless of local/ spi/remote, so this duplicates identical SQL across all three files rather than exercising different code paths per file, unlike the earlier per-mode cases. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 3ab470c commit 5e76afe

6 files changed

Lines changed: 114 additions & 0 deletions

File tree

expected/local.out

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,9 @@ t
4646
t
4747
t|t
4848
t
49+
t
50+
t|t
51+
t
52+
t
53+
t|t
54+
t

expected/remote.out

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,9 @@ t
4949
t|t
5050
t
5151
t
52+
t
53+
t|t
54+
t
55+
t
56+
t|t
57+
t

expected/spi.out

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,9 @@ t
4545
t|t
4646
t
4747
t
48+
t|t
49+
t
50+
t
51+
t|t
52+
t
53+
t

sql/local.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,35 @@ DO $body$ BEGIN
255255
END LOOP;
256256
END;$body$ LANGUAGE plpgsql;
257257
SELECT output = '"1","text",<NULL>' AS format_ok FROM task WHERE "group" = '29' AND plan > :ct::timestamp;
258+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
259+
ALTER SYSTEM SET pg_task."limit" = 1;
260+
SELECT pg_reload_conf();
261+
INSERT INTO task ("group", input) VALUES ('30', 'SELECT pg_sleep(5) AS a');
262+
INSERT INTO task ("group", input) VALUES ('31', 'SELECT pg_sleep(5) AS a');
263+
INSERT INTO task ("group", input) VALUES ('32', 'SELECT pg_sleep(5) AS a');
264+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
265+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
266+
ALTER SYSTEM RESET pg_task."limit";
267+
SELECT pg_reload_conf();
268+
DO $body$ BEGIN
269+
FOR i IN 1..30 LOOP
270+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
271+
PERFORM pg_sleep(1);
272+
END LOOP;
273+
END;$body$ LANGUAGE plpgsql;
274+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
275+
ALTER SYSTEM SET pg_task.run = 1;
276+
SELECT pg_reload_conf();
277+
INSERT INTO task ("group", input) VALUES ('30', 'SELECT pg_sleep(5) AS a');
278+
INSERT INTO task ("group", input) VALUES ('31', 'SELECT pg_sleep(5) AS a');
279+
INSERT INTO task ("group", input) VALUES ('32', 'SELECT pg_sleep(5) AS a');
280+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
281+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
282+
ALTER SYSTEM RESET pg_task.run;
283+
SELECT pg_reload_conf();
284+
DO $body$ BEGIN
285+
FOR i IN 1..30 LOOP
286+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
287+
PERFORM pg_sleep(1);
288+
END LOOP;
289+
END;$body$ LANGUAGE plpgsql;

sql/remote.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,3 +277,35 @@ DO $body$ BEGIN
277277
END LOOP;
278278
END;$body$ LANGUAGE plpgsql;
279279
SELECT output = '"1","text",<NULL>' AS format_ok FROM task WHERE "group" = '29' AND plan > :ct::timestamp;
280+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
281+
ALTER SYSTEM SET pg_task."limit" = 1;
282+
SELECT pg_reload_conf();
283+
INSERT INTO task ("group", input, remote) VALUES ('30', 'SELECT pg_sleep(5) AS a', 'application_name=test');
284+
INSERT INTO task ("group", input, remote) VALUES ('31', 'SELECT pg_sleep(5) AS a', 'application_name=test');
285+
INSERT INTO task ("group", input, remote) VALUES ('32', 'SELECT pg_sleep(5) AS a', 'application_name=test');
286+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
287+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
288+
ALTER SYSTEM RESET pg_task."limit";
289+
SELECT pg_reload_conf();
290+
DO $body$ BEGIN
291+
FOR i IN 1..30 LOOP
292+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
293+
PERFORM pg_sleep(1);
294+
END LOOP;
295+
END;$body$ LANGUAGE plpgsql;
296+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
297+
ALTER SYSTEM SET pg_task.run = 1;
298+
SELECT pg_reload_conf();
299+
INSERT INTO task ("group", input, remote) VALUES ('30', 'SELECT pg_sleep(5) AS a', 'application_name=test');
300+
INSERT INTO task ("group", input, remote) VALUES ('31', 'SELECT pg_sleep(5) AS a', 'application_name=test');
301+
INSERT INTO task ("group", input, remote) VALUES ('32', 'SELECT pg_sleep(5) AS a', 'application_name=test');
302+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
303+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
304+
ALTER SYSTEM RESET pg_task.run;
305+
SELECT pg_reload_conf();
306+
DO $body$ BEGIN
307+
FOR i IN 1..30 LOOP
308+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
309+
PERFORM pg_sleep(1);
310+
END LOOP;
311+
END;$body$ LANGUAGE plpgsql;

sql/spi.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,5 +257,37 @@ DO $body$ BEGIN
257257
END LOOP;
258258
END;$body$ LANGUAGE plpgsql;
259259
SELECT output = '"1","text",<NULL>' AS format_ok FROM task WHERE "group" = '29' AND plan > :ct::timestamp;
260+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
261+
ALTER SYSTEM SET pg_task."limit" = 1;
262+
SELECT pg_reload_conf();
263+
INSERT INTO task ("group", input) VALUES ('30', 'SELECT pg_sleep(5) AS a');
264+
INSERT INTO task ("group", input) VALUES ('31', 'SELECT pg_sleep(5) AS a');
265+
INSERT INTO task ("group", input) VALUES ('32', 'SELECT pg_sleep(5) AS a');
266+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
267+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
268+
ALTER SYSTEM RESET pg_task."limit";
269+
SELECT pg_reload_conf();
270+
DO $body$ BEGIN
271+
FOR i IN 1..30 LOOP
272+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
273+
PERFORM pg_sleep(1);
274+
END LOOP;
275+
END;$body$ LANGUAGE plpgsql;
276+
DELETE FROM task WHERE "group" IN ('30', '31', '32');
277+
ALTER SYSTEM SET pg_task.run = 1;
278+
SELECT pg_reload_conf();
279+
INSERT INTO task ("group", input) VALUES ('30', 'SELECT pg_sleep(5) AS a');
280+
INSERT INTO task ("group", input) VALUES ('31', 'SELECT pg_sleep(5) AS a');
281+
INSERT INTO task ("group", input) VALUES ('32', 'SELECT pg_sleep(5) AS a');
282+
DO $$ BEGIN PERFORM pg_sleep(2); END $$;
283+
SELECT count(*) FILTER (WHERE state != 'PLAN') >= 1 AS some_dispatched, count(*) FILTER (WHERE state = 'PLAN') >= 1 AS some_capped FROM task WHERE "group" IN ('30', '31', '32') AND plan > :ct::timestamp;
284+
ALTER SYSTEM RESET pg_task.run;
285+
SELECT pg_reload_conf();
286+
DO $body$ BEGIN
287+
FOR i IN 1..30 LOOP
288+
IF (SELECT count(*) FROM task WHERE "group" IN ('30', '31', '32') AND state NOT IN ('DONE', 'GONE', 'FAIL')) = 0 THEN EXIT; END IF;
289+
PERFORM pg_sleep(1);
290+
END LOOP;
291+
END;$body$ LANGUAGE plpgsql;
260292
ALTER SYSTEM RESET pg_task.spi;
261293
SELECT pg_reload_conf();

0 commit comments

Comments
 (0)