@@ -586,7 +586,7 @@ pub async fn get_stream_info(stream_name: Path<String>) -> Result<impl Responder
586
586
587
587
pub async fn put_stream_hot_tier (
588
588
stream_name : Path < String > ,
589
- Json ( json ) : Json < Value > ,
589
+ Json ( mut hottier ) : Json < StreamHotTier > ,
590
590
) -> Result < impl Responder , StreamError > {
591
591
let stream_name = stream_name. into_inner ( ) ;
592
592
if !STREAM_INFO . stream_exists ( & stream_name) {
@@ -609,35 +609,28 @@ pub async fn put_stream_hot_tier(
609
609
status : StatusCode :: BAD_REQUEST ,
610
610
} ) ;
611
611
}
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
- } ;
620
612
621
613
validator:: hot_tier ( & hottier. size . to_string ( ) ) ?;
622
614
623
615
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 ?;
641
634
642
635
Ok ( (
643
636
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
662
655
}
663
656
}
664
657
665
- if CONFIG . options . hot_tier_storage_path . is_none ( ) {
658
+ let Some ( hot_tier_manager ) = HotTierManager :: global ( ) else {
666
659
return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
667
- }
660
+ } ;
661
+ let meta = hot_tier_manager. get_hot_tier ( & stream_name) . await ?;
668
662
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 ) )
681
664
}
682
665
683
666
pub async fn delete_stream_hot_tier (
@@ -699,9 +682,9 @@ pub async fn delete_stream_hot_tier(
699
682
}
700
683
}
701
684
702
- if CONFIG . options . hot_tier_storage_path . is_none ( ) {
685
+ let Some ( hot_tier_manager ) = HotTierManager :: global ( ) else {
703
686
return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
704
- }
687
+ } ;
705
688
706
689
if STREAM_INFO . stream_type ( & stream_name) . unwrap ( ) == Some ( StreamType :: Internal . to_string ( ) ) {
707
690
return Err ( StreamError :: Custom {
@@ -710,9 +693,8 @@ pub async fn delete_stream_hot_tier(
710
693
} ) ;
711
694
}
712
695
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
+
716
698
Ok ( (
717
699
format ! ( "hot tier deleted for stream {stream_name}" ) ,
718
700
StatusCode :: OK ,
@@ -821,8 +803,6 @@ pub mod error {
821
803
"Hot tier is not enabled at the server config, cannot enable hot tier for stream {0}"
822
804
) ]
823
805
HotTierNotEnabled ( String ) ,
824
- #[ error( "failed to enable hottier due to err: {0}" ) ]
825
- InvalidHotTierConfig ( serde_json:: Error ) ,
826
806
#[ error( "Hot tier validation failed: {0}" ) ]
827
807
HotTierValidation ( #[ from] HotTierValidationError ) ,
828
808
#[ error( "{0}" ) ]
@@ -859,8 +839,7 @@ pub mod error {
859
839
StreamError :: Network ( err) => {
860
840
err. status ( ) . unwrap_or ( StatusCode :: INTERNAL_SERVER_ERROR )
861
841
}
862
- StreamError :: HotTierNotEnabled ( _) => StatusCode :: BAD_REQUEST ,
863
- StreamError :: InvalidHotTierConfig ( _) => StatusCode :: BAD_REQUEST ,
842
+ StreamError :: HotTierNotEnabled ( _) => StatusCode :: FORBIDDEN ,
864
843
StreamError :: HotTierValidation ( _) => StatusCode :: BAD_REQUEST ,
865
844
StreamError :: HotTierError ( _) => StatusCode :: INTERNAL_SERVER_ERROR ,
866
845
}
0 commit comments