You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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>
Copy file name to clipboardExpand all lines: sql/local.sql
+32Lines changed: 32 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -255,3 +255,35 @@ DO $body$ BEGIN
255
255
END LOOP;
256
256
END;$body$ LANGUAGE plpgsql;
257
257
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;
Copy file name to clipboardExpand all lines: sql/remote.sql
+32Lines changed: 32 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -277,3 +277,35 @@ DO $body$ BEGIN
277
277
END LOOP;
278
278
END;$body$ LANGUAGE plpgsql;
279
279
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;
Copy file name to clipboardExpand all lines: sql/spi.sql
+32Lines changed: 32 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -257,5 +257,37 @@ DO $body$ BEGIN
257
257
END LOOP;
258
258
END;$body$ LANGUAGE plpgsql;
259
259
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;
0 commit comments