Archives of Support Questions (Read Only)

This is an archived board for historical reference. Information and links may no longer be available or relevant
Announcements
This board is archived and read-only for historical reference. To ask a new question, please post a new topic on the appropriate active board.

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.