This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-1.1-lts
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-1.1-lts by this push:
new ff30b13550 [Fix](Schema Change) fix schema change fail with memory
alloc error when sorting #16867
ff30b13550 is described below
commit ff30b135505942644429fabc374c6851c160222a
Author: GoGoWen <[email protected]>
AuthorDate: Fri Feb 17 15:29:59 2023 +0800
[Fix](Schema Change) fix schema change fail with memory alloc error when
sorting #16867
lease memory check in sorting step to make schema change succeed.
currently, the schema change may fail in sorting step as memory tracking is not
accurate.
Co-authored-by: yangbowen22 <[email protected]>
---
be/src/olap/schema_change.cpp | 15 ++++++++-------
be/src/olap/schema_change.h | 2 +-
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index 799a0ccdf7..a57b270f20 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -699,7 +699,7 @@ bool RowBlockSorter::sort(RowBlock** row_block) {
_swap_row_block = nullptr;
}
- if (_row_block_allocator->allocate(&_swap_row_block, row_num,
null_supported) !=
+ if (_row_block_allocator->allocate(&_swap_row_block, row_num,
null_supported, true) !=
OLAP_SUCCESS) {
LOG(WARNING) << "fail to allocate memory.";
return false;
@@ -764,15 +764,16 @@ RowBlockAllocator::~RowBlockAllocator() {
}
}
-OLAPStatus RowBlockAllocator::allocate(RowBlock** row_block, size_t num_rows,
bool null_supported) {
+OLAPStatus RowBlockAllocator::allocate(RowBlock** row_block, size_t num_rows,
bool null_supported, bool allow_overflow) {
size_t row_block_size = _row_len * num_rows;
- if (_memory_limitation > 0 &&
- _mem_tracker->consumption() + row_block_size > _memory_limitation) {
- *row_block = nullptr;
- return OLAP_ERR_FETCH_MEMORY_EXCEEDED;
+ if (!allow_overflow) {
+ if (_memory_limitation > 0 &&
+ _mem_tracker->consumption() + row_block_size > _memory_limitation)
{
+ *row_block = nullptr;
+ return OLAP_ERR_FETCH_MEMORY_EXCEEDED;
+ }
}
-
// TODO(lijiao) : Why abandon the original m_row_block_buffer
*row_block = new (nothrow) RowBlock(&_tablet_schema);
diff --git a/be/src/olap/schema_change.h b/be/src/olap/schema_change.h
index 1916574f5d..a294c7128e 100644
--- a/be/src/olap/schema_change.h
+++ b/be/src/olap/schema_change.h
@@ -80,7 +80,7 @@ public:
size_t memory_limitation);
virtual ~RowBlockAllocator();
- OLAPStatus allocate(RowBlock** row_block, size_t num_rows, bool
null_supported);
+ OLAPStatus allocate(RowBlock** row_block, size_t num_rows, bool
null_supported, bool allow_overflow=false);
void release(RowBlock* row_block);
bool is_memory_enough_for_sorting(size_t num_rows, size_t allocated_rows);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]