Skip to content

Commit 0715889

Browse files
feat(planner): --planner saved for SQL (#866)
* feat(planner): --planner saved for SQL (#856) An e2e query is now written in `promql` or `sql`; --query-language picks which ones are planned. In SQL mode each `records` metric is a table (labels as metadata columns, values as value columns, time column `ts`), and a SQL query is one leaf that may read several RQEs, all of which must be served by one deployment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(planner): sub-second saved windows; review fixes - A plan's window_secs/slide_secs may be fractional (an instant query's window is one scrape, 0.1 s at 10 samples/s); they are converted to whole ms, and a fraction of a ms is refused. - A SQL query's RQEs are compared as a set. - records metrics go through --planner milp's table checks; empty values are refused. - The query language is checked once, in saved_plan_output. - Test: one SQL query's RQEs needing different sketches is refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent dbca6b6 commit 0715889

2 files changed

Lines changed: 446 additions & 49 deletions

File tree

‎asap-planner-rs/src/main.rs‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ struct Args {
5959

6060
/// `milp` plans with sketch-bench's rqe-optimizer: PromQL or SQL with
6161
/// --input_config only, labels from its `metrics:` hints or tables'
62-
/// `metadata_columns`. `saved` writes a PromQL plan sketch-bench's
62+
/// `metadata_columns`. `saved` writes a PromQL or SQL plan sketch-bench's
6363
/// `autosketch_vs_asap` already solved.
6464
#[arg(long, value_enum, default_value = "legacy")]
6565
planner: PlannerArg,
@@ -70,7 +70,8 @@ struct Args {
7070
plan: Option<PathBuf>,
7171

7272
/// Saved only. The eval workload table the plan was solved for; its
73-
/// `e2e` block gives the PromQL queries and metric labels.
73+
/// `e2e` block gives the queries in --query-language and the metrics'
74+
/// labels.
7475
#[arg(long = "workload-table", required_if_eq("planner", "saved"))]
7576
workload_table: Option<PathBuf>,
7677

@@ -338,10 +339,6 @@ fn run_milp(args: &Args) -> anyhow::Result<()> {
338339
}
339340

340341
fn run_saved(args: &Args) -> anyhow::Result<()> {
341-
anyhow::ensure!(
342-
args.query_language == QueryLanguage::promql,
343-
"--planner saved supports only --query-language promql"
344-
);
345342
let scrape_interval_ms = check_optimizer_flags(args, "saved")?;
346343
anyhow::ensure!(
347344
args.input_config.is_none(),
@@ -359,6 +356,7 @@ fn run_saved(args: &Args) -> anyhow::Result<()> {
359356
weights: args.weights.as_deref().expect("clap requires --weights"),
360357
sla_ms: args.sla_ms,
361358
},
359+
args.query_language,
362360
scrape_interval_ms,
363361
)?
364362
.write_to_dir(&args.output_dir)?;

0 commit comments

Comments
 (0)