Esempio n. 1
0
/**
 * set proxy.global.backends.addslave
 *
 * add slave server into mysql backends
 *
 * @return nil or the backend
 */
static int proxy_backends_set(lua_State *L) {
	network_backends_t *bs = *(network_backends_t **)luaL_checkself(L);
	gsize keysize = 0;
	const char *key = luaL_checklstring(L, 2, &keysize);

	if (strleq(key, keysize, C("addslave"))) {
        	network_backends_add(bs, g_strdup(lua_tostring(L, -1)), BACKEND_TYPE_RO);
	} else if (strleq(key, keysize, C("addmaster"))) {
        	network_backends_add(bs, g_strdup(lua_tostring(L, -1)), BACKEND_TYPE_RW);
	} else if (strleq(key, keysize, C("removebackend"))) {
        	network_backends_remove(bs, lua_tointeger(L, -1));
	} else {
		return luaL_error(L, "proxy.global.backends.%s is not writable", key);
	}
	return 1;
}
Esempio n. 2
0
static int proxy_backends_set(lua_State *L) {
	network_backends_t *bs = *(network_backends_t **)luaL_checkself(L);
	gsize keysize = 0;
	const char *key = luaL_checklstring(L, 2, &keysize);

	if (strleq(key, keysize, C("addslave"))) {
        	network_backends_add(bs, g_strdup(lua_tostring(L, -1)), BACKEND_TYPE_RO);
	} else if (strleq(key, keysize, C("addmaster"))) {
        	network_backends_add(bs, g_strdup(lua_tostring(L, -1)), BACKEND_TYPE_RW);
       } else if (strleq(key, keysize, C("changemaster"))) {
              //change_standby_to_master(bs);
              GThread* t = g_thread_new("change_master_thread", change_master_thread_func, srv);
//              g_thread_join(t);
	} else if (strleq(key, keysize, C("addstandby"))) {
        	network_backends_add(bs, g_strdup(lua_tostring(L, -1)), BACKEND_TYPE_SY);
	} else if (strleq(key, keysize, C("removebackend"))) {
        	network_backends_remove(bs, lua_tointeger(L, -1));
	} else if (strleq(key, keysize, C("addpwds"))) {
              gchar* pwds = g_strdup(lua_tostring(L, -1));
        	network_backends_add_pwds(srv, pwds);
              g_free(pwds);
	} else if (strleq(key, keysize, C("addenpwds"))) {
                gchar* enpwds = convert_pwds(lua_tostring(L, -1));
                network_backends_add_pwds(srv, enpwds);
                g_free(enpwds);
	} else if (strleq(key, keysize, C("removepwds"))) {
              gchar* users = g_strdup(lua_tostring(L, -1));
        	network_backends_remove_pwds(srv, users);
              g_free(users);
	} else if (strleq(key, keysize, C("saveconfig"))) {
                network_save_config(srv);
       } else {
		return luaL_error(L, "proxy.global.backends.%s is not writable", key);
	}
	return 1;
}
/**
 * 测试zabbix没有启动的情况
 * @return
 */
void test_admin_backend_mange_Add(void) {
	/** 初始化内存变量*/
	network_backend_t *b = NULL;
	chassis *srv1 = g_new0(chassis, 1);
	srv1->priv = g_new0(chassis_private, 1);
	srv1->priv->backends  = network_backends_new();
	srv1->xml_filename = "test_config.xml";
	network_backends_add(srv1->priv->backends, "X.X.X.X:3306#2#UP", BACKEND_TYPE_RW);
	b = network_backends_get(srv1->priv->backends, 0);
	g_mutex_init(&(b->mutex[0]));
	g_mutex_init(&(b->mutex[1]));

	network_backends_add(srv1->priv->backends, "X.X.X.X:3306#3#UP", BACKEND_TYPE_RO);
	b = network_backends_get(srv1->priv->backends, 1);
	g_mutex_init(&(b->mutex[0]));
	g_mutex_init(&(b->mutex[1]));

	network_mysqld_con *con = network_mysqld_con_new();
	con->client = network_socket_new();
	con->srv = srv1;
	con->srv->detect_threads = g_ptr_array_new();
	//network_mysqld_add_connection(srv1, con);

	gchar *cmd = g_strdup("addBackend --backend=X.X.X.X:3306");
	g_assert_cmpint(COMMAND_PROCESS_ERROR, ==, admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackend");
        g_assert_cmpint(COMMAND_PROCESS_ERROR, ==, admin_command_process(con, cmd));
        g_free(cmd);
        cmd = NULL;

	g_assert(COMMAND_NO_QUERY_SPECIFIED == admin_command_process(con, NULL));

	cmd = g_strdup("addBackend --backend=X.X.X.X:3307");
	g_assert(COMMAND_PROCESS_ERROR == admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackend --backend=X.X.X.X:3307#1#up --bktype=rw");
        g_assert(COMMAND_PROCESS_ERROR == admin_command_process(con, cmd));
        g_free(cmd);
        cmd = NULL;

	cmd = g_strdup("addBackend --backend=X.X.X.X:3307 --bktype=ro");
        g_assert(COMMAND_PROCESS_SUCCESS == admin_command_process(con, cmd));
	network_backend_t *backend = network_backends_get_by_name(srv1->priv->backends, "X.X.X.X:3307");
	g_assert(backend);
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackend --backend=192.1968.x.xx:3308");
	g_assert(COMMAND_PROCESS_ERROR == admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackend --backends=X.X.X.X:3308");
	g_assert(COMMAND_PROCESS_ERROR == admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackend --backend=X.X.X.X:103307");
	g_assert(COMMAND_PROCESS_ERROR == admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

	cmd = g_strdup("addBackends --backend=X.X.X.X:3308");
	g_assert(COMMAND_NOT_SUPPORT == admin_command_process(con, cmd));
	g_free(cmd);
	cmd = NULL;

//	g_ptr_array_free(con->srv->detect_threads, TRUE);
//	con->srv->detect_threads = NULL;

	//network_mysqld_con_free(con);
	//con = NULL;

	//network_backends_free(srv1->priv->backends);
	//srv1->priv->backends = NULL;

	//g_free(srv1->priv);
	//srv1->priv = NULL;

	//g_free(srv1);
	//srv1 = NULL;
}
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;
}