From 37985de85eafb4c2d2c6a617cfbd32f86e0acc39 Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Thu, 3 Aug 2017 12:44:03 +0300 Subject: [PATCH] master_disable_node no longer crashes when given a non-existant node --- src/backend/distributed/utils/node_metadata.c | 4 ++++ src/test/regress/expected/multi_cluster_management.out | 3 +++ src/test/regress/sql/multi_cluster_management.sql | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/backend/distributed/utils/node_metadata.c b/src/backend/distributed/utils/node_metadata.c index 09838a191..1d76dc393 100644 --- a/src/backend/distributed/utils/node_metadata.c +++ b/src/backend/distributed/utils/node_metadata.c @@ -205,6 +205,10 @@ master_disable_node(PG_FUNCTION_ARGS) CheckCitusVersion(ERROR); workerNode = FindWorkerNode(nodeName, nodePort); + if (workerNode == NULL) + { + ereport(ERROR, (errmsg("node at \"%s:%u\" does not exist", nodeName, nodePort))); + } if (WorkerNodeIsPrimary(workerNode)) { diff --git a/src/test/regress/expected/multi_cluster_management.out b/src/test/regress/expected/multi_cluster_management.out index 5aa939a2b..2f6ed34f1 100644 --- a/src/test/regress/expected/multi_cluster_management.out +++ b/src/test/regress/expected/multi_cluster_management.out @@ -136,6 +136,9 @@ SELECT master_get_active_worker_nodes(); (localhost,57637) (1 row) +-- try to disable a node which does not exist and see that an error is thrown +SELECT master_disable_node('localhost.noexist', 2345); +ERROR: node at "localhost.noexist:2345" does not exist -- restore the node for next tests SELECT master_activate_node('localhost', :worker_2_port); master_activate_node diff --git a/src/test/regress/sql/multi_cluster_management.sql b/src/test/regress/sql/multi_cluster_management.sql index db7695fb0..70b4f64da 100644 --- a/src/test/regress/sql/multi_cluster_management.sql +++ b/src/test/regress/sql/multi_cluster_management.sql @@ -52,6 +52,9 @@ INSERT INTO test_reference_table VALUES (1, '1'); SELECT master_disable_node('localhost', :worker_2_port); SELECT master_get_active_worker_nodes(); +-- try to disable a node which does not exist and see that an error is thrown +SELECT master_disable_node('localhost.noexist', 2345); + -- restore the node for next tests SELECT master_activate_node('localhost', :worker_2_port);