Support Questions

Find answers, ask questions, and share your expertise

Impala retries even when "SetError(const char* error_msg)" Error is set in UDF.

avatar
Explorer

Hi All,

 

In UDF executing the context->SetError(const char* error_msg) method impala again retries the UDF.

 

Below is my UDF:-

 

IntVal my_udf(
FunctionContext* context,
IntVal& sInput
)
{
if( sInput.val == 0 )
{
context->SetError( "Off Value" );
return 0;
}
IntVal iResult(sInput.val + 1);
return iResult;
}

 

DDL :--

CREATE FUNCTION my_udf(INTEGER) RETURNS INTEGER
LOCATION '/opt/impala/udfs/myudf.so'
SYMBOL = 'my_udf';

So if we debug this UDF using GDB.

If we add the break point at "context->SetError( "Off Value" );" this line then we come to know that if we pass 0 to this UDF this will hit the break point more than one time.

 

So please let me know that it is right behavior?


i ran this UDF in CDH 5.10 & CDH 5.11.

1 ACCEPTED SOLUTION

avatar

I just saw this in my email backlog. Yes this is the expected behaviour. Your UDF may be called again on the same thread or a different thread. After you call SetError() the query will fail but the error will take some time to propagate.

View solution in original post

1 REPLY 1

avatar

I just saw this in my email backlog. Yes this is the expected behaviour. Your UDF may be called again on the same thread or a different thread. After you call SetError() the query will fail but the error will take some time to propagate.