Ejemplo n.º 1
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;
}
Ejemplo n.º 2
0
gs_error_t *
hc_create_container(gs_grid_storage_t *hc, struct hc_url_s *url,
		const char *stgpol, const char *versioning)
{
	GError *err = NULL;
	gs_error_t *e = NULL;
	gs_container_t *c = NULL;
	struct m2v2_create_params_s params = {stgpol, versioning, FALSE};

	c = gs_get_storage_container2(hc, hc_url_get(url, HCURL_REFERENCE),
			&params, 0, &e);

	if (c != NULL) {
		gchar m2[STRLEN_ADDRINFO] = {0};
		addr_info_to_string(&(c->meta2_addr), m2, STRLEN_ADDRINFO);
		err = m2v2_remote_execute_HAS(m2, NULL, url);
		if (err == NULL) {
			e = gs_error_new(CODE_CONTAINER_EXISTS,
					"Failed to create container [%s]: "
					"container already exists in namespace [%s]\n",
					hc_url_get(url, HCURL_REFERENCE), hc_url_get(url, HCURL_NS));
			goto end_label;
		} else if (err->code != CODE_CONTAINER_NOTFOUND) {
			GSERRORCAUSE(&e, err,
					"Failed to check container existence in meta2: ");
			goto end_label;
		} else {
			GRID_WARN("Container exists in meta1 but not in meta2");
		}
	}

	gs_error_free(e);
	e = NULL;
	c = gs_get_storage_container2(hc, hc_url_get(url, HCURL_REFERENCE),
			&params, 1, &e);

	if (c)
		GRID_INFO("Container [%s] created in namespace [%s].\n\n",
				hc_url_get(url, HCURL_REFERENCE), hc_url_get(url, HCURL_NS));

end_label:
	gs_container_free(c);
	g_clear_error(&err);

	return e;
}