int network_backends_add(network_backends_t *bs, gchar *address, backend_type_t type) { int ret; g_mutex_lock(bs->backends_mutex); ret = network_backends_add_unlock(bs, address, type); g_mutex_unlock(bs->backends_mutex); return ret; }
int load_keyfile_to_options(GKeyFile *keyfile, const gchar *ini_group_name, chassis *chas) { GError *gerr = NULL; chassis_private *g = chas->priv; gchar **arg_string_array; int i, j, array_size, count; gsize len; gchar* reload_items[] = {"proxy-backend-addresses", "proxy-read-only-backend-addresses", "proxy-master-standby-address", "client-ips", "pwds" }; g_mutex_lock(g->backends->backends_mutex); count = g->backends->backends->len; for (i = 0; i < count; i++) { network_backends_remove_unlock(g->backends, 0);/*erase the whole always from the index of zero*/ } array_size = sizeof(reload_items) / sizeof(gchar*); if (!keyfile) { g_mutex_unlock(g->backends->backends_mutex); return -1; } if (!g_key_file_has_group(keyfile, ini_group_name)) { g_mutex_unlock(g->backends->backends_mutex); return 0; } for (i = 0;i < array_size; i++) { if (!g_key_file_has_key(keyfile, ini_group_name, reload_items[i], &gerr)) { if (i == 3) {/*client-ips*/ chassis_plugin* p = chas->modules->pdata[1]; p->insert_clientips(NULL, p->config); } continue; } arg_string_array = g_key_file_get_string_list(keyfile, ini_group_name, reload_items[i], &len, &gerr); if (!gerr) { if (i < 3) { for (j = 0; arg_string_array[j]; j++) { arg_string_array[j] = g_strstrip(arg_string_array[j]); switch (i) { case 0: network_backends_add_unlock(g->backends, arg_string_array[j], BACKEND_TYPE_RW); break; case 1: network_backends_add_unlock(g->backends, arg_string_array[j], BACKEND_TYPE_RO); break; case 2: network_backends_add_unlock(g->backends, arg_string_array[j], BACKEND_TYPE_SY); break; } } }else if(i == 3) { chassis_plugin* p = chas->modules->pdata[1]; p->insert_clientips(arg_string_array, p->config); }else if(i == 4) { chassis_plugin* p = chas->modules->pdata[1]; p->insert_pwds(arg_string_array, p->config); } g_strfreev(arg_string_array); } else { g_message("%s:load keyfile_to options fail, gerr is :%s", G_STRLOC, gerr->message); g_error_free(gerr); gerr = NULL; g_mutex_unlock(g->backends->backends_mutex); return -1; } } for (i = 0; i < g->backends->backends->len; i++ ) { network_backend_t* b = g_ptr_array_index(g->backends->backends, i); b->state = BACKEND_STATE_UP; } g->backends->global_wrr->max_weight = 0; //Reinitialize all backend weight g_mutex_unlock(g->backends->backends_mutex); return 0; }