Skip to content

Commit

Permalink
[BugFix] Fix the mem leak of build in predicate for es external table (
Browse files Browse the repository at this point in the history
…#26631)

VExtLiteral is not deleted.

```
==76869==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 40 byte(s) in 1 object(s) allocated from:
    #0 0x9793a37 in operator new(unsigned long) ../../.././libsanitizer/asan/asan_new_delete.cpp:99
    #1 0x129dd44e in operator()<int const> /root/starrocks/be/src/exec/es/es_predicate.cpp:416
    #2 0x129dd817 in build_inpred_values<(starrocks::LogicalType)5, starrocks::EsPredicate::_build_in_predicate(const starrocks::Expr*, bool*)::<lambda(auto:29&)> > /root/starrocks/be/src/exec/es/es_predicate.cpp:366
    #3 0x129d7824 in starrocks::EsPredicate::_build_in_predicate(starrocks::Expr const*, bool*) /root/starrocks/be/src/exec/es/es_predicate.cpp:416
    #4 0x129d2f2d in starrocks::EsPredicate::_vec_build_disjuncts_list(starrocks::Expr const*) /root/starrocks/be/src/exec/es/es_predicate.cpp:185
    #5 0x129d2a53 in starrocks::EsPredicate::build_disjuncts_list() /root/starrocks/be/src/exec/es/es_predicate.cpp:148
    #6 0x128ab50d in starrocks::connector::ESDataSource::_build_conjuncts() /root/starrocks/be/src/connector/es_connector.cpp:123
    #7 0x128aa7c5 in starrocks::connector::ESDataSource::open(starrocks::RuntimeState*) /root/starrocks/be/src/connector/es_connector.cpp:89
    #8 0x9e33847 in starrocks::pipeline::ConnectorChunkSource::_open_data_source(starrocks::RuntimeState*) /root/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:504
    #9 0x9e33ed0 in starrocks::pipeline::ConnectorChunkSource::_read_chunk(starrocks::RuntimeState*, std::shared_ptr<starrocks::Chunk>*) /root/starrocks/be/src/exec/pipeline/scan/connector_scan_operator.cpp:533
    #10 0xabc8b65 in starrocks::pipeline::ChunkSource::buffer_next_batch_chunks_blocking(starrocks::RuntimeState*, unsigned long, starrocks::workgroup::WorkGroup const*) /root/starrocks/be/src/exec/pipeline/scan/chunk_source.cpp:67
    #11 0x9e168c7 in operator() /root/starrocks/be/src/exec/pipeline/scan/scan_operator.cpp:396
    #12 0x9e1c157 in __invoke_impl<void, starrocks::pipeline::ScanOperator::_trigger_next_scan(starrocks::RuntimeState*, int)::<lambda()>&> /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:60
    #13 0x9e1c005 in __invoke_r<void, starrocks::pipeline::ScanOperator::_trigger_next_scan(starrocks::RuntimeState*, int)::<lambda()>&> /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:110
    #14 0x9e1be7a in _M_invoke /opt/gcc/usr/include/c++/10.3.0/bits/std_function.h:291
    #15 0x992a271 in std::function<void ()>::operator()() const /opt/gcc/usr/include/c++/10.3.0/bits/std_function.h:622
    #16 0x9e519fa in starrocks::workgroup::ScanExecutor::worker_thread() /root/starrocks/be/src/exec/workgroup/scan_executor.cpp:67
    #17 0x9e5121f in operator() /root/starrocks/be/src/exec/workgroup/scan_executor.cpp:31
    #18 0x9e52c5d in __invoke_impl<void, starrocks::workgroup::ScanExecutor::initialize(int)::<lambda()>&> /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:60
    #19 0x9e52925 in __invoke_r<void, starrocks::workgroup::ScanExecutor::initialize(int)::<lambda()>&> /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:110
    #20 0x9e5249a in _M_invoke /opt/gcc/usr/include/c++/10.3.0/bits/std_function.h:291
    #21 0x992a271 in std::function<void ()>::operator()() const /opt/gcc/usr/include/c++/10.3.0/bits/std_function.h:622
    #22 0x1181f23d in starrocks::FunctionRunnable::run() /root/starrocks/be/src/util/threadpool.cpp:58
    #23 0x1181bff2 in starrocks::ThreadPool::dispatch_thread() /root/starrocks/be/src/util/threadpool.cpp:553
    #24 0x11837c4b in void std::__invoke_impl<void, void (starrocks::ThreadPool::*&)(), starrocks::ThreadPool*&>(std::__invoke_memfun_deref, void (starrocks::ThreadPool::*&)(), starrocks::ThreadPool*&) /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:73
    #25 0x118375a4 in std::__invoke_result<void (starrocks::ThreadPool::*&)(), starrocks::ThreadPool*&>::type std::__invoke<void (starrocks::ThreadPool::*&)(), starrocks::ThreadPool*&>(void (starrocks::ThreadPool::*&)(), starrocks::ThreadPool*&) /opt/gcc/usr/include/c++/10.
3.0/bits/invoke.h:95
    #26 0x1183699b in void std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /opt/gcc/usr/include/c++/10.3.0/functional:416
    #27 0x118352fd in void std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>::operator()<, void>() /opt/gcc/usr/include/c++/10.3.0/functional:499
    #28 0x11832361 in void std::__invoke_impl<void, std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>&>(std::__invoke_other, std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>&) /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:60
    #29 0x1182fcc5 in std::enable_if<is_invocable_r_v<void, std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>&>, void>::type std::__invoke_r<void, std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>&>(std::_Bind<void (starrocks::ThreadPool::*(starrocks::ThreadPool*))()>&) /opt/gcc/usr/include/c++/10.3.0/bits/invoke.h:110

```

Signed-off-by: trueeyu <[email protected]>
  • Loading branch information
trueeyu authored Jul 6, 2023
1 parent ec7f207 commit ff551fb
Showing 1 changed file with 19 additions and 20 deletions.
39 changes: 19 additions & 20 deletions be/src/exec/es/es_predicate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@
#include "runtime/large_int_value.h"
#include "runtime/runtime_state.h"
#include "runtime/string_value.h"
#include "service/backend_options.h"
#include "types/logical_type.h"
#include "util/runtime_profile.h"

Expand Down Expand Up @@ -368,13 +367,13 @@ Status build_inpred_values(const Predicate* pred, bool& is_not_in, Func&& func)
return Status::OK();
}

#define BUILD_INPRED_VALUES(TYPE) \
case TYPE: { \
RETURN_IF_ERROR(build_inpred_values<TYPE>(pred, is_not_in, [&](auto& v) { \
in_pred_values.emplace_back(new VExtLiteral(slot_desc->type().type, \
ColumnHelper::create_const_column<TYPE>(v, 1), _timezone)); \
})); \
break; \
#define BUILD_INPRED_VALUES(TYPE) \
case TYPE: { \
RETURN_IF_ERROR(build_inpred_values<TYPE>(pred, is_not_in, [&](auto& v) { \
in_pred_values.emplace_back(_pool->add(new VExtLiteral( \
slot_desc->type().type, ColumnHelper::create_const_column<TYPE>(v, 1), _timezone))); \
})); \
break; \
}

Status EsPredicate::_build_in_predicate(const Expr* conjunct, bool* handled) {
Expand Down Expand Up @@ -412,18 +411,18 @@ Status EsPredicate::_build_in_predicate(const Expr* conjunct, bool* handled) {
bool is_not_in = false;
// insert in list to ExtLiteral
switch (expr->type().type) {
BUILD_INPRED_VALUES(TYPE_BOOLEAN);
BUILD_INPRED_VALUES(TYPE_INT);
BUILD_INPRED_VALUES(TYPE_TINYINT);
BUILD_INPRED_VALUES(TYPE_SMALLINT);
BUILD_INPRED_VALUES(TYPE_BIGINT);
BUILD_INPRED_VALUES(TYPE_LARGEINT);
BUILD_INPRED_VALUES(TYPE_FLOAT);
BUILD_INPRED_VALUES(TYPE_DOUBLE);
BUILD_INPRED_VALUES(TYPE_DATE);
BUILD_INPRED_VALUES(TYPE_DATETIME);
BUILD_INPRED_VALUES(TYPE_CHAR);
BUILD_INPRED_VALUES(TYPE_VARCHAR);
BUILD_INPRED_VALUES(TYPE_BOOLEAN)
BUILD_INPRED_VALUES(TYPE_INT)
BUILD_INPRED_VALUES(TYPE_TINYINT)
BUILD_INPRED_VALUES(TYPE_SMALLINT)
BUILD_INPRED_VALUES(TYPE_BIGINT)
BUILD_INPRED_VALUES(TYPE_LARGEINT)
BUILD_INPRED_VALUES(TYPE_FLOAT)
BUILD_INPRED_VALUES(TYPE_DOUBLE)
BUILD_INPRED_VALUES(TYPE_DATE)
BUILD_INPRED_VALUES(TYPE_DATETIME)
BUILD_INPRED_VALUES(TYPE_CHAR)
BUILD_INPRED_VALUES(TYPE_VARCHAR)
default:
DCHECK(false) << "unsupported type:" << expr->type().type;
return Status::InternalError("unsupported type to push down to ES");
Expand Down

0 comments on commit ff551fb

Please sign in to comment.