mirror of https://github.com/citusdata/citus.git
65 lines
2.7 KiB
SQL
65 lines
2.7 KiB
SQL
CREATE SCHEMA background_rebalance;
|
|
SET search_path TO background_rebalance;
|
|
SET citus.next_shard_id TO 85674000;
|
|
SET citus.shard_replication_factor TO 1;
|
|
|
|
ALTER SYSTEM SET citus.background_task_queue_interval TO '1s';
|
|
SELECT pg_reload_conf();
|
|
|
|
CREATE TABLE t1 (a int PRIMARY KEY);
|
|
SELECT create_distributed_table('t1', 'a', shard_count => 4, colocate_with => 'none');
|
|
|
|
-- verify the rebalance works - no-op - when the shards are balanced. Noop is shown by wait complaining there is nothing
|
|
-- to wait on.
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT citus_rebalance_wait();
|
|
|
|
SELECT citus_move_shard_placement(85674000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode => 'block_writes');
|
|
|
|
-- rebalance a table in the background
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT citus_rebalance_wait();
|
|
|
|
SELECT citus_move_shard_placement(85674000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode => 'block_writes');
|
|
|
|
CREATE TABLE t2 (a int);
|
|
SELECT create_distributed_table('t2', 'a' , colocate_with => 't1');
|
|
|
|
-- show that we get an error when a table in the colocation group can't be moved non-blocking
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT 1 FROM citus_rebalance_start(shard_transfer_mode => 'block_writes');
|
|
SELECT citus_rebalance_wait();
|
|
|
|
DROP TABLE t2;
|
|
|
|
SELECT citus_move_shard_placement(85674000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode => 'block_writes');
|
|
|
|
-- show we can stop a rebalance, the stop causes the move to not have happened, eg, our move back below fails.
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT citus_rebalance_stop();
|
|
-- waiting on this rebalance is racy, as it sometimes sees no rebalance is ongoing while other times it actually sees it ongoing
|
|
-- we simply sleep a bit here
|
|
SELECT pg_sleep(1);
|
|
|
|
-- failing move due to a stopped rebalance, first clean orphans to make the error stable
|
|
SET client_min_messages TO WARNING;
|
|
CALL citus_cleanup_orphaned_shards();
|
|
RESET client_min_messages;
|
|
SELECT citus_move_shard_placement(85674000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode => 'block_writes');
|
|
|
|
|
|
-- show we can't start the rebalancer twice
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT citus_rebalance_wait();
|
|
|
|
-- show that the old rebalancer cannot be started with a background rebalance in progress
|
|
SELECT citus_move_shard_placement(85674000, 'localhost', :worker_1_port, 'localhost', :worker_2_port, shard_transfer_mode => 'block_writes');
|
|
SELECT 1 FROM citus_rebalance_start();
|
|
SELECT rebalance_table_shards();
|
|
SELECT citus_rebalance_wait();
|
|
|
|
|
|
SET client_min_messages TO WARNING;
|
|
DROP SCHEMA background_rebalance CASCADE;
|