From 16aece6f83c627f4798d40034e76e632e8dd1411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Sun, 15 Jul 2018 20:08:14 +0300 Subject: [PATCH] Clean up new service configuration Removed redundant checks and dead code, replaced manual server searches with correct ones. --- server/core/config.cc | 87 +++++++++---------------------------------- 1 file changed, 18 insertions(+), 69 deletions(-) diff --git a/server/core/config.cc b/server/core/config.cc index f8e76c2e1..082f1999d 100644 --- a/server/core/config.cc +++ b/server/core/config.cc @@ -216,7 +216,7 @@ int create_new_server(CONFIG_CONTEXT *obj); int create_new_monitor(CONFIG_CONTEXT *obj, std::set& monitored_servers); int create_new_listener(CONFIG_CONTEXT *obj); int create_new_filter(CONFIG_CONTEXT *obj); -int configure_new_service(CONFIG_CONTEXT *context, CONFIG_CONTEXT *obj); +int configure_new_service(CONFIG_CONTEXT *obj); void config_fix_param(const MXS_MODULE_PARAM *params, MXS_CONFIG_PARAMETER *p); static const char *config_file = NULL; @@ -1163,7 +1163,7 @@ process_config_context(CONFIG_CONTEXT *context) { if (!strcmp(type, CN_SERVICE)) { - error_count += configure_new_service(context, obj); + error_count += configure_new_service(obj); } else if (!strcmp(type, CN_LISTENER)) { @@ -3176,88 +3176,37 @@ int create_new_server(CONFIG_CONTEXT *obj) } /** - * Configure a new service + * Configure a new service after all objects have been created * - * Add servers, router options and filters to a new service. - * @param context The complete configuration context * @param obj The service configuration context + * * @return Number of errors */ -int configure_new_service(CONFIG_CONTEXT *context, CONFIG_CONTEXT *obj) +int configure_new_service(CONFIG_CONTEXT *obj) { int error_count = 0; - char *filters = config_get_value(obj->parameters, CN_FILTERS); - char *servers = config_get_value(obj->parameters, CN_SERVERS); - char *monitor = config_get_value(obj->parameters, CN_MONITOR); - char *roptions = config_get_value(obj->parameters, CN_ROUTER_OPTIONS); SERVICE *service = (SERVICE*)obj->element; + ss_dassert(service); - if (service) + for (auto&& a: mxs::strtok(config_get_string(obj->parameters, CN_SERVERS), ", \t")) { - if (monitor) + if (SERVER* s = server_find_by_unique_name(a.c_str())) { - if (servers) - { - MXS_WARNING("Both `monitor` and `servers` are defined. Only the " - "value of `monitor` will be used."); - } - - /** `monitor` takes priority over `servers` */ - servers = NULL; - - for (CONFIG_CONTEXT *ctx = context; ctx; ctx = ctx->next) - { - if (strcmp(ctx->object, monitor) == 0) - { - servers = config_get_value(ctx->parameters, CN_SERVERS); - break; - } - } - - if (servers == NULL) - { - MXS_ERROR("Unable to find monitor '%s'.", monitor); - error_count++; - } + serviceAddBackend(service, s); } - - if (servers) + else { - char srv_list[strlen(servers) + 1]; - strcpy(srv_list, servers); - char *lasts; - char *s = strtok_r(srv_list, ",", &lasts); - while (s) - { - CONFIG_CONTEXT *obj1 = context; - int found = 0; - while (obj1) - { - if (strcmp(trim(s), obj1->object) == 0 && obj1->element) - { - found = 1; - serviceAddBackend(service, (SERVER*)obj1->element); - break; - } - obj1 = obj1->next; - } - - if (!found) - { - MXS_ERROR("Unable to find server '%s' that is " - "configured as part of service '%s'.", s, obj->object); - error_count++; - } - s = strtok_r(NULL, ",", &lasts); - } + MXS_ERROR("Unable to find server '%s' that is configured as part " + "of service '%s'.", a.c_str(), obj->object); + error_count++; } + } - if (filters) + if (char* filters = config_get_value(obj->parameters, CN_FILTERS)) + { + if (!serviceSetFilters(service, filters)) { - if (!serviceSetFilters(service, filters)) - { - error_count++; - } + error_count++; } }