diff --git a/src/manager/UpstreamManager.cc b/src/manager/UpstreamManager.cc index 15734a0f..9b75fa7f 100644 --- a/src/manager/UpstreamManager.cc +++ b/src/manager/UpstreamManager.cc @@ -136,9 +136,21 @@ int UpstreamManager::upstream_remove_server(const std::string& name, WFNameService *ns = WFGlobal::get_name_service(); UPSGroupPolicy *policy = dynamic_cast(ns->get_policy(name.c_str())); + if (policy) + return policy->remove_server(address); + + errno = ENOENT; + return -1; +} + +int UpstreamManager::upstream_delete(const std::string& name) +{ + WFNameService *ns = WFGlobal::get_name_service(); + WFNSPolicy *policy = ns->del_policy(name.c_str()); + if (policy) { - policy->remove_server(address); + delete policy; return 0; } diff --git a/src/manager/UpstreamManager.h b/src/manager/UpstreamManager.h index 6d1ea4a9..4a3be410 100644 --- a/src/manager/UpstreamManager.h +++ b/src/manager/UpstreamManager.h @@ -131,8 +131,8 @@ public: * @brief Delete one upstream * @param[in] name upstream name * @return success/fail - * @retval 0 fail, not found - * @retval 1 success + * @retval 0 success + * @retval -1 fail, not found */ static int upstream_delete(const std::string& name); diff --git a/test/upstream_unittest.cc b/test/upstream_unittest.cc index e381a14b..951b0182 100644 --- a/test/upstream_unittest.cc +++ b/test/upstream_unittest.cc @@ -305,6 +305,9 @@ int main(int argc, char* argv[]) EXPECT_EQ(RUN_ALL_TESTS(), 0); + EXPECT_EQ(UpstreamManager::upstream_delete("try_another"), 0); + EXPECT_EQ(UpstreamManager::upstream_delete("try_another"), -1); + http_server1.stop(); http_server2.stop(); http_server3.stop();