This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 3593b82498 [fix](schema change) Fix fe restart failed because of 
replay schema change alter job failed (#17825)
3593b82498 is described below

commit 3593b82498e83cb2b16febe5723c858dd4133715
Author: YueW <45946325+tany...@users.noreply.github.com>
AuthorDate: Fri Mar 17 20:54:50 2023 +0800

    [fix](schema change) Fix fe restart failed because of replay schema change 
alter job failed (#17825)
---
 .../apache/doris/alter/SchemaChangeHandler.java    | 40 ++++++++++++++++++++++
 .../org/apache/doris/alter/SchemaChangeJobV2.java  |  5 ---
 .../java/org/apache/doris/master/MasterImpl.java   |  4 ++-
 .../test_dytable_complex_data.groovy               |  4 ++-
 .../suites/index_p0/test_index_meta.groovy         |  4 ++-
 .../inverted_index_p0/test_add_drop_index.groovy   |  4 ++-
 .../test_add_drop_index_ignore_case_column.groovy  |  4 ++-
 .../test_add_drop_index_with_data.groovy           |  4 ++-
 .../test_add_drop_index_with_delete_data.groovy    |  4 ++-
 .../test_index_like_select.groovy                  |  4 ++-
 .../test_index_match_term_and_phrase_select.groovy |  4 ++-
 .../test_index_range_between_select.groovy         |  4 ++-
 .../test_index_range_in_select.groovy              |  2 ++
 .../test_index_range_not_in_select.groovy          |  2 ++
 .../test_alter_table_column_nullable.groovy        |  1 +
 15 files changed, 75 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
index ddc72f3ad6..5dfdb6c55f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
@@ -1596,9 +1596,35 @@ public class SchemaChangeHandler extends AlterHandler {
                     });
                 }
             }
+
+            if (alterJobsV2.isDone()) {
+                changeTableState(alterJobsV2.getDbId(), 
alterJobsV2.getTableId(), OlapTableState.NORMAL);
+                runnableSchemaChangeJobV2.remove(alterJobsV2.getJobId());
+                LOG.info("set table's state to NORMAL, table id: {}, job id: 
{}", alterJobsV2.getTableId(),
+                        alterJobsV2.getJobId());
+            }
         });
     }
 
