This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new ee09f55ca24 branch-2.1: [fix](mtmv)Fix issue that refreshState turns to init when replaying alterStatus editLog #51439 (#51544) ee09f55ca24 is described below commit ee09f55ca2405a41fd5fb2afc9896d2efef703cb Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> AuthorDate: Mon Jun 16 17:30:14 2025 +0800 branch-2.1: [fix](mtmv)Fix issue that refreshState turns to init when replaying alterStatus editLog #51439 (#51544) Cherry-picked from #51439 Co-authored-by: zhangdong <zhangd...@selectdb.com> --- .../main/java/org/apache/doris/catalog/MTMV.java | 3 ++- .../java/org/apache/doris/mtmv/MTMVStatus.java | 20 ++++++++---------- .../test/java/org/apache/doris/mtmv/MTMVTest.java | 24 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java index 3be722f18c9..ea4e94d5c97 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java @@ -182,7 +182,8 @@ public class MTMV extends OlapTable { public MTMVStatus alterStatus(MTMVStatus newStatus) { writeMvLock(); try { - return this.status.updateNotNull(newStatus); + // only can update state, refresh state will be change by add task + return this.status.updateStateAndDetail(newStatus); } finally { writeMvUnlock(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVStatus.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVStatus.java index ea05dbc8673..b1761b9e973 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVStatus.java +++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVStatus.java @@ -70,18 +70,14 @@ public class MTMVStatus { this.refreshState = refreshState; } - public MTMVStatus updateNotNull(MTMVStatus status) { - Objects.requireNonNull(status); - if (status.getState() != null) { - this.state = status.getState(); - if (this.state == MTMVState.SCHEMA_CHANGE) { - this.schemaChangeDetail = status.getSchemaChangeDetail(); - } else { - this.schemaChangeDetail = null; - } - } - if (status.getRefreshState() != null) { - this.refreshState = status.getRefreshState(); + public MTMVStatus updateStateAndDetail(MTMVStatus status) { + Objects.requireNonNull(status, "status can not be null"); + Objects.requireNonNull(status.getState(), "status.state can not be null"); + this.state = status.getState(); + if (this.state == MTMVState.SCHEMA_CHANGE) { + this.schemaChangeDetail = status.getSchemaChangeDetail(); + } else { + this.schemaChangeDetail = null; } return this; } diff --git a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java index cfe2ac9cb6f..b8c438348ac 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/mtmv/MTMVTest.java @@ -32,6 +32,8 @@ import org.apache.doris.common.util.PropertyAnalyzer; import org.apache.doris.job.common.IntervalUnit; import org.apache.doris.job.extensions.mtmv.MTMVTask; import org.apache.doris.mtmv.MTMVRefreshEnum.BuildMode; +import org.apache.doris.mtmv.MTMVRefreshEnum.MTMVRefreshState; +import org.apache.doris.mtmv.MTMVRefreshEnum.MTMVState; import org.apache.doris.mtmv.MTMVRefreshEnum.RefreshMethod; import org.apache.doris.mtmv.MTMVRefreshEnum.RefreshTrigger; @@ -173,4 +175,26 @@ public class MTMVTest { Assert.assertTrue(excludedTriggerTables.contains(new TableName(null, "db2", "t2"))); Assert.assertTrue(excludedTriggerTables.contains(new TableName(null, null, "t3"))); } + + @Test + public void testAlterStatus() { + MTMV mtmv = new MTMV(); + MTMVStatus status = new MTMVStatus(); + mtmv.setStatus(status); + // test init + Assert.assertEquals(MTMVState.INIT, status.getState()); + Assert.assertEquals(MTMVRefreshState.INIT, status.getRefreshState()); + // test schema change + status.setRefreshState(MTMVRefreshState.SUCCESS); + mtmv.alterStatus(new MTMVStatus(MTMVState.SCHEMA_CHANGE, "base table")); + Assert.assertEquals(MTMVState.SCHEMA_CHANGE, status.getState()); + Assert.assertEquals(MTMVRefreshState.SUCCESS, status.getRefreshState()); + + MTMVStatus alterStatus = new MTMVStatus(); + alterStatus.setState(MTMVState.SCHEMA_CHANGE); + alterStatus.setSchemaChangeDetail("base table"); + mtmv.alterStatus(new MTMVStatus(MTMVState.SCHEMA_CHANGE, "base table")); + Assert.assertEquals(MTMVState.SCHEMA_CHANGE, status.getState()); + Assert.assertEquals(MTMVRefreshState.SUCCESS, status.getRefreshState()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org