mirror of https://github.com/citusdata/citus.git
Add regression tests for job cancellation behavior in background job processing
parent
3ed1284794
commit
5b6b7b847e
|
@ -0,0 +1 @@
|
|||
Subproject commit 3376bd6845f0614908ed304f5033bd644c82d3bf
|
|
@ -0,0 +1,46 @@
|
|||
CREATE SCHEMA issue_7896;
|
||||
SET search_path TO issue_7896;
|
||||
-- Create a temporary table to simulate the background job catalog.
|
||||
-- (In production this would be the actual catalog table.)
|
||||
CREATE TEMP TABLE pg_dist_background_job
|
||||
(
|
||||
job_id int8 PRIMARY KEY,
|
||||
job_state text,
|
||||
started_at timestamptz,
|
||||
finished_at timestamptz
|
||||
);
|
||||
-- Insert a dummy job record with job_state set to 'running'
|
||||
INSERT INTO pg_dist_background_job (job_id, job_state, started_at)
|
||||
VALUES (1001, 'running', now());
|
||||
-- Set a short statement timeout so that citus_rebalance_wait times out quickly.
|
||||
SET statement_timeout = '1000ms';
|
||||
DO $$
|
||||
BEGIN
|
||||
BEGIN
|
||||
-- Call the wait function.
|
||||
-- Note: The public function citus_rebalance_wait() takes no arguments.
|
||||
PERFORM citus_rebalance_wait();
|
||||
EXCEPTION
|
||||
WHEN query_canceled THEN
|
||||
RAISE NOTICE 'Query canceled as expected';
|
||||
-- Swallow the error so the transaction continues.
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
WARNING: no ongoing rebalance that can be waited on
|
||||
CONTEXT: SQL statement "SELECT citus_rebalance_wait()"
|
||||
PL/pgSQL function inline_code_block line XX at PERFORM
|
||||
-- Reset the statement timeout for subsequent queries.
|
||||
SET statement_timeout = '0';
|
||||
-- Verify that the job's state has been updated to 'cancelled'
|
||||
-- (the expected outcome after a cancellation).
|
||||
SELECT job_state
|
||||
FROM pg_dist_background_job
|
||||
WHERE job_id = 1001;
|
||||
job_state
|
||||
---------------------------------------------------------------------
|
||||
running
|
||||
(1 row)
|
||||
|
||||
SET client_min_messages TO WARNING;
|
||||
DROP SCHEMA issue_7896 CASCADE;
|
|
@ -0,0 +1,45 @@
|
|||
CREATE SCHEMA issue_7896;
|
||||
SET search_path TO issue_7896;
|
||||
|
||||
-- Create a temporary table to simulate the background job catalog.
|
||||
-- (In production this would be the actual catalog table.)
|
||||
CREATE TEMP TABLE pg_dist_background_job
|
||||
(
|
||||
job_id int8 PRIMARY KEY,
|
||||
job_state text,
|
||||
started_at timestamptz,
|
||||
finished_at timestamptz
|
||||
);
|
||||
|
||||
-- Insert a dummy job record with job_state set to 'running'
|
||||
INSERT INTO pg_dist_background_job (job_id, job_state, started_at)
|
||||
VALUES (1001, 'running', now());
|
||||
|
||||
-- Set a short statement timeout so that citus_rebalance_wait times out quickly.
|
||||
SET statement_timeout = '1000ms';
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
BEGIN
|
||||
-- Call the wait function.
|
||||
-- Note: The public function citus_rebalance_wait() takes no arguments.
|
||||
PERFORM citus_rebalance_wait();
|
||||
EXCEPTION
|
||||
WHEN query_canceled THEN
|
||||
RAISE NOTICE 'Query canceled as expected';
|
||||
-- Swallow the error so the transaction continues.
|
||||
END;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Reset the statement timeout for subsequent queries.
|
||||
SET statement_timeout = '0';
|
||||
|
||||
-- Verify that the job's state has been updated to 'cancelled'
|
||||
-- (the expected outcome after a cancellation).
|
||||
SELECT job_state
|
||||
FROM pg_dist_background_job
|
||||
WHERE job_id = 1001;
|
||||
|
||||
SET client_min_messages TO WARNING;
|
||||
DROP SCHEMA issue_7896 CASCADE;
|
Loading…
Reference in New Issue