From 5dba9c923a8270bf7617aff99aab386bba2d73e3 Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Fri, 9 Aug 2024 18:05:42 +0530 Subject: [PATCH 1/5] feat: hot tier for pmeta allow enabling hot tier for the internal stream with a size of 10 MiB only if hot tier is configured globally --- server/src/handlers/http/modal/query_server.rs | 2 ++ server/src/hottier.rs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/server/src/handlers/http/modal/query_server.rs b/server/src/handlers/http/modal/query_server.rs index c731ea5ca..6619dcf5e 100644 --- a/server/src/handlers/http/modal/query_server.rs +++ b/server/src/handlers/http/modal/query_server.rs @@ -193,7 +193,9 @@ impl QueryServer { log::info!("Cluster metrics scheduler started successfully"); } if let Some(hot_tier_manager) = HotTierManager::global() { + hot_tier_manager.put_internal_stream_hot_tier().await?; hot_tier_manager.download_from_s3()?; + }; let (localsync_handler, mut localsync_outbox, localsync_inbox) = sync::run_local_sync().await; diff --git a/server/src/hottier.rs b/server/src/hottier.rs index 71bb3cdbd..134aad412 100644 --- a/server/src/hottier.rs +++ b/server/src/hottier.rs @@ -25,6 +25,7 @@ use std::{ use crate::{ catalog::manifest::{File, Manifest}, + handlers::http::cluster::INTERNAL_STREAM_NAME, metadata::{error::stream_info::MetadataError, STREAM_INFO}, option::{ validation::{bytes_to_human_size, human_size_to_bytes}, @@ -685,6 +686,22 @@ impl HotTierManager { Ok(None) } + + pub async fn put_internal_stream_hot_tier(&self) -> Result<(), HotTierError> { + if CONFIG.parseable.hot_tier_storage_path.is_some() + && !self.check_stream_hot_tier_exists(INTERNAL_STREAM_NAME) + { + let mut stream_hot_tier = StreamHotTier { + size: "10MiB".to_string(), + used_size: Some("0B".to_string()), + available_size: Some("10MiB".to_string()), + oldest_date_time_entry: None, + }; + self.put_hot_tier(INTERNAL_STREAM_NAME, &mut stream_hot_tier) + .await?; + } + Ok(()) + } } /// get the hot tier file path for the stream From 44a667c84293ab05488017a2bfbb9ba37027df3c Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Fri, 9 Aug 2024 18:50:07 +0530 Subject: [PATCH 2/5] restrict updating hot tier for internal stream --- server/src/handlers/http/logstream.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/src/handlers/http/logstream.rs b/server/src/handlers/http/logstream.rs index 080761b7d..3cef612bf 100644 --- a/server/src/handlers/http/logstream.rs +++ b/server/src/handlers/http/logstream.rs @@ -957,6 +957,13 @@ pub async fn put_stream_hot_tier( if !metadata::STREAM_INFO.stream_exists(&stream_name) { return Err(StreamError::StreamNotFound(stream_name)); } + + if stream_name.eq(INTERNAL_STREAM_NAME) { + return Err(StreamError::Custom { + msg: "Hot tier can not be updated for internal stream".to_string(), + status: StatusCode::BAD_REQUEST, + }); + } if CONFIG.parseable.hot_tier_storage_path.is_none() { return Err(StreamError::HotTierNotEnabled(stream_name)); } From b365f989ca7153b6ac09d7dea7939af4b9a7ef1e Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Sun, 11 Aug 2024 07:41:17 +0530 Subject: [PATCH 3/5] changed size from 10MiB to 10485760 (bytes --- server/src/hottier.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/hottier.rs b/server/src/hottier.rs index 134aad412..3eea4616f 100644 --- a/server/src/hottier.rs +++ b/server/src/hottier.rs @@ -692,9 +692,9 @@ impl HotTierManager { && !self.check_stream_hot_tier_exists(INTERNAL_STREAM_NAME) { let mut stream_hot_tier = StreamHotTier { - size: "10MiB".to_string(), - used_size: Some("0B".to_string()), - available_size: Some("10MiB".to_string()), + size: "10485760".to_string(), + used_size: Some("0".to_string()), + available_size: Some("10485760".to_string()), oldest_date_time_entry: None, }; self.put_hot_tier(INTERNAL_STREAM_NAME, &mut stream_hot_tier) From fc06beba816f17b84b3b2c231896f6e2426b3061 Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Mon, 12 Aug 2024 14:41:34 +0530 Subject: [PATCH 4/5] internal stream hot tier size set to 10MiB in constant --- server/src/hottier.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/hottier.rs b/server/src/hottier.rs index 3eea4616f..8501ba5c2 100644 --- a/server/src/hottier.rs +++ b/server/src/hottier.rs @@ -52,6 +52,7 @@ use tokio_stream::wrappers::ReadDirStream; pub const STREAM_HOT_TIER_FILENAME: &str = ".hot_tier.json"; pub const MIN_STREAM_HOT_TIER_SIZE_BYTES: u64 = 10737418240; // 10 GiB const HOT_TIER_SYNC_DURATION: Interval = clokwerk::Interval::Minutes(1); +pub const INTERNAL_STREAM_HOT_TIER_SIZE_BYTES: u64 = 10485760; //10 MiB #[derive(Debug, serde::Deserialize, serde::Serialize)] pub struct StreamHotTier { @@ -692,9 +693,9 @@ impl HotTierManager { && !self.check_stream_hot_tier_exists(INTERNAL_STREAM_NAME) { let mut stream_hot_tier = StreamHotTier { - size: "10485760".to_string(), + size: INTERNAL_STREAM_HOT_TIER_SIZE_BYTES.to_string(), used_size: Some("0".to_string()), - available_size: Some("10485760".to_string()), + available_size: Some(INTERNAL_STREAM_HOT_TIER_SIZE_BYTES.to_string()), oldest_date_time_entry: None, }; self.put_hot_tier(INTERNAL_STREAM_NAME, &mut stream_hot_tier) From 086bd8a5f02d244cf28d325fa7cadf55a612672f Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Tue, 13 Aug 2024 17:04:47 +0530 Subject: [PATCH 5/5] changed validation for internal stream in set hot tier --- server/src/handlers/http/logstream.rs | 2 +- server/src/handlers/http/modal/query_server.rs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/server/src/handlers/http/logstream.rs b/server/src/handlers/http/logstream.rs index 3cef612bf..711a88aa2 100644 --- a/server/src/handlers/http/logstream.rs +++ b/server/src/handlers/http/logstream.rs @@ -958,7 +958,7 @@ pub async fn put_stream_hot_tier( return Err(StreamError::StreamNotFound(stream_name)); } - if stream_name.eq(INTERNAL_STREAM_NAME) { + if STREAM_INFO.stream_type(&stream_name).unwrap() == StreamType::Internal.to_string() { return Err(StreamError::Custom { msg: "Hot tier can not be updated for internal stream".to_string(), status: StatusCode::BAD_REQUEST, diff --git a/server/src/handlers/http/modal/query_server.rs b/server/src/handlers/http/modal/query_server.rs index 6619dcf5e..9d6f3fbdf 100644 --- a/server/src/handlers/http/modal/query_server.rs +++ b/server/src/handlers/http/modal/query_server.rs @@ -195,7 +195,6 @@ impl QueryServer { if let Some(hot_tier_manager) = HotTierManager::global() { hot_tier_manager.put_internal_stream_hot_tier().await?; hot_tier_manager.download_from_s3()?; - }; let (localsync_handler, mut localsync_outbox, localsync_inbox) = sync::run_local_sync().await;