Example #1
0
	static gs_error_t*
_m1policy_update(gchar *action, gchar *ns,gboolean isprefix, container_id_t cid, gchar *type, gchar *exludesrv, gboolean checkonly, gchar ***result )
{
	GError *err=NULL;
	gs_error_t *hc_error = NULL;
	GSList *exclude = NULL;
	addr_info_t *m1addr;
	gs_grid_storage_t *hc;
	gchar ** hc_result = NULL;

	hc = gs_grid_storage_init(ns, &hc_error);
	if (!hc)
		return hc_error;

	m1addr = gs_resolve_meta1v2(hc,cid,NULL,0,exclude,&err);
	while (m1addr) {
		hc_result = meta1v2_remote_update_m1_policy(m1addr, &err, ns, ( isprefix ? cid : NULL), ( isprefix ? NULL: cid), type, action, checkonly, exludesrv, 300, 300);
		if ( err ) {
			if ( err->code < 100 || err->code > 500 ) {
				exclude=g_slist_prepend(exclude,m1addr);
				m1addr = gs_resolve_meta1v2(hc,cid,NULL,0,exclude,&err);
			} else {
				GRID_WARN("META1 request error (%d) : %s", err->code, err->message);
				GSERRORCAUSE(&hc_error, err, "Failed to apply Meta1 policy\n");
				m1addr=NULL;
			}
			g_clear_error(&err);
		} else {
			break;
		}
	}
	gs_grid_storage_free(hc);
	if(exclude) {
		g_slist_foreach(exclude, addr_info_gclean, NULL);
		g_slist_free(exclude);
	}
	if(m1addr)
		g_free(m1addr);

	*result = hc_result;
	return hc_error;
}
Example #2
0
static status_t
_get_container_user_properties(gs_grid_storage_t *hc, struct hc_url_s *url,
		char ***props, gs_error_t **gserr)
{
	GError *gerr = NULL;
	gboolean rc;
	addr_info_t *m1 = NULL;
	GSList *excluded = NULL;

	gs_container_t *c = gs_get_container(hc, hc_url_get(url, HCURL_USER), 0, gserr);
	if(!c)
		return 0;
	for (;;) {

		m1 = gs_resolve_meta1v2(hc, hc_url_get_id(url), c->info.name, 1, &excluded, &gerr);

		if (!m1) {
			*gserr = gs_error_new(CODE_INTERNAL_ERROR, "No META1 found for [%s]", hc_url_get(url, HCURL_USER));
			break;
		}

		rc = meta1v2_remote_reference_get_property (m1, &gerr, url, NULL, props);

		if (!rc) {
			excluded = g_slist_prepend(excluded, m1);
			m1=NULL;
			if (gerr) {
				if (CODE_IS_NETWORK_ERROR(gerr->code)) {
					g_error_free(gerr);
					gerr = NULL;
				} else {
					GSERRORCAUSE(gserr, gerr, "Cannot get container user properties");
					break;
				}
			}
		} else {
			break;
		}
	}
	if (excluded) {
		g_slist_foreach(excluded, addr_info_gclean, NULL);
		g_slist_free(excluded);
	}
	if (m1)
		g_free(m1);

	gs_container_free(c);

	if (gerr)
		g_error_free(gerr);

	return rc;
}