Noemi Pap-Takacs created IMPALA-13770:
-----------------------------------------

             Summary: Updating Iceberg tables with UDFs crashes Impala
                 Key: IMPALA-13770
                 URL: https://issues.apache.org/jira/browse/IMPALA-13770
             Project: IMPALA
          Issue Type: Bug
          Components: Backend
            Reporter: Noemi Pap-Takacs


When updating an Iceberg table setting the column to a value defined by a UDF, 
Impala crashes during execution on the Backend with the following stack trace:
{noformat}
#7  0x0000000005c89709 in google::LogMessageFatal::~LogMessageFatal() ()
#8  0x00000000041caa55 in impala::Expr::~Expr (this=0x148bfc00, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/exprs/expr.cc:47
#9  0x00000000041cf4c6 in impala::ScalarExpr::~ScalarExpr (this=0x148bfc00, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/exprs/scalar-expr.h:140
#10 0x00000000041e1bd0 in impala::ScalarFnCall::~ScalarFnCall (this=0x148bfc00, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/exprs/scalar-fn-call.h:68
#11 0x00000000041e1bec in impala::ScalarFnCall::~ScalarFnCall (this=0x148bfc00, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/exprs/scalar-fn-call.h:68
#12 0x00000000041e241e in 
impala::ObjectPool::Add<impala::ScalarFnCall>(impala::ScalarFnCall*)::{lambda(void*)#1}::operator()(void*)
 const (this=0x0, obj=0x148bfc00) at 
/home/user/Impala/be/src/common/object-pool.h:41
#13 0x00000000041e243e in 
impala::ObjectPool::Add<impala::ScalarFnCall>(impala::ScalarFnCall*)::{lambda(void*)#1}::_FUN(void*)
 () at /home/user/Impala/be/src/common/object-pool.h:41
#14 0x00000000023fd213 in impala::ObjectPool::Clear (this=0x153289a0) at 
/home/user/Impala/be/src/common/object-pool.h:47
#15 0x00000000023fd17c in impala::ObjectPool::~ObjectPool (this=0x153289a0, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/common/object-pool.h:34
#16 0x0000000002b31f80 in impala::FragmentState::~FragmentState 
(this=0x153289a0, __in_chrg=<optimized out>) at 
/home/user/Impala/be/src/runtime/fragment-state.cc:192
#17 0x0000000002b34000 in 
impala::ObjectPool::Add<impala::FragmentState>(impala::FragmentState*)::{lambda(void*)#1}::operator()(void*)
 const (this=0x0, obj=0x153289a0) at 
/home/user/Impala/be/src/common/object-pool.h:41
#18 0x0000000002b34031 in 
impala::ObjectPool::Add<impala::FragmentState>(impala::FragmentState*)::{lambda(void*)#1}::_FUN(void*)
 () at /home/user/Impala/be/src/common/object-pool.h:41
#19 0x00000000023fd213 in impala::ObjectPool::Clear (this=0x13c0aab8) at 
/home/user/Impala/be/src/common/object-pool.h:47
#20 0x00000000023fd17c in impala::ObjectPool::~ObjectPool (this=0x13c0aab8, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/common/object-pool.h:34
#21 0x0000000002a6d18d in impala::QueryState::~QueryState (this=0x13c0a000, 
__in_chrg=<optimized out>) at 
/home/user/Impala/be/src/runtime/query-state.cc:151
#22 0x0000000002a621e4 in impala::QueryExecMgr::ReleaseQueryState 
(this=0x139e3680, qs=0x0) at 
/home/user/Impala/be/src/runtime/query-exec-mgr.cc:220
#23 0x0000000004571a0b in impala::Coordinator::~Coordinator (this=0x16307700, 
__in_chrg=<optimized out>) at 
/home/user/Impala/be/src/runtime/coordinator.cc:147
#24 0x0000000002fc0f63 in boost::checked_delete<impala::Coordinator> 
(x=0x16307700) at 
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/core/checked_delete.hpp:36
#25 0x0000000002fbe791 in boost::scoped_ptr<impala::Coordinator>::~scoped_ptr 
(this=0x15e6d588, __in_chrg=<optimized out>) at 
/opt/Impala-Toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/include/boost/smart_ptr/scoped_ptr.hpp:88
#26 0x0000000002f9f1b6 in impala::ClientRequestState::~ClientRequestState 
(this=0x15e6cc00, __in_chrg=<optimized out>) at 
/home/user/Impala/be/src/service/client-request-state.cc:195{noformat}
 

More precisely, it runs into a DCHECK at
{noformat}
#8 0x00000000041caa55 in impala::Expr::~Expr (this=0x148bfc00, 
__in_chrg=<optimized out>) at /home/user/Impala/be/src/exprs/expr.cc:47 47 
DCHECK(cache_entry_ == nullptr);
{noformat}
To reproduce the issue, simply use any UDF or the one defined in the 
test-warehouse:
{noformat}
create function if not exists default.identity(int) returns int location 
'/test-warehouse/libTestUdfs.so' symbol='Identity';{noformat}
Interestingly, it still returns the result set as if the update was successful 
and returns the prompt:
{noformat}
[localhost:21050] default> UPDATE ice_t SET int_col = identity(int_col);
Query: UPDATE ice_t SET int_col = identity(int_col)
Query submitted at: [...]
Query state can be monitored at: [...]
Modified 1 row(s) in 0.82s
[localhost:21050] default> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to