@@ -30,6 +30,7 @@ use crate::metrics::prom_utils::Metrics;
3030use crate :: rbac:: role:: model:: DefaultPrivilege ;
3131use crate :: rbac:: user:: User ;
3232use crate :: stats:: Stats ;
33+ use crate :: storage:: get_staging_metadata;
3334use crate :: storage:: object_storage:: ingestor_metadata_path;
3435use crate :: storage:: { ObjectStorageError , STREAM_ROOT_DIRECTORY } ;
3536use crate :: storage:: { ObjectStoreFormat , PARSEABLE_ROOT_DIRECTORY } ;
@@ -841,3 +842,61 @@ pub fn init_cluster_metrics_schedular() -> Result<(), PostError> {
841842
842843 Ok ( ( ) )
843844}
845+
846+ pub async fn forward_create_stream_request ( stream_name : & str ) -> Result < ( ) , StreamError > {
847+ let client = reqwest:: Client :: new ( ) ;
848+
849+ let staging_metadata = get_staging_metadata ( ) . unwrap ( ) . ok_or_else ( || {
850+ StreamError :: Anyhow ( anyhow:: anyhow!( "Failed to retrieve staging metadata" ) )
851+ } ) ?;
852+ let querier_endpoint = to_url_string ( staging_metadata. querier_endpoint . unwrap ( ) ) ;
853+ let token = staging_metadata. querier_auth_token . unwrap ( ) ;
854+
855+ if !check_liveness ( & querier_endpoint) . await {
856+ log:: warn!( "Querier {} is not live" , querier_endpoint) ;
857+ return Err ( StreamError :: Anyhow ( anyhow:: anyhow!( "Querier is not live" ) ) ) ;
858+ }
859+
860+ let url = format ! (
861+ "{}{}/logstream/{}" ,
862+ querier_endpoint,
863+ base_path_without_preceding_slash( ) ,
864+ stream_name
865+ ) ;
866+
867+ let response = client
868+ . put ( & url)
869+ . header ( header:: AUTHORIZATION , & token)
870+ . send ( )
871+ . await
872+ . map_err ( |err| {
873+ log:: error!(
874+ "Fatal: failed to forward create stream request to querier: {}\n Error: {:?}" ,
875+ & url,
876+ err
877+ ) ;
878+ StreamError :: Network ( err)
879+ } ) ?;
880+
881+ let status = response. status ( ) ;
882+
883+ if !status. is_success ( ) {
884+ let response_text = response. text ( ) . await . map_err ( |err| {
885+ log:: error!( "Failed to read response text from querier: {}" , & url) ;
886+ StreamError :: Network ( err)
887+ } ) ?;
888+
889+ log:: error!(
890+ "Failed to forward create stream request to querier: {}\n Response Returned: {:?}" ,
891+ & url,
892+ response_text
893+ ) ;
894+
895+ return Err ( StreamError :: Anyhow ( anyhow:: anyhow!(
896+ "Request failed with status: {}" ,
897+ status,
898+ ) ) ) ;
899+ }
900+
901+ Ok ( ( ) )
902+ }
0 commit comments