This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 5cd41464bc3 [enhancement](err-msg) Add detailed column and schema info 
when failed to create a column iterator (#38689)
5cd41464bc3 is described below

commit 5cd41464bc346c24a611579cf6cb72867953018e
Author: Siyang Tang <82279870+tangsiyang2...@users.noreply.github.com>
AuthorDate: Wed Aug 21 12:03:37 2024 +0800

    [enhancement](err-msg) Add detailed column and schema info when failed to 
create a column iterator (#38689)
    
    ## Proposed changes
    
    As title.
---
 be/src/cloud/cloud_schema_change_job.cpp  | 10 ++++--
 be/src/olap/rowset/segment_v2/segment.cpp | 51 +++++++++++++++----------------
 2 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/be/src/cloud/cloud_schema_change_job.cpp 
b/be/src/cloud/cloud_schema_change_job.cpp
index ed3e5f9433f..254a0d8d966 100644
--- a/be/src/cloud/cloud_schema_change_job.cpp
+++ b/be/src/cloud/cloud_schema_change_job.cpp
@@ -283,9 +283,13 @@ Status 
CloudSchemaChangeJob::_convert_historical_rowsets(const SchemaChangeParam
             }
         }
 
-        RETURN_IF_ERROR(sc_procedure->process(rs_reader, rowset_writer.get(), 
_new_tablet,
-                                              _base_tablet, 
_base_tablet_schema,
-                                              _new_tablet_schema));
+        st = sc_procedure->process(rs_reader, rowset_writer.get(), 
_new_tablet, _base_tablet,
+                                   _base_tablet_schema, _new_tablet_schema);
+        if (!st.ok()) {
+            return Status::InternalError(
+                    "failed to process schema change on rowset, 
version=[{}-{}], status={}",
+                    rs_reader->version().first, rs_reader->version().second, 
st.to_string());
+        }
 
         RowsetSharedPtr new_rowset;
         st = rowset_writer->build(new_rowset);
diff --git a/be/src/olap/rowset/segment_v2/segment.cpp 
b/be/src/olap/rowset/segment_v2/segment.cpp
index 54c77c8afc4..2666fc8b633 100644
--- a/be/src/olap/rowset/segment_v2/segment.cpp
+++ b/be/src/olap/rowset/segment_v2/segment.cpp
@@ -20,9 +20,8 @@
 #include <gen_cpp/PlanNodes_types.h>
 #include <gen_cpp/olap_file.pb.h>
 #include <gen_cpp/segment_v2.pb.h>
-#include <string.h>
 
-#include <algorithm>
+#include <cstring>
 #include <memory>
 #include <utility>
 
@@ -51,17 +50,13 @@
 #include "olap/rowset/segment_v2/segment_writer.h" // k_segment_magic_length
 #include "olap/schema.h"
 #include "olap/short_key_index.h"
-#include "olap/storage_engine.h"
 #include "olap/tablet_schema.h"
 #include "olap/types.h"
 #include "olap/utils.h"
-#include "runtime/define_primitive_type.h"
 #include "runtime/exec_env.h"
-#include "runtime/memory/mem_tracker.h"
 #include "runtime/query_context.h"
 #include "runtime/runtime_predicate.h"
 #include "runtime/runtime_state.h"
-#include "util/bvar_helper.h"
 #include "util/coding.h"
 #include "util/crc32c.h"
 #include "util/slice.h" // Slice
@@ -403,7 +398,7 @@ Status Segment::load_index() {
 Status Segment::_load_index_impl() {
     return _load_index_once.call([this] {
         if (_tablet_schema->keys_type() == UNIQUE_KEYS && _pk_index_meta != 
nullptr) {
-            _pk_index_reader.reset(new PrimaryKeyIndexReader());
+            _pk_index_reader = std::make_unique<PrimaryKeyIndexReader>();
             RETURN_IF_ERROR(_pk_index_reader->parse_index(_file_reader, 
*_pk_index_meta));
             // _meta_mem_usage += _pk_index_reader->get_memory_size();
             return Status::OK();
@@ -428,7 +423,7 @@ Status Segment::_load_index_impl() {
             DCHECK(footer.has_short_key_page_footer());
 
             // _meta_mem_usage += body.get_size();
-            _sk_index_decoder.reset(new ShortKeyIndexDecoder);
+            _sk_index_decoder = std::make_unique<ShortKeyIndexDecoder>();
             return _sk_index_decoder->parse(body, 
footer.short_key_page_footer());
         }
     });
@@ -440,8 +435,8 @@ vectorized::DataTypePtr 
Segment::get_data_type_of(vectorized::PathInDataPtr path
                                                   bool ignore_children) const {
     // Path has higher priority
     if (path != nullptr && !path->empty()) {
-        auto node = _sub_column_tree.find_leaf(*path);
-        auto sparse_node = _sparse_column_tree.find_exact(*path);
+        const auto* node = _sub_column_tree.find_leaf(*path);
+        const auto* sparse_node = _sparse_column_tree.find_exact(*path);
         if (node) {
             if (ignore_children || (node->children.empty() && sparse_node == 
nullptr)) {
                 return node->data.file_column_type;
@@ -469,7 +464,7 @@ Status Segment::_create_column_readers(const 
SegmentFooterPB& footer) {
     std::unordered_map<vectorized::PathInData, uint32_t, 
vectorized::PathInData::Hash>
             column_path_to_footer_ordinal;
     for (uint32_t ordinal = 0; ordinal < footer.columns().size(); ++ordinal) {
-        auto& column_pb = footer.columns(ordinal);
+        const auto& column_pb = footer.columns(ordinal);
         // column path for accessing subcolumns of variant
         if (column_pb.has_column_path_info()) {
             vectorized::PathInData path;
@@ -484,7 +479,7 @@ Status Segment::_create_column_readers(const 
SegmentFooterPB& footer) {
     }
     // init by unique_id
     for (uint32_t ordinal = 0; ordinal < _tablet_schema->num_columns(); 
++ordinal) {
-        auto& column = _tablet_schema->column(ordinal);
+        const auto& column = _tablet_schema->column(ordinal);
         auto iter = column_id_to_footer_ordinal.find(column.unique_id());
         if (iter == column_id_to_footer_ordinal.end()) {
             continue;
@@ -501,7 +496,7 @@ Status Segment::_create_column_readers(const 
SegmentFooterPB& footer) {
 
     // init by column path
     for (uint32_t ordinal = 0; ordinal < _tablet_schema->num_columns(); 
++ordinal) {
-        auto& column = _tablet_schema->column(ordinal);
+        const auto& column = _tablet_schema->column(ordinal);
         if (!column.has_path_info()) {
             continue;
         }
@@ -524,7 +519,7 @@ Status Segment::_create_column_readers(const 
SegmentFooterPB& footer) {
                         
vectorized::DataTypeFactory::instance().create_data_type(column_pb)});
         // init sparse columns paths and type info
         for (uint32_t ordinal = 0; ordinal < 
column_pb.sparse_columns().size(); ++ordinal) {
-            auto& spase_column_pb = column_pb.sparse_columns(ordinal);
+            const auto& spase_column_pb = column_pb.sparse_columns(ordinal);
             if (spase_column_pb.has_column_path_info()) {
                 vectorized::PathInData path;
                 path.from_protobuf(spase_column_pb.column_path_info());
@@ -544,7 +539,10 @@ Status Segment::_create_column_readers(const 
SegmentFooterPB& footer) {
 static Status new_default_iterator(const TabletColumn& tablet_column,
                                    std::unique_ptr<ColumnIterator>* iter) {
     if (!tablet_column.has_default_value() && !tablet_column.is_nullable()) {
-        return Status::InternalError("invalid nonexistent column without 
default value.");
+        return Status::InternalError(
+                "invalid nonexistent column without default value. 
column_uid={}, column_name={}, "
+                "column_type={}",
+                tablet_column.unique_id(), tablet_column.name(), 
tablet_column.type());
     }
     auto type_info = get_type_info(&tablet_column);
     std::unique_ptr<DefaultValueColumnIterator> default_value_iter(new 
DefaultValueColumnIterator(
@@ -564,7 +562,7 @@ Status Segment::_new_iterator_with_variant_root(const 
TabletColumn& tablet_colum
                                                 vectorized::DataTypePtr 
target_type_hint) {
     ColumnIterator* it;
     RETURN_IF_ERROR(root->data.reader->new_iterator(&it));
-    auto stream_iter = new ExtractReader(
+    auto* stream_iter = new ExtractReader(
             tablet_column,
             
std::make_unique<StreamReader>(root->data.file_column_type->create_column(),
                                            std::unique_ptr<ColumnIterator>(it),
@@ -584,13 +582,14 @@ Status Segment::new_column_iterator_with_path(const 
TabletColumn& tablet_column,
     } else {
         root_path = 
vectorized::PathInData({tablet_column.path_info_ptr()->get_parts()[0]});
     }
-    auto root = _sub_column_tree.find_leaf(root_path);
-    auto node = tablet_column.has_path_info()
-                        ? 
_sub_column_tree.find_exact(*tablet_column.path_info_ptr())
-                        : nullptr;
-    auto sparse_node = tablet_column.has_path_info()
-                               ? 
_sparse_column_tree.find_exact(*tablet_column.path_info_ptr())
+    const auto* root = _sub_column_tree.find_leaf(root_path);
+    const auto* node = tablet_column.has_path_info()
+                               ? 
_sub_column_tree.find_exact(*tablet_column.path_info_ptr())
                                : nullptr;
+    const auto* sparse_node =
+            tablet_column.has_path_info()
+                    ? 
_sparse_column_tree.find_exact(*tablet_column.path_info_ptr())
+                    : nullptr;
 
     // Currently only compaction and checksum need to read flat leaves
     // They both use tablet_schema_with_merged_max_schema_version as read 
schema
@@ -669,7 +668,7 @@ Status Segment::new_column_iterator(const TabletColumn& 
tablet_column,
         return new_column_iterator_with_path(tablet_column, iter, opt);
     }
     // init default iterator
-    if (_column_readers.count(tablet_column.unique_id()) < 1) {
+    if (!_column_readers.contains(tablet_column.unique_id())) {
         RETURN_IF_ERROR(new_default_iterator(tablet_column, iter));
         return Status::OK();
     }
@@ -701,7 +700,7 @@ Status Segment::new_column_iterator(int32_t unique_id, 
std::unique_ptr<ColumnIte
 ColumnReader* Segment::_get_column_reader(const TabletColumn& col) {
     // init column iterator by path info
     if (col.has_path_info() || col.is_variant_type()) {
-        auto node =
+        const auto* node =
                 col.has_path_info() ? 
_sub_column_tree.find_exact(*col.path_info_ptr()) : nullptr;
         if (node != nullptr) {
             return node->data.reader.get();
@@ -709,7 +708,7 @@ ColumnReader* Segment::_get_column_reader(const 
TabletColumn& col) {
         return nullptr;
     }
     auto col_unique_id = col.unique_id();
-    if (_column_readers.count(col_unique_id) > 0) {
+    if (_column_readers.contains(col_unique_id)) {
         return _column_readers[col_unique_id].get();
     }
     return nullptr;
@@ -826,7 +825,7 @@ Status Segment::lookup_row_key(const Slice& key, bool 
with_seq_col, bool with_ro
                 sought_key.get_data() + sought_key_without_seq.get_size() + 
seq_col_length + 1,
                 rowid_length - 1);
         const auto* type_info = 
get_scalar_type_info<FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT>();
-        auto rowid_coder = get_key_coder(type_info->type());
+        const auto* rowid_coder = get_key_coder(type_info->type());
         RETURN_IF_ERROR(rowid_coder->decode_ascending(&rowid_slice, 
rowid_length,
                                                       
(uint8_t*)&row_location->row_id));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to