static GError* _reload_lbpool(struct grid_lbpool_s *glp, gboolean flush) { gboolean _reload_srvtype(const gchar *ns, const gchar *srvtype) { GSList *list_srv = NULL; GError *err = conscience_get_services (ns, srvtype, FALSE, &list_srv); if (err) { GRID_WARN("Gridagent/conscience error: Failed to list the services" " of type [%s]: code=%d %s", srvtype, err->code, err->message); g_clear_error(&err); return FALSE; } if (list_srv || flush) { GSList *l = list_srv; gboolean provide(struct service_info_s **p_si) { if (!l) return FALSE; *p_si = l->data; l->data = NULL; l = l->next; return TRUE; } grid_lbpool_reload(glp, srvtype, provide); g_slist_free(list_srv); }
static struct grid_lbpool_s * _init_lb(const gchar *ns) { struct def_s { const gchar *url, *loc; }; static struct def_s defs[] = { {"127.0.0.1:1025","site0.salle0.baie0.device0"}, {"127.0.0.1:1026","site0.salle0.baie0.device1"}, {"127.0.0.1:1027","site0.salle0.baie1.device0"}, {"127.0.0.1:1028","site0.salle1.baie0.device0"}, {"127.0.0.1:1029","site0.salle1.baie1.device0"}, {"127.0.0.1:1030","site0.salle1.baie0.device1"}, {NULL,NULL} }; struct def_s *pdef = defs; gint score = 0; gboolean provide(struct service_info_s **p_si) { struct service_info_s *si; if (!pdef->url) return FALSE; si = g_malloc0(sizeof(*si)); metautils_strlcpy_physical_ns(si->ns_name, "NS", sizeof(si->ns_name)); g_strlcpy(si->type, "rawx", sizeof(si->type)); si->score.timestamp = time(0); si->score.value = ++score; grid_string_to_addrinfo(pdef->url, NULL, &(si->addr)); pdef++; *p_si = si; return TRUE; } struct grid_lbpool_s *glp = grid_lbpool_create(ns); g_assert(glp != NULL); grid_lbpool_configure_string(glp, "rawx", "RR"); grid_lbpool_reload(glp, "rawx", provide); return glp; }