+    private void changeTableState(long dbId, long tableId, OlapTableState 
olapTableState) {
+        try {
+            Database db = 
Env.getCurrentInternalCatalog().getDbOrMetaException(dbId);
+            OlapTable olapTable = (OlapTable) 
db.getTableOrMetaException(tableId, Table.TableType.OLAP);
+            olapTable.writeLockOrMetaException();
+            try {
+                if (olapTable.getState() == olapTableState) {
+                    return;
+                } else if (olapTable.getState() == 
OlapTableState.SCHEMA_CHANGE) {
+                    olapTable.setState(olapTableState);
+                }
+            } finally {
+                olapTable.writeUnlock();
+            }
+        } catch (MetaNotFoundException e) {
+            LOG.warn("[INCONSISTENT META] changing table status failed after 
schema change job done", e);
+        }
+    }
+
     public List<List<Comparable>> getAllAlterJobInfos() {
         List<List<Comparable>> schemaChangeJobInfos = new LinkedList<>();
         for (AlterJobV2 alterJob : ImmutableList.copyOf(alterJobsV2.values())) 
{
@@ -2132,6 +2158,11 @@ public class SchemaChangeHandler extends AlterHandler {
             if (!schemaChangeJobV2.cancel("user cancelled")) {
                 throw new DdlException("Job can not be cancelled. State: " + 
schemaChangeJobV2.getJobState());
             }
+            if (schemaChangeJobV2.isDone()) {
+                changeTableState(schemaChangeJobV2.getDbId(), 
schemaChangeJobV2.getTableId(), OlapTableState.NORMAL);
+                LOG.info("set table's state to NORMAL when cancel job, table 
id: {}, job id: {}",
+                        schemaChangeJobV2.getTableId(), 
schemaChangeJobV2.getJobId());
+            }
             return;
         }
     }
@@ -2235,6 +2266,9 @@ public class SchemaChangeHandler extends AlterHandler {
         while (iterator.hasNext()) {
             AlterJobV2 alterJobV2 = iterator.next().getValue();
             if (alterJobV2.isDone()) {
+                changeTableState(alterJobV2.getDbId(), 
alterJobV2.getTableId(), OlapTableState.NORMAL);
+                LOG.info("set table's state to NORMAL, table id: {}, job id: 
{}", alterJobV2.getTableId(),
+                        alterJobV2.getJobId());
                 iterator.remove();
             }
         }
@@ -2254,6 +2288,12 @@ public class SchemaChangeHandler extends AlterHandler {
             runnableSchemaChangeJobV2.put(alterJob.getJobId(), alterJob);
         }
         super.replayAlterJobV2(alterJob);
+        if (alterJob.isDone()) {
+            changeTableState(alterJob.getDbId(), alterJob.getTableId(), 
OlapTableState.NORMAL);
+            runnableSchemaChangeJobV2.remove(alterJob.getJobId());
+            LOG.info("set table's state to NORMAL, table id: {}, job id: {}", 
alterJob.getTableId(),
+                    alterJob.getJobId());
+        }
     }
 
     // the invoker should keep table's write lock
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
index 1641fafdfd..db6a2dca59 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeJobV2.java
@@ -697,7 +697,6 @@ public class SchemaChangeJobV2 extends AlterJobV2 {
     private void onFinished(OlapTable tbl) {
         if (invertedIndexChange) {
             tbl.setStorageFormat(storageFormat);
-            tbl.setState(OlapTableState.NORMAL);
             return;
         }
         // replace the origin index with shadow index, set index state as 
NORMAL
@@ -779,8 +778,6 @@ public class SchemaChangeJobV2 extends AlterJobV2 {
         if (storageFormat == TStorageFormat.V2) {
             tbl.setStorageFormat(storageFormat);
         }
-
-        tbl.setState(OlapTableState.NORMAL);
     }
 
     /*
@@ -834,8 +831,6 @@ public class SchemaChangeJobV2 extends AlterJobV2 {
                         // update index to oriIndexes, because inverted index 
updated before WAIT_TXN state.
                         tbl.setIndexes(oriIndexes);
                     }
-                    tbl.setState(OlapTableState.NORMAL);
-                    LOG.info("set table's state to NORMAL when cancel job: 
{}", tbl.getId(), jobId);
                 } finally {
                     tbl.writeUnlock();
                 }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
index 89c9aff23c..0c7ee5dc3f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/master/MasterImpl.java
@@ -588,7 +588,9 @@ public class MasterImpl {
 
     private void finishAlterInvertedIndexTask(AgentTask task) {
         AlterInvertedIndexTask alterInvertedIndexTask = 
(AlterInvertedIndexTask) task;
-        LOG.info("beigin finish AlterInvertedIndexTask, Jobtype: {}", 
alterInvertedIndexTask.getJobType());
+        LOG.info("beigin finish AlterInvertedIndexTask: {}, JobId: {}, 
Jobtype: {}",
+                alterInvertedIndexTask.getSignature(), 
alterInvertedIndexTask.getJobId(),
+                alterInvertedIndexTask.getJobType());
         // TODO: more check
         alterInvertedIndexTask.setFinished(true);
         AgentTaskQueue.removeTask(task.getBackendId(), 
TTaskType.ALTER_INVERTED_INDEX, task.getSignature());
diff --git 
a/regression-test/suites/dynamic_table_p0/test_dytable_complex_data.groovy 
b/regression-test/suites/dynamic_table_p0/test_dytable_complex_data.groovy
index 4d871e56e4..2e2028bb60 100644
--- a/regression-test/suites/dynamic_table_p0/test_dytable_complex_data.groovy
+++ b/regression-test/suites/dynamic_table_p0/test_dytable_complex_data.groovy
@@ -119,7 +119,9 @@ suite("test_dynamic_table", "dynamic_table"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git a/regression-test/suites/index_p0/test_index_meta.groovy 
b/regression-test/suites/index_p0/test_index_meta.groovy
index b070731285..abec7ce2cd 100644
--- a/regression-test/suites/index_p0/test_index_meta.groovy
+++ b/regression-test/suites/index_p0/test_index_meta.groovy
@@ -29,7 +29,9 @@ suite("index_meta", "p0") {
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             sleep(delta_time)
         }
diff --git 
a/regression-test/suites/inverted_index_p0/test_add_drop_index.groovy 
b/regression-test/suites/inverted_index_p0/test_add_drop_index.groovy
index 8847c6ec48..da4152c752 100644
--- a/regression-test/suites/inverted_index_p0/test_add_drop_index.groovy
+++ b/regression-test/suites/inverted_index_p0/test_add_drop_index.groovy
@@ -27,7 +27,9 @@ suite("test_add_drop_index", "inverted_index"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_ignore_case_column.groovy
 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_ignore_case_column.groovy
index c17c843f3c..aee3170f3c 100644
--- 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_ignore_case_column.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_ignore_case_column.groovy
@@ -27,7 +27,9 @@ suite("test_add_drop_index_with_ignore_case_column", 
"inverted_index"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy
index 52cce8eeb0..c96b9d3ddb 100644
--- 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy
@@ -27,7 +27,9 @@ suite("test_add_drop_index_with_data", "inverted_index"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_delete_data.groovy
 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_delete_data.groovy
index f224d1bed8..241778a3d1 100644
--- 
a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_delete_data.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_delete_data.groovy
@@ -27,7 +27,9 @@ suite("test_add_drop_index_with_delete_data", 
"inverted_index"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_index_like_select.groovy 
b/regression-test/suites/inverted_index_p0/test_index_like_select.groovy
index c7468c3f97..7be9431e7c 100644
--- a/regression-test/suites/inverted_index_p0/test_index_like_select.groovy
+++ b/regression-test/suites/inverted_index_p0/test_index_like_select.groovy
@@ -37,7 +37,9 @@ suite("test_index_like_select", "inverted_index_select"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_index_match_term_and_phrase_select.groovy
 
b/regression-test/suites/inverted_index_p0/test_index_match_term_and_phrase_select.groovy
index 583c50fc15..13f1be3261 100644
--- 
a/regression-test/suites/inverted_index_p0/test_index_match_term_and_phrase_select.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_index_match_term_and_phrase_select.groovy
@@ -37,7 +37,9 @@ suite("test_index_match_term_and_phrase_select", 
"inverted_index_select"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_index_range_between_select.groovy
 
b/regression-test/suites/inverted_index_p0/test_index_range_between_select.groovy
index 42362c2d38..80a2ae7bc4 100644
--- 
a/regression-test/suites/inverted_index_p0/test_index_range_between_select.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_index_range_between_select.groovy
@@ -37,7 +37,9 @@ suite("test_index_range_between_select", 
"inverted_index_select"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
-                 break
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
+                break
             }
             useTime = t
             sleep(delta_time)
diff --git 
a/regression-test/suites/inverted_index_p0/test_index_range_in_select.groovy 
b/regression-test/suites/inverted_index_p0/test_index_range_in_select.groovy
index 857a0b8735..1372dc9a6c 100644
--- a/regression-test/suites/inverted_index_p0/test_index_range_in_select.groovy
+++ b/regression-test/suites/inverted_index_p0/test_index_range_in_select.groovy
@@ -75,6 +75,8 @@ suite("test_index_range_in_select", "inverted_index_select"){
             alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
             alter_res = alter_res.toString()
             if(alter_res.contains("FINISHED")) {
+                sleep(3000) // wait change table state to normal
+                logger.info(table_name + " latest alter job finished, detail: 
" + alter_res)
                 break
             }
             useTime = t
diff --git 
a/regression-test/suites/inverted_index_p0/test_index_range_not_in_select.groovy
 
b/regression-test/suites/inverted_index_p0/test_index_range_not_in_select.groovy
index 4eed16864c..dd4f33b7ec 100644
--- 
a/regression-test/suites/inverted_index_p0/test_index_range_not_in_select.groovy
+++ 
b/regression-test/suites/inverted_index_p0/test_index_range_not_in_select.groovy
@@ -81,6 +81,8 @@ suite("test_index_range_not_in_select", 
"inverted_index_select"){
                 alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = 
"${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
                 alter_res = alter_res.toString()
                 if(alter_res.contains("FINISHED")) {
+                    sleep(3000) // wait change table state to normal
+                    logger.info(table_name + " latest alter job finished, 
detail: " + alter_res)
                     break
                 }
                 useTime = t
diff --git 
a/regression-test/suites/schema_change_p0/test_alter_table_column_nullable.groovy
 
b/regression-test/suites/schema_change_p0/test_alter_table_column_nullable.groovy
index 55b9d247d6..35f1f4426f 100644
--- 
a/regression-test/suites/schema_change_p0/test_alter_table_column_nullable.groovy
+++ 
b/regression-test/suites/schema_change_p0/test_alter_table_column_nullable.groovy
@@ -119,6 +119,7 @@ suite("test_alter_table_column_nullable") {
     while (max_try_secs--) {
         String res = getJobState(tbName)
         if (res == "CANCELLED") {
+            sleep(3000)
             break
         } else {
             Thread.sleep(2000)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to