ivandika3 opened a new pull request, #10171:
URL: https://github.com/apache/ozone/pull/10171

   ## What changes were proposed in this pull request?
   
   We need to ensure that the tables in CleanupTableInfo in OM response should 
be exactly the same as the ones updated in the corresponding OM request's 
validateAndUpdateCache. Previously, this is done with using `CleanupTableInfo` 
annotations on the `OMClientResponse`. However, this is hard to keep track 
because all the cache updates are done in the `OMClientRequest`, but we need to 
update the `OMClientResponse` instead, which is very error-prone. We should 
couple the table cache update in `OMClientRequest` and the tables to cleanup. 
That way, we remove the `CleanupTableInfo` reflection entirely.
   
   One way is to track table cache to cleanup for the `OmClientResponse` 
whenever a cache is updated (e.g. using some context object). This will ensure 
that any table cache updated will eventually be cleaned up. Moreover, this can 
save some cleanup overhead if not all tables in the `CleanupTableInfo` need to 
be cleaned up in certain cases (e.g. OMOpenKeysDeleteRequest might only need to 
cleanup only OPEN_KEY_TABLE (if all the open keys are from OBS / LEGACY 
buckets) or OPEN_FILE_TABLE (if all the open keys are from FSO bucket) or both. 
For example, for each Table#addCacheEntry, we also need to update the list of 
tables to cleanup. However, there might be some memory overhead when passing 
the OM table cache to cleanup (although the context objects should be 
short-lived).
   
   With this patch, we do not need to add any explicit `CleanupTableInfo` since 
all cache entry is eligible to be cleaned up as soon as it's added. This would 
make OM request/response development less error-prone and contributors do not 
need to worry about cache cleanup mechanism while developing OM request and 
response.
   
   Note: Currently, the implementation uses ThreadLocal since currently OM 
validateAndUpdateCache only runs in a single thread (i.e. Ratis 
StateMachineUpdater) and the code changes is minimal. An alternative (less 
error-prone) idea is to pass tracker inside the `ExecutionContext` which should 
be safer, but will require changes in a lot more places.
   
   ## What is the link to the Apache JIRA
   
   https://issues.apache.org/jira/browse/HDDS-13365
   
   ## How was this patch tested?
   
   UT (Clean CI: https://github.com/ivandika3/ozone/actions/runs/25242237805)


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