You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by we...@apache.org on 2022/06/21 12:55:36 UTC
[doris] 03/05: [wx-sr-fix] fix core dump when _block is empty after call to_block
This is an automated email from the ASF dual-hosted git repository.
weixiang pushed a commit to branch memtable_opt_rebase_bak
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 93c2604c1f7a9a3cdf11e9efabb23c158738a03d
Author: weixiang <we...@meituan.com>
AuthorDate: Fri May 13 00:23:27 2022 +0800
[wx-sr-fix] fix core dump when _block is empty after call to_block
---
be/src/olap/memtable.cpp | 4 +---
be/src/vec/core/block.cpp | 18 ++++++++++++++++++
be/src/vec/core/block.h | 2 ++
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/be/src/olap/memtable.cpp b/be/src/olap/memtable.cpp
index 7f431a7289..2c8f2a6a15 100644
--- a/be/src/olap/memtable.cpp
+++ b/be/src/olap/memtable.cpp
@@ -225,9 +225,7 @@ void MemTable::_append_sorted_block(vectorized::MutableBlock* src, vectorized::M
for (size_t i = 0; i < row_num; i++) {
_sorted_index_in_block.push_back(_index_for_sort[i].index_in_block);
}
- vectorized::Block src_block = src->to_block();
- dst->add_rows(&src_block, _sorted_index_in_block.data(),
- _sorted_index_in_block.data() + row_num);
+ dst->add_rows(src, _sorted_index_in_block.data(), _sorted_index_in_block.data() + row_num);
}
void MemTable::finalize() {
diff --git a/be/src/vec/core/block.cpp b/be/src/vec/core/block.cpp
index 8efc0e0e1b..0a23a729b2 100644
--- a/be/src/vec/core/block.cpp
+++ b/be/src/vec/core/block.cpp
@@ -885,6 +885,24 @@ void MutableBlock::add_rows(const Block* block, size_t row_begin, size_t length)
}
}
+void MutableBlock::add_rows(MutableBlock* block, const int* row_begin, const int* row_end) {
+ for (size_t i = 0; i < _columns.size(); ++i) {
+ auto& dst = _columns[i];
+ auto& src = *(block->get_column_by_position(i).get());
+ dst->insert_indices_from(src, row_begin, row_end);
+ }
+}
+
+void MutableBlock::add_rows(MutableBlock* block, size_t row_begin, size_t length) {
+ for (size_t i = 0; i < _columns.size(); ++i) {
+ auto& dst = _columns[i];
+ auto& src = *(block->get_column_by_position(i).get());
+ dst->insert_range_from(src, row_begin, length);
+ }
+}
+
+
+
Block MutableBlock::to_block(int start_column) {
return to_block(start_column, _columns.size());
}
diff --git a/be/src/vec/core/block.h b/be/src/vec/core/block.h
index 7a6f61deb9..144446e255 100644
--- a/be/src/vec/core/block.h
+++ b/be/src/vec/core/block.h
@@ -444,6 +444,8 @@ public:
void add_row(const Block* block, int row);
void add_rows(const Block* block, const int* row_begin, const int* row_end);
void add_rows(const Block* block, size_t row_begin, size_t length);
+ void add_rows(MutableBlock* block, const int* row_begin, const int* row_end);
+ void add_rows(MutableBlock* block, size_t row_begin, size_t length);
std::string dump_data(size_t row_limit = 100) const;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org