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