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]

Reply via email to