linrrzqqq opened a new pull request, #67046:
URL: https://github.com/apache/doris/pull/67046

   ### What problem does this PR solve?
   
   Problem Summary:
   
   UDF cache cleanup has two problems:
   
   1. Cloud mode does not register a worker for `CLEAN_UDF_CACHE`, so `DROP 
FUNCTION` cannot clean the cached UDF classloader.
   2. UDF caches are cleaned by function signature. If a function is dropped 
and recreated with the same signature, a delayed cleanup task may delete the 
new cache, or the recreated function may reuse the stale cache.
   
   The FE removes the function metadata first and then submits 
`CleanUDFCacheTask` asynchronously. It does not wait for the BE cache cleanup 
result.
   
   In addition, the cleanup task does not report a completion result back to 
the FE. Therefore, even if the task cannot be submitted or the JNI cache 
cleanup fails, `DROP FUNCTION` still returns success to the client.
   
   ```sql
   CREATE FUNCTION test_udf(INT) RETURNS INT ...; -- implementation V1
   SELECT test_udf(1);                            -- cache V1
   
   DROP FUNCTION test_udf(INT);                   -- cache cleanup fails or is 
delayed
   
   CREATE FUNCTION test_udf(INT) RETURNS INT ...; -- implementation V2
   SELECT test_udf(1);
   ````
   
   Before this PR, the last query could reuse V1's cached classloader because 
V1 and V2 had the same signature. A delayed cleanup task for V1 could also 
remove V2's cache.
   
   ### How does this PR fix the problem?
   
   - Register the CLEAN_UDF_CACHE worker in cloud mode.
   - Use the function ID as the key for Java UDF cache lookup, insertion, and 
cleanup.
   = Fall back to signature-based cleanup when no valid function ID is provided 
for compatibility with older FEs.
   
   A recreated function receives a new function ID. Therefore, even if the 
previous function's cache is not successfully removed, the recreated function 
does not reuse it and can load and execute the correct implementation. A 
delayed cleanup task also removes only the old function's cache without 
affecting the recreated function.
   


-- 
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]

Reply via email to