Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}