diff --git a/be/src/olap/rowset/segment_v2/binary_dict_page.cpp b/be/src/olap/rowset/segment_v2/binary_dict_page.cpp index 28859732266068..0b027659a70ba7 100644 --- a/be/src/olap/rowset/segment_v2/binary_dict_page.cpp +++ b/be/src/olap/rowset/segment_v2/binary_dict_page.cpp @@ -75,13 +75,13 @@ Status BinaryDictPageBuilder::add(const uint8_t* vals, size_t* count) { } for (int i = 0; i < *count; ++i, ++src) { + if (is_page_full()) { + break; + } auto iter = _dictionary.find(*src); if (iter != _dictionary.end()) { value_code = iter->second; } else { - if (_dict_builder->is_page_full()) { - break; - } Slice dict_item(src->data, src->size); if (src->size > 0) { char* item_mem = (char*)_pool.allocate(src->size); diff --git a/be/src/olap/rowset/segment_v2/bitshuffle_page.h b/be/src/olap/rowset/segment_v2/bitshuffle_page.h index 50edb30c2a32a3..c7fca81be1975e 100644 --- a/be/src/olap/rowset/segment_v2/bitshuffle_page.h +++ b/be/src/olap/rowset/segment_v2/bitshuffle_page.h @@ -105,7 +105,7 @@ class BitshufflePageBuilder : public PageBuilder { DCHECK(!_finished); if (_remain_element_capacity <= 0) { *count = 0; - return Status::RuntimeError("page is full."); + return Status::OK(); } int to_add = std::min(_remain_element_capacity, *count); int to_add_size = to_add * SIZE_OF_TYPE; diff --git a/be/src/olap/rowset/segment_v2/page_builder.h b/be/src/olap/rowset/segment_v2/page_builder.h index 26eec4b43045ee..ab74ad7fcaed9d 100644 --- a/be/src/olap/rowset/segment_v2/page_builder.h +++ b/be/src/olap/rowset/segment_v2/page_builder.h @@ -49,7 +49,9 @@ class PageBuilder { // Add a sequence of values to the page. // The number of values actually added will be returned through count, which may be less // than requested if the page is full. - // + + // check page if full before truly add, return ok when page is full so that column write + // will switch to next page // vals size should be decided according to the page build type // TODO make sure vals is naturally-aligned to its type so that impls can use aligned load // instead of memcpy to copy values.