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

Reply via email to