From 79acc9911e59a487a3d24cc3fa653ad56b830c70 Mon Sep 17 00:00:00 2001 From: yihong Date: Fri, 7 Feb 2025 14:47:53 +0800 Subject: [PATCH] fix: Delete statement not supported in metric engine close #4649 (#5473) * fix: Delete statement not supported in metric engine close #4649 Signed-off-by: yihong0618 * fix: do not include Truncate address review comments Signed-off-by: yihong0618 * fix: address comments Signed-off-by: yihong0618 * fix: address comment again Signed-off-by: yihong0618 --------- Signed-off-by: yihong0618 --- src/metric-engine/src/engine.rs | 14 ++++++++++++-- src/metric-engine/src/error.rs | 9 ++++++++- tests/cases/standalone/common/basic.result | 18 ++++++++++++------ tests/cases/standalone/common/basic.sql | 6 ++++++ 4 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/metric-engine/src/engine.rs b/src/metric-engine/src/engine.rs index 3ada60f824..fa054e3f8b 100644 --- a/src/metric-engine/src/engine.rs +++ b/src/metric-engine/src/engine.rs @@ -163,8 +163,18 @@ impl RegionEngine for MetricEngine { } } RegionRequest::Flush(req) => self.inner.flush_region(region_id, req).await, - RegionRequest::Delete(_) | RegionRequest::Truncate(_) => { - UnsupportedRegionRequestSnafu { request }.fail() + RegionRequest::Truncate(_) => UnsupportedRegionRequestSnafu { request }.fail(), + RegionRequest::Delete(_) => { + if self.inner.is_physical_region(region_id) { + self.inner + .mito + .handle_request(region_id, request) + .await + .context(error::MitoDeleteOperationSnafu) + .map(|response| response.affected_rows) + } else { + UnsupportedRegionRequestSnafu { request }.fail() + } } RegionRequest::Catchup(req) => self.inner.catchup_region(region_id, req).await, }; diff --git a/src/metric-engine/src/error.rs b/src/metric-engine/src/error.rs index 674989db9f..13e318cfc5 100644 --- a/src/metric-engine/src/error.rs +++ b/src/metric-engine/src/error.rs @@ -125,6 +125,12 @@ pub enum Error { #[snafu(implicit)] location: Location, }, + #[snafu(display("Mito delete operation fails"))] + MitoDeleteOperation { + source: BoxedError, + #[snafu(implicit)] + location: Location, + }, #[snafu(display("Mito catchup operation fails"))] MitoCatchupOperation { @@ -288,7 +294,8 @@ impl ErrorExt for Error { | MitoReadOperation { source, .. } | MitoWriteOperation { source, .. } | MitoCatchupOperation { source, .. } - | MitoFlushOperation { source, .. } => source.status_code(), + | MitoFlushOperation { source, .. } + | MitoDeleteOperation { source, .. } => source.status_code(), EncodePrimaryKey { source, .. } => source.status_code(), diff --git a/tests/cases/standalone/common/basic.result b/tests/cases/standalone/common/basic.result index af6e24319b..9516d0cfbc 100644 --- a/tests/cases/standalone/common/basic.result +++ b/tests/cases/standalone/common/basic.result @@ -107,6 +107,16 @@ SELECT * from t1; | host1 | 1970-01-01T00:00:00 | 0.0 | +-------+-------------------------+-----+ +-- issue #4649 should fail (do not support delete from logical table for now) +delete from t1; + +Error: 1001(Unsupported), Unsupported region request: Delete + +-- issue #4649 should succeed +delete from phy; + +Affected Rows: 2 + CREATE TABLE t2 (ts timestamp time index, job string primary key, val double) engine = metric with ("on_physical_table" = "phy"); Affected Rows: 0 @@ -143,12 +153,8 @@ select * from foo; SELECT * from t1; -+-------+-------------------------+-----+ -| host | ts | val | -+-------+-------------------------+-----+ -| host2 | 1970-01-01T00:00:00.001 | 1.0 | -| host1 | 1970-01-01T00:00:00 | 0.0 | -+-------+-------------------------+-----+ +++ +++ SELECT * from t2; diff --git a/tests/cases/standalone/common/basic.sql b/tests/cases/standalone/common/basic.sql index 13a7d5a1c4..b66651b8e8 100644 --- a/tests/cases/standalone/common/basic.sql +++ b/tests/cases/standalone/common/basic.sql @@ -47,6 +47,12 @@ INSERT INTO t1 VALUES ('host1',0, 0), ('host2', 1, 1,); SELECT * from t1; +-- issue #4649 should fail (do not support delete from logical table for now) +delete from t1; + +-- issue #4649 should succeed +delete from phy; + CREATE TABLE t2 (ts timestamp time index, job string primary key, val double) engine = metric with ("on_physical_table" = "phy"); SELECT * from t2;