@@ -26,6 +26,7 @@ use crate::storage::{retention::Retention, LogStream, StorageDir, StreamInfo};
2626use crate :: { catalog, event, stats} ;
2727use crate :: { metadata, validator} ;
2828
29+ use super :: base_path_without_preceding_slash;
2930use super :: cluster:: fetch_stats_from_ingestors;
3031use super :: cluster:: utils:: { merge_quried_stats, IngestionStats , QueriedStats , StorageStats } ;
3132use actix_web:: http:: StatusCode ;
@@ -40,28 +41,49 @@ use std::sync::Arc;
4041
4142pub async fn delete ( req : HttpRequest ) -> Result < impl Responder , StreamError > {
4243 let stream_name: String = req. match_info ( ) . get ( "logstream" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
43-
4444 if !metadata:: STREAM_INFO . stream_exists ( & stream_name) {
4545 return Err ( StreamError :: StreamNotFound ( stream_name) ) ;
4646 }
47+ match CONFIG . parseable . mode {
48+ Mode :: Query | Mode :: All => {
49+ let objectstore = CONFIG . storage ( ) . get_object_store ( ) ;
50+
51+ objectstore. delete_stream ( & stream_name) . await ?;
52+ let stream_dir = StorageDir :: new ( & stream_name) ;
53+ if fs:: remove_dir_all ( & stream_dir. data_path ) . is_err ( ) {
54+ log:: warn!(
55+ "failed to delete local data for stream {}. Clean {} manually" ,
56+ stream_name,
57+ stream_dir. data_path. to_string_lossy( )
58+ )
59+ }
60+
61+ let ingestor_metadata = super :: cluster:: get_ingestor_info ( ) . await . map_err ( |err| {
62+ log:: error!( "Fatal: failed to get ingestor info: {:?}" , err) ;
63+ StreamError :: from ( err)
64+ } ) ?;
65+
66+ for ingestor in ingestor_metadata {
67+ let url = format ! (
68+ "{}{}/logstream/{}" ,
69+ ingestor. domain_name,
70+ base_path_without_preceding_slash( ) ,
71+ stream_name
72+ ) ;
73+
74+ // delete the stream
75+ super :: cluster:: send_stream_delete_request ( & url, ingestor. clone ( ) ) . await ?;
76+ }
77+ }
78+ _ => { }
79+ }
4780
48- let objectstore = CONFIG . storage ( ) . get_object_store ( ) ;
49- objectstore. delete_stream ( & stream_name) . await ?;
5081 metadata:: STREAM_INFO . delete_stream ( & stream_name) ;
5182 event:: STREAM_WRITERS . delete_stream ( & stream_name) ;
5283 stats:: delete_stats ( & stream_name, "json" ) . unwrap_or_else ( |e| {
5384 log:: warn!( "failed to delete stats for stream {}: {:?}" , stream_name, e)
5485 } ) ;
5586
56- let stream_dir = StorageDir :: new ( & stream_name) ;
57- if fs:: remove_dir_all ( & stream_dir. data_path ) . is_err ( ) {
58- log:: warn!(
59- "failed to delete local data for stream {}. Clean {} manually" ,
60- stream_name,
61- stream_dir. data_path. to_string_lossy( )
62- )
63- }
64-
6587 Ok ( ( format ! ( "log stream {stream_name} deleted" ) , StatusCode :: OK ) )
6688}
6789
0 commit comments