GError* m2v2_json_load_single_header (struct json_object *j, gpointer *pbean) { GError *err = NULL; GByteArray *id = NULL, *hash = NULL; struct bean_CONTENTS_HEADERS_s *header = NULL; struct json_object *jid, *jhash, *jsize, *jctime, *jmtime, *jmethod, *jtype; struct oio_ext_json_mapping_s mapping[] = { {"id", &jid, json_type_string, 1}, {"hash", &jhash, json_type_string, 1}, {"size", &jsize, json_type_int, 1}, {"ctime", &jctime, json_type_int, 0}, {"mtime", &jmtime, json_type_int, 0}, {"chunk-method", &jmethod, json_type_string, 1}, {"mime-type", &jtype, json_type_string, 1}, {NULL, NULL, 0, 0} }; *pbean = NULL; if (NULL != (err = oio_ext_extract_json (j, mapping))) return err; id = metautils_gba_from_hexstring(json_object_get_string(jid)); if (!id) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid header, not hexa id"); goto exit; } hash = metautils_gba_from_hexstring(json_object_get_string(jhash)); if (!hash || hash->len != 16) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid header, not hexa16 hash"); goto exit; } header = _bean_create (&descr_struct_CONTENTS_HEADERS); CONTENTS_HEADERS_set2_id (header, id->data, id->len); CONTENTS_HEADERS_set2_hash (header, hash->data, hash->len); CONTENTS_HEADERS_set_size (header, json_object_get_int64(jsize)); if (jctime) CONTENTS_HEADERS_set_ctime (header, json_object_get_int64(jctime)); if (jmtime) CONTENTS_HEADERS_set_mtime (header, json_object_get_int64(jmtime)); CONTENTS_HEADERS_set2_chunk_method (header, json_object_get_string(jmethod)); CONTENTS_HEADERS_set2_mime_type (header, json_object_get_string(jtype)); *pbean = header; header = NULL; exit: metautils_gba_unref (id); metautils_gba_unref (hash); _bean_clean (header); return err; }
GError * meta2_backend_destroy_container(struct meta2_backend_s *m2, struct oio_url_s *url, guint32 flags) { GError *err = NULL; gboolean local = flags & M2V2_DESTROY_LOCAL; struct sqlx_sqlite3_s *sq3 = NULL; guint counter = 0; void counter_cb(gpointer u, gpointer bean) { (void) u; counter ++; _bean_clean(bean); }
GError* m2v2_json_load_single_chunk (struct json_object *j, gpointer *pbean) { GError *err = NULL; GByteArray *hid = NULL, *hash = NULL; struct bean_CHUNKS_s *chunk = NULL; struct json_object *jid, *jcontent, *jhash, *jsize, *jctime, *jpos; struct oio_ext_json_mapping_s mapping[] = { {"id", &jid, json_type_string, 1}, {"hash", &jhash, json_type_string, 1}, {"size", &jsize, json_type_int, 1}, {"ctime", &jctime, json_type_int, 0}, {"content", &jcontent, json_type_string, 1}, {"pos", &jpos, json_type_string, 1}, {NULL, NULL, 0, 0} }; *pbean = NULL; if (NULL != (err = oio_ext_extract_json (j, mapping))) return err; hid = metautils_gba_from_hexstring(json_object_get_string(jid)); if (!hid) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid header, not hexa id"); goto exit; } hash = metautils_gba_from_hexstring(json_object_get_string(jhash)); if (!hash) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid chunk, not hexa header id"); goto exit; } chunk = _bean_create (&descr_struct_CHUNKS); CHUNKS_set2_id (chunk, json_object_get_string(jid)); CHUNKS_set_hash (chunk, hash); CHUNKS_set_size (chunk, json_object_get_int64(jsize)); CHUNKS_set_ctime (chunk, !jctime ? g_get_real_time() / G_TIME_SPAN_SECOND : json_object_get_int64(jctime)); CHUNKS_set_content (chunk, hid); CHUNKS_set2_position (chunk, json_object_get_string (jpos)); *pbean = chunk; chunk = NULL; exit: metautils_gba_unref (hid); metautils_gba_unref (hash); _bean_clean (chunk); return err; }
static int _update_content_storage_policy(struct gridd_filter_ctx_s *ctx, struct meta2_backend_s *m2b, struct oio_url_s *url, const char *stgpol) { GError *e = NULL; GSList *beans = NULL; gpointer alias = NULL; gpointer header = NULL; void _get_alias_header_cb(gpointer udata, gpointer bean) { (void) udata; if(DESCR(bean) == &descr_struct_ALIASES) alias = bean; else if (DESCR(bean) == &descr_struct_CONTENTS_HEADERS) header = bean; else _bean_clean(bean); }
void s3_list_cb(gpointer ignored, gpointer bean) { (void) ignored; if(max > 0) { if(DESCR(bean) == &descr_struct_ALIASES) { check_alias(bean); max--; if(0 == max) next_marker = g_strdup(ALIASES_get_alias(bean)->str); } else { _get_cb(obc, bean); } return; } if(DESCR(bean) == &descr_struct_ALIASES) { truncated = TRUE; } _bean_clean(bean); }
GError* m2v2_json_load_single_alias (struct json_object *j, gpointer *pbean) { GError *err = NULL; GByteArray *hid = NULL; struct bean_ALIASES_s *alias = NULL; struct json_object *jname, *jversion, *jctime, *jmd, *jheader; struct metautils_json_mapping_s m[] = { {"name", &jname, json_type_string, 1}, {"ver", &jversion, json_type_int, 1}, {"ctime", &jctime, json_type_int, 1}, {"header", &jheader, json_type_string, 1}, {"system_metadata", &jmd, json_type_string, 1}, {NULL, NULL, 0, 0} }; *pbean = NULL; if (NULL != (err = metautils_extract_json(j, m))) goto exit; hid = metautils_gba_from_hexstring(json_object_get_string(jheader)); if (!hid) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid alias, not hexadecimal header_id"); goto exit; } alias = _bean_create (&descr_struct_ALIASES); ALIASES_set_deleted (alias, FALSE); ALIASES_set_container_version (alias, 0); ALIASES_set_ctime (alias, 0); ALIASES_set2_alias (alias, json_object_get_string(jname)); ALIASES_set_version (alias, json_object_get_int64(jversion)); ALIASES_set2_mdsys (alias, json_object_get_string(jmd)); ALIASES_set2_content_id (alias, hid->data, hid->len); *pbean = alias; alias = NULL; exit: metautils_gba_unref (hid); _bean_clean (alias); return err; }
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); } }
GError* m2v2_json_load_single_chunk (struct json_object *j, gpointer *pbean) { GError *err = NULL; GByteArray *hash = NULL; struct bean_CHUNKS_s *chunk = NULL; struct json_object *jid, *jhash, *jsize; struct metautils_json_mapping_s mapping[] = { {"id", &jid, json_type_string, 1}, {"hash", &jhash, json_type_string, 1}, {"size", &jsize, json_type_int, 1}, {NULL, NULL, 0, 0} }; *pbean = NULL; if (NULL != (err = metautils_extract_json (j, mapping))) return err; hash = metautils_gba_from_hexstring(json_object_get_string(jhash)); if (!hash) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid chunk, not hexa header id"); goto exit; } chunk = _bean_create (&descr_struct_CHUNKS); CHUNKS_set2_id (chunk, json_object_get_string(jid)); CHUNKS_set2_hash (chunk, hash->data, hash->len); CHUNKS_set_size (chunk, json_object_get_int64(jsize)); CHUNKS_set_ctime (chunk, 0); *pbean = chunk; chunk = NULL; exit: metautils_gba_unref (hash); _bean_clean (chunk); return err; }
GError* m2v2_json_load_single_content (struct json_object *j, gpointer *pbean) { GError *err = NULL; GByteArray *hid = NULL; struct bean_CONTENTS_s *content = NULL; struct json_object *jhid, *jcid, *jpos; struct metautils_json_mapping_s mapping[] = { {"hdr", &jhid, json_type_string, 1}, {"chunk", &jcid, json_type_string, 1}, {"pos", &jpos, json_type_string, 1}, {NULL, NULL, 0, 0} }; *pbean = NULL; if (NULL != (err = metautils_extract_json (j, mapping))) return err; hid = metautils_gba_from_hexstring(json_object_get_string(jhid)); if (!hid) { err = NEWERROR(CODE_BAD_REQUEST, "Invalid content, not hexa header id"); goto exit; } content = _bean_create (&descr_struct_CONTENTS); CONTENTS_set2_content_id (content, hid->data, hid->len); CONTENTS_set2_chunk_id (content, json_object_get_string (jcid)); CONTENTS_set2_position (content, json_object_get_string (jpos)); *pbean = content; content = NULL; exit: metautils_gba_unref (hid); _bean_clean (content); return err; }