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 3fb99945fbc branch-3.0: [fix](delete) Fix static type dispatch by 
mistake due to typo (#43022)
3fb99945fbc is described below

commit 3fb99945fbc286d9f7109277693ea3a62b13e8e4
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Nov 8 09:52:43 2024 +0800

    branch-3.0: [fix](delete) Fix static type dispatch by mistake due to typo 
(#43022)
    
    PR Body: ## Proposed changes
    
    DeletePredicatePB should be DeleteSubPredicatePB.
    
    Test case is too ambiguous to add, since this bug is triggered by a huge
    random test and failed to find the minimal case. However, this fix is
    verified under the wild test that it does works.
    
    Note that this problem may be triggered by another bug, cuz schema in
    delete predicate rowset should contain column referred in delete
    condition. Even if we don't have this fix, this error should never
    happend.
    
    But this error occurred under wild tests, means that schema in delete
    predicate rowset is not adaptable with delete condition. I think it is
    under some status that delete operation use BE tablet schema rather than
    schema from FE, and the former rename operation result in that status.
    But I failed to add a test case to reproduce, and think that by no way
    will it happend occurding to the related code.
    ```
    (1105, 'errCode = 2, detailMessage = 
([172.20.50.7](http://172.20.50.7/))[INTERNAL_ERROR]failed to initialize 
storage reader. tablet=78026, res=[INTERNAL_ERROR]column not found, name=loc1, 
table_id=-1, schema_version=2
    
    \t0#  doris::TabletSchema::column(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&) const at 
/home/zcp/repo_center/doris_master/doris/be/src/common/status.h:375
    \t1#  doris::Status 
doris::DeleteHandler::_parse_column_pred<doris::DeleteSubPredicatePB>(std::shared_ptr<doris::TabletSchema>,
 std::shared_ptr<doris::TabletSchema>, 
google::protobuf::RepeatedPtrField<doris::DeleteSubPredicatePB> const&, 
doris::DeleteConditions*) at 
/home/zcp/repo_center/doris_master/doris/be/src/util/expected.hpp:1986
    \t2#  doris::DeleteHandler::init(std::shared_ptr<doris::TabletSchema>, 
std::vector<std::shared_ptr<doris::RowsetMeta>, 
std::allocator<std::shared_ptr<doris::RowsetMeta> > > const&, long) at 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
    \t3#  
doris::TabletReader::_init_delete_condition(doris::TabletReader::ReaderParams 
const&) at 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
    \t4#  doris::TabletReader::_init_params(doris::TabletReader::ReaderParams 
const&) at /home/zcp/repo_center/doris_master/doris/be/src/common/status.h:499
    \t5#  doris::TabletReader::init(doris::TabletReader::ReaderParams const&) 
at /home/zcp/repo_center/doris_master/doris/be/src/common/status.h:499
    \t6#  
doris::vectorized::BlockReader::init(doris::TabletReader::ReaderParams const&) 
at /home/zcp/repo_center/doris_master/doris/be/src/common/status.h:499
    \t7#  doris::vectorized::NewOlapScanner::open(doris::RuntimeState*) at 
/home/zcp/repo_center/doris_master/doris/be/src/common/status.h:499
    \t8#  
doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr<doris::vectorized::ScannerContext>,
 std::shared_ptr<doris::vectorized::ScanTask>) at 
/home/zcp/repo_center/doris_master/doris/be/src/common/status.h:388
    \t9#  std::_Function_handler<void (), 
doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>,
 std::shared_ptr<doris::vectorized::ScanTask>)::$_1::operator()() 
const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at 
/var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/shared_ptr_base.h:701
    \t10# doris::ThreadPool::dispatch_thread() at 
/home/zcp/repo_center/doris_master/doris/be/src/util/threadpool.cpp:0
    \t11# doris::Thread::supervise_thread(void*) at 
/var/local/ldb-toolchain/bin/../usr/include/pthread.h:562
    \t12# ?
    \t13# ?
    , backend=[172.20.50.7](http://172.20.50.7/)')
    ```
    
    ```cpp
    auto tablet_schema = std::make_shared<TabletSchema>();
        tablet_schema->copy_from(*tablet->tablet_schema());
        if (!request.columns_desc.empty() && 
request.columns_desc[0].col_unique_id >= 0) {
            tablet_schema->clear_columns();
            // TODO(lhy) handle variant
            for (const auto& column_desc : request.columns_desc) {
                tablet_schema->append_column(TabletColumn(column_desc));
            }
        }
        RowsetSharedPtr rowset_to_add;
        // writes
        res = _convert_v2(tablet, &rowset_to_add, tablet_schema, push_type);
        if (!res.ok()) {
            LOG(WARNING) << "fail to convert tmp file when realtime push. res=" 
<< res
                         << ", failed to process realtime push."
                         << ", tablet=" << tablet->tablet_id()
                         << ", transaction_id=" << request.transaction_id;
    
            Status rollback_status = 
_engine.txn_manager()->rollback_txn(request.partition_id, *tablet,
                                                                         
request.transaction_id);
            // has to check rollback status to ensure not delete a committed 
rowset
            if (rollback_status.ok()) {
                _engine.add_unused_rowset(rowset_to_add);
            }
            return res;
        }
    
        // add pending data to tablet
    
        if (push_type == PushType::PUSH_FOR_DELETE) {
            
rowset_to_add->rowset_meta()->set_delete_predicate(std::move(del_preds.front()));
            del_preds.pop();
        }
    ```
     Cherry-picked from #42260
    
    Co-authored-by: Siyang Tang 
<82279870+tangsiyang2...@users.noreply.github.com>
---
 be/src/olap/delete_handler.cpp | 13 +++++++++----
 be/src/olap/delete_handler.h   |  3 +++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/be/src/olap/delete_handler.cpp b/be/src/olap/delete_handler.cpp
index 4d5b1ce9add..80fc440ce36 100644
--- a/be/src/olap/delete_handler.cpp
+++ b/be/src/olap/delete_handler.cpp
@@ -346,6 +346,8 @@ Status DeleteHandler::parse_condition(const std::string& 
condition_str, TConditi
 }
 
 template <typename SubPredType>
+    requires(std::is_same_v<SubPredType, DeleteSubPredicatePB> or
+             std::is_same_v<SubPredType, std::string>)
 Status DeleteHandler::_parse_column_pred(TabletSchemaSPtr complete_schema,
                                          TabletSchemaSPtr 
delete_pred_related_schema,
                                          const RepeatedPtrField<SubPredType>& 
sub_pred_list,
@@ -353,10 +355,13 @@ Status DeleteHandler::_parse_column_pred(TabletSchemaSPtr 
complete_schema,
     for (const auto& sub_predicate : sub_pred_list) {
         TCondition condition;
         RETURN_IF_ERROR(parse_condition(sub_predicate, &condition));
-        int32_t col_unique_id;
-        if constexpr (std::is_same_v<SubPredType, DeletePredicatePB>) {
-            col_unique_id = sub_predicate.col_unique_id;
-        } else {
+        int32_t col_unique_id = -1;
+        if constexpr (std::is_same_v<SubPredType, DeleteSubPredicatePB>) {
+            if (sub_predicate.has_column_unique_id()) [[likely]] {
+                col_unique_id = sub_predicate.column_unique_id();
+            }
+        }
+        if (col_unique_id < 0) {
             const auto& column =
                     
*DORIS_TRY(delete_pred_related_schema->column(condition.column_name));
             col_unique_id = column.unique_id();
diff --git a/be/src/olap/delete_handler.h b/be/src/olap/delete_handler.h
index cc585c0abcf..77de62d31d9 100644
--- a/be/src/olap/delete_handler.h
+++ b/be/src/olap/delete_handler.h
@@ -21,6 +21,7 @@
 
 #include <cstdint>
 #include <string>
+#include <type_traits>
 
 #include "common/factory_creator.h"
 #include "common/status.h"
@@ -115,6 +116,8 @@ public:
 
 private:
     template <typename SubPredType>
+        requires(std::is_same_v<SubPredType, DeleteSubPredicatePB> or
+                 std::is_same_v<SubPredType, std::string>)
     Status _parse_column_pred(
             TabletSchemaSPtr complete_schema, TabletSchemaSPtr 
delete_pred_related_schema,
             const ::google::protobuf::RepeatedPtrField<SubPredType>& 
sub_pred_list,


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

Reply via email to