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 + } } }