This is an automated email from the ASF dual-hosted git repository. kxiao 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 6f432784833 [fix](map)fix upgrade behavior from 1.2 version (#36937) 6f432784833 is described below commit 6f4327848335fb75ea0bc0ff2f86f10f9ec215c9 Author: amory <wangqian...@selectdb.com> AuthorDate: Mon Jul 1 16:58:41 2024 +0800 [fix](map)fix upgrade behavior from 1.2 version (#36937) fix core dump when upgrading from 1.2.x to 2.0.x with map datatype column --- be/src/olap/rowset/segment_v2/column_reader.cpp | 1 + be/src/olap/rowset/segment_v2/column_writer.cpp | 7 ++++++- be/src/olap/tablet_schema.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp b/be/src/olap/rowset/segment_v2/column_reader.cpp index 392917e0d83..d0f2830712d 100644 --- a/be/src/olap/rowset/segment_v2/column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/column_reader.cpp @@ -128,6 +128,7 @@ Status ColumnReader::create_map(const ColumnReaderOptions& opts, const ColumnMet const io::FileReaderSPtr& file_reader, std::unique_ptr<ColumnReader>* reader) { // map reader now has 3 sub readers for key, value, offsets(scalar), null(scala) + DCHECK(meta.children_columns_size() == 3 || meta.children_columns_size() == 4); std::unique_ptr<ColumnReader> key_reader; RETURN_IF_ERROR(ColumnReader::create(opts, meta.children_columns(0), meta.children_columns(0).num_rows(), file_reader, diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp b/be/src/olap/rowset/segment_v2/column_writer.cpp index 016a932b276..798cbe08261 100644 --- a/be/src/olap/rowset/segment_v2/column_writer.cpp +++ b/be/src/olap/rowset/segment_v2/column_writer.cpp @@ -206,6 +206,11 @@ Status ColumnWriter::create_map_writer(const ColumnWriterOptions& opts, const Ta io::FileWriter* file_writer, std::unique_ptr<ColumnWriter>* writer) { DCHECK(column->get_subtype_count() == 2); + if (column->get_subtype_count() < 2) { + return Status::InternalError( + "If you upgraded from version 1.2.*, please DROP the MAP columns and then " + "ADD the MAP columns back."); + } // create key & value writer std::vector<std::unique_ptr<ColumnWriter>> inner_writer_list; for (int i = 0; i < 2; ++i) { @@ -1141,4 +1146,4 @@ Status MapColumnWriter::write_inverted_index() { return Status::OK(); } -} // namespace doris::segment_v2 \ No newline at end of file +} // namespace doris::segment_v2 diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index cee6f3e2d2e..ec887f14a91 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -553,7 +553,8 @@ void TabletColumn::init_from_pb(const ColumnPB& column) { CHECK(column.children_columns_size() == 1) << "ARRAY type has more than 1 children types."; } if (_type == FieldType::OLAP_FIELD_TYPE_MAP) { - CHECK(column.children_columns_size() == 2) << "MAP type has more than 2 children types."; + DCHECK(column.children_columns_size() == 2) << "MAP type has more than 2 children types."; + LOG(WARNING) << "MAP type has more than 2 children types."; } for (size_t i = 0; i < column.children_columns_size(); i++) { TabletColumn child_column; @@ -623,7 +624,8 @@ void TabletColumn::to_schema_pb(ColumnPB* column) const { CHECK(_sub_columns.size() == 1) << "ARRAY type has more than 1 children types."; } if (_type == FieldType::OLAP_FIELD_TYPE_MAP) { - CHECK(_sub_columns.size() == 2) << "MAP type has more than 2 children types."; + DCHECK(_sub_columns.size() == 2) << "MAP type has more than 2 children types."; + LOG(WARNING) << "MAP type has more than 2 children types."; } for (size_t i = 0; i < _sub_columns.size(); i++) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org