mirror of https://github.com/citusdata/citus.git
Make sure that target node in shard moves is eligable for shard move
parent
4d8e3969ac
commit
d07db99ea4
|
@ -96,6 +96,7 @@ static void EnsureEnoughDiskSpaceForShardMove(List *colocatedShardList,
|
||||||
char *targetNodeName, uint32
|
char *targetNodeName, uint32
|
||||||
targetNodePort);
|
targetNodePort);
|
||||||
|
|
||||||
|
|
||||||
/* declarations for dynamic loading */
|
/* declarations for dynamic loading */
|
||||||
PG_FUNCTION_INFO_V1(citus_copy_shard_placement);
|
PG_FUNCTION_INFO_V1(citus_copy_shard_placement);
|
||||||
PG_FUNCTION_INFO_V1(master_copy_shard_placement);
|
PG_FUNCTION_INFO_V1(master_copy_shard_placement);
|
||||||
|
@ -299,6 +300,7 @@ citus_move_shard_placement(PG_FUNCTION_ARGS)
|
||||||
|
|
||||||
Oid relationId = RelationIdForShard(shardId);
|
Oid relationId = RelationIdForShard(shardId);
|
||||||
ErrorIfMoveCitusLocalTable(relationId);
|
ErrorIfMoveCitusLocalTable(relationId);
|
||||||
|
ErrorIfTargetNodeIsNotSafeToMove(targetNodeName, targetNodePort);
|
||||||
|
|
||||||
ShardInterval *shardInterval = LoadShardInterval(shardId);
|
ShardInterval *shardInterval = LoadShardInterval(shardId);
|
||||||
Oid distributedTableId = shardInterval->relationId;
|
Oid distributedTableId = shardInterval->relationId;
|
||||||
|
@ -421,6 +423,51 @@ EnsureEnoughDiskSpaceForShardMove(List *colocatedShardList,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ErrorIfTargetNodeIsNotSafeToMove throws error if the target node is not
|
||||||
|
* eligible for moving shards.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ErrorIfTargetNodeIsNotSafeToMove(const char *targetNodeName, int targetNodePort)
|
||||||
|
{
|
||||||
|
WorkerNode *workerNode = FindWorkerNode(targetNodeName, targetNodePort);
|
||||||
|
if (workerNode == NULL)
|
||||||
|
{
|
||||||
|
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("Moving shards to a non-existing node is not supported"),
|
||||||
|
errhint(
|
||||||
|
"Add the target node via SELECT citus_add_node('%s', %d);",
|
||||||
|
targetNodeName, targetNodePort)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!workerNode->isActive)
|
||||||
|
{
|
||||||
|
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("Moving shards to a non-active node is not supported"),
|
||||||
|
errhint(
|
||||||
|
"Activate the target node via SELECT citus_activate_node('%s', %d);",
|
||||||
|
targetNodeName, targetNodePort)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!workerNode->shouldHaveShards)
|
||||||
|
{
|
||||||
|
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("Moving shards to a node that shouldn't have a shard is "
|
||||||
|
"not supported"),
|
||||||
|
errhint("Allow shards on the target node via "
|
||||||
|
"SELECT * FROM citus_set_node_property('%s', %d, 'shouldhaveshards', true);",
|
||||||
|
targetNodeName, targetNodePort)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!NodeIsPrimary(workerNode))
|
||||||
|
{
|
||||||
|
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("Moving shards to a secondary (e.g., replica) node is "
|
||||||
|
"not supported")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* master_move_shard_placement is a wrapper around citus_move_shard_placement.
|
* master_move_shard_placement is a wrapper around citus_move_shard_placement.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -278,6 +278,8 @@ extern ShardPlacement * SearchShardPlacementInList(List *shardPlacementList,
|
||||||
extern ShardPlacement * SearchShardPlacementInListOrError(List *shardPlacementList,
|
extern ShardPlacement * SearchShardPlacementInListOrError(List *shardPlacementList,
|
||||||
const char *nodeName,
|
const char *nodeName,
|
||||||
uint32 nodePort);
|
uint32 nodePort);
|
||||||
|
extern void ErrorIfTargetNodeIsNotSafeToMove(const char *targetNodeName, int
|
||||||
|
targetNodePort);
|
||||||
extern void ErrorIfMoveCitusLocalTable(Oid relationId);
|
extern void ErrorIfMoveCitusLocalTable(Oid relationId);
|
||||||
extern char LookupShardTransferMode(Oid shardReplicationModeOid);
|
extern char LookupShardTransferMode(Oid shardReplicationModeOid);
|
||||||
extern void BlockWritesToShardList(List *shardList);
|
extern void BlockWritesToShardList(List *shardList);
|
||||||
|
|
|
@ -894,6 +894,47 @@ SELECT create_distributed_table('colocated_rebalance_test', 'id');
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- make sure that we do not allow shards on target nodes
|
||||||
|
-- that are not eligable to move shards
|
||||||
|
-- Try to move shards to a non-existing node
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', 10000, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
ERROR: Moving shards to a non-existing node is not supported
|
||||||
|
HINT: Add the target node via SELECT citus_add_node('localhost', 10000);
|
||||||
|
-- Try to move shards to a node where shards are not allowed
|
||||||
|
SELECT * from master_set_node_property('localhost', :worker_1_port, 'shouldhaveshards', false);
|
||||||
|
master_set_node_property
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
ERROR: Moving shards to a node that shouldn't have a shard is not supported
|
||||||
|
HINT: Allow shards on the target node via SELECT * FROM citus_set_node_property('localhost', 57637, 'shouldhaveshards', true);
|
||||||
|
SELECT * from master_set_node_property('localhost', :worker_1_port, 'shouldhaveshards', true);
|
||||||
|
master_set_node_property
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- Try to move shards to a non-active node
|
||||||
|
UPDATE pg_dist_node SET isactive = false WHERE nodeport = :worker_1_port;
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
ERROR: Moving shards to a non-active node is not supported
|
||||||
|
HINT: Activate the target node via SELECT citus_activate_node('localhost', 57637);
|
||||||
|
UPDATE pg_dist_node SET isactive = true WHERE nodeport = :worker_1_port;
|
||||||
|
-- Try to move shards to a secondary node
|
||||||
|
UPDATE pg_dist_node SET noderole = 'secondary' WHERE nodeport = :worker_1_port;
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
ERROR: Moving shards to a secondary (e.g., replica) node is not supported
|
||||||
|
UPDATE pg_dist_node SET noderole = 'primary' WHERE nodeport = :worker_1_port;
|
||||||
-- Move all shards to worker1
|
-- Move all shards to worker1
|
||||||
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
FROM pg_dist_shard_placement
|
FROM pg_dist_shard_placement
|
||||||
|
@ -1560,6 +1601,7 @@ CREATE OR REPLACE FUNCTION capacity_high_worker_2(nodeidarg int)
|
||||||
(CASE WHEN nodeport = 57638 THEN 1000 ELSE 1 END)::real
|
(CASE WHEN nodeport = 57638 THEN 1000 ELSE 1 END)::real
|
||||||
FROM pg_dist_node where nodeid = nodeidarg
|
FROM pg_dist_node where nodeid = nodeidarg
|
||||||
$$ LANGUAGE sql;
|
$$ LANGUAGE sql;
|
||||||
|
\set VERBOSITY terse
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'capacity_high_worker_2',
|
'capacity_high_worker_2',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1689,7 +1731,6 @@ SELECT * FROM master_drain_node('localhost', :worker_2_port, rebalance_strategy
|
||||||
ERROR: could not find rebalance strategy with name non_existing
|
ERROR: could not find rebalance strategy with name non_existing
|
||||||
SELECT citus_set_default_rebalance_strategy('non_existing');
|
SELECT citus_set_default_rebalance_strategy('non_existing');
|
||||||
ERROR: strategy with specified name does not exist
|
ERROR: strategy with specified name does not exist
|
||||||
CONTEXT: PL/pgSQL function citus_set_default_rebalance_strategy(text) line 5 at RAISE
|
|
||||||
UPDATE pg_dist_rebalance_strategy SET default_strategy=false;
|
UPDATE pg_dist_rebalance_strategy SET default_strategy=false;
|
||||||
SELECT * FROM get_rebalance_table_shards_plan('tab');
|
SELECT * FROM get_rebalance_table_shards_plan('tab');
|
||||||
ERROR: no rebalance_strategy was provided, but there is also no default strategy set
|
ERROR: no rebalance_strategy was provided, but there is also no default strategy set
|
||||||
|
@ -1726,13 +1767,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_cost_function is incorrect
|
ERROR: signature for shard_cost_function is incorrect
|
||||||
DETAIL: number of arguments of shard_cost_no_arguments should be 1, not 0
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'shard_cost_bad_arg_type',
|
'shard_cost_bad_arg_type',
|
||||||
|
@ -1741,13 +1775,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_cost_function is incorrect
|
ERROR: signature for shard_cost_function is incorrect
|
||||||
DETAIL: argument type of shard_cost_bad_arg_type should be bigint
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'shard_cost_bad_return_type',
|
'shard_cost_bad_return_type',
|
||||||
|
@ -1756,13 +1783,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_cost_function is incorrect
|
ERROR: signature for shard_cost_function is incorrect
|
||||||
DETAIL: return type of shard_cost_bad_return_type should be real
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
0,
|
0,
|
||||||
|
@ -1771,12 +1791,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: cache lookup failed for shard_cost_function with oid 0
|
ERROR: cache lookup failed for shard_cost_function with oid 0
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1785,13 +1799,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for node_capacity_function is incorrect
|
ERROR: signature for node_capacity_function is incorrect
|
||||||
DETAIL: number of arguments of node_capacity_no_arguments should be 1, not 0
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1800,13 +1807,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for node_capacity_function is incorrect
|
ERROR: signature for node_capacity_function is incorrect
|
||||||
DETAIL: argument type of node_capacity_bad_arg_type should be int
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1815,13 +1815,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for node_capacity_function is incorrect
|
ERROR: signature for node_capacity_function is incorrect
|
||||||
DETAIL: return type of node_capacity_bad_return_type should be real
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1830,12 +1823,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: cache lookup failed for node_capacity_function with oid 0
|
ERROR: cache lookup failed for node_capacity_function with oid 0
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1844,13 +1831,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_allowed_on_node_function is incorrect
|
ERROR: signature for shard_allowed_on_node_function is incorrect
|
||||||
DETAIL: number of arguments of shard_allowed_on_node_no_arguments should be 2, not 0
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1859,13 +1839,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_allowed_on_node_function is incorrect
|
ERROR: signature for shard_allowed_on_node_function is incorrect
|
||||||
DETAIL: type of first argument of shard_allowed_on_node_bad_arg1 should be bigint
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1874,13 +1847,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_allowed_on_node_function is incorrect
|
ERROR: signature for shard_allowed_on_node_function is incorrect
|
||||||
DETAIL: type of second argument of shard_allowed_on_node_bad_arg2 should be int
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1889,13 +1855,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_allowed_on_node_function is incorrect
|
ERROR: signature for shard_allowed_on_node_function is incorrect
|
||||||
DETAIL: return type of shard_allowed_on_node_bad_return_type should be boolean
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'insert_should_fail',
|
'insert_should_fail',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
@ -1904,12 +1863,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: cache lookup failed for shard_allowed_on_node_function with oid 0
|
ERROR: cache lookup failed for shard_allowed_on_node_function with oid 0
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
-- Confirm that manual insert/update has the same checks
|
-- Confirm that manual insert/update has the same checks
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
pg_catalog.pg_dist_rebalance_strategy(
|
pg_catalog.pg_dist_rebalance_strategy(
|
||||||
|
@ -1926,20 +1879,8 @@ INSERT INTO
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: signature for shard_cost_function is incorrect
|
ERROR: signature for shard_cost_function is incorrect
|
||||||
DETAIL: number of arguments of shard_cost_no_arguments should be 1, not 0
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
UPDATE pg_dist_rebalance_strategy SET shard_cost_function='shard_cost_no_arguments' WHERE name='by_disk_size';
|
UPDATE pg_dist_rebalance_strategy SET shard_cost_function='shard_cost_no_arguments' WHERE name='by_disk_size';
|
||||||
ERROR: signature for shard_cost_function is incorrect
|
ERROR: signature for shard_cost_function is incorrect
|
||||||
DETAIL: number of arguments of shard_cost_no_arguments should be 1, not 0
|
|
||||||
CONTEXT: SQL statement "SELECT citus_validate_rebalance_strategy_functions(
|
|
||||||
NEW.shard_cost_function,
|
|
||||||
NEW.node_capacity_function,
|
|
||||||
NEW.shard_allowed_on_node_function)"
|
|
||||||
PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 5 at PERFORM
|
|
||||||
-- Confirm that only a single default strategy can exist
|
-- Confirm that only a single default strategy can exist
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
pg_catalog.pg_dist_rebalance_strategy(
|
pg_catalog.pg_dist_rebalance_strategy(
|
||||||
|
@ -1958,10 +1899,8 @@ INSERT INTO
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
ERROR: there cannot be two default strategies
|
ERROR: there cannot be two default strategies
|
||||||
CONTEXT: PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 19 at RAISE
|
|
||||||
UPDATE pg_dist_rebalance_strategy SET default_strategy=true WHERE name='by_disk_size';
|
UPDATE pg_dist_rebalance_strategy SET default_strategy=true WHERE name='by_disk_size';
|
||||||
ERROR: there cannot be two default strategies
|
ERROR: there cannot be two default strategies
|
||||||
CONTEXT: PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 19 at RAISE
|
|
||||||
-- ensure the trigger allows updating the default strategy
|
-- ensure the trigger allows updating the default strategy
|
||||||
UPDATE pg_dist_rebalance_strategy SET default_strategy=true WHERE name='by_shard_count';
|
UPDATE pg_dist_rebalance_strategy SET default_strategy=true WHERE name='by_shard_count';
|
||||||
-- Confirm that default strategy should be higher than minimum strategy
|
-- Confirm that default strategy should be higher than minimum strategy
|
||||||
|
@ -1974,8 +1913,6 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0.1
|
0.1
|
||||||
);
|
);
|
||||||
ERROR: default_threshold cannot be smaller than minimum_threshold
|
ERROR: default_threshold cannot be smaller than minimum_threshold
|
||||||
CONTEXT: PL/pgSQL function citus_internal.pg_dist_rebalance_strategy_trigger_func() line 10 at RAISE
|
|
||||||
SQL function "citus_add_rebalance_strategy" statement 1
|
|
||||||
-- Make it a data node again
|
-- Make it a data node again
|
||||||
SELECT * from master_set_node_property('localhost', :worker_2_port, 'shouldhaveshards', true);
|
SELECT * from master_set_node_property('localhost', :worker_2_port, 'shouldhaveshards', true);
|
||||||
master_set_node_property
|
master_set_node_property
|
||||||
|
|
|
@ -579,12 +579,41 @@ CREATE TABLE colocated_rebalance_test(id integer);
|
||||||
CREATE TABLE colocated_rebalance_test2(id integer);
|
CREATE TABLE colocated_rebalance_test2(id integer);
|
||||||
SELECT create_distributed_table('colocated_rebalance_test', 'id');
|
SELECT create_distributed_table('colocated_rebalance_test', 'id');
|
||||||
|
|
||||||
|
|
||||||
|
-- make sure that we do not allow shards on target nodes
|
||||||
|
-- that are not eligable to move shards
|
||||||
|
|
||||||
|
-- Try to move shards to a non-existing node
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', 10000, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
|
||||||
|
-- Try to move shards to a node where shards are not allowed
|
||||||
|
SELECT * from master_set_node_property('localhost', :worker_1_port, 'shouldhaveshards', false);
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
SELECT * from master_set_node_property('localhost', :worker_1_port, 'shouldhaveshards', true);
|
||||||
|
|
||||||
|
-- Try to move shards to a non-active node
|
||||||
|
UPDATE pg_dist_node SET isactive = false WHERE nodeport = :worker_1_port;
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
UPDATE pg_dist_node SET isactive = true WHERE nodeport = :worker_1_port;
|
||||||
|
|
||||||
|
-- Try to move shards to a secondary node
|
||||||
|
UPDATE pg_dist_node SET noderole = 'secondary' WHERE nodeport = :worker_1_port;
|
||||||
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
|
FROM pg_dist_shard_placement
|
||||||
|
WHERE nodeport = :worker_2_port;
|
||||||
|
UPDATE pg_dist_node SET noderole = 'primary' WHERE nodeport = :worker_1_port;
|
||||||
|
|
||||||
-- Move all shards to worker1
|
-- Move all shards to worker1
|
||||||
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
SELECT master_move_shard_placement(shardid, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'block_writes')
|
||||||
FROM pg_dist_shard_placement
|
FROM pg_dist_shard_placement
|
||||||
WHERE nodeport = :worker_2_port;
|
WHERE nodeport = :worker_2_port;
|
||||||
|
|
||||||
|
|
||||||
SELECT create_distributed_table('colocated_rebalance_test2', 'id');
|
SELECT create_distributed_table('colocated_rebalance_test2', 'id');
|
||||||
|
|
||||||
-- Confirm all shards for both tables are on worker1
|
-- Confirm all shards for both tables are on worker1
|
||||||
|
@ -840,6 +869,8 @@ CREATE OR REPLACE FUNCTION capacity_high_worker_2(nodeidarg int)
|
||||||
FROM pg_dist_node where nodeid = nodeidarg
|
FROM pg_dist_node where nodeid = nodeidarg
|
||||||
$$ LANGUAGE sql;
|
$$ LANGUAGE sql;
|
||||||
|
|
||||||
|
\set VERBOSITY terse
|
||||||
|
|
||||||
SELECT citus_add_rebalance_strategy(
|
SELECT citus_add_rebalance_strategy(
|
||||||
'capacity_high_worker_2',
|
'capacity_high_worker_2',
|
||||||
'citus_shard_cost_1',
|
'citus_shard_cost_1',
|
||||||
|
|
Loading…
Reference in New Issue