From cf62767b98776066c76fd17eae025c34078ab39b Mon Sep 17 00:00:00 2001 From: "Lei, HUANG" Date: Wed, 25 Jun 2025 08:08:01 +0000 Subject: [PATCH] poc/create-alter-for-metrics: ### Commit Message Enhance error handling in `batch_builder.rs` and `error.rs` - **`batch_builder.rs`**: - Replaced `todo!` with specific error handling for invalid timestamp and field value types using `InvalidTimestampValueTypeSnafu` and `InvalidFieldValueTypeSnafu`. - **`error.rs`**: - Added new error variants `InvalidTimestampValueType` and `InvalidFieldValueType` with descriptive messages. - Updated `status_code` method to handle new error types with `StatusCode::Unexpected`. Signed-off-by: Lei, HUANG --- src/servers/src/batch_builder.rs | 6 ++++-- src/servers/src/error.rs | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/servers/src/batch_builder.rs b/src/servers/src/batch_builder.rs index 8338865162..ae49034fff 100644 --- a/src/servers/src/batch_builder.rs +++ b/src/servers/src/batch_builder.rs @@ -296,14 +296,16 @@ impl BatchEncoder { // process timestamp and field. We already know the position of timestamps and values in [TableBuilder]. let ValueData::TimestampMillisecondValue(ts) = + // safety: timestamp values cannot be null row.value_at(0).value_data.as_ref().unwrap() else { - todo!("return an error") + return error::InvalidTimestampValueTypeSnafu.fail(); }; self.timestamps.push(*ts); + // safety: field values cannot be null in prom remote write let ValueData::F64Value(val) = row.value_at(1).value_data.as_ref().unwrap() else { - todo!("return an error") + return error::InvalidFieldValueTypeSnafu.fail(); }; self.value.push(*val); } diff --git a/src/servers/src/error.rs b/src/servers/src/error.rs index 40685c25eb..e5aaa72960 100644 --- a/src/servers/src/error.rs +++ b/src/servers/src/error.rs @@ -645,6 +645,20 @@ pub enum Error { #[snafu(implicit)] location: Location, }, + + #[snafu(display( + "Invalid timestamp value type in row data, expected TimestampMillisecondValue" + ))] + InvalidTimestampValueType { + #[snafu(implicit)] + location: Location, + }, + + #[snafu(display("Invalid field value type in row data, expected F64Value"))] + InvalidFieldValueType { + #[snafu(implicit)] + location: Location, + }, } pub type Result = std::result::Result; @@ -771,6 +785,9 @@ impl ErrorExt for Error { CommonMeta { source, .. } => source.status_code(), Operator { source, .. } => source.status_code(), EncodePrimaryKey { source, .. } => source.status_code(), + InvalidTimestampValueType { .. } | InvalidFieldValueType { .. } => { + StatusCode::Unexpected + } } }