From 15f9788a6e6e7fef004bb227dedf46dfff3402ec Mon Sep 17 00:00:00 2001 From: Ashish Kolhe <35160958+oasisk@users.noreply.github.com> Date: Sun, 28 Apr 2024 23:12:35 +0530 Subject: [PATCH] fix: format stream name for _bulk api (#3371) --- src/handler/http/request/stream/mod.rs | 16 +++++++++++++--- src/handler/http/router/mod.rs | 2 +- src/service/ingestion/mod.rs | 4 ++-- src/service/logs/bulk.rs | 4 +++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/handler/http/request/stream/mod.rs b/src/handler/http/request/stream/mod.rs index a9ba259812..85c32bfd8c 100644 --- a/src/handler/http/request/stream/mod.rs +++ b/src/handler/http/request/stream/mod.rs @@ -19,7 +19,7 @@ use std::{ }; use actix_web::{delete, get, http, put, web, HttpRequest, HttpResponse, Responder}; -use config::meta::stream::{StreamSettings, StreamType}; +use config::meta::stream::{RoutingCondition, StreamSettings, StreamType}; use crate::{ common::{ @@ -30,7 +30,7 @@ use crate::{ }, utils::http::get_stream_type_from_request, }, - service::stream, + service::{format_stream_name, stream}, }; /// GetSchema @@ -93,10 +93,11 @@ async fn schema( #[put("/{org_id}/streams/{stream_name}/settings")] async fn settings( path: web::Path<(String, String)>, - settings: web::Json, + mut settings: web::Json, req: HttpRequest, ) -> Result { let (org_id, stream_name) = path.into_inner(); + let stream_name = format_stream_name(&stream_name); let query = web::Query::>::from_query(req.query_string()).unwrap(); let stream_type = match get_stream_type_from_request(&query) { Ok(v) => { @@ -123,6 +124,15 @@ async fn settings( ); } }; + // if routing is provided format the key using format_stream_name + if let Some(ref mut routing_map) = settings.routing { + let new_routing: hashbrown::HashMap> = routing_map + .drain() + .map(|(key, value)| (format_stream_name(&key), value)) + .collect(); + settings.routing = Some(new_routing); + } + let stream_type = stream_type.unwrap_or(StreamType::Logs); stream::save_stream_settings(&org_id, &stream_name, stream_type, settings.into_inner()).await } diff --git a/src/handler/http/router/mod.rs b/src/handler/http/router/mod.rs index 7f34f06377..9f6a67269e 100644 --- a/src/handler/http/router/mod.rs +++ b/src/handler/http/router/mod.rs @@ -125,7 +125,7 @@ async fn audit_middleware( if res.response().error().is_none() { let body = if path.ends_with("/settings/logo") { // Binary data, encode it with base64 - general_purpose::STANDARD.encode(request_body.to_vec()) + general_purpose::STANDARD.encode(&request_body) } else { String::from_utf8(request_body.to_vec()).unwrap() }; diff --git a/src/service/ingestion/mod.rs b/src/service/ingestion/mod.rs index cb4b79cf93..e47d8ed936 100644 --- a/src/service/ingestion/mod.rs +++ b/src/service/ingestion/mod.rs @@ -45,7 +45,7 @@ use crate::{ }, utils::functions::get_vrl_compiler_config, }, - service::{db, format_partition_key}, + service::{db, format_partition_key, format_stream_name}, }; pub mod grpc; @@ -433,7 +433,7 @@ pub async fn get_stream_routing( .unwrap_or_default() .iter() .map(|(k, v)| Routing { - destination: k.to_string(), + destination: format_stream_name(k), routing: v.clone(), }) .collect(); diff --git a/src/service/logs/bulk.rs b/src/service/logs/bulk.rs index 6e6685e996..9848ab5826 100644 --- a/src/service/logs/bulk.rs +++ b/src/service/logs/bulk.rs @@ -46,7 +46,7 @@ use crate::{ stream::StreamParams, }, service::{ - db, + db, format_stream_name, ingestion::{evaluate_trigger, write_file, TriggerAlertData}, metadata::{distinct_values::DvItem, write, MetadataItem, MetadataType}, schema::{ @@ -132,6 +132,8 @@ pub async fn ingest( } (action, stream_name, doc_id) = ret.unwrap(); + stream_name = format_stream_name(&stream_name); + // skip blocked streams let key = format!("{org_id}/{}/{stream_name}", StreamType::Logs); if BLOCKED_STREAMS.contains(&key.as_str()) {