This is an automated email from the ASF dual-hosted git repository.
panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 71de5d835f1 [Fix](smooth-upgrade) fix unnecessary high version of
smooth upgrade (#30283)
71de5d835f1 is described below
commit 71de5d835f139d752ee0b0690b2dcac42256da12
Author: zclllyybb <[email protected]>
AuthorDate: Wed Jan 24 20:56:12 2024 +0800
[Fix](smooth-upgrade) fix unnecessary high version of smooth upgrade
(#30283)
fix unnecessary high version of smooth upgrade
---
be/src/agent/be_exec_version_manager.h | 12 ++++----
be/src/olap/wal/wal_reader.cpp | 16 +++++-----
be/src/olap/wal/wal_reader.h | 2 --
be/src/olap/wal/wal_writer.cpp | 6 ++--
be/src/vec/data_types/data_type_decimal.cpp | 14 +++++----
be/src/vec/data_types/data_type_nullable.cpp | 33 ++++++++++-----------
be/src/vec/data_types/data_type_number_base.cpp | 15 +++++-----
be/src/vec/data_types/data_type_string.cpp | 14 +++++----
be/test/exec/test_data/wal_scanner/wal | Bin 180 -> 220 bytes
.../main/java/org/apache/doris/common/Config.java | 2 +-
10 files changed, 58 insertions(+), 56 deletions(-)
diff --git a/be/src/agent/be_exec_version_manager.h
b/be/src/agent/be_exec_version_manager.h
index ad8cd007c03..963437b3d39 100644
--- a/be/src/agent/be_exec_version_manager.h
+++ b/be/src/agent/be_exec_version_manager.h
@@ -63,11 +63,13 @@ private:
* b. array contains/position/countequal function return nullable in less
situations.
* c. cleared old version of Version 2.
* d. unix_timestamp function support timestamp with float for datetimev2,
and change nullable mode.
- * e. the right function outputs NULL when the function contains NULL,
substr function returns empty if start > str.length.
- * 4: start from doris 2.1.x
- * a. change shuffle serialize/deserialize way
+ * e. change shuffle serialize/deserialize way
+ * f. the right function outputs NULL when the function contains NULL,
substr function returns empty if start > str.length.
*/
-inline const int BeExecVersionManager::max_be_exec_version = 4;
-inline const int BeExecVersionManager::min_be_exec_version = 0;
+constexpr inline int BeExecVersionManager::max_be_exec_version = 3;
+constexpr inline int BeExecVersionManager::min_be_exec_version = 0;
+
+/// functional
+constexpr inline int USE_NEW_SERDE = 3; // release on DORIS version 2.1
} // namespace doris
diff --git a/be/src/olap/wal/wal_reader.cpp b/be/src/olap/wal/wal_reader.cpp
index 36a4c15aa2b..5b65467b6c9 100644
--- a/be/src/olap/wal/wal_reader.cpp
+++ b/be/src/olap/wal/wal_reader.cpp
@@ -29,7 +29,14 @@ namespace doris {
WalReader::WalReader(const std::string& file_name) : _file_name(file_name),
_offset(0) {}
-WalReader::~WalReader() {}
+WalReader::~WalReader() = default;
+
+static Status _deserialize(PBlock& block, const std::string& buf) {
+ if (UNLIKELY(!block.ParseFromString(buf))) {
+ return Status::InternalError("failed to deserialize row");
+ }
+ return Status::OK();
+}
Status WalReader::init() {
RETURN_IF_ERROR(io::global_local_filesystem()->open_file(_file_name,
&file_reader));
@@ -98,13 +105,6 @@ Status WalReader::read_header(std::string& col_ids) {
return Status::OK();
}
-Status WalReader::_deserialize(PBlock& block, std::string& buf) {
- if (UNLIKELY(!block.ParseFromString(buf))) {
- return Status::InternalError("failed to deserialize row");
- }
- return Status::OK();
-}
-
Status WalReader::_check_checksum(const char* binary, size_t size, uint32_t
checksum) {
uint32_t computed_checksum = crc32c::Value(binary, size);
if (LIKELY(computed_checksum == checksum)) {
diff --git a/be/src/olap/wal/wal_reader.h b/be/src/olap/wal/wal_reader.h
index 7c852ee18f6..1f26a7598f0 100644
--- a/be/src/olap/wal/wal_reader.h
+++ b/be/src/olap/wal/wal_reader.h
@@ -35,10 +35,8 @@ public:
Status read_header(std::string& col_ids);
private:
- Status _deserialize(PBlock& block, std::string& buf);
Status _check_checksum(const char* binary, size_t size, uint32_t checksum);
-private:
std::string _file_name;
uint32_t _version = 0;
size_t _offset;
diff --git a/be/src/olap/wal/wal_writer.cpp b/be/src/olap/wal/wal_writer.cpp
index 8edc6b3b860..62b1352a577 100644
--- a/be/src/olap/wal/wal_writer.cpp
+++ b/be/src/olap/wal/wal_writer.cpp
@@ -57,19 +57,19 @@ Status WalWriter::finalize() {
Status WalWriter::append_blocks(const PBlockArray& blocks) {
size_t total_size = 0;
- for (const auto& block : blocks) {
- total_size += LENGTH_SIZE + block->ByteSizeLong() + CHECKSUM_SIZE;
- }
size_t offset = 0;
for (const auto& block : blocks) {
uint8_t len_buf[sizeof(uint64_t)];
uint64_t block_length = block->ByteSizeLong();
+ total_size += LENGTH_SIZE + block_length + CHECKSUM_SIZE;
encode_fixed64_le(len_buf, block_length);
RETURN_IF_ERROR(_file_writer->append({len_buf, sizeof(uint64_t)}));
offset += LENGTH_SIZE;
+
std::string content = block->SerializeAsString();
RETURN_IF_ERROR(_file_writer->append(content));
offset += block_length;
+
uint8_t checksum_buf[sizeof(uint32_t)];
uint32_t checksum = crc32c::Value(content.data(), block_length);
encode_fixed32_le(checksum_buf, checksum);
diff --git a/be/src/vec/data_types/data_type_decimal.cpp
b/be/src/vec/data_types/data_type_decimal.cpp
index 0573a17729e..b44b116d6fa 100644
--- a/be/src/vec/data_types/data_type_decimal.cpp
+++ b/be/src/vec/data_types/data_type_decimal.cpp
@@ -23,8 +23,11 @@
#include <fmt/format.h>
#include <gen_cpp/data.pb.h>
#include <streamvbyte.h>
-#include <string.h>
+#include <sys/types.h>
+#include <cstring>
+
+#include "agent/be_exec_version_manager.h"
#include "runtime/decimalv2_value.h"
#include "util/string_parser.hpp"
#include "vec/columns/column.h"
@@ -77,8 +80,7 @@ void DataTypeDecimal<T>::to_string(const IColumn& column,
size_t row_num,
auto str = value.to_string(scale);
ostr.write(str.data(), str.size());
} else {
- DecimalV2Value value =
- (DecimalV2Value)assert_cast<const
ColumnType&>(*ptr).get_element(row_num);
+ auto value = (DecimalV2Value)assert_cast<const
ColumnType&>(*ptr).get_element(row_num);
auto str = value.to_string(scale);
ostr.write(str.data(), str.size());
}
@@ -104,7 +106,7 @@ Status DataTypeDecimal<T>::from_string(ReadBuffer& rb,
IColumn* column) const {
template <typename T>
int64_t DataTypeDecimal<T>::get_uncompressed_serialized_bytes(const IColumn&
column,
int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
auto size = sizeof(T) * column.size();
if (size <= SERIALIZED_MEM_SIZE_LIMIT) {
return sizeof(uint32_t) + size;
@@ -119,7 +121,7 @@ int64_t
DataTypeDecimal<T>::get_uncompressed_serialized_bytes(const IColumn& col
template <typename T>
char* DataTypeDecimal<T>::serialize(const IColumn& column, char* buf, int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
// row num
const auto mem_size = column.size() * sizeof(T);
*reinterpret_cast<uint32_t*>(buf) = mem_size;
@@ -156,7 +158,7 @@ char* DataTypeDecimal<T>::serialize(const IColumn& column,
char* buf, int be_exe
template <typename T>
const char* DataTypeDecimal<T>::deserialize(const char* buf, IColumn* column,
int be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
// row num
uint32_t mem_size = *reinterpret_cast<const uint32_t*>(buf);
buf += sizeof(uint32_t);
diff --git a/be/src/vec/data_types/data_type_nullable.cpp
b/be/src/vec/data_types/data_type_nullable.cpp
index f160a1f323a..b10244c8522 100644
--- a/be/src/vec/data_types/data_type_nullable.cpp
+++ b/be/src/vec/data_types/data_type_nullable.cpp
@@ -24,19 +24,20 @@
#include <gen_cpp/data.pb.h>
#include <glog/logging.h>
#include <streamvbyte.h>
-#include <string.h>
+#include <algorithm>
+#include <cstring>
#include <utility>
-#include <vector>
+#include "agent/be_exec_version_manager.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
#include "vec/columns/column_nullable.h"
#include "vec/columns/columns_number.h"
#include "vec/common/assert_cast.h"
#include "vec/common/string_buffer.hpp"
-#include "vec/common/typeid_cast.h"
#include "vec/core/field.h"
+#include "vec/data_types/data_type.h"
#include "vec/data_types/data_type_nothing.h"
#include "vec/io/reader_buffer.h"
@@ -99,7 +100,7 @@ Status DataTypeNullable::from_string(ReadBuffer& rb,
IColumn* column) const {
// <values array>: value1 | value2 | ...>
int64_t DataTypeNullable::get_uncompressed_serialized_bytes(const IColumn&
column,
int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
size_t ret = 0;
if (size_t size = sizeof(bool) * column.size(); size <=
SERIALIZED_MEM_SIZE_LIMIT) {
ret += size + sizeof(uint32_t);
@@ -124,9 +125,9 @@ int64_t
DataTypeNullable::get_uncompressed_serialized_bytes(const IColumn& colum
}
char* DataTypeNullable::serialize(const IColumn& column, char* buf, int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
auto ptr = column.convert_to_full_column_if_const();
- const ColumnNullable& col = assert_cast<const
ColumnNullable&>(*ptr.get());
+ const auto& col = assert_cast<const ColumnNullable&>(*ptr.get());
// row num
auto mem_size = col.size() * sizeof(bool);
@@ -147,7 +148,7 @@ char* DataTypeNullable::serialize(const IColumn& column,
char* buf, int be_exec_
return nested_data_type->serialize(col.get_nested_column(), buf,
be_exec_version);
} else {
auto ptr = column.convert_to_full_column_if_const();
- const ColumnNullable& col = assert_cast<const
ColumnNullable&>(*ptr.get());
+ const auto& col = assert_cast<const ColumnNullable&>(*ptr.get());
// row num
*reinterpret_cast<uint32_t*>(buf) = column.size();
@@ -162,8 +163,8 @@ char* DataTypeNullable::serialize(const IColumn& column,
char* buf, int be_exec_
const char* DataTypeNullable::deserialize(const char* buf, IColumn* column,
int be_exec_version) const {
- if (be_exec_version >= 4) {
- ColumnNullable* col = assert_cast<ColumnNullable*>(column);
+ if (be_exec_version >= USE_NEW_SERDE) {
+ auto* col = assert_cast<ColumnNullable*>(column);
// row num
uint32_t mem_size = *reinterpret_cast<const uint32_t*>(buf);
buf += sizeof(uint32_t);
@@ -183,7 +184,7 @@ const char* DataTypeNullable::deserialize(const char* buf,
IColumn* column,
IColumn& nested = col->get_nested_column();
return nested_data_type->deserialize(buf, &nested, be_exec_version);
} else {
- ColumnNullable* col = assert_cast<ColumnNullable*>(column);
+ auto* col = assert_cast<ColumnNullable*>(column);
// row num
uint32_t row_num = *reinterpret_cast<const uint32_t*>(buf);
buf += sizeof(uint32_t);
@@ -229,7 +230,7 @@ DataTypePtr make_nullable(const DataTypePtr& type) {
DataTypes make_nullable(const DataTypes& types) {
DataTypes nullable_types;
- for (auto& type : types) {
+ for (const auto& type : types) {
nullable_types.push_back(make_nullable(type));
}
return nullable_types;
@@ -244,19 +245,15 @@ DataTypePtr remove_nullable(const DataTypePtr& type) {
DataTypes remove_nullable(const DataTypes& types) {
DataTypes no_null_types;
- for (auto& type : types) {
+ for (const auto& type : types) {
no_null_types.push_back(remove_nullable(type));
}
return no_null_types;
}
bool have_nullable(const DataTypes& types) {
- for (auto& type : types) {
- if (type->is_nullable()) {
- return true;
- }
- }
- return false;
+ return std::any_of(types.begin(), types.end(),
+ [](const DataTypePtr& type) { return
type->is_nullable(); });
}
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/data_type_number_base.cpp
b/be/src/vec/data_types/data_type_number_base.cpp
index a3ac1d80af4..662b8e18734 100644
--- a/be/src/vec/data_types/data_type_number_base.cpp
+++ b/be/src/vec/data_types/data_type_number_base.cpp
@@ -23,11 +23,12 @@
#include <fmt/format.h>
#include <glog/logging.h>
#include <streamvbyte.h>
-#include <string.h>
+#include <cstring>
#include <limits>
#include <type_traits>
+#include "agent/be_exec_version_manager.h"
#include "gutil/strings/numbers.h"
#include "runtime/large_int_value.h"
#include "util/mysql_global.h"
@@ -122,9 +123,9 @@ Field DataTypeNumberBase<T>::get_field(const TExprNode&
node) const {
}
if constexpr (std::is_same_v<TypeId<T>, TypeId<Int128>>) {
StringParser::ParseResult parse_result = StringParser::PARSE_SUCCESS;
- __int128_t value = StringParser::string_to_int<__int128>(
- node.large_int_literal.value.c_str(),
node.large_int_literal.value.size(),
- &parse_result);
+ auto value =
StringParser::string_to_int<__int128>(node.large_int_literal.value.c_str(),
+
node.large_int_literal.value.size(),
+ &parse_result);
if (parse_result != StringParser::PARSE_SUCCESS) {
value = MAX_INT128;
}
@@ -162,7 +163,7 @@ std::string DataTypeNumberBase<T>::to_string(const IColumn&
column, size_t row_n
template <typename T>
int64_t DataTypeNumberBase<T>::get_uncompressed_serialized_bytes(const
IColumn& column,
int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
auto size = sizeof(T) * column.size();
if (size <= SERIALIZED_MEM_SIZE_LIMIT) {
return sizeof(uint32_t) + size;
@@ -178,7 +179,7 @@ int64_t
DataTypeNumberBase<T>::get_uncompressed_serialized_bytes(const IColumn&
template <typename T>
char* DataTypeNumberBase<T>::serialize(const IColumn& column, char* buf,
int be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
// row num
const auto mem_size = column.size() * sizeof(T);
*reinterpret_cast<uint32_t*>(buf) = mem_size;
@@ -215,7 +216,7 @@ char* DataTypeNumberBase<T>::serialize(const IColumn&
column, char* buf,
template <typename T>
const char* DataTypeNumberBase<T>::deserialize(const char* buf, IColumn*
column,
int be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
// row num
uint32_t mem_size = *reinterpret_cast<const uint32_t*>(buf);
buf += sizeof(uint32_t);
diff --git a/be/src/vec/data_types/data_type_string.cpp
b/be/src/vec/data_types/data_type_string.cpp
index a3f180a27c2..16440675b24 100644
--- a/be/src/vec/data_types/data_type_string.cpp
+++ b/be/src/vec/data_types/data_type_string.cpp
@@ -22,8 +22,10 @@
#include <lz4/lz4.h>
#include <streamvbyte.h>
-#include <string.h>
+#include <cstring>
+
+#include "agent/be_exec_version_manager.h"
#include "vec/columns/column.h"
#include "vec/columns/column_const.h"
#include "vec/columns/column_string.h"
@@ -77,7 +79,7 @@ bool DataTypeString::equals(const IDataType& rhs) const {
// <value array> : <value1> | <value2 | ...
int64_t DataTypeString::get_uncompressed_serialized_bytes(const IColumn&
column,
int be_exec_version)
const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
auto ptr = column.convert_to_full_column_if_const();
const auto& data_column = assert_cast<const ColumnString&>(*ptr.get());
int64_t size = sizeof(uint32_t) + sizeof(uint64_t);
@@ -111,7 +113,7 @@ int64_t
DataTypeString::get_uncompressed_serialized_bytes(const IColumn& column,
}
char* DataTypeString::serialize(const IColumn& column, char* buf, int
be_exec_version) const {
- if (be_exec_version >= 4) {
+ if (be_exec_version >= USE_NEW_SERDE) {
auto ptr = column.convert_to_full_column_if_const();
const auto& data_column = assert_cast<const ColumnString&>(*ptr.get());
@@ -169,8 +171,8 @@ char* DataTypeString::serialize(const IColumn& column,
char* buf, int be_exec_ve
const char* DataTypeString::deserialize(const char* buf, IColumn* column,
int be_exec_version) const {
- if (be_exec_version >= 4) {
- ColumnString* column_string = assert_cast<ColumnString*>(column);
+ if (be_exec_version >= USE_NEW_SERDE) {
+ auto* column_string = assert_cast<ColumnString*>(column);
ColumnString::Chars& data = column_string->get_chars();
ColumnString::Offsets& offsets = column_string->get_offsets();
@@ -206,7 +208,7 @@ const char* DataTypeString::deserialize(const char* buf,
IColumn* column,
}
return buf;
} else {
- ColumnString* column_string = assert_cast<ColumnString*>(column);
+ auto* column_string = assert_cast<ColumnString*>(column);
ColumnString::Chars& data = column_string->get_chars();
ColumnString::Offsets& offsets = column_string->get_offsets();
// row num
diff --git a/be/test/exec/test_data/wal_scanner/wal
b/be/test/exec/test_data/wal_scanner/wal
index 2c5fe90963d..ddce7508946 100644
Binary files a/be/test/exec/test_data/wal_scanner/wal and
b/be/test/exec/test_data/wal_scanner/wal differ
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 0afede3905a..fe1e7112921 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -1713,7 +1713,7 @@ public class Config extends ConfigBase {
* Max data version of backends serialize block.
*/
@ConfField(mutable = false)
- public static int max_be_exec_version = 4;
+ public static int max_be_exec_version = 3;
/**
* Min data version of backends serialize block.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]