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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]