static MESSAGE make_request(const gchar *rn, struct sqlx_name_s *name) { MESSAGE req = metautils_message_create_named(rn); metautils_message_add_field_str(req, NAME_MSGKEY_BASENAME, name->base); metautils_message_add_field_str(req, NAME_MSGKEY_BASETYPE, name->type); metautils_message_add_field_str(req, NAME_MSGKEY_NAMESPACE, name->ns); return req; }
GError * conscience_remote_get_services(const char *cs, const char *type, gboolean full, GSList **out) { EXTRA_ASSERT(type != NULL); MESSAGE req = metautils_message_create_named(NAME_MSGNAME_CS_GET_SRV); metautils_message_add_field_str (req, NAME_MSGKEY_TYPENAME, type); if (full) metautils_message_add_field_str(req, NAME_MSGKEY_FULL, "1"); return gridd_client_exec_and_decode (cs, CS_CLIENT_TIMEOUT, message_marshall_gba_and_clean(req), out, service_info_unmarshall); }
static GByteArray* m2v2_remote_pack_BEANS(struct oio_url_s *url, const char *pol, gint64 size, gboolean append) { MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_BEANS, url, NULL); metautils_message_add_field_strint64 (msg, NAME_MSGKEY_CONTENTLENGTH, size); metautils_message_add_field_str (msg, NAME_MSGKEY_STGPOLICY, pol); if (append) metautils_message_add_field_str (msg, NAME_MSGKEY_APPEND, "true"); /* si policy est NULL, le paramètre ne sera pas ajouté. On profite que * ce soit ldernier argument de la liste */ return message_marshall_gba_and_clean(msg); }
static GByteArray* m2v2_remote_pack_DESTROY(struct oio_url_s *url, guint32 flags) { MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_DESTROY, url, NULL); if (flags & M2V2_DESTROY_FORCE) metautils_message_add_field_str(msg, NAME_MSGKEY_FORCE, "1"); if (flags & M2V2_DESTROY_FLUSH) metautils_message_add_field_str(msg, NAME_MSGKEY_FLUSH, "1"); if (flags & M2V2_DESTROY_PURGE) metautils_message_add_field_str(msg, NAME_MSGKEY_PURGE, "1"); if (flags & M2V2_DESTROY_LOCAL) metautils_message_add_field_str(msg, NAME_MSGKEY_LOCAL, "1"); return message_marshall_gba_and_clean(msg); }
static GByteArray* m2v2_remote_pack_STGPOL(struct oio_url_s *url, const char *pol) { MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_STGPOL, url, NULL); metautils_message_add_field_str(msg, NAME_MSGKEY_STGPOLICY, pol); return message_marshall_gba_and_clean(msg); }
GByteArray* sqlx_pack_PIPEFROM(struct sqlx_name_s *name, const gchar *source) { MESSAGE req = make_request(NAME_MSGNAME_SQLX_PIPEFROM, name); metautils_message_add_field_str(req, NAME_MSGKEY_SRC, source); return message_marshall_gba_and_clean(req); }
GByteArray* sqlx_pack_PIPETO(struct sqlx_name_s *name, const gchar *target) { MESSAGE req = make_request(NAME_MSGNAME_SQLX_PIPETO, name); metautils_message_add_field_str(req, NAME_MSGKEY_DST, target); return message_marshall_gba_and_clean(req); }
void metautils_message_add_field_strint64(MESSAGE m, const char *name, gint64 v) { gchar tmp[24]; g_snprintf(tmp, 24, "%"G_GINT64_FORMAT, v); return metautils_message_add_field_str(m, name, tmp); }
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); }
GError* meta0_remote_assign(const char *m0, gboolean nocheck) { MESSAGE request = metautils_message_create_named(NAME_MSGNAME_M0_ASSIGN); if (nocheck) metautils_message_add_field_str (request, NAME_MSGKEY_NOCHECK, "yes"); return _m0_remote_no_return (m0, message_marshall_gba_and_clean(request)); }
static GByteArray* m2v2_remote_pack_LIST_BY_CHUNKID(struct oio_url_s *url, struct list_params_s *p, const char *chunk) { MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_LCHUNK, url, NULL); _pack_list_params (msg, p); metautils_message_add_field_str (msg, NAME_MSGKEY_KEY, chunk); return message_marshall_gba_and_clean(msg); }
GError* meta0_remote_destroy_meta0zknode(const char *m0, const char *urls) { if (!urls || !*urls) return NEWERROR(CODE_BAD_REQUEST, "Too few URL's"); MESSAGE request = metautils_message_create_named(NAME_MSGNAME_M0_DESTROY_META0ZKNODE); metautils_message_add_field_str (request, NAME_MSGKEY_METAURL, urls); return _m0_remote_no_return (m0, message_marshall_gba_and_clean(request)); }
static GByteArray* m2v2_remote_pack_CREATE(struct oio_url_s *url, struct m2v2_create_params_s *pols) { MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_CREATE, url, NULL); if (pols && pols->storage_policy) metautils_message_add_field_str(msg, NAME_MSGKEY_STGPOLICY, pols->storage_policy); if (pols && pols->version_policy) metautils_message_add_field_str(msg, NAME_MSGKEY_VERPOLICY, pols->version_policy); if (pols && pols->properties) { for (gchar **p=pols->properties; *p && *(p+1) ;p+=2) { gchar *k = g_strconcat (NAME_MSGKEY_PREFIX_PROPERTY, *p, NULL); metautils_message_add_field_str (msg, k, *(p+1)); g_free (k); } } return message_marshall_gba_and_clean(msg); }
GError* conscience_remote_remove_services(const char *cs, const char *type, GSList *ls) { MESSAGE req = metautils_message_create_named (NAME_MSGNAME_CS_RM_SRV); if (ls) metautils_message_add_body_unref (req, service_info_marshall_gba (ls, NULL)); if (type) metautils_message_add_field_str (req, NAME_MSGKEY_TYPENAME, type); return gridd_client_exec (cs, CS_CLIENT_TIMEOUT, message_marshall_gba_and_clean(req)); }
static void _pack_list_params (MESSAGE msg, struct list_params_s *p) { guint32 flags = 0; if (p->flag_allversion) flags |= M2V2_FLAG_ALLVERSION; if (p->flag_headers) flags |= M2V2_FLAG_HEADERS; if (p->flag_nodeleted) flags |= M2V2_FLAG_NODELETED; flags = g_htonl(flags); metautils_message_add_field(msg, NAME_MSGKEY_FLAGS, &flags, sizeof(flags)); metautils_message_add_field_str(msg, NAME_MSGKEY_PREFIX, p->prefix); metautils_message_add_field_str(msg, NAME_MSGKEY_MARKER, p->marker_start); metautils_message_add_field_str(msg, NAME_MSGKEY_MARKER_END, p->marker_end); if (p->maxkeys > 0) metautils_message_add_field_strint64(msg, NAME_MSGKEY_MAX_KEYS, p->maxkeys); }
GSList * gcluster_get_services(const char *target, gdouble timeout, const gchar *type, gboolean full, GError ** error) { MESSAGE req = metautils_message_create_named(NAME_MSGNAME_CS_GET_SRV); metautils_message_add_field_str (req, NAME_MSGKEY_TYPENAME, type); if (full) metautils_message_add_field_str(req, NAME_MSGKEY_FULL, "1"); GSList *out = NULL; GError *err = gridd_client_exec_and_decode (target, ((gdouble)timeout)/1000.0, message_marshall_gba_and_clean(req), &out, service_info_unmarshall); if (err) { g_error_transmit(error, err); g_slist_free_full (out, (GDestroyNotify)service_info_clean); } return out; }
static GByteArray* m2v2_remote_pack_SPARE(struct oio_url_s *url, const char *pol, GSList *notin_list, GSList *broken_list) { gchar *spare_type = M2V2_SPARE_BY_STGPOL; 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. */ GByteArray *body = NULL; if (beans != NULL) body = bean_sequence_marshall(beans); MESSAGE msg = _m2v2_build_request(NAME_MSGNAME_M2V2_BEANS, url, body); metautils_message_add_field_str (msg, NAME_MSGKEY_STGPOLICY, pol); metautils_message_add_field_str (msg, NAME_MSGKEY_SPARE, spare_type); _bean_cleanl2(beans); return message_marshall_gba_and_clean(msg); }
GError* meta0_remote_disable_meta1(const char *m0, gchar **urls, gboolean nocheck) { if (!urls || !*urls) return NEWERROR(CODE_BAD_REQUEST, "Too few URL's"); MESSAGE request = metautils_message_create_named(NAME_MSGNAME_M0_DISABLE_META1); if (nocheck) metautils_message_add_field_str(request, NAME_MSGKEY_NOCHECK, "yes"); gchar *body = g_strjoinv("\n", urls); metautils_message_set_BODY(request, body, strlen(body)); g_free(body); return _m0_remote_no_return (m0, message_marshall_gba_and_clean(request)); }
GByteArray* sqlx_pack_QUERY(struct sqlx_name_s *name, const gchar *query, struct TableSequence *params, gboolean autocreate) { EXTRA_ASSERT(name != NULL); EXTRA_ASSERT(query != NULL); guint8 ac = (guint8) autocreate; MESSAGE req = make_request(NAME_MSGNAME_SQLX_QUERY, name); metautils_message_add_field(req, NAME_MSGKEY_AUTOCREATE, &ac, 1); metautils_message_add_field_str(req, NAME_MSGKEY_QUERY, query); if (params) metautils_message_add_body_unref (req, sqlx_encode_TableSequence( params, NULL)); return message_marshall_gba_and_clean(req); }
void metautils_message_add_url_no_type (MESSAGE m, struct oio_url_s *url) { if (!m) return; for (struct map_s *p = url2msg_map; p->f ;++p) { if (p->u != OIOURL_TYPE && oio_url_has (url, p->u)) { const char *s = oio_url_get (url, p->u); if (!p->avoid || strcmp(p->avoid, s)) metautils_message_add_field_str(m, p->f, s); } } const guint8 *id = oio_url_get_id (url); if (id) metautils_message_add_field (m, NAME_MSGKEY_CONTAINERID, id, oio_url_get_id_size (url)); }
enum http_rc_e action_forward (struct req_args_s *args) { const char *id = OPT("id"); const char *action = TOK("ACTION"); if (!id) return _reply_format_error (args, BADREQ("Missing SRVID")); if (!action) return _reply_format_error (args, BADREQ("Missing action")); GError *err = NULL; if (!g_ascii_strcasecmp (action, "flush")) { err = sqlx_remote_execute_FLUSH (id); if (!err) return _reply_success_json (args, NULL); return _reply_common_error (args, err); } if (!g_ascii_strcasecmp (action, "reload")) { err = sqlx_remote_execute_RELOAD (id); if (!err) return _reply_success_json (args, NULL); return _reply_common_error (args, err); } if (!g_ascii_strcasecmp (action, "kill")) { GByteArray *encoded = message_marshall_gba_and_clean ( metautils_message_create_named("REQ_KILL")); err = gridd_client_exec (id, 1.0, encoded); if (err) return _reply_common_error (args, err); return _reply_success_json (args, NULL); } if (!g_ascii_strcasecmp (action, "ping")) { args->rp->no_access(); GByteArray *encoded = message_marshall_gba_and_clean ( metautils_message_create_named("REQ_PING")); err = gridd_client_exec (id, 1.0, encoded); if (err) return _reply_common_error (args, err); return _reply_success_json (args, NULL); } if (!g_ascii_strcasecmp (action, "lean-glib")) { MESSAGE req = metautils_message_create_named("REQ_LEAN"); metautils_message_add_field_str(req, "LIBC", "1"); metautils_message_add_field_str(req, "THREADS", "1"); GByteArray *encoded = message_marshall_gba_and_clean (req); err = gridd_client_exec (id, 1.0, encoded); if (err) return _reply_common_error (args, err); return _reply_success_json (args, NULL); } if (!g_ascii_strcasecmp (action, "lean-sqlx")) { GByteArray *encoded = message_marshall_gba_and_clean ( metautils_message_create_named(NAME_MSGNAME_SQLX_LEANIFY)); err = gridd_client_exec (id, 1.0, encoded); if (err) return _reply_common_error (args, err); return _reply_success_json (args, NULL); } if (!g_ascii_strcasecmp (action, "version")) { args->rp->no_access(); MESSAGE req = metautils_message_create_named("REQ_VERSION"); GByteArray *encoded = message_marshall_gba_and_clean (req); gchar *packed = NULL; err = gridd_client_exec_and_concat_string (id, 1.0, encoded, &packed); if (err) { g_free0 (packed); return _reply_common_error (args, err); } /* TODO(jfs): quite duplicated from _reply_json() but the original was not suitable. */ args->rp->set_status (200, "OK"); args->rp->set_body_bytes (g_bytes_new_take((guint8*)packed, strlen(packed))); args->rp->finalize (); return HTTPRC_DONE; } if (!g_ascii_strcasecmp (action, "handlers")) { args->rp->no_access(); MESSAGE req = metautils_message_create_named("REQ_HANDLERS"); GByteArray *encoded = message_marshall_gba_and_clean (req); gchar *packed = NULL; err = gridd_client_exec_and_concat_string (id, 1.0, encoded, &packed); if (err) { g_free0 (packed); return _reply_common_error (args, err); } /* TODO(jfs): quite duplicated from _reply_json() but the original was not suitable. */ args->rp->set_status (200, "OK"); args->rp->set_body_bytes (g_bytes_new_take((guint8*)packed, strlen(packed))); args->rp->finalize (); return HTTPRC_DONE; } return _reply_common_error (args, BADREQ("unexpected action")); }