mirror of https://github.com/citusdata/citus.git
Add some tests checking that maintenance daemon gets started.
The 2nd database one is a bit slow, but also shows something important, so we might want to keep it?pull/1461/head
parent
c3b7c5dc33
commit
4a3b2de4c5
|
@ -7,6 +7,36 @@
|
||||||
-- not done yet.
|
-- not done yet.
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 580000;
|
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 580000;
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 580000;
|
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 580000;
|
||||||
|
CREATE SCHEMA test;
|
||||||
|
CREATE OR REPLACE FUNCTION test.maintenance_worker(p_dbname text DEFAULT current_database())
|
||||||
|
RETURNS pg_stat_activity
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
activity record;
|
||||||
|
BEGIN
|
||||||
|
LOOP
|
||||||
|
SELECT * INTO activity FROM pg_stat_activity
|
||||||
|
WHERE application_name = 'Citus Maintenance Daemon' AND datname = p_dbname;
|
||||||
|
IF activity.pid IS NOT NULL THEN
|
||||||
|
RETURN activity;
|
||||||
|
ELSE
|
||||||
|
PERFORM pg_sleep(0.1);
|
||||||
|
PERFORM pg_stat_clear_snapshot();
|
||||||
|
END IF ;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
-- check maintenance daemon is started
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
datname | ?column? | ?column?
|
||||||
|
------------+----------+----------
|
||||||
|
regression | t | t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- ensure no objects were created outside pg_catalog
|
-- ensure no objects were created outside pg_catalog
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM pg_depend AS pgd,
|
FROM pg_depend AS pgd,
|
||||||
|
@ -15,7 +45,7 @@ FROM pg_depend AS pgd,
|
||||||
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
||||||
pgd.refobjid = pge.oid AND
|
pgd.refobjid = pge.oid AND
|
||||||
pge.extname = 'citus' AND
|
pge.extname = 'citus' AND
|
||||||
pgio.schema NOT IN ('pg_catalog', 'citus');
|
pgio.schema NOT IN ('pg_catalog', 'citus', 'test');
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
0
|
0
|
||||||
|
@ -96,7 +126,7 @@ FROM pg_depend AS pgd,
|
||||||
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
||||||
pgd.refobjid = pge.oid AND
|
pgd.refobjid = pge.oid AND
|
||||||
pge.extname = 'citus' AND
|
pge.extname = 'citus' AND
|
||||||
pgio.schema NOT IN ('pg_catalog', 'citus');
|
pgio.schema NOT IN ('pg_catalog', 'citus', 'test');
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
0
|
0
|
||||||
|
@ -189,3 +219,70 @@ ALTER EXTENSION citus UPDATE;
|
||||||
--------+------+------+-------
|
--------+------+------+-------
|
||||||
(0 rows)
|
(0 rows)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
-- check that maintenance daemon gets (re-)started for the right user
|
||||||
|
DROP EXTENSION citus;
|
||||||
|
CREATE USER testuser SUPERUSER;
|
||||||
|
SET ROLE testuser;
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
datname | ?column? | ?column?
|
||||||
|
------------+----------+----------
|
||||||
|
regression | t | t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- and recreate as the right owner
|
||||||
|
RESET ROLE;
|
||||||
|
DROP EXTENSION citus;
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
-- Check that maintenance daemon can also be started in another database
|
||||||
|
CREATE DATABASE another;
|
||||||
|
NOTICE: Citus partially supports CREATE DATABASE for distributed databases
|
||||||
|
DETAIL: Citus does not propagate CREATE DATABASE command to workers
|
||||||
|
HINT: You can manually create a database and its extensions on workers.
|
||||||
|
\c another
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
CREATE SCHEMA test;
|
||||||
|
CREATE OR REPLACE FUNCTION test.maintenance_worker(p_dbname text DEFAULT current_database())
|
||||||
|
RETURNS pg_stat_activity
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
activity record;
|
||||||
|
BEGIN
|
||||||
|
LOOP
|
||||||
|
SELECT * INTO activity FROM pg_stat_activity
|
||||||
|
WHERE application_name = 'Citus Maintenance Daemon' AND datname = p_dbname;
|
||||||
|
IF activity.pid IS NOT NULL THEN
|
||||||
|
RETURN activity;
|
||||||
|
ELSE
|
||||||
|
PERFORM pg_sleep(0.1);
|
||||||
|
PERFORM pg_stat_clear_snapshot();
|
||||||
|
END IF ;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
datname | ?column? | ?column?
|
||||||
|
---------+----------+----------
|
||||||
|
another | t | t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Test that database with active worker can be dropped. That'll
|
||||||
|
-- require killing the maintenance worker.
|
||||||
|
\c regression
|
||||||
|
SELECT datname,
|
||||||
|
pg_terminate_backend(pid)
|
||||||
|
FROM test.maintenance_worker('another');
|
||||||
|
datname | pg_terminate_backend
|
||||||
|
---------+----------------------
|
||||||
|
another | t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
DROP DATABASE another;
|
||||||
|
|
|
@ -10,6 +10,34 @@
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 580000;
|
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 580000;
|
||||||
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 580000;
|
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 580000;
|
||||||
|
|
||||||
|
CREATE SCHEMA test;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test.maintenance_worker(p_dbname text DEFAULT current_database())
|
||||||
|
RETURNS pg_stat_activity
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
activity record;
|
||||||
|
BEGIN
|
||||||
|
LOOP
|
||||||
|
SELECT * INTO activity FROM pg_stat_activity
|
||||||
|
WHERE application_name = 'Citus Maintenance Daemon' AND datname = p_dbname;
|
||||||
|
IF activity.pid IS NOT NULL THEN
|
||||||
|
RETURN activity;
|
||||||
|
ELSE
|
||||||
|
PERFORM pg_sleep(0.1);
|
||||||
|
PERFORM pg_stat_clear_snapshot();
|
||||||
|
END IF ;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- check maintenance daemon is started
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
|
||||||
-- ensure no objects were created outside pg_catalog
|
-- ensure no objects were created outside pg_catalog
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM pg_depend AS pgd,
|
FROM pg_depend AS pgd,
|
||||||
|
@ -18,7 +46,8 @@ FROM pg_depend AS pgd,
|
||||||
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
||||||
pgd.refobjid = pge.oid AND
|
pgd.refobjid = pge.oid AND
|
||||||
pge.extname = 'citus' AND
|
pge.extname = 'citus' AND
|
||||||
pgio.schema NOT IN ('pg_catalog', 'citus');
|
pgio.schema NOT IN ('pg_catalog', 'citus', 'test');
|
||||||
|
|
||||||
|
|
||||||
-- DROP EXTENSION pre-created by the regression suite
|
-- DROP EXTENSION pre-created by the regression suite
|
||||||
DROP EXTENSION citus;
|
DROP EXTENSION citus;
|
||||||
|
@ -94,7 +123,7 @@ FROM pg_depend AS pgd,
|
||||||
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
WHERE pgd.refclassid = 'pg_extension'::regclass AND
|
||||||
pgd.refobjid = pge.oid AND
|
pgd.refobjid = pge.oid AND
|
||||||
pge.extname = 'citus' AND
|
pge.extname = 'citus' AND
|
||||||
pgio.schema NOT IN ('pg_catalog', 'citus');
|
pgio.schema NOT IN ('pg_catalog', 'citus', 'test');
|
||||||
|
|
||||||
-- see incompatible version errors out
|
-- see incompatible version errors out
|
||||||
RESET citus.enable_version_checks;
|
RESET citus.enable_version_checks;
|
||||||
|
@ -173,3 +202,62 @@ ALTER EXTENSION citus UPDATE;
|
||||||
|
|
||||||
-- if cache is invalidated succesfull, this \d should work without any problem
|
-- if cache is invalidated succesfull, this \d should work without any problem
|
||||||
\d
|
\d
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
|
||||||
|
-- check that maintenance daemon gets (re-)started for the right user
|
||||||
|
DROP EXTENSION citus;
|
||||||
|
CREATE USER testuser SUPERUSER;
|
||||||
|
SET ROLE testuser;
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
|
||||||
|
-- and recreate as the right owner
|
||||||
|
RESET ROLE;
|
||||||
|
DROP EXTENSION citus;
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
|
||||||
|
|
||||||
|
-- Check that maintenance daemon can also be started in another database
|
||||||
|
CREATE DATABASE another;
|
||||||
|
\c another
|
||||||
|
CREATE EXTENSION citus;
|
||||||
|
|
||||||
|
CREATE SCHEMA test;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test.maintenance_worker(p_dbname text DEFAULT current_database())
|
||||||
|
RETURNS pg_stat_activity
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
activity record;
|
||||||
|
BEGIN
|
||||||
|
LOOP
|
||||||
|
SELECT * INTO activity FROM pg_stat_activity
|
||||||
|
WHERE application_name = 'Citus Maintenance Daemon' AND datname = p_dbname;
|
||||||
|
IF activity.pid IS NOT NULL THEN
|
||||||
|
RETURN activity;
|
||||||
|
ELSE
|
||||||
|
PERFORM pg_sleep(0.1);
|
||||||
|
PERFORM pg_stat_clear_snapshot();
|
||||||
|
END IF ;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
SELECT datname,
|
||||||
|
datname = current_database(),
|
||||||
|
usename = (SELECT extowner::regrole::text FROM pg_extension WHERE extname = 'citus')
|
||||||
|
FROM test.maintenance_worker();
|
||||||
|
|
||||||
|
-- Test that database with active worker can be dropped. That'll
|
||||||
|
-- require killing the maintenance worker.
|
||||||
|
\c regression
|
||||||
|
SELECT datname,
|
||||||
|
pg_terminate_backend(pid)
|
||||||
|
FROM test.maintenance_worker('another');
|
||||||
|
DROP DATABASE another;
|
||||||
|
|
Loading…
Reference in New Issue