mirror of https://github.com/citusdata/citus.git
Add back test for INSERT where all placements fail
Since we now short-circuit on certain remote errors, we want to ensure we preserve the old behavior of not modifying any placement states if a non-short-circuiting error occurs on all placements.pull/552/head
parent
48f4e5d1a5
commit
a19520b9bd
|
@ -274,8 +274,8 @@ CONTEXT: while executing command on localhost:57638
|
||||||
-- Test that shards which miss a modification are marked unhealthy
|
-- Test that shards which miss a modification are marked unhealthy
|
||||||
-- First: Connect to the second worker node
|
-- First: Connect to the second worker node
|
||||||
\c - - - :worker_2_port
|
\c - - - :worker_2_port
|
||||||
-- Second: Drop limit_orders shard on the second worker node
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
DROP TABLE limit_orders_750000;
|
ALTER TABLE limit_orders_750000 RENAME TO renamed_orders;
|
||||||
-- Third: Connect back to master node
|
-- Third: Connect back to master node
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
-- Fourth: Perform an INSERT on the remaining node
|
-- Fourth: Perform an INSERT on the remaining node
|
||||||
|
@ -302,6 +302,39 @@ AND s.logicalrelid = 'limit_orders'::regclass;
|
||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- Test that if all shards miss a modification, no state change occurs
|
||||||
|
-- First: Connect to the first worker node
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
|
ALTER TABLE limit_orders_750000 RENAME TO renamed_orders;
|
||||||
|
-- Third: Connect back to master node
|
||||||
|
\c - - - :master_port
|
||||||
|
-- Fourth: Perform an INSERT on the remaining node
|
||||||
|
INSERT INTO limit_orders VALUES (276, 'ADR', 140, '2007-07-02 16:32:15', 'sell', 43.67);
|
||||||
|
WARNING: relation "limit_orders_750000" does not exist
|
||||||
|
CONTEXT: while executing command on localhost:57637
|
||||||
|
ERROR: could not modify any active placements
|
||||||
|
-- Last: Verify worker is still healthy
|
||||||
|
SELECT count(*)
|
||||||
|
FROM pg_dist_shard_placement AS sp,
|
||||||
|
pg_dist_shard AS s
|
||||||
|
WHERE sp.shardid = s.shardid
|
||||||
|
AND sp.nodename = 'localhost'
|
||||||
|
AND sp.nodeport = :worker_1_port
|
||||||
|
AND sp.shardstate = 1
|
||||||
|
AND s.logicalrelid = 'limit_orders'::regclass;
|
||||||
|
count
|
||||||
|
-------
|
||||||
|
2
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Undo our change...
|
||||||
|
-- First: Connect to the first worker node
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
|
ALTER TABLE renamed_orders RENAME TO limit_orders_750000;
|
||||||
|
-- Third: Connect back to master node
|
||||||
|
\c - - - :master_port
|
||||||
-- commands with no constraints on the partition key are not supported
|
-- commands with no constraints on the partition key are not supported
|
||||||
UPDATE limit_orders SET limit_price = 0.00;
|
UPDATE limit_orders SET limit_price = 0.00;
|
||||||
ERROR: distributed modifications must target exactly one shard
|
ERROR: distributed modifications must target exactly one shard
|
||||||
|
|
|
@ -199,8 +199,8 @@ INSERT INTO limit_orders VALUES (275, 'ADR', 140, '2007-07-02 16:32:15', 'sell',
|
||||||
-- First: Connect to the second worker node
|
-- First: Connect to the second worker node
|
||||||
\c - - - :worker_2_port
|
\c - - - :worker_2_port
|
||||||
|
|
||||||
-- Second: Drop limit_orders shard on the second worker node
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
DROP TABLE limit_orders_750000;
|
ALTER TABLE limit_orders_750000 RENAME TO renamed_orders;
|
||||||
|
|
||||||
-- Third: Connect back to master node
|
-- Third: Connect back to master node
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
@ -210,6 +210,7 @@ INSERT INTO limit_orders VALUES (276, 'ADR', 140, '2007-07-02 16:32:15', 'sell',
|
||||||
|
|
||||||
-- Last: Verify the insert worked but the deleted placement is now unhealthy
|
-- Last: Verify the insert worked but the deleted placement is now unhealthy
|
||||||
SELECT count(*) FROM limit_orders WHERE id = 276;
|
SELECT count(*) FROM limit_orders WHERE id = 276;
|
||||||
|
|
||||||
SELECT count(*)
|
SELECT count(*)
|
||||||
FROM pg_dist_shard_placement AS sp,
|
FROM pg_dist_shard_placement AS sp,
|
||||||
pg_dist_shard AS s
|
pg_dist_shard AS s
|
||||||
|
@ -219,6 +220,41 @@ AND sp.nodeport = :worker_2_port
|
||||||
AND sp.shardstate = 3
|
AND sp.shardstate = 3
|
||||||
AND s.logicalrelid = 'limit_orders'::regclass;
|
AND s.logicalrelid = 'limit_orders'::regclass;
|
||||||
|
|
||||||
|
-- Test that if all shards miss a modification, no state change occurs
|
||||||
|
|
||||||
|
-- First: Connect to the first worker node
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
|
||||||
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
|
ALTER TABLE limit_orders_750000 RENAME TO renamed_orders;
|
||||||
|
|
||||||
|
-- Third: Connect back to master node
|
||||||
|
\c - - - :master_port
|
||||||
|
|
||||||
|
-- Fourth: Perform an INSERT on the remaining node
|
||||||
|
INSERT INTO limit_orders VALUES (276, 'ADR', 140, '2007-07-02 16:32:15', 'sell', 43.67);
|
||||||
|
|
||||||
|
-- Last: Verify worker is still healthy
|
||||||
|
SELECT count(*)
|
||||||
|
FROM pg_dist_shard_placement AS sp,
|
||||||
|
pg_dist_shard AS s
|
||||||
|
WHERE sp.shardid = s.shardid
|
||||||
|
AND sp.nodename = 'localhost'
|
||||||
|
AND sp.nodeport = :worker_1_port
|
||||||
|
AND sp.shardstate = 1
|
||||||
|
AND s.logicalrelid = 'limit_orders'::regclass;
|
||||||
|
|
||||||
|
-- Undo our change...
|
||||||
|
|
||||||
|
-- First: Connect to the first worker node
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
|
||||||
|
-- Second: Move aside limit_orders shard on the second worker node
|
||||||
|
ALTER TABLE renamed_orders RENAME TO limit_orders_750000;
|
||||||
|
|
||||||
|
-- Third: Connect back to master node
|
||||||
|
\c - - - :master_port
|
||||||
|
|
||||||
-- commands with no constraints on the partition key are not supported
|
-- commands with no constraints on the partition key are not supported
|
||||||
UPDATE limit_orders SET limit_price = 0.00;
|
UPDATE limit_orders SET limit_price = 0.00;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue