This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new ba414fd872e branch-3.1: [bug](group commit) Fix group commit blocked
after schema change throw exception #54113 (#54309)
ba414fd872e is described below
commit ba414fd872e38dcc9d810e3662b85eee861ec69a
Author: xy720 <[email protected]>
AuthorDate: Tue Aug 5 14:48:29 2025 +0800
branch-3.1: [bug](group commit) Fix group commit blocked after schema
change throw exception #54113 (#54309)
pick #54113
---
.../apache/doris/alter/MaterializedViewHandler.java | 15 +++++++++++++++
.../suites/insert_p0/insert_group_commit_into.groovy | 19 ++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
index 64a747e99e4..84def3c6266 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
@@ -162,6 +162,8 @@ public class MaterializedViewHandler extends AlterHandler {
if (tableNotFinalStateJobIdset == null) {
// This could happen when this job is already removed before.
// return false, so that we will not set table's to NORMAL
again.
+ LOG.warn("alter job is already removed before. tableId: {},
jobId: {}",
+ tableId, jobId);
return false;
}
tableNotFinalStateJobIdset.remove(jobId);
@@ -228,6 +230,11 @@ public class MaterializedViewHandler extends AlterHandler {
Env.getCurrentEnv().getEditLog().logAlterJob(rollupJobV2);
LOG.info("finished to create materialized view job: {}",
rollupJobV2.getJobId());
} finally {
+ if (olapTable.getState() != OlapTableState.ROLLUP) {
+ // state is not ROLLUP, means encountered some exception
before jobs submitted,
+ // so we need to unblock table here.
+
Env.getCurrentEnv().getGroupCommitManager().unblockTable(olapTable.getId());
+ }
olapTable.writeUnlock();
}
}
@@ -333,6 +340,11 @@ public class MaterializedViewHandler extends AlterHandler {
}
throw e;
} finally {
+ if (olapTable.getState() != OlapTableState.ROLLUP) {
+ // state is not ROLLUP, means encountered some exception
before jobs submitted,
+ // so we need to unblock table here.
+
Env.getCurrentEnv().getGroupCommitManager().unblockTable(olapTable.getId());
+ }
olapTable.writeUnlock();
}
}
@@ -1220,6 +1232,9 @@ public class MaterializedViewHandler extends AlterHandler
{
changeTableStatus(alterJob.getDbId(), alterJob.getTableId(),
OlapTableState.NORMAL);
LOG.info("set table's state to NORMAL, table id: {}, job id: {}",
alterJob.getTableId(),
alterJob.getJobId());
+ } else {
+ LOG.warn("Failed to remove job from tableNotFinalStateJobMap,
table id: {}, job id: {}",
+ alterJob.getTableId(), alterJob.getJobId());
}
}
diff --git a/regression-test/suites/insert_p0/insert_group_commit_into.groovy
b/regression-test/suites/insert_p0/insert_group_commit_into.groovy
index bade0c8f279..57e40b5f2dd 100644
--- a/regression-test/suites/insert_p0/insert_group_commit_into.groovy
+++ b/regression-test/suites/insert_p0/insert_group_commit_into.groovy
@@ -229,6 +229,23 @@ suite("insert_group_commit_into") {
logger.info("row count: " + rowCount)
assertEquals(23, rowCount[0][0])
+ // 8. Test create rollup throw exception and group commit behavior
+ try {
+ sql """ alter table ${table} ADD ROLLUP r1(name, score); """
+ assertTrue(false, "create rollup with duplicate name should
fail.")
+ } catch (Exception e) {
+ logger.info("Expected create rollup error: " + e.getMessage())
+ assertTrue(e.getMessage().contains("already exists"))
+ }
+
+ group_commit_insert_with_retry """ insert into ${table}(id, name)
values(2, 'b'); """, 1
+ group_commit_insert_with_retry """ insert into ${table}(id)
values(6); """, 1
+ getRowCount(25)
+
+ // Verify group commit works after add rollup throw exception
+ group_commit_insert """ insert into ${table}(id, name) values(2,
'b'); """, 1
+ getRowCount(26)
+
// txn insert
sql """ set enable_nereids_dml = true; """
sql """ set enable_nereids_planner=true; """
@@ -242,7 +259,7 @@ suite("insert_group_commit_into") {
rowCount = sql "select count(*) from ${table}"
logger.info("row count: " + rowCount)
- assertEquals(rowCount[0][0], 25)
+ assertEquals(rowCount[0][0], 28)
}
} finally {
// try_sql("DROP TABLE ${table}")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]