void testclear() { if (srv1 != NULL && srv1->priv != NULL && srv1->priv->backends != NULL) { network_backends_free(srv1->priv->backends); srv1->priv->backends = NULL; } if (srv1 != NULL && srv1->priv != NULL) { g_free(srv1->priv); srv1->priv = NULL; } if (srv1 != NULL) { g_free(srv1); srv1 = NULL; } return; }
/** * free the global scope * * closes all open connections, cleans up all plugins * * @param chas global context */ void chassis_free(chassis *chas) { guint i; #ifdef HAVE_EVENT_BASE_FREE const char *version; #endif if (!chas) return; /* call the destructor for all plugins */ for (i = 0; i < chas->modules->len; i++) { chassis_plugin *p = chas->modules->pdata[i]; g_assert(p->destroy); p->destroy(p->config); } chassis_shutdown_hooks_call(chas->shutdown_hooks); /* cleanup the global 3rd party stuff before we unload the modules */ for (i = 0; i < chas->modules->len; i++) { chassis_plugin *p = chas->modules->pdata[i]; chassis_plugin_free(p); } g_ptr_array_free(chas->modules, TRUE); if (chas->base_dir) g_free(chas->base_dir); if (chas->log_path) g_free(chas->log_path); if (chas->user) g_free(chas->user); if (chas->stats) chassis_stats_free(chas->stats); chassis_timestamps_global_free(NULL); GPtrArray *threads = chas->threads; if (threads) { for (i = 0; i < threads->len; ++i) { chassis_event_thread_free(threads->pdata[i]); } g_ptr_array_free(threads, TRUE); } if (chas->instance_name) g_free(chas->instance_name); #ifdef HAVE_EVENT_BASE_FREE /* only recent versions have this call */ version = event_get_version(); /* libevent < 1.3e doesn't cleanup its own fds from the event-queue in signal_init() * calling event_base_free() would cause a assert() on shutdown */ if (version && (strcmp(version, "1.3e") >= 0)) { if (chas->event_base) event_base_free(chas->event_base); } #endif g_free(chas->event_hdr_version); chassis_shutdown_hooks_free(chas->shutdown_hooks); lua_scope_free(chas->sc); network_backends_free(chas->backends); if (chas->proxy_filter != NULL) { sql_filter_free(chas->proxy_filter); } if (chas->proxy_reserved != NULL) { sql_reserved_query_free(chas->proxy_reserved); } g_free(chas); }
void test_adjust_backend(void) { network_backend_t *b = NULL; guint health = 0; network_backends_add(srv1->priv->backends, "192.168.x.x:3306#2#UN", BACKEND_TYPE_RO); network_backends_add(srv1->priv->backends, "192.168.x.x:3306#4#UN", BACKEND_TYPE_RO); network_backends_add(srv1->priv->backends, "192.168.x.x:3306#1#UN", BACKEND_TYPE_RO); b = network_backends_get(srv1->priv->backends, 0); adjust_backend(BACKEND_STATE_UP, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health = b->health_check.rise + b->health_check.fall - 1; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); adjust_backend(BACKEND_STATE_DOWN, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health--; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); adjust_backend(BACKEND_STATE_UP, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health = b->health_check.rise + b->health_check.fall - 1; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); adjust_backend(BACKEND_STATE_DOWN, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health--; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); adjust_backend(BACKEND_STATE_DOWN, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health--; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); adjust_backend(BACKEND_STATE_DOWN, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_DOWN); health = 0; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RO); adjust_backend(BACKEND_STATE_UP, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_DOWN); health++; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RO); adjust_backend(BACKEND_STATE_DOWN, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_DOWN); health = 0; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RO); adjust_backend(BACKEND_STATE_UP, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_DOWN); health++; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RO); adjust_backend(BACKEND_STATE_UP, srv1, b); g_assert_cmpint(b->state, ==, BACKEND_STATE_UP); health = b->health_check.rise + b->health_check.fall - 1; g_assert_cmpint(b->health_check.health, == , health); g_assert_cmpint(b->type, ==, BACKEND_TYPE_RW); network_backends_free(srv1->priv->backends); srv1->priv->backends = NULL; }