static GByteArray* m2v2_remote_pack_RAW_SUBST(struct oio_url_s *url, GSList *new_chunks, GSList *old_chunks) { GByteArray *new_chunks_gba = bean_sequence_marshall(new_chunks); GByteArray *old_chunks_gba = bean_sequence_marshall(old_chunks); MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_RAW_SUBST, url, NULL); metautils_message_add_fields_gba(msg, NAME_MSGKEY_NEW, new_chunks_gba, NAME_MSGKEY_OLD, old_chunks_gba, NULL); g_byte_array_unref (new_chunks_gba); g_byte_array_unref (old_chunks_gba); return message_marshall_gba_and_clean(msg); }
int meta2_filter_action_deduplicate_container(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply) { GSList* result = NULL; // list of list GSList* common_prefixes = NULL; SRVSTUB_PRINTF("packet received...DEDUP"); void send_result() { GSList *list_of_lists = NULL; list_of_lists = gslist_split(result, 32); for (GSList *cursor = list_of_lists; cursor; cursor = cursor->next) { reply->add_body(bean_sequence_marshall(cursor->data)); reply->send_reply(206, "Partial content"); } if (NULL != common_prefixes) { char **array = (char **)metautils_list_to_array(common_prefixes); reply->add_header("COMMON_PREFIXES", metautils_encode_lines(array)); g_strfreev(array); } /* TODO : max-keys, truncated */ reply->send_reply(200, "OK"); gslist_chunks_destroy(list_of_lists, NULL); }
int meta2_filter_action_purge_container(struct gridd_filter_ctx_s *ctx, struct gridd_reply_ctx_s *reply) { (void) reply; SRVSTUB_PRINTF("packet received...PURGE"); // M2V2_MODE_DRYRUN, ... guint32 flags = 0; const char *fstr = NULL; if (NULL != fstr) flags = (guint32) g_ascii_strtoull(fstr, NULL, 10); GSList* del_chunks_list = NULL; if (NULL != g_err) { GRID_DEBUG("Container purge failed (%d) : %s", g_err->code, g_err->message); //meta2_filter_ctx_set_error(ctx, err); return FILTER_KO; } reply->add_body(bean_sequence_marshall(g_responsedata)); reply->send_reply(200, "OK"); _bean_cleanl2(del_chunks_list); return FILTER_OK; }
GByteArray* m2v2_remote_pack_PROP_SET(GByteArray *sid, struct hc_url_s *url, guint32 flags, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); return _m2v2_pack_request_with_flags("M2V2_PROP_SET", sid, url, body, flags); }
static GByteArray* m2v2_remote_pack_PROP_SET(struct oio_url_s *url, guint32 flags, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); return _m2v2_pack_request_with_flags(NAME_MSGNAME_M2V2_PROP_SET, url, body, flags); }
static GByteArray* m2v2_remote_pack_PUT(struct oio_url_s *url, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); MESSAGE msg = _m2v2_build_request (NAME_MSGNAME_M2V2_PUT, url, body); return message_marshall_gba_and_clean(msg); }
static GByteArray* m2v2_remote_pack_OVERWRITE(struct oio_url_s *url, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_PUT, url, body); metautils_message_add_field_str(msg, NAME_MSGKEY_OVERWRITE, "1"); return message_marshall_gba_and_clean(msg); }
GByteArray* m2v2_remote_pack_SUBST_CHUNKS(GByteArray *sid, struct hc_url_s *url, GSList *new_chunks, GSList *old_chunks, gboolean restrict_to_alias) { struct message_s *msg; GByteArray *new_chunks_gba = bean_sequence_marshall(new_chunks); GByteArray *old_chunks_gba = bean_sequence_marshall(old_chunks); msg = _m2v2_build_request("M2V2_SUBST_CHUNKS", sid, url, NULL); if (restrict_to_alias) { (void) message_add_field(msg, M2_KEY_RESTRICT_TO_ALIAS, sizeof(M2_KEY_RESTRICT_TO_ALIAS)-1, "TRUE", 5, NULL); } message_add_fields_gba(msg, M2_KEY_NEW_CHUNKS, new_chunks_gba, M2_KEY_OLD_CHUNKS, old_chunks_gba, NULL); g_byte_array_unref(new_chunks_gba); g_byte_array_unref(old_chunks_gba); return message_marshall_gba_and_clean(msg); }
GByteArray* m2v2_remote_pack_OVERWRITE(GByteArray *sid, struct hc_url_s *url, GSList *beans) { struct message_s *msg; GByteArray *body = bean_sequence_marshall(beans); msg = _m2v2_build_request("M2V2_PUT", sid, url, body); (void) message_add_field(msg, M2_KEY_OVERWRITE, sizeof(M2_KEY_OVERWRITE)-1, "1", 1, NULL); return message_marshall_gba_and_clean(msg); }
GByteArray* m2v2_remote_pack_SPARE(GByteArray *sid, struct hc_url_s *url, const gchar *pol, GSList *notin_list, GSList *broken_list) { struct message_s *msg; gchar *spare_type = M2V2_SPARE_BY_STGPOL; GByteArray *body = NULL; GSList *beans = NULL; if (notin_list != NULL) { spare_type = M2V2_SPARE_BY_BLACKLIST; for (GSList *l = notin_list; l != NULL; l = l->next) { if (DESCR(l->data) != &descr_struct_CHUNKS) continue; beans = g_slist_prepend(beans, _bean_dup(l->data)); } } for (GSList *l = broken_list; l != NULL; l = l->next) { if (DESCR(l->data) != &descr_struct_CHUNKS) continue; struct bean_CHUNKS_s *chunk = _bean_dup(l->data); // This makes difference between valid and broken chunks CHUNKS_set_size(chunk, -1); beans = g_slist_prepend(beans, chunk); } /* body is only mandatory for M2V2_SPARE_BY_BLACKLIST so when * notin_list != NULL. If not_in_list != NULL, beans is always * != NULL so body is sent. */ if (beans != NULL) body = bean_sequence_marshall(beans); msg = _m2v2_build_request("M2V2_BEANS", sid, url, body); message_add_fields_str(msg, M2_KEY_STORAGE_POLICY, pol, M2_KEY_SPARE, spare_type, NULL); _bean_cleanl2(beans); return message_marshall_gba_and_clean(msg); }
GByteArray* m2v2_remote_pack_RAW_DEL(GByteArray *sid, struct hc_url_s *url, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); return _m2v2_pack_request("M2V2_RAW_DEL", sid, url, body); }
g_slist_concat(obc->l, (GSList*)meta2_filter_ctx_get_input_udata(obc->ctx)), (GDestroyNotify) _bean_cleanl2, FALSE); } } else { GRID_TRACE("Events disabled, cleaning beans immediately"); _bean_cleanl2(obc->l); } } void _on_bean_ctx_send_list(struct on_bean_ctx_s *obc, gboolean final) { /* marshall the list, send and clean it */ if (NULL != obc->l) { obc->reply->add_body(bean_sequence_marshall(obc->l)); _on_bean_ctx_append_udata_list(obc); } if (final) obc->reply->send_reply(200, "OK"); else obc->reply->send_reply(206, "CONTINUE"); obc->l = NULL; } void _on_bean_ctx_clean(struct on_bean_ctx_s *obc) { if(!obc) return;
static GByteArray* m2v2_remote_pack_RAW_ADD(struct oio_url_s *url, GSList *beans) { GByteArray *body = bean_sequence_marshall(beans); return _m2v2_pack_request(NAME_MSGNAME_M2V2_RAW_ADD, url, body); }