Support Questions
Find answers, ask questions, and share your expertise
Announcements
Alert: Welcome to the Unified Cloudera Community. Former HCC members be sure to read and learn how to activate your account here.

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

Solved Go to solution

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

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

Accepted Solutions
Highlighted

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

Master Collaborator

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.

1 REPLY 1
Highlighted

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

Master Collaborator

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.