From 3f39fef52f85b9cc161abba6bb47ca6740801200 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 2 Oct 2026 01:22:37 +0000 Subject: [PATCH] perf(traces): recalculate ClickHouse TTL info only on retention changes (#44117) Co-authored-by: Yujong Lee Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../crates/traces/migrations/0001_otel_traces.sql | 3 ++- ...tel_traces_ttl.sql => 0002_otel_traces_ttl.sql} | 0 ...0002_agent_traces.sql => 0003_agent_traces.sql} | 2 +- ...nt_traces_ttl.sql => 0004_agent_traces_ttl.sql} | 0 ...gent_traces_mv.sql => 0005_agent_traces_mv.sql} | 0 .../{0004_spend_logs.sql => 0006_spend_logs.sql} | 2 ++ .../traces/migrations/0008_trace_received.sql | 1 - .../traces/migrations/0009_spend_received.sql | 1 - litellm-rust/crates/traces/tests/migrations.rs | 14 ++++++++++++++ 9 files changed, 19 insertions(+), 4 deletions(-) rename litellm-rust/crates/traces/migrations/{0005_otel_traces_ttl.sql => 0002_otel_traces_ttl.sql} (100%) rename litellm-rust/crates/traces/migrations/{0002_agent_traces.sql => 0003_agent_traces.sql} (93%) rename litellm-rust/crates/traces/migrations/{0006_agent_traces_ttl.sql => 0004_agent_traces_ttl.sql} (100%) rename litellm-rust/crates/traces/migrations/{0003_agent_traces_mv.sql => 0005_agent_traces_mv.sql} (100%) rename litellm-rust/crates/traces/migrations/{0004_spend_logs.sql => 0006_spend_logs.sql} (94%) delete mode 100644 litellm-rust/crates/traces/migrations/0008_trace_received.sql delete mode 100644 litellm-rust/crates/traces/migrations/0009_spend_received.sql diff --git a/litellm-rust/crates/traces/migrations/0001_otel_traces.sql b/litellm-rust/crates/traces/migrations/0001_otel_traces.sql index d8e0184b5a3..fb5eaa367d7 100644 --- a/litellm-rust/crates/traces/migrations/0001_otel_traces.sql +++ b/litellm-rust/crates/traces/migrations/0001_otel_traces.sql @@ -38,10 +38,11 @@ CREATE TABLE IF NOT EXISTS {database}.otel_traces Input String CODEC(ZSTD(3)), Output String CODEC(ZSTD(3)), InputPreview String DEFAULT substring(Input, 1, 240), + EngineReceivedMs UInt64 DEFAULT 0, INDEX idx_trace_id TraceId TYPE bloom_filter(0.001) GRANULARITY 1, INDEX idx_req_id LiteLLMRequestId TYPE bloom_filter(0.01) GRANULARITY 1 ) ENGINE = MergeTree PARTITION BY toDate(Timestamp) ORDER BY (TeamId, ServiceName, toDateTime(Timestamp), TraceId) -SETTINGS ttl_only_drop_parts = 1, non_replicated_deduplication_window = 1000 +SETTINGS ttl_only_drop_parts = 1, materialize_ttl_recalculate_only = 1, non_replicated_deduplication_window = 1000 diff --git a/litellm-rust/crates/traces/migrations/0005_otel_traces_ttl.sql b/litellm-rust/crates/traces/migrations/0002_otel_traces_ttl.sql similarity index 100% rename from litellm-rust/crates/traces/migrations/0005_otel_traces_ttl.sql rename to litellm-rust/crates/traces/migrations/0002_otel_traces_ttl.sql diff --git a/litellm-rust/crates/traces/migrations/0002_agent_traces.sql b/litellm-rust/crates/traces/migrations/0003_agent_traces.sql similarity index 93% rename from litellm-rust/crates/traces/migrations/0002_agent_traces.sql rename to litellm-rust/crates/traces/migrations/0003_agent_traces.sql index 0c3547872bb..821cc2f3723 100644 --- a/litellm-rust/crates/traces/migrations/0002_agent_traces.sql +++ b/litellm-rust/crates/traces/migrations/0003_agent_traces.sql @@ -22,4 +22,4 @@ CREATE TABLE IF NOT EXISTS {database}.agent_traces_by_key ) ENGINE = AggregatingMergeTree ORDER BY (TeamId, ApiKeyHash, TraceId) -SETTINGS non_replicated_deduplication_window = 1000 +SETTINGS materialize_ttl_recalculate_only = 1, non_replicated_deduplication_window = 1000 diff --git a/litellm-rust/crates/traces/migrations/0006_agent_traces_ttl.sql b/litellm-rust/crates/traces/migrations/0004_agent_traces_ttl.sql similarity index 100% rename from litellm-rust/crates/traces/migrations/0006_agent_traces_ttl.sql rename to litellm-rust/crates/traces/migrations/0004_agent_traces_ttl.sql diff --git a/litellm-rust/crates/traces/migrations/0003_agent_traces_mv.sql b/litellm-rust/crates/traces/migrations/0005_agent_traces_mv.sql similarity index 100% rename from litellm-rust/crates/traces/migrations/0003_agent_traces_mv.sql rename to litellm-rust/crates/traces/migrations/0005_agent_traces_mv.sql diff --git a/litellm-rust/crates/traces/migrations/0004_spend_logs.sql b/litellm-rust/crates/traces/migrations/0006_spend_logs.sql similarity index 94% rename from litellm-rust/crates/traces/migrations/0004_spend_logs.sql rename to litellm-rust/crates/traces/migrations/0006_spend_logs.sql index a14930f438f..44f7959b2bf 100644 --- a/litellm-rust/crates/traces/migrations/0004_spend_logs.sql +++ b/litellm-rust/crates/traces/migrations/0006_spend_logs.sql @@ -34,9 +34,11 @@ CREATE TABLE IF NOT EXISTS {database}.spend_logs metadata String CODEC(ZSTD(3)), messages String CODEC(ZSTD(3)), response String CODEC(ZSTD(3)), + EngineReceivedMs UInt64 DEFAULT 0, INDEX idx_response_id response_id TYPE bloom_filter(0.001) GRANULARITY 1, INDEX idx_trace_id trace_id TYPE bloom_filter(0.001) GRANULARITY 1 ) ENGINE = ReplacingMergeTree(end_time) PARTITION BY toYYYYMM(start_time) ORDER BY (team_id, start_time, request_id) +SETTINGS materialize_ttl_recalculate_only = 1 diff --git a/litellm-rust/crates/traces/migrations/0008_trace_received.sql b/litellm-rust/crates/traces/migrations/0008_trace_received.sql deleted file mode 100644 index 9d8113b2430..00000000000 --- a/litellm-rust/crates/traces/migrations/0008_trace_received.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE {database}.otel_traces ADD COLUMN IF NOT EXISTS EngineReceivedMs UInt64 DEFAULT 0 diff --git a/litellm-rust/crates/traces/migrations/0009_spend_received.sql b/litellm-rust/crates/traces/migrations/0009_spend_received.sql deleted file mode 100644 index 2b2d2c7e5d7..00000000000 --- a/litellm-rust/crates/traces/migrations/0009_spend_received.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE {database}.spend_logs ADD COLUMN IF NOT EXISTS EngineReceivedMs UInt64 DEFAULT 0 diff --git a/litellm-rust/crates/traces/tests/migrations.rs b/litellm-rust/crates/traces/tests/migrations.rs index a7fb3b57db2..ce4899681e8 100644 --- a/litellm-rust/crates/traces/tests/migrations.rs +++ b/litellm-rust/crates/traces/tests/migrations.rs @@ -470,6 +470,20 @@ async fn retention_changes_materialize_existing_rows_and_remain_idempotent( let database = database?; let writer = Connection::writer(&database.url)?; ensure_schema(&database.client, &writer, "trace_test", 30, 30).await?; + let tables = read_json( + &database, + "SELECT name FROM system.tables WHERE database = 'trace_test' \ + AND match(engine_full, 'materialize_ttl_recalculate_only = 1') ORDER BY name", + ) + .await?; + assert_eq!( + tables["data"], + serde_json::json!([ + {"name": "agent_traces_by_key"}, + {"name": "otel_traces"}, + {"name": "spend_logs"} + ]) + ); let old_time = time::OffsetDateTime::now_utc() - time::Duration::days(20); let old_timestamp_ns = old_time.unix_timestamp_nanos() as i64; let old_timestamp_ms = old_timestamp_ns / 1_000_000;