コード例 #1
0
int
meta2_filter_action_purge_container(struct gridd_filter_ctx_s *ctx,
		struct gridd_reply_ctx_s *reply)
{
	reply->did_write = TRUE;

	// M2V2_MODE_DRYRUN, ...
    guint32 flags = 0;
	struct on_bean_ctx_s *obc = _on_bean_ctx_init(ctx, reply);
    const char *fstr = meta2_filter_ctx_get_param(ctx, M2_KEY_GET_FLAGS);
    if (NULL != fstr)
        flags = (guint32) g_ascii_strtoull(fstr, NULL, 10);

	GError *err = meta2_backend_purge_container(
			meta2_filter_ctx_get_backend(ctx),
			meta2_filter_ctx_get_url(ctx), flags, _get_cb, obc);

	if (NULL != err) {
		GRID_DEBUG("Container purge failed (%d): %s", err->code, err->message);
		meta2_filter_ctx_set_error(ctx, err);
		return FILTER_KO;
	}

	_on_bean_ctx_send_list(obc, TRUE);
	_on_bean_ctx_clean(obc);
	return FILTER_OK;
}
コード例 #2
0
static int
_list_NORMAL(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply,
		struct list_params_s *lp)
{
	GError *e = NULL;
	struct meta2_backend_s *m2b = meta2_filter_ctx_get_backend(ctx);
	struct hc_url_s *url = meta2_filter_ctx_get_url(ctx);
	struct on_bean_ctx_s *obc = _on_bean_ctx_init(ctx, reply);

	if (hc_url_has(url, HCURL_SNAPSHOT)) {
		lp->snapshot_name = hc_url_get(url, HCURL_SNAPSHOT);
	} else if (hc_url_has(url, HCURL_VERSION)) {
		lp->snapshot_name = hc_url_get(url, HCURL_VERSION);
	}

	e = meta2_backend_list_aliases(m2b, url, lp, _get_cb, obc);
	if (NULL != e) {
		GRID_DEBUG("Fail to return alias for url: %s",
				hc_url_get(url, HCURL_WHOLE));
		_on_bean_ctx_clean(obc);
		meta2_filter_ctx_set_error(ctx, e);
		return FILTER_KO;
	}

	_on_bean_ctx_send_list(obc, TRUE);
	_on_bean_ctx_clean(obc);
	return FILTER_OK;
}
コード例 #3
0
static int
_list_S3(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply,
		struct list_params_s *lp, GSList *headers)
{
	GError *e = NULL;
	struct meta2_backend_s *m2b = meta2_filter_ctx_get_backend(ctx);
	struct hc_url_s *url = meta2_filter_ctx_get_url(ctx);
	struct on_bean_ctx_s *obc = _on_bean_ctx_init(ctx, reply);
	gboolean truncated = FALSE;
	char *next_marker = NULL;
	gchar **properties = NULL;

	if (lp->maxkeys <= 0)
		lp->maxkeys = OIO_M2V2_LISTRESULT_BATCH;

	GRID_DEBUG("LP H:%d A:%d D:%d prefix:%s marker:%s end:%s max:%"G_GINT64_FORMAT,
			lp->flag_headers, lp->flag_allversion, lp->flag_nodeleted,
			lp->prefix, lp->marker_start, lp->marker_end, lp->maxkeys);

	// XXX the underlying meta2_backend_list_aliases() function MUST
	// return headers before the associated alias.
	gint64 max = lp->maxkeys;
	void s3_list_cb(gpointer ignored, gpointer bean) {
		(void) ignored;
		if (max > 0) {
			if (DESCR(bean) == &descr_struct_ALIASES) {
				_bean_list_cb(&obc->l, bean);
				if (0 == --max)
					next_marker = g_strdup(ALIASES_get_alias(bean)->str);
			} else {
				_bean_list_cb(&obc->l, bean);
			}
		} else {
			if (DESCR(bean) == &descr_struct_ALIASES)
				truncated = TRUE;
			_bean_clean(bean);
		}
	}
コード例 #4
0
static int
_list_S3(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply,
		struct list_params_s *lp)
{
	GError *e = NULL;
	struct meta2_backend_s *m2b = meta2_filter_ctx_get_backend(ctx);
	struct hc_url_s *url = meta2_filter_ctx_get_url(ctx);
	struct on_bean_ctx_s *obc = _on_bean_ctx_init(ctx, reply);
	GSList *common_prefixes = NULL;
	gint64 max = 0;
	gboolean truncated = FALSE;
	char *next_marker = NULL;

	GRID_DEBUG("S3 LISTING");
	lp->type = S3;
	lp->flags = lp->flags | M2V2_FLAG_HEADERS;
	lp->params.s3.prefix = meta2_filter_ctx_get_param(ctx,
			M2_KEY_PREFIX);
	lp->params.s3.marker = meta2_filter_ctx_get_param(ctx,
			M2_KEY_MARKER);
	lp->params.s3.delimiter = meta2_filter_ctx_get_param(ctx,
			M2_KEY_DELIMITER);
	const char *maxkeys_str = meta2_filter_ctx_get_param(ctx, M2_KEY_MAX_KEYS);
	if(NULL != maxkeys_str)
		lp->params.s3.maxkeys = g_ascii_strtoll(maxkeys_str, NULL, 10);
	lp->params.s3.maxkeys = (lp->params.s3.maxkeys > 0) ?
		lp->params.s3.maxkeys + 1 : 1001;

	max = lp->params.s3.maxkeys - 1;

	gboolean _is_directory(gpointer alias)
	{
		char *mtype = strstr(ALIASES_get_mdsys(alias)->str, "mime-type=");
		if (!mtype)
			return FALSE;
		return !g_ascii_strncasecmp("application/x-directory", mtype + 10, 23);
	}