This is an automated email from the ASF dual-hosted git repository.
yangbowen pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 70e822461f2 [branch-2.0](schema change) opt cooldown data schema
change (#40963)
70e822461f2 is described below
commit 70e822461f25cf63a67b82813abb1cf2d2523771
Author: Xujian Duan <[email protected]>
AuthorDate: Fri Sep 20 11:01:44 2024 +0800
[branch-2.0](schema change) opt cooldown data schema change (#40963)
## Proposed changes
This PR solves 3 problems of schema change for cooldown data:
1. Schema change will build a new tablet for base tablet, and all
replicas do this separately, so the cooldown data SC writes all replicas
to the remote storage, But the cooldown rowsets just need one master
replica to cooldown, the other replicas follow the master. To optimize
this issue, Doris can just write the new rowsets to the local storage,
and the tablet will cooldown this rowsets automatically for just one
mater replica.
3. In schema change job and rollup job, FE generates createReplicaTask,
which specifies the storage policy of the tablets to create, table's
storage policy may be empty if we just set the partitions' storage
policy, so we use partition's storage policy instead of table.
5. checks the target tablets in the loop of data conversion, and
terminates the data conversion thread if the tablet is been dropped.
---
be/src/olap/schema_change.cpp | 16 +++++++++++++++-
.../main/java/org/apache/doris/alter/RollupJobV2.java | 3 ++-
.../java/org/apache/doris/alter/SchemaChangeJobV2.java | 3 ++-
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index 7d867d89460..7e6b9a3ff35 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -498,6 +498,13 @@ Status
VSchemaChangeDirectly::_inner_process(RowsetReaderSharedPtr rowset_reader
TabletSchemaSPtr
base_tablet_schema) {
bool eof = false;
do {
+ // tablet may be dropped due to user cancel, schema change thread
should fast fail
+ // and release tablet lock.
+ if (new_tablet->tablet_state() == TABLET_SHUTDOWN) {
+ return Status::Error<TABLE_ALREADY_DELETED_ERROR>(
+ "fail to process tablet because it is to be deleted.
tablet_id={}",
+ new_tablet->tablet_id());
+ }
auto new_block =
vectorized::Block::create_unique(new_tablet->tablet_schema()->create_block());
auto ref_block =
vectorized::Block::create_unique(base_tablet_schema->create_block());
@@ -580,6 +587,13 @@ Status
VSchemaChangeWithSorting::_inner_process(RowsetReaderSharedPtr rowset_rea
bool eof = false;
do {
+ // tablet may be dropped due to user cancel, schema change thread
should fast fail
+ // and release tablet lock.
+ if (new_tablet->tablet_state() == TABLET_SHUTDOWN) {
+ return Status::Error<TABLE_ALREADY_DELETED_ERROR>(
+ "fail to process tablet because it is to be deleted.
tablet_id={}",
+ new_tablet->tablet_id());
+ }
auto ref_block =
vectorized::Block::create_unique(base_tablet_schema->create_block());
auto st = rowset_reader->next_block(ref_block.get());
if (!st) {
@@ -1103,7 +1117,7 @@ Status
SchemaChangeHandler::_convert_historical_rowsets(const SchemaChangeParams
context.segments_overlap =
rs_reader->rowset()->rowset_meta()->segments_overlap();
context.tablet_schema = new_tablet->tablet_schema();
context.newest_write_timestamp = rs_reader->newest_write_timestamp();
- context.fs = rs_reader->rowset()->rowset_meta()->fs();
+ context.fs = io::global_local_filesystem();
context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE;
Status status = new_tablet->create_rowset_writer(context,
&rowset_writer);
if (!status.ok()) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java
b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java
index 19d8dc13d75..7bb59269a33 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java
@@ -282,7 +282,8 @@ public class RollupJobV2 extends AlterJobV2 implements
GsonPostProcessable {
tabletType,
null,
tbl.getCompressionType(),
- tbl.getEnableUniqueKeyMergeOnWrite(),
tbl.getStoragePolicy(),
+ tbl.getEnableUniqueKeyMergeOnWrite(),
+
tbl.getPartitionInfo().getDataProperty(partitionId).getStoragePolicy(),
tbl.disableAutoCompaction(),
tbl.enableSingleReplicaCompaction(),
tbl.skipWriteIndexOnLoad(),
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 9b7c127676e..2591d3106e0 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
@@ -277,7 +277,8 @@ public class SchemaChangeJobV2 extends AlterJobV2 {
tbl.getPartitionInfo().getTabletType(partitionId),
null,
tbl.getCompressionType(),
- tbl.getEnableUniqueKeyMergeOnWrite(),
tbl.getStoragePolicy(),
+ tbl.getEnableUniqueKeyMergeOnWrite(),
+
tbl.getPartitionInfo().getDataProperty(partitionId).getStoragePolicy(),
tbl.disableAutoCompaction(),
tbl.enableSingleReplicaCompaction(),
tbl.skipWriteIndexOnLoad(),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]