@@ -586,7 +586,7 @@ pub async fn get_stream_info(stream_name: Path<String>) -> Result<impl Responder
586586
587587pub async fn put_stream_hot_tier (
588588 stream_name : Path < String > ,
589- Json ( json ) : Json < Value > ,
589+ Json ( mut hottier ) : Json < StreamHotTier > ,
590590) -> Result < impl Responder , StreamError > {
591591 let stream_name = stream_name. into_inner ( ) ;
592592 if !STREAM_INFO . stream_exists ( & stream_name) {
@@ -609,35 +609,28 @@ pub async fn put_stream_hot_tier(
609609 status : StatusCode :: BAD_REQUEST ,
610610 } ) ;
611611 }
612- if CONFIG . options . hot_tier_storage_path . is_none ( ) {
613- return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
614- }
615-
616- let mut hottier: StreamHotTier = match serde_json:: from_value ( json) {
617- Ok ( hottier) => hottier,
618- Err ( err) => return Err ( StreamError :: InvalidHotTierConfig ( err) ) ,
619- } ;
620612
621613 validator:: hot_tier ( & hottier. size . to_string ( ) ) ?;
622614
623615 STREAM_INFO . set_hot_tier ( & stream_name, true ) ?;
624- if let Some ( hot_tier_manager) = HotTierManager :: global ( ) {
625- let existing_hot_tier_used_size = hot_tier_manager
626- . validate_hot_tier_size ( & stream_name, & hottier. size )
627- . await ?;
628- hottier. used_size = existing_hot_tier_used_size. to_string ( ) ;
629- hottier. available_size = hottier. size . to_string ( ) ;
630- hottier. version = Some ( CURRENT_HOT_TIER_VERSION . to_string ( ) ) ;
631- hot_tier_manager
632- . put_hot_tier ( & stream_name, & mut hottier)
633- . await ?;
634- let storage = CONFIG . storage ( ) . get_object_store ( ) ;
635- let mut stream_metadata = storage. get_object_store_format ( & stream_name) . await ?;
636- stream_metadata. hot_tier_enabled = Some ( true ) ;
637- storage
638- . put_stream_manifest ( & stream_name, & stream_metadata)
639- . await ?;
640- }
616+ let Some ( hot_tier_manager) = HotTierManager :: global ( ) else {
617+ return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
618+ } ;
619+ let existing_hot_tier_used_size = hot_tier_manager
620+ . validate_hot_tier_size ( & stream_name, hottier. size )
621+ . await ?;
622+ hottier. used_size = existing_hot_tier_used_size;
623+ hottier. available_size = hottier. size ;
624+ hottier. version = Some ( CURRENT_HOT_TIER_VERSION . to_string ( ) ) ;
625+ hot_tier_manager
626+ . put_hot_tier ( & stream_name, & mut hottier)
627+ . await ?;
628+ let storage = CONFIG . storage ( ) . get_object_store ( ) ;
629+ let mut stream_metadata = storage. get_object_store_format ( & stream_name) . await ?;
630+ stream_metadata. hot_tier_enabled = true ;
631+ storage
632+ . put_stream_manifest ( & stream_name, & stream_metadata)
633+ . await ?;
641634
642635 Ok ( (
643636 format ! ( "hot tier set for stream {stream_name}" ) ,
@@ -662,22 +655,12 @@ pub async fn get_stream_hot_tier(stream_name: Path<String>) -> Result<impl Respo
662655 }
663656 }
664657
665- if CONFIG . options . hot_tier_storage_path . is_none ( ) {
658+ let Some ( hot_tier_manager ) = HotTierManager :: global ( ) else {
666659 return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
667- }
660+ } ;
661+ let meta = hot_tier_manager. get_hot_tier ( & stream_name) . await ?;
668662
669- if let Some ( hot_tier_manager) = HotTierManager :: global ( ) {
670- let mut hot_tier = hot_tier_manager. get_hot_tier ( & stream_name) . await ?;
671- hot_tier. size = format ! ( "{} {}" , hot_tier. size, "Bytes" ) ;
672- hot_tier. used_size = format ! ( "{} Bytes" , hot_tier. used_size) ;
673- hot_tier. available_size = format ! ( "{} Bytes" , hot_tier. available_size) ;
674- Ok ( ( web:: Json ( hot_tier) , StatusCode :: OK ) )
675- } else {
676- Err ( StreamError :: Custom {
677- msg : format ! ( "hot tier not initialised for stream {}" , stream_name) ,
678- status : ( StatusCode :: BAD_REQUEST ) ,
679- } )
680- }
663+ Ok ( ( web:: Json ( meta) , StatusCode :: OK ) )
681664}
682665
683666pub async fn delete_stream_hot_tier (
@@ -699,9 +682,9 @@ pub async fn delete_stream_hot_tier(
699682 }
700683 }
701684
702- if CONFIG . options . hot_tier_storage_path . is_none ( ) {
685+ let Some ( hot_tier_manager ) = HotTierManager :: global ( ) else {
703686 return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
704- }
687+ } ;
705688
706689 if STREAM_INFO . stream_type ( & stream_name) . unwrap ( ) == Some ( StreamType :: Internal . to_string ( ) ) {
707690 return Err ( StreamError :: Custom {
@@ -710,9 +693,8 @@ pub async fn delete_stream_hot_tier(
710693 } ) ;
711694 }
712695
713- if let Some ( hot_tier_manager) = HotTierManager :: global ( ) {
714- hot_tier_manager. delete_hot_tier ( & stream_name) . await ?;
715- }
696+ hot_tier_manager. delete_hot_tier ( & stream_name) . await ?;
697+
716698 Ok ( (
717699 format ! ( "hot tier deleted for stream {stream_name}" ) ,
718700 StatusCode :: OK ,
@@ -821,8 +803,6 @@ pub mod error {
821803 "Hot tier is not enabled at the server config, cannot enable hot tier for stream {0}"
822804 ) ]
823805 HotTierNotEnabled ( String ) ,
824- #[ error( "failed to enable hottier due to err: {0}" ) ]
825- InvalidHotTierConfig ( serde_json:: Error ) ,
826806 #[ error( "Hot tier validation failed: {0}" ) ]
827807 HotTierValidation ( #[ from] HotTierValidationError ) ,
828808 #[ error( "{0}" ) ]
@@ -859,8 +839,7 @@ pub mod error {
859839 StreamError :: Network ( err) => {
860840 err. status ( ) . unwrap_or ( StatusCode :: INTERNAL_SERVER_ERROR )
861841 }
862- StreamError :: HotTierNotEnabled ( _) => StatusCode :: BAD_REQUEST ,
863- StreamError :: InvalidHotTierConfig ( _) => StatusCode :: BAD_REQUEST ,
842+ StreamError :: HotTierNotEnabled ( _) => StatusCode :: FORBIDDEN ,
864843 StreamError :: HotTierValidation ( _) => StatusCode :: BAD_REQUEST ,
865844 StreamError :: HotTierError ( _) => StatusCode :: INTERNAL_SERVER_ERROR ,
866845 }
0 commit comments