wardlican opened a new pull request, #4002: URL: https://github.com/apache/amoro/pull/4002
## Why are the changes needed? TaskRuntime.stateLock and TableOptimizingProcess.lock can cause deadlocks.This can cause tables in a certain resource group to malfunction, and OptimizerKeeper will also fail to function properly. Close #4001. ## Brief change log ### Fixes Implemented: #### The following fixes have been implemented: 1. Modified the `completeTask` method (lines 565-577): - First, call `taskRuntime.complete()` (acquire and release the database lock). - After the database lock is released, acquire `TableOptimizingProcess.this.lock` and call `acceptResult`. - Ensure the lock acquisition order is consistent: acquire `TableOptimizingProcess.this.lock` first, then acquire the database lock. 2. Removed the `whenCompleted` callback registration (lines 910-922 and 932-945): - Avoid synchronously calling `acceptResult` while holding the database lock. - Instead, explicitly call `acceptResult` within `completeTask`. 3. Modified the `cancelTasks` method (lines 897-902): - First, cancel all tasks (acquire and release the database lock). - Then call `acceptResult` for each canceled task (while holding `TableOptimizingProcess.this.lock`). - ## How was this patch tested? - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible - [ ] Add screenshots for manual tests if appropriate - [ ] Run test locally before making a pull request ## Documentation - Does this pull request introduce a new feature? (yes / no) - If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented) -- 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]
