Skip to content

Commit b56d0e2

Browse files
committed
fix(workload): allow omitted cadence for non-PromQL payloads
1 parent b4d3c50 commit b56d0e2

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

‎crates/types/src/workload.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ pub struct DataWorkload {
532532
pub arrival: DataArrival,
533533
/// Cadence at which each PromQL source supplies a sample. PromQL instant
534534
/// selectors use this as their explicit selection horizon.
535+
#[serde(default)]
535536
pub data_ingestion_interval: Evidence<DurationMs>,
536537
pub ingestion_volume: Evidence<u64>,
537538
pub ingestion_rate: Evidence<Rate>,
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use asap_types::workload::{DataWorkload, QueryLanguage, QueryWorkload, SqlDialect};
2+
3+
// Non-PromQL wire workloads should not require a PromQL-only cadence fact.
4+
#[test]
5+
fn non_promql_payload_accepts_absent_ingestion_interval() {
6+
for language in [
7+
QueryLanguage::DataFusion,
8+
QueryLanguage::SQL(SqlDialect::DataFusionSQL),
9+
] {
10+
let workload = QueryWorkload {
11+
language,
12+
query_batch: None,
13+
repeating_queries: None,
14+
data_workload: Some(DataWorkload::default()),
15+
};
16+
workload.validate().unwrap();
17+
let mut payload = serde_json::to_value(&workload).unwrap();
18+
payload["data_workload"]
19+
.as_object_mut()
20+
.unwrap()
21+
.remove("data_ingestion_interval");
22+
let decoded = serde_json::from_value::<QueryWorkload>(payload.clone()).unwrap();
23+
decoded.validate().unwrap();
24+
payload["language"] = serde_json::json!("promql");
25+
let promql = serde_json::from_value::<QueryWorkload>(payload).unwrap();
26+
assert_eq!(
27+
promql.validate(),
28+
Err(asap_types::workload::WorkloadError::MissingDataIngestionInterval)
29+
);
30+
}
31+
}

0 commit comments

Comments
 (0)