Skip to content

Commit 103d6b1

Browse files
TangSiyang2001Your Name
authored andcommitted
[fix](schema-change) Prevent coredump when reading non-overlapping segments from a single rowset during heavy schema change (#57191)
### What problem does this PR solve? Problem Summary: ``` *** Query id: 0-0 *** *** is nereids: 0 *** *** tablet id: 1751140494462 *** *** Aborted at 1751208065 (unix time) try "date -d @1751208065" if you are using GNU date *** *** Current BE git commitID: 34d8342 *** *** SIGSEGV invalid permissions for mapped object (@0x556ef4dfc000) received by PID 4975 (TID 5587 OR 0x7f71da3c4640) from PID 18446744073522888704; stack trace: *** 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/common/signal_handler.h:421 1# PosixSignals::chained_handler(int, siginfo*, void*) [clone .part.0] in /usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so 2# JVM_handle_linux_signal in /usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so 3# 0x00007F731FC1F520 in /lib/x86_64-linux-gnu/libc.so.6 4# doris::vectorized::VMergeIteratorContext::copy_rows(doris::vectorized::Block*, bool) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vgeneric_iterators.cpp:148 5# doris::Status doris::vectorized::VMergeIterator::_next_batch<doris::vectorized::Block>(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vgeneric_iterators.h:242 6# doris::vectorized::VMergeIterator::next_batch(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vgeneric_iterators.h:201 7# doris::BetaRowsetReader::next_block(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/beta_rowset_reader.cpp:378 8# doris::VSchemaChangeDirectly::_inner_process(std::shared_ptr<doris::RowsetReader>, doris::RowsetWriter*, std::shared_ptr<doris::BaseTablet>, std::shared_ptr<doris::TabletSchema>, std::shared_ptr<doris::TabletSchema>) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/schema_change.cpp:523 9# doris::SchemaChange::process(std::shared_ptr<doris::RowsetReader>, doris::RowsetWriter*, std::shared_ptr<doris::BaseTablet>, std::shared_ptr<doris::BaseTablet>, std::shared_ptr<doris::TabletSchema>, std::shared_ptr<doris::TabletSchema>) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/schema_change.h:120 10# doris::SchemaChangeJob::_convert_historical_rowsets(doris::SchemaChangeParams const&, long*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/schema_change.cpp:1179 11# doris::SchemaChangeJob::_do_process_alter_tablet(doris::TAlterTabletReqV2 const&) in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be 12# doris::SchemaChangeJob::process_alter_tablet(doris::TAlterTabletReqV2 const&) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/schema_change.cpp:759 13# doris::alter_tablet_callback(doris::StorageEngine&, doris::TAgentTaskRequest const&) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/agent/task_worker_pool.cpp:1990 14# std::_Function_handler<void (), doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291 15# doris::ThreadPool::dispatch_thread() at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/util/threadpool.cpp:609 16# doris::Thread::supervise_thread(void*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/util/thread.cpp:499 17# start_thread at ./nptl/pthread_create.c:442 18# 0x00007F731FD03850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83 ``` Schema of input block from base tablet should merge dropped column.
1 parent e492bfa commit 103d6b1

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed

be/src/olap/schema_change.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ Status VSchemaChangeDirectly::_inner_process(RowsetReaderSharedPtr rowset_reader
552552
bool eof = false;
553553
do {
554554
auto new_block = vectorized::Block::create_unique(new_tablet_schema->create_block());
555-
auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block());
555+
auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block(false));
556556

557557
auto st = rowset_reader->next_block(ref_block.get());
558558
if (!st) {
@@ -621,7 +621,7 @@ Status VBaseSchemaChangeWithSorting::_inner_process(RowsetReaderSharedPtr rowset
621621

622622
bool eof = false;
623623
do {
624-
auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block());
624+
auto ref_block = vectorized::Block::create_unique(base_tablet_schema->create_block(false));
625625
auto st = rowset_reader->next_block(ref_block.get());
626626
if (!st) {
627627
if (st.is<ErrorCode::END_OF_FILE>()) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- This file is automatically generated. You should know what you did if you want to edit this
2+
-- !sql --
3+
2 2
4+
3 3
5+
4 4
6+
5 5
7+
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
suite("test_non_overlap_seg_heavy_sc") {
19+
def tblName = "test_non_overlap_seg_heavy_sc"
20+
sql """
21+
DROP TABLE IF EXISTS ${tblName}_src
22+
"""
23+
sql """
24+
CREATE TABLE IF NOT EXISTS ${tblName}_src
25+
(
26+
k INT NOT NULL,
27+
v1 INT NOT NULL,
28+
v2 INT NOT NULL
29+
)
30+
DUPLICATE KEY(k)
31+
DISTRIBUTED BY HASH(k) BUCKETS 5
32+
PROPERTIES(
33+
"replication_num" = "1",
34+
"light_schema_change" = "true",
35+
"disable_auto_compaction" = "true"
36+
);
37+
"""
38+
39+
sql """
40+
DROP TABLE IF EXISTS ${tblName}_dst
41+
"""
42+
sql """
43+
CREATE TABLE IF NOT EXISTS ${tblName}_dst
44+
(
45+
k INT NOT NULL,
46+
v1 INT NOT NULL,
47+
v2 INT NOT NULL
48+
)
49+
DUPLICATE KEY(k)
50+
DISTRIBUTED BY HASH(k) BUCKETS 1
51+
PROPERTIES(
52+
"replication_num" = "1",
53+
"light_schema_change" = "true",
54+
"disable_auto_compaction" = "true"
55+
);
56+
"""
57+
58+
sql """ INSERT INTO ${tblName}_src VALUES (1, 1, 1),(2, 2, 2),(3, 3, 3),(4, 4, 4),(5, 5, 5) """
59+
60+
sql """ INSERT INTO ${tblName}_dst SELECT * FROM ${tblName}_src """
61+
62+
sql """ DELETE FROM ${tblName}_dst WHERE v1 = 1 """
63+
64+
sql """ ALTER TABLE ${tblName}_dst DROP COLUMN v1"""
65+
66+
sql """ ALTER TABLE ${tblName}_dst MODIFY COLUMN v2 STRING NOT NULL """
67+
68+
waitForSchemaChangeDone {
69+
sql """ SHOW ALTER TABLE COLUMN WHERE TableName='${tblName}_dst' ORDER BY createtime DESC LIMIT 1 """
70+
time 600
71+
}
72+
73+
qt_sql """ SELECT * FROM ${tblName}_dst ORDER BY k """
74+
}

0 commit comments

Comments
 (0)