diff --git a/server/core/internal/service.h b/server/core/internal/service.h index 04ba6b1f3..156f58a4b 100644 --- a/server/core/internal/service.h +++ b/server/core/internal/service.h @@ -36,13 +36,6 @@ MXS_BEGIN_DECLS */ SERVICE* service_alloc(const char *name, const char *router); -/** - * @brief Free the specified service - * - * @param service The service to free - */ -void service_free(SERVICE *service); - /** * @brief Shut all services down * @@ -104,7 +97,6 @@ bool service_serialize(const SERVICE *service); /** * Internal utility functions */ -char* service_get_name(SERVICE* service); bool service_all_services_have_listeners(void); int service_isvalid(SERVICE *service); diff --git a/server/core/service.cc b/server/core/service.cc index b3407eaf8..4ac80a825 100644 --- a/server/core/service.cc +++ b/server/core/service.cc @@ -69,34 +69,9 @@ using std::set; /** Base value for server weights */ #define SERVICE_BASE_SERVER_WEIGHT 1000 -/** To be used with configuration type checks */ -typedef struct typelib_st -{ - int tl_nelems; - const char* tl_name; - const char** tl_p_elems; -} typelib_t; - -/** Set of subsequent false,true pairs */ -static const char* bool_strings[11] = {"FALSE", "TRUE", "OFF", "ON", "N", "Y", "0", "1", "NO", "YES", 0}; -typelib_t bool_type = {MXS_ARRAY_NELEMS(bool_strings) - 1, "bool_type", bool_strings}; - -/** List of valid values */ -static const char* sqlvar_target_strings[4] = {"MASTER", "ALL", 0}; -typelib_t sqlvar_target_type = -{ - MXS_ARRAY_NELEMS(sqlvar_target_strings) - 1, - "sqlvar_target_type", - sqlvar_target_strings -}; - static SPINLOCK service_spin = SPINLOCK_INIT; static SERVICE *allServices = NULL; -static int find_type(typelib_t* tl, const char* needle, int maxlen); - -static void service_add_qualified_param(SERVICE* svc, - MXS_CONFIG_PARAMETER* param); static bool service_internal_restart(void *data); static void service_calculate_weights(SERVICE *service); @@ -716,51 +691,6 @@ bool serviceStart(SERVICE *service) return listeners > 0; } -void service_free(SERVICE *service) -{ - SERVICE *ptr; - SERVER_REF *srv; - if (service->stats.n_current) - { - return; - } - /* First of all remove from the linked list */ - spinlock_acquire(&service_spin); - if (allServices == service) - { - allServices = service->next; - } - else - { - ptr = allServices; - while (ptr && ptr->next != service) - { - ptr = ptr->next; - } - if (ptr) - { - ptr->next = service->next; - } - } - spinlock_release(&service_spin); - - /* Clean up session and free the memory */ - while (service->dbref) - { - srv = service->dbref; - service->dbref = service->dbref->next; - MXS_FREE(srv); - } - - MXS_FREE(service->name); - MXS_FREE(service->routerModule); - - config_parameter_free(service->svc_config_param); - serviceClearRouterOptions(service); - - MXS_FREE(service); -} - /** * Add a listener to a service * @@ -1830,113 +1760,6 @@ void service_replace_parameter(SERVICE *service, const char* key, const char* va service_add_parameters(service, key, value); } -/* - * Function to find a string in typelib_t - * (similar to find_type() of mysys/typelib.c) - * - * SYNOPSIS - * find_type() - * lib typelib_t - * find String to find - * length Length of string to find - * part_match Allow part matching of value - * - * RETURN - * 0 error - * > 0 position in TYPELIB->type_names +1 - */ -static int find_type(typelib_t* tl, - const char* needle, - int maxlen) -{ - int i; - - if (tl == NULL || needle == NULL || maxlen <= 0) - { - return -1; - } - - for (i = 0; i < tl->tl_nelems; i++) - { - if (strncasecmp(tl->tl_p_elems[i], needle, maxlen) == 0) - { - return i + 1; - } - } - return 0; -} - -/** - * Add qualified config parameter to SERVICE struct. - */ -static void service_add_qualified_param(SERVICE* svc, - MXS_CONFIG_PARAMETER* param) -{ - spinlock_acquire(&svc->spin); - - if (svc->svc_config_param == NULL) - { - svc->svc_config_param = config_clone_param(param); - svc->svc_config_param->next = NULL; - } - else - { - MXS_CONFIG_PARAMETER* p = svc->svc_config_param; - MXS_CONFIG_PARAMETER* prev = NULL; - - while (true) - { - MXS_CONFIG_PARAMETER* old; - - /** Replace existing parameter in the list, free old */ - if (strncasecmp(param->name, - p->name, - strlen(param->name)) == 0) - { - old = p; - p = config_clone_param(param); - p->next = old->next; - - if (prev != NULL) - { - prev->next = p; - } - else - { - svc->svc_config_param = p; - } - MXS_FREE(old); - break; - } - prev = p; - p = p->next; - - /** Hit end of the list, add new parameter */ - if (p == NULL) - { - p = config_clone_param(param); - prev->next = p; - p->next = NULL; - break; - } - } - } - /** Increment service's configuration version */ - atomic_add(&svc->svc_config_version, 1); - spinlock_release(&svc->spin); -} - -/** - * Return the name of the service - * - * @param svc The service - */ -char * -service_get_name(SERVICE *svc) -{ - return svc->name; -} - /** * Set the weighting parameter for the service * diff --git a/server/core/test/test_service.cc b/server/core/test/test_service.cc index bc2d187f2..0043fe7dc 100644 --- a/server/core/test/test_service.cc +++ b/server/core/test/test_service.cc @@ -67,7 +67,7 @@ test1() ss_info_dassert(NULL != service, "New service with valid router must not be null"); ss_info_dassert(0 != service_isvalid(service), "Service must be valid after creation"); - ss_info_dassert(0 == strcmp("MyService", service_get_name(service)), "Service must have given name"); + ss_info_dassert(0 == strcmp("MyService", service->name), "Service must have given name"); ss_dfprintf(stderr, "\t..done\nAdding protocol testprotocol."); set_libdir(MXS_STRDUP_A("../../modules/authenticator/MySQLAuth/")); ss_info_dassert(serviceCreateListener(service, "TestProtocol", "testprotocol",