mirror of https://github.com/citusdata/citus.git
Take improvement_threshold into the account in citus_add_rebalance_strategy() (#7247)
DESCRIPTION: Makes sure to take improvement_threshold into the account in `citus_add_rebalance_strategy()`. Fixes https://github.com/citusdata/citus/issues/7188.pull/7236/head
parent
7d6c401dd3
commit
858d99be33
|
@ -1,3 +1,5 @@
|
||||||
-- citus--12.1-1--12.2-1
|
-- citus--12.1-1--12.2-1
|
||||||
|
|
||||||
-- bump version to 12.2-1
|
-- bump version to 12.2-1
|
||||||
|
|
||||||
|
#include "udfs/citus_add_rebalance_strategy/12.2-1.sql"
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
-- citus--12.2-1--12.1-1
|
-- citus--12.2-1--12.1-1
|
||||||
-- this is an empty downgrade path since citus--12.2-1--12.1-1.sql is empty for now
|
|
||||||
|
#include "../udfs/citus_add_rebalance_strategy/10.1-1.sql"
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
DROP FUNCTION pg_catalog.citus_add_rebalance_strategy;
|
||||||
|
CREATE OR REPLACE FUNCTION pg_catalog.citus_add_rebalance_strategy(
|
||||||
|
name name,
|
||||||
|
shard_cost_function regproc,
|
||||||
|
node_capacity_function regproc,
|
||||||
|
shard_allowed_on_node_function regproc,
|
||||||
|
default_threshold float4,
|
||||||
|
minimum_threshold float4 DEFAULT 0,
|
||||||
|
improvement_threshold float4 DEFAULT 0
|
||||||
|
)
|
||||||
|
RETURNS VOID AS $$
|
||||||
|
INSERT INTO
|
||||||
|
pg_catalog.pg_dist_rebalance_strategy(
|
||||||
|
name,
|
||||||
|
shard_cost_function,
|
||||||
|
node_capacity_function,
|
||||||
|
shard_allowed_on_node_function,
|
||||||
|
default_threshold,
|
||||||
|
minimum_threshold,
|
||||||
|
improvement_threshold
|
||||||
|
) VALUES (
|
||||||
|
name,
|
||||||
|
shard_cost_function,
|
||||||
|
node_capacity_function,
|
||||||
|
shard_allowed_on_node_function,
|
||||||
|
default_threshold,
|
||||||
|
minimum_threshold,
|
||||||
|
improvement_threshold
|
||||||
|
);
|
||||||
|
$$ LANGUAGE sql;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.citus_add_rebalance_strategy(name,regproc,regproc,regproc,float4, float4, float4)
|
||||||
|
IS 'adds a new rebalance strategy which can be used when rebalancing shards or draining nodes';
|
|
@ -16,14 +16,16 @@ CREATE OR REPLACE FUNCTION pg_catalog.citus_add_rebalance_strategy(
|
||||||
node_capacity_function,
|
node_capacity_function,
|
||||||
shard_allowed_on_node_function,
|
shard_allowed_on_node_function,
|
||||||
default_threshold,
|
default_threshold,
|
||||||
minimum_threshold
|
minimum_threshold,
|
||||||
|
improvement_threshold
|
||||||
) VALUES (
|
) VALUES (
|
||||||
name,
|
name,
|
||||||
shard_cost_function,
|
shard_cost_function,
|
||||||
node_capacity_function,
|
node_capacity_function,
|
||||||
shard_allowed_on_node_function,
|
shard_allowed_on_node_function,
|
||||||
default_threshold,
|
default_threshold,
|
||||||
minimum_threshold
|
minimum_threshold,
|
||||||
|
improvement_threshold
|
||||||
);
|
);
|
||||||
$$ LANGUAGE sql;
|
$$ LANGUAGE sql;
|
||||||
COMMENT ON FUNCTION pg_catalog.citus_add_rebalance_strategy(name,regproc,regproc,regproc,float4, float4, float4)
|
COMMENT ON FUNCTION pg_catalog.citus_add_rebalance_strategy(name,regproc,regproc,regproc,float4, float4, float4)
|
||||||
|
|
|
@ -2184,6 +2184,27 @@ 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
|
||||||
|
SELECT citus_add_rebalance_strategy(
|
||||||
|
'test_improvement_threshold',
|
||||||
|
'citus_shard_cost_1',
|
||||||
|
'capacity_high_worker_2',
|
||||||
|
'citus_shard_allowed_on_node_true',
|
||||||
|
0.2,
|
||||||
|
0.1,
|
||||||
|
0.3
|
||||||
|
);
|
||||||
|
citus_add_rebalance_strategy
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT * FROM pg_dist_rebalance_strategy WHERE name='test_improvement_threshold';
|
||||||
|
name | default_strategy | shard_cost_function | node_capacity_function | shard_allowed_on_node_function | default_threshold | minimum_threshold | improvement_threshold
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
test_improvement_threshold | f | citus_shard_cost_1 | capacity_high_worker_2 | citus_shard_allowed_on_node_true | 0.2 | 0.1 | 0.3
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
DELETE FROM pg_catalog.pg_dist_rebalance_strategy WHERE name='test_improvement_threshold';
|
||||||
-- 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
|
||||||
|
|
|
@ -3,6 +3,6 @@ SELECT * FROM pg_catalog.pg_dist_rebalance_strategy ORDER BY name;
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
by_disk_size | f | citus_shard_cost_by_disk_size | citus_node_capacity_1 | citus_shard_allowed_on_node_true | 0.1 | 0.01 | 0.5
|
by_disk_size | f | citus_shard_cost_by_disk_size | citus_node_capacity_1 | citus_shard_allowed_on_node_true | 0.1 | 0.01 | 0.5
|
||||||
by_shard_count | f | citus_shard_cost_1 | citus_node_capacity_1 | citus_shard_allowed_on_node_true | 0 | 0 | 0
|
by_shard_count | f | citus_shard_cost_1 | citus_node_capacity_1 | citus_shard_allowed_on_node_true | 0 | 0 | 0
|
||||||
custom_strategy | t | upgrade_rebalance_strategy.shard_cost_2 | upgrade_rebalance_strategy.capacity_high_worker_1 | upgrade_rebalance_strategy.only_worker_2 | 0.5 | 0.2 | 0
|
custom_strategy | t | upgrade_rebalance_strategy.shard_cost_2 | upgrade_rebalance_strategy.capacity_high_worker_1 | upgrade_rebalance_strategy.only_worker_2 | 0.5 | 0.2 | 0.3
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
|
|
|
@ -1229,6 +1229,20 @@ SELECT citus_add_rebalance_strategy(
|
||||||
0.1
|
0.1
|
||||||
);
|
);
|
||||||
|
|
||||||
|
SELECT citus_add_rebalance_strategy(
|
||||||
|
'test_improvement_threshold',
|
||||||
|
'citus_shard_cost_1',
|
||||||
|
'capacity_high_worker_2',
|
||||||
|
'citus_shard_allowed_on_node_true',
|
||||||
|
0.2,
|
||||||
|
0.1,
|
||||||
|
0.3
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT * FROM pg_dist_rebalance_strategy WHERE name='test_improvement_threshold';
|
||||||
|
|
||||||
|
DELETE FROM pg_catalog.pg_dist_rebalance_strategy WHERE name='test_improvement_threshold';
|
||||||
|
|
||||||
-- 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);
|
||||||
DROP TABLE tab;
|
DROP TABLE tab;
|
||||||
|
|
Loading…
Reference in New Issue