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; }
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; }
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); } }
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); }