Skip to content

Commit b0e3c88

Browse files
authored
fix(cubestore): Query Cache - correct size calculation (complex TableValue) (#6400)
1 parent 7eeea60 commit b0e3c88

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

rust/cubestore/cubestore/src/queryplanner/providers/query_cache.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::queryplanner::project_schema;
2-
use crate::sql::cache::SqlResultCache;
2+
use crate::sql::cache::{sql_result_cache_sizeof, SqlResultCache};
33
use arrow::array::{Array, Int64Builder, StringBuilder};
44
use arrow::datatypes::{DataType, Field, Schema, SchemaRef};
55
use arrow::record_batch::RecordBatch;
@@ -11,7 +11,6 @@ use datafusion::logical_plan::Expr;
1111
use datafusion::physical_plan::memory::MemoryExec;
1212
use datafusion::physical_plan::Partitioning;
1313
use datafusion::physical_plan::{ExecutionPlan, SendableRecordBatchStream};
14-
use deepsize::DeepSizeOf;
1514
use std::any::Any;
1615
use std::fmt;
1716
use std::fmt::Formatter;
@@ -145,7 +144,9 @@ impl ExecutionPlan for InfoSchemaQueryCacheTableExec {
145144
for (k, v) in self.cache.iter() {
146145
builder.add_row(
147146
k.get_query(),
148-
v.deep_size_of().try_into().unwrap_or(i64::MAX),
147+
sql_result_cache_sizeof(&k, &v)
148+
.try_into()
149+
.unwrap_or(i64::MAX),
149150
);
150151
}
151152

rust/cubestore/cubestore/src/sql/cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ pub struct SqlResultCache {
7171
result_cache: Cache<SqlResultCacheKey, Arc<DataFrame>>,
7272
}
7373

74-
fn dataframe_sizeof(key: &SqlResultCacheKey, df: &Arc<DataFrame>) -> u32 {
74+
pub fn sql_result_cache_sizeof(key: &SqlResultCacheKey, df: &Arc<DataFrame>) -> u32 {
7575
(key.deep_size_of() + df.deep_size_of())
7676
.try_into()
7777
.unwrap_or(u32::MAX)
@@ -89,7 +89,7 @@ impl SqlResultCache {
8989
queue_cache: Mutex::new(lru::LruCache::new(1000)),
9090
result_cache: cache_builder
9191
.max_capacity(capacity_bytes)
92-
.weigher(dataframe_sizeof)
92+
.weigher(sql_result_cache_sizeof)
9393
.build(),
9494
}
9595
}

rust/cubestore/cubestore/src/table/mod.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ pub enum TableValue {
3333
}
3434

3535
impl DeepSizeOf for TableValue {
36-
fn deep_size_of(&self) -> usize {
37-
32
38-
}
39-
4036
fn deep_size_of_children(&self, context: &mut Context) -> usize {
4137
match self {
4238
TableValue::Null => 0,
@@ -229,6 +225,7 @@ pub fn cmp_same_types(l: &TableValue, r: &TableValue) -> Ordering {
229225
mod tests {
230226
use crate::table::{TableValue, TimestampValue};
231227
use crate::util::decimal::Decimal;
228+
use deepsize::DeepSizeOf;
232229
use serde::{Deserialize, Serialize};
233230

234231
#[test]
@@ -257,4 +254,16 @@ mod tests {
257254
assert_eq!(v, &v2);
258255
}
259256
}
257+
258+
#[test]
259+
fn table_value_deep_size_of() {
260+
for (v, expected_size) in [
261+
(TableValue::Null, 32_usize),
262+
(TableValue::Int(1), 32_usize),
263+
(TableValue::Decimal(Decimal::new(1)), 32_usize),
264+
(TableValue::String("foo".into()), 35_usize),
265+
] {
266+
assert_eq!(v.deep_size_of(), expected_size, "size for {:?}", v);
267+
}
268+
}
260269
}

0 commit comments

Comments
 (0)