This is an automated email from the ASF dual-hosted git repository.
dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 797363b1ede branch-3.0: [fix](mtmv)Fix issue that refreshState turns
to init when replaying alterStatus editLog #51439 (#51543)
797363b1ede is described below
commit 797363b1ede0414ad52601b8b9778acf6ac650d5
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Jun 11 11:05:25 2025 +0800
branch-3.0: [fix](mtmv)Fix issue that refreshState turns to init when
replaying alterStatus editLog #51439 (#51543)
Cherry-picked from #51439
Co-authored-by: zhangdong <[email protected]>
---
.../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 8b04bdd7f6e..2084703989d 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
@@ -184,7 +184,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: [email protected]
For additional commands, e-mail: [email protected]