@@ -20,7 +20,7 @@ use self::error::StreamError;
2020use super :: cluster:: utils:: { IngestionStats , QueriedStats , StorageStats } ;
2121use super :: query:: update_schema_when_distributed;
2222use crate :: event:: format:: override_data_type;
23- use crate :: hottier:: { CURRENT_HOT_TIER_VERSION , HotTierManager , StreamHotTier } ;
23+ use crate :: hottier:: { CURRENT_HOT_TIER_VERSION , GLOBAL_HOTTIER , StreamHotTier } ;
2424use crate :: metadata:: SchemaVersion ;
2525use crate :: metrics:: { EVENTS_INGESTED_DATE , EVENTS_INGESTED_SIZE_DATE , EVENTS_STORAGE_SIZE_DATE } ;
2626use crate :: parseable:: { DEFAULT_TENANT , PARSEABLE , StreamNotFound } ;
@@ -47,7 +47,7 @@ use itertools::Itertools;
4747use serde_json:: { Value , json} ;
4848use std:: fs;
4949use std:: sync:: Arc ;
50- use tracing:: warn;
50+ use tracing:: { Instrument , warn} ;
5151
5252pub async fn delete (
5353 req : HttpRequest ,
@@ -77,7 +77,7 @@ pub async fn delete(
7777 )
7878 }
7979
80- if let Some ( hot_tier_manager) = HotTierManager :: global ( )
80+ if let Some ( hot_tier_manager) = GLOBAL_HOTTIER . get ( )
8181 && hot_tier_manager. check_stream_hot_tier_exists ( & stream_name, & tenant_id)
8282 {
8383 hot_tier_manager
@@ -413,16 +413,25 @@ pub async fn get_stream_info(
413413 Ok ( ( web:: Json ( stream_info) , StatusCode :: OK ) )
414414}
415415
416+ #[ tracing:: instrument(
417+ name = "http.put_stream_hot_tier" ,
418+ skip( req, logstream, hottier) ,
419+ fields( stream = tracing:: field:: Empty , tenant = tracing:: field:: Empty , size = hottier. size)
420+ ) ]
416421pub async fn put_stream_hot_tier (
417422 req : HttpRequest ,
418423 logstream : Path < String > ,
419424 Json ( mut hottier) : Json < StreamHotTier > ,
420425) -> Result < impl Responder , StreamError > {
421426 let stream_name = logstream. into_inner ( ) ;
422427 let tenant_id = get_tenant_id_from_request ( & req) ;
428+ let current_span = tracing:: Span :: current ( ) ;
429+ current_span
430+ . record ( "stream" , tracing:: field:: display ( & stream_name) )
431+ . record ( "tenant" , tracing:: field:: debug ( & tenant_id) ) ;
423432 // For query mode, if the stream not found in memory map,
424- //check if it exists in the storage
425- //create stream and schema from storage
433+ // check if it exists in the storage
434+ // create stream and schema from storage
426435 if !PARSEABLE
427436 . check_or_load_stream ( & stream_name, & tenant_id)
428437 . await
@@ -441,16 +450,14 @@ pub async fn put_stream_hot_tier(
441450
442451 validator:: hot_tier ( & hottier. size . to_string ( ) ) ?;
443452
444- // TODO tenants
445- stream. set_hot_tier ( Some ( hottier. clone ( ) ) ) ;
446- let Some ( hot_tier_manager) = HotTierManager :: global ( ) else {
453+ let Some ( hot_tier_manager) = GLOBAL_HOTTIER . get ( ) else {
447454 return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
448455 } ;
449456 let existing_hot_tier_used_size = hot_tier_manager
450457 . validate_hot_tier_size ( & stream_name, hottier. size , & tenant_id)
451458 . await ?;
452459 hottier. used_size = existing_hot_tier_used_size;
453- hottier. available_size = hottier. size ;
460+ hottier. available_size = hottier. size . saturating_sub ( existing_hot_tier_used_size ) ;
454461 hottier. version = Some ( CURRENT_HOT_TIER_VERSION . to_string ( ) ) ;
455462 hot_tier_manager
456463 . put_hot_tier ( & stream_name, & mut hottier, & tenant_id)
@@ -469,19 +476,34 @@ pub async fn put_stream_hot_tier(
469476 . metastore
470477 . put_stream_json ( & stream_metadata, & stream_name, & tenant_id)
471478 . await ?;
479+ stream. set_hot_tier ( Some ( hottier. clone ( ) ) ) ;
480+ let stream = stream_name. clone ( ) ;
481+ let tenant = tenant_id. clone ( ) ;
482+ hot_tier_manager
483+ . spawn_stream_task ( stream, tenant)
484+ . instrument ( current_span)
485+ . await ;
472486
473487 Ok ( (
474488 format ! ( "hot tier set for stream {stream_name}" ) ,
475489 StatusCode :: OK ,
476490 ) )
477491}
478492
493+ #[ tracing:: instrument(
494+ name = "http.get_stream_hot_tier" ,
495+ skip( req, logstream) ,
496+ fields( stream = tracing:: field:: Empty , tenant = tracing:: field:: Empty )
497+ ) ]
479498pub async fn get_stream_hot_tier (
480499 req : HttpRequest ,
481500 logstream : Path < String > ,
482501) -> Result < impl Responder , StreamError > {
483502 let stream_name = logstream. into_inner ( ) ;
484503 let tenant_id = get_tenant_id_from_request ( & req) ;
504+ tracing:: Span :: current ( )
505+ . record ( "stream" , tracing:: field:: display ( & stream_name) )
506+ . record ( "tenant" , tracing:: field:: debug ( & tenant_id) ) ;
485507 // For query mode, if the stream not found in memory map,
486508 //check if it exists in the storage
487509 //create stream and schema from storage
@@ -492,7 +514,7 @@ pub async fn get_stream_hot_tier(
492514 return Err ( StreamNotFound ( stream_name. clone ( ) ) . into ( ) ) ;
493515 }
494516
495- let Some ( hot_tier_manager) = HotTierManager :: global ( ) else {
517+ let Some ( hot_tier_manager) = GLOBAL_HOTTIER . get ( ) else {
496518 return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
497519 } ;
498520 let meta = hot_tier_manager
@@ -502,12 +524,21 @@ pub async fn get_stream_hot_tier(
502524 Ok ( ( web:: Json ( meta) , StatusCode :: OK ) )
503525}
504526
527+ #[ tracing:: instrument(
528+ name = "http.delete_stream_hot_tier" ,
529+ skip( req, logstream) ,
530+ fields( stream = tracing:: field:: Empty , tenant = tracing:: field:: Empty )
531+ ) ]
505532pub async fn delete_stream_hot_tier (
506533 req : HttpRequest ,
507534 logstream : Path < String > ,
508535) -> Result < impl Responder , StreamError > {
509536 let stream_name = logstream. into_inner ( ) ;
510537 let tenant_id = get_tenant_id_from_request ( & req) ;
538+ let current_span = tracing:: Span :: current ( ) ;
539+ current_span
540+ . record ( "stream" , tracing:: field:: display ( & stream_name) )
541+ . record ( "tenant" , tracing:: field:: debug ( & tenant_id) ) ;
511542 // For query mode, if the stream not found in memory map,
512543 //check if it exists in the storage
513544 //create stream and schema from storage
@@ -529,12 +560,13 @@ pub async fn delete_stream_hot_tier(
529560 } ) ;
530561 }
531562
532- let Some ( hot_tier_manager) = HotTierManager :: global ( ) else {
563+ let Some ( hot_tier_manager) = GLOBAL_HOTTIER . get ( ) else {
533564 return Err ( StreamError :: HotTierNotEnabled ( stream_name) ) ;
534565 } ;
535566
536567 hot_tier_manager
537568 . delete_hot_tier ( & stream_name, & tenant_id)
569+ . instrument ( tracing:: Span :: current ( ) )
538570 . await ?;
539571
540572 let mut stream_metadata: ObjectStoreFormat = serde_json:: from_slice (
0 commit comments