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;
}
Example #2
0
/**
 * 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;
}