/** * 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; }
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; }