From 551bdaf72e1ec171cf08d27a29cb4c4fc34becc3 Mon Sep 17 00:00:00 2001 From: WenyXu Date: Fri, 19 Apr 2024 06:22:25 +0000 Subject: [PATCH] refactor: avoid unnecessary cloning --- src/common/meta/src/state_store.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/common/meta/src/state_store.rs b/src/common/meta/src/state_store.rs index 1cf1ea86492..9b2da75d177 100644 --- a/src/common/meta/src/state_store.rs +++ b/src/common/meta/src/state_store.rs @@ -22,7 +22,6 @@ use common_procedure::store::util::multiple_value_stream; use common_procedure::Result as ProcedureResult; use futures::future::try_join_all; use futures::StreamExt; -use itertools::Itertools; use snafu::ResultExt; use crate::error::Result; @@ -80,21 +79,17 @@ fn decode_kv(kv: KeyValue) -> Result<(String, Vec)> { Ok((key, value)) } -enum SplitValue { - Single(Vec), - Multiple(Vec>), +enum SplitValue<'a> { + Single(&'a [u8]), + Multiple(Vec<&'a [u8]>), } -fn split_value(value: Vec, max_value_size: Option) -> SplitValue { +fn split_value(value: &[u8], max_value_size: Option) -> SplitValue<'_> { if let Some(max_value_size) = max_value_size { if value.len() <= max_value_size { SplitValue::Single(value) } else { - let mut values = vec![]; - for chunk in value.into_iter().chunks(max_value_size).into_iter() { - values.push(chunk.collect()); - } - SplitValue::Multiple(values) + SplitValue::Multiple(value.chunks(max_value_size).collect::>()) } } else { SplitValue::Single(value) @@ -104,7 +99,7 @@ fn split_value(value: Vec, max_value_size: Option) -> SplitValue { #[async_trait] impl StateStore for KvStateStore { async fn put(&self, key: &str, value: Vec) -> ProcedureResult<()> { - let split = split_value(value, self.max_value_size); + let split = split_value(&value, self.max_value_size); let key = with_prefix(key); match split { SplitValue::Single(value) => {