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]