From c4d10313e6521b1b26a85d257f2cbb37d9c40807 Mon Sep 17 00:00:00 2001 From: yihong Date: Sun, 26 Jan 2025 11:33:12 +0800 Subject: [PATCH] fix: better error handler for the time range close #5449 (#5453) * fix: better error handler for the time range close #5499 Signed-off-by: yihong0618 * fix: wrong compare Signed-off-by: yihong0618 * fix: address comments Signed-off-by: yihong0618 --------- Signed-off-by: yihong0618 --- src/query/src/promql/error.rs | 13 +++++++++++++ src/query/src/promql/planner.rs | 14 +++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/query/src/promql/error.rs b/src/query/src/promql/error.rs index f204cdbd7b..532f598b77 100644 --- a/src/query/src/promql/error.rs +++ b/src/query/src/promql/error.rs @@ -128,6 +128,18 @@ pub enum Error { location: Location, }, + #[snafu(display( + "The end time must be greater than start time, start: {:?}, end: {:?}", + start, + end + ))] + InvalidTimeRange { + start: i64, + end: i64, + #[snafu(implicit)] + location: Location, + }, + #[snafu(display("Cannot find column {col}"))] ColumnNotFound { col: String, @@ -193,6 +205,7 @@ impl ErrorExt for Error { | MultipleVector { .. } | ExpectRangeSelector { .. } | ZeroRangeSelector { .. } + | InvalidTimeRange { .. } | ColumnNotFound { .. } | FunctionInvalidArgument { .. } | UnsupportedVectorMatch { .. } diff --git a/src/query/src/promql/planner.rs b/src/query/src/promql/planner.rs index 8fa344295a..49c6051454 100644 --- a/src/query/src/promql/planner.rs +++ b/src/query/src/promql/planner.rs @@ -70,11 +70,12 @@ use table::table::adapter::DfTableProviderAdapter; use crate::promql::error::{ CatalogSnafu, ColumnNotFoundSnafu, CombineTableColumnMismatchSnafu, DataFusionPlanningSnafu, - ExpectRangeSelectorSnafu, FunctionInvalidArgumentSnafu, MultiFieldsNotSupportedSnafu, - MultipleMetricMatchersSnafu, MultipleVectorSnafu, NoMetricMatcherSnafu, PromqlPlanNodeSnafu, - Result, TableNameNotFoundSnafu, TimeIndexNotFoundSnafu, UnexpectedPlanExprSnafu, - UnexpectedTokenSnafu, UnknownTableSnafu, UnsupportedExprSnafu, UnsupportedMatcherOpSnafu, - UnsupportedVectorMatchSnafu, ValueNotFoundSnafu, ZeroRangeSelectorSnafu, + ExpectRangeSelectorSnafu, FunctionInvalidArgumentSnafu, InvalidTimeRangeSnafu, + MultiFieldsNotSupportedSnafu, MultipleMetricMatchersSnafu, MultipleVectorSnafu, + NoMetricMatcherSnafu, PromqlPlanNodeSnafu, Result, TableNameNotFoundSnafu, + TimeIndexNotFoundSnafu, UnexpectedPlanExprSnafu, UnexpectedTokenSnafu, UnknownTableSnafu, + UnsupportedExprSnafu, UnsupportedMatcherOpSnafu, UnsupportedVectorMatchSnafu, + ValueNotFoundSnafu, ZeroRangeSelectorSnafu, }; /// `time()` function in PromQL. @@ -985,6 +986,9 @@ impl PromPlanner { fn build_time_index_filter(&self, offset_duration: i64) -> Result> { let start = self.ctx.start; let end = self.ctx.end; + if end < start { + return InvalidTimeRangeSnafu { start, end }.fail(); + } let lookback_delta = self.ctx.lookback_delta; let range = self.ctx.range.unwrap_or_default(); let interval = self.ctx.interval;