From 3b767211cc5d4f2e612d1d93bda52503cc28f3ea Mon Sep 17 00:00:00 2001 From: Onur Tirtir Date: Tue, 26 Sep 2023 18:10:50 +0300 Subject: [PATCH] improve code and one more test --- .../commands/create_distributed_table.c | 16 ++++++++-------- src/test/regress/expected/isolate_placement.out | 9 +++++++++ src/test/regress/sql/isolate_placement.sql | 9 +++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/backend/distributed/commands/create_distributed_table.c b/src/backend/distributed/commands/create_distributed_table.c index e6fe0dd4a..5874f998d 100644 --- a/src/backend/distributed/commands/create_distributed_table.c +++ b/src/backend/distributed/commands/create_distributed_table.c @@ -572,14 +572,6 @@ CreateDistributedTableConcurrently(Oid relationId, char *distributionColumnName, colocatedTableId = ColocatedTableId(colocationId); } - List *workerNodeList = NewDistributedTablePlacementNodeList(NoLock); - if (workerNodeList == NIL) - { - ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("no worker nodes are available for placing shards"), - errhint("Add more worker nodes."))); - } - List *workersForPlacementList; List *shardSplitPointsList; List *needsIsolatedNodeForPlacementList; @@ -615,6 +607,14 @@ CreateDistributedTableConcurrently(Oid relationId, char *distributionColumnName, /* * Place shards in a round-robin fashion across all data nodes. */ + List *workerNodeList = NewDistributedTablePlacementNodeList(NoLock); + if (workerNodeList == NIL) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("no worker nodes are available for placing shards"), + errhint("Add more worker nodes."))); + } + workersForPlacementList = RoundRobinWorkerNodeList(workerNodeList, shardCount); /* diff --git a/src/test/regress/expected/isolate_placement.out b/src/test/regress/expected/isolate_placement.out index 0f8fd6cdd..4c86e2455 100644 --- a/src/test/regress/expected/isolate_placement.out +++ b/src/test/regress/expected/isolate_placement.out @@ -36,6 +36,15 @@ SET ROLE test_user_isolate_placement; -- test invalid shard id SELECT citus_internal_shard_group_set_needsisolatednode(0, true); ERROR: could not find valid entry for shard xxxxx +-- test null needs_isolated_node +SELECT citus_internal_add_shard_metadata( + relation_id=>0, + shard_id=>0, + storage_type=>'0', + shard_min_value=>'0', + shard_max_value=>'0', + needs_isolated_node=>null); +ERROR: needs isolated node cannot be NULL RESET ROLE; REVOKE ALL ON SCHEMA isolate_placement FROM test_user_isolate_placement; DROP USER test_user_isolate_placement; diff --git a/src/test/regress/sql/isolate_placement.sql b/src/test/regress/sql/isolate_placement.sql index 7ae979186..b6f7c26b9 100644 --- a/src/test/regress/sql/isolate_placement.sql +++ b/src/test/regress/sql/isolate_placement.sql @@ -29,6 +29,15 @@ SET ROLE test_user_isolate_placement; -- test invalid shard id SELECT citus_internal_shard_group_set_needsisolatednode(0, true); +-- test null needs_isolated_node +SELECT citus_internal_add_shard_metadata( + relation_id=>0, + shard_id=>0, + storage_type=>'0', + shard_min_value=>'0', + shard_max_value=>'0', + needs_isolated_node=>null); + RESET ROLE; REVOKE ALL ON SCHEMA isolate_placement FROM test_user_isolate_placement; DROP USER test_user_isolate_placement;