@@ -46,6 +46,9 @@ pub async fn delete(req: HttpRequest) -> Result<impl Responder, StreamError> {
4646 objectstore. delete_stream ( & stream_name) . await ?;
4747 metadata:: STREAM_INFO . delete_stream ( & stream_name) ;
4848 event:: STREAM_WRITERS . delete_stream ( & stream_name) ;
49+ stats:: delete_stats ( & stream_name, "json" ) . unwrap_or_else ( |e| {
50+ log:: warn!( "failed to delete stats for stream {}: {:?}" , stream_name, e)
51+ } ) ;
4952
5053 let stream_dir = StorageDir :: new ( & stream_name) ;
5154 if fs:: remove_dir_all ( & stream_dir. data_path ) . is_err ( ) {
@@ -229,6 +232,10 @@ pub async fn put_retention(
229232pub async fn get_stats ( req : HttpRequest ) -> Result < impl Responder , StreamError > {
230233 let stream_name: String = req. match_info ( ) . get ( "logstream" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
231234
235+ if !metadata:: STREAM_INFO . stream_exists ( & stream_name) {
236+ return Err ( StreamError :: StreamNotFound ( stream_name) ) ;
237+ }
238+
232239 let stats = stats:: get_current_stats ( & stream_name, "json" )
233240 . ok_or ( StreamError :: StreamNotFound ( stream_name. clone ( ) ) ) ?;
234241
@@ -363,3 +370,30 @@ pub mod error {
363370 }
364371 }
365372}
373+
374+ #[ cfg( test) ]
375+ mod tests {
376+ use crate :: handlers:: http:: logstream:: error:: StreamError ;
377+ use crate :: handlers:: http:: logstream:: get_stats;
378+ use actix_web:: test:: TestRequest ;
379+ use anyhow:: bail;
380+
381+ #[ actix_web:: test]
382+ #[ should_panic]
383+ async fn get_stats_panics_without_logstream ( ) {
384+ let req = TestRequest :: default ( ) . to_http_request ( ) ;
385+ let _ = get_stats ( req) . await ;
386+ }
387+
388+ #[ actix_web:: test]
389+ async fn get_stats_stream_not_found_error_for_unknown_logstream ( ) -> anyhow:: Result < ( ) > {
390+ let req = TestRequest :: default ( )
391+ . param ( "logstream" , "test" )
392+ . to_http_request ( ) ;
393+
394+ match get_stats ( req) . await {
395+ Err ( StreamError :: StreamNotFound ( _) ) => Ok ( ( ) ) ,
396+ _ => bail ! ( "expected StreamNotFound error" ) ,
397+ }
398+ }
399+ }
0 commit comments