Skip to content

Commit cc4092e

Browse files
authored
chore(cubestore): Track size for payloads in rate limiter (#7531)
1 parent 6447f93 commit cc4092e

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

rust/cubestore/cubestore/src/cachestore/cache_rocksstore.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use crate::cachestore::listener::RocksCacheStoreListener;
3131
use crate::table::{Row, TableValue};
3232
use chrono::{DateTime, Utc};
3333
use datafusion::cube_ext;
34+
use deepsize::DeepSizeOf;
3435
use itertools::Itertools;
3536
use log::{trace, warn};
3637
use serde_derive::{Deserialize, Serialize};
@@ -592,7 +593,7 @@ impl RocksCacheStore {
592593
}
593594
}
594595

595-
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
596+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, DeepSizeOf)]
596597
pub enum QueueKey {
597598
ById(u64),
598599
ByPath(String),

rust/cubestore/cubestore/src/sql/cachestore.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,9 @@ impl CacheStoreSqlService {
207207
nx,
208208
} => {
209209
let value_size = key.value.deep_size_of() + value.deep_size_of();
210-
let key = key.value;
211-
212210
let success = self
213211
.cachestore
214-
.cache_set(CacheItem::new(key, ttl, value), nx)
212+
.cache_set(CacheItem::new(key.value, ttl, value), nx)
215213
.await?;
216214

217215
(
@@ -388,19 +386,25 @@ impl CacheStoreSqlService {
388386
(Arc::new(DataFrame::new(vec![], vec![])), None, true)
389387
}
390388
QueueCommand::MergeExtra { key, payload } => {
389+
let payload_size = payload.deep_size_of();
391390
self.cachestore.queue_merge_extra(key, payload).await?;
392391

393-
(Arc::new(DataFrame::new(vec![], vec![])), None, true)
392+
(
393+
Arc::new(DataFrame::new(vec![], vec![])),
394+
Some(payload_size),
395+
true,
396+
)
394397
}
395398
QueueCommand::Ack { key, result } => {
399+
let result_size = result.as_ref().map(|r| r.deep_size_of());
396400
let success = self.cachestore.queue_ack(key, result).await?;
397401

398402
(
399403
Arc::new(DataFrame::new(
400404
vec![Column::new("success".to_string(), ColumnType::Boolean, 0)],
401405
vec![Row::new(vec![TableValue::Boolean(success)])],
402406
)),
403-
None,
407+
result_size,
404408
true,
405409
)
406410
}

rust/cubestore/cubestore/src/store/mod.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -793,6 +793,19 @@ mod tests {
793793
use std::fs;
794794
use std::path::{Path, PathBuf};
795795

796+
#[test]
797+
fn dataframe_deep_size_of() {
798+
for (v, expected_size) in [(
799+
DataFrame::new(
800+
vec![Column::new("payload".to_string(), ColumnType::String, 0)],
801+
vec![Row::new(vec![TableValue::String("foo".to_string())])],
802+
),
803+
162_usize,
804+
)] {
805+
assert_eq!(v.deep_size_of(), expected_size, "size for {:?}", v);
806+
}
807+
}
808+
796809
#[tokio::test]
797810
async fn create_wal_test() {
798811
let config = Config::test("create_chunk_test");

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ mod tests {
314314
(TableValue::Int(1), 32_usize),
315315
(TableValue::Decimal(Decimal::new(1)), 32_usize),
316316
(TableValue::String("foo".into()), 35_usize),
317+
(TableValue::String("foofoo".into()), 38_usize),
317318
] {
318319
assert_eq!(v.deep_size_of(), expected_size, "size for {:?}", v);
319320
}

0 commit comments

Comments
 (0)