jacktengg opened a new pull request, #22648:
URL: https://github.com/apache/doris/pull/22648

   ## Proposed changes
   
   Issue Number: close #xxx
   
   When `push_down_agg_type_opt == TPushAggOp::COUNT`, 
`VStatisticsIterator::next_batch` only resize columns, not really read data. 
For nullable columns, the null map is filled with random data, which causes 
problem if the column is used in later data processing, e.g. `case expr`, 
because in `case` expr, it uses the null map data to calculate the output 
column index:
   ```
                       // simd automatically
                       for (int row_idx = 0; row_idx < rows_count; row_idx++) {
                           then_idx_ptr[row_idx] |=
                                   (!then_idx_ptr[row_idx]) * 
cond_raw_data[row_idx] * i;
                       }
   ```
   which will result int out of bound access of array.
   
   
   ```
   start time: Thu Aug  3 22:57:03 CST 2023
   SLF4J: Class path contains multiple SLF4J bindings.
   SLF4J: Found binding in 
[jar:file:/opt/doris/be/lib/hadoop_hdfs/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
   SLF4J: Found binding in 
[jar:file:/opt/doris/be/lib/java-udf-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
   SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an 
explanation.
   SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
   terminate called after throwing an instance of 'std::bad_optional_access'
     what():  bad optional access
   *** Query id: ed6cf6f0bfae499f-a592e6afdb4bd36b ***
   *** Aborted at 1691074818 (unix time) try "date -d @1691074818" if you are 
using GNU date ***
   *** Current BE git commitID: 5b28add3fd ***
   *** SIGABRT unkown detail explain (@0x3e800001f21) received by PID 7969 (TID 
0x7f6b776e5700) from PID 7969; stack trace: ***
    0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/common/signal_handler.h:420
    1# 0x00007F6C3E98F400 in /lib64/libc.so.6
    2# gsignal in /lib64/libc.so.6
    3# abort in /lib64/libc.so.6
    4# __gnu_cxx::__verbose_terminate_handler() [clone .cold] at 
../../../../libstdc++-v3/libsupc++/vterminate.cc:75
    5# __cxxabiv1::__terminate(void (*)()) at 
../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
    6# 0x00005627AE847071 in /opt/doris/be/lib/doris_be
    7# 0x00005627AE8471C4 in /opt/doris/be/lib/doris_be
    8# 0x00005627A93DF01E in /opt/doris/be/lib/doris_be
    9# doris::Status doris::vectorized::FunctionCase<false, 
true>::execute_update_result<doris::vectorized::ColumnString, 
true>(std::shared_ptr<doris::vectorized::IDataType const> const&, unsigned 
long, doris::vectorized::Block&, unsigned char*, 
doris::vectorized::CaseWhenColumnHolder&) in /opt/doris/be/lib/doris_be
   10# doris::Status doris::vectorized::FunctionCase<false, 
true>::execute_impl<doris::vectorized::ColumnString, false, 
true>(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::Block&, unsigned long, 
doris::vectorized::CaseWhenColumnHolder) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function_case.h:227
   11# doris::Status doris::vectorized::FunctionCase<false, 
true>::execute_get_then_null<doris::vectorized::ColumnString, 
false>(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function_case.h:321
   12# doris::Status doris::vectorized::FunctionCase<false, 
true>::execute_get_when_null<doris::vectorized::ColumnString>(std::shared_ptr<doris::vectorized::IDataType
 const> const&, doris::vectorized::Block&, std::vector<unsigned long, 
std::allocator<unsigned long> > const&, unsigned long, unsigned long) in 
/opt/doris/be/lib/doris_be
   13# doris::vectorized::FunctionCase<false, 
true>::execute_get_type(std::shared_ptr<doris::vectorized::IDataType const> 
const&, doris::vectorized::Block&, std::vector<unsigned long, 
std::allocator<unsigned long> > const&, unsigned long, unsigned long) in 
/opt/doris/be/lib/doris_be
   14# doris::vectorized::FunctionCase<false, 
true>::execute_impl(doris_udf::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function_case.h:374
   15# 
doris::vectorized::DefaultExecutable::execute_impl(doris_udf::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function.h:484
   16# 
doris::vectorized::PreparedFunctionImpl::execute_without_low_cardinality_columns(doris_udf::FunctionContext*,
 doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) in 
/opt/doris/be/lib/doris_be
   17# 
doris::vectorized::PreparedFunctionImpl::execute(doris_udf::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function.cpp:265
   18# doris::vectorized::IFunctionBase::execute(doris_udf::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/functions/function.h:155
   19# doris::vectorized::VCaseExpr::execute(doris::vectorized::VExprContext*, 
doris::vectorized::Block*, int*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/exprs/vcase_expr.cpp:90
   20# doris::vectorized::VExprContext::execute(doris::vectorized::Block*, 
int*) at /mnt/disk2/tengjianping/doris-1.2/be/src/vec/exprs/vexpr_context.cpp:47
   21# doris::ExecNode::do_projections(doris::vectorized::Block*, 
doris::vectorized::Block*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/exec/exec_node.cpp:835
   22# doris::ExecNode::get_next_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/exec/exec_node.cpp:854
   23# doris::vectorized::AggregationNode::open(doris::RuntimeState*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/vec/exec/vaggregation_node.cpp:474
   24# doris::PlanFragmentExecutor::open_vectorized_internal() at 
/mnt/disk2/tengjianping/doris-1.2/be/src/runtime/plan_fragment_executor.cpp:289
   25# doris::PlanFragmentExecutor::open() in /opt/doris/be/lib/doris_be
   26# doris::FragmentExecState::execute() at 
/mnt/disk2/tengjianping/doris-1.2/be/src/runtime/fragment_mgr.cpp:261
   27# 
doris::FragmentMgr::_exec_actual(std::shared_ptr<doris::FragmentExecState>, 
std::function<void (doris::PlanFragmentExecutor*)>) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/runtime/fragment_mgr.cpp:508
   28# std::_Function_handler<void (), 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, 
std::function<void 
(doris::PlanFragmentExecutor*)>)::$_0>::_M_invoke(std::_Any_data const&) at 
/mnt/disk2/tengjianping/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
   29# doris::ThreadPool::dispatch_thread() in /opt/doris/be/lib/doris_be
   30# doris::Thread::supervise_thread(void*) at 
/mnt/disk2/tengjianping/doris-1.2/be/src/util/thread.cpp:455
   31# start_thread in /lib64/libpthread.so.0
   32# clone in /lib64/libc.so.6
   ```
   
   ## Further comments
   
   If this is a relatively large or complex change, kick off the discussion at 
[[email protected]](mailto:[email protected]) by explaining why you 
chose the solution you did and what alternatives you considered, etc...
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to