You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@seata.apache.org by "Zhengcy05 (via GitHub)" <gi...@apache.org> on 2026/08/13 07:45:19 UTC

[PR] bugfix: prevent async commit cleanup race [incubator-seata]

Zhengcy05 opened a new pull request, #8201:
URL: https://github.com/apache/incubator-seata/pull/8201

   <!--
       Licensed to the Apache Software Foundation (ASF) under one or more
       contributor license agreements.  See the NOTICE file distributed with
       this work for additional information regarding copyright ownership.
       The ASF licenses this file to You under the Apache License, Version 2.0
       (the "License"); you may not use this file except in compliance with
       the License.  You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
       
       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.
   -->
   <!-- Please make sure you have read and understood the contributing guidelines -->
   
   - [x] I have read the [[CONTRIBUTING.md](https://github.com/apache/incubator-seata/blob/2.x/CONTRIBUTING.md)](https://github.com/apache/incubator-seata/blob/2.x/CONTRIBUTING.md) guidelines.
   - [x] I have registered the PR [[changes](https://github.com/apache/incubator-seata/tree/2.x/changes)](https://github.com/apache/incubator-seata/tree/2.x/changes).
   
   ### Ⅰ. Describe what this PR did
   
   This PR prevents the scheduled async-commit worker from modifying a `GlobalSession` while the initial commit thread is still cleaning its file-mode global locks.
   
   - Execute scheduled async commits through `SessionHolder.lockAndExecute`.
   - Recheck that the transaction is still `AsyncCommitting` after acquiring the session lock.
   - Add a concurrency regression test that verifies the async worker waits for the initial cleanup to finish.
   - Verify that the same global lock key can be acquired by a subsequent transaction after the async commit completes.
   
   ### Ⅱ. Does this pull request fix one issue?
   
   Fixes #8197.
   
   ### Ⅲ. Why don't you add test cases (unit test/integration test)?
   
   A unit test has been added to reproduce the ordering between the initial commit cleanup and the scheduled async-commit worker.
   
   The test verifies that:
   
   - The async worker attempts to acquire the same `GlobalSession` lock.
   - The worker cannot remove branch sessions while the initial cleanup holds the lock.
   - The remaining global lock is released before async branch removal.
   - A subsequent transaction can register the same lock key.
   
   ### Ⅳ. Describe how to verify it
   
   - `mvn -pl server -am "-Dtest=DefaultCoordinatorTest#handleAsyncCommittingWaitsForGlobalSessionLockTest" -Dsurefire.failIfNoSpecifiedTests=false test`
   - `mvn -pl server -am -Dtest=DefaultCoordinatorTest -Dsurefire.failIfNoSpecifiedTests=false test`
   
   The complete `DefaultCoordinatorTest` run passed with 52 tests, 0 failures, 0 errors, and 5 skipped. All 90 reactor modules completed successfully.
   


-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org


Re: [PR] bugfix: prevent async commit cleanup race [incubator-seata]

Posted by "funky-eyes (via GitHub)" <gi...@apache.org>.
funky-eyes commented on code in PR #8201:
URL: https://github.com/apache/incubator-seata/pull/8201#discussion_r3773411002


##########
server/src/main/java/org/apache/seata/server/coordinator/DefaultCoordinator.java:
##########
@@ -530,7 +530,12 @@ protected void handleAsyncCommitting() {
         }
         SessionHelper.forEach(asyncCommittingSessions, asyncCommittingSession -> {
             try {
-                core.doGlobalCommit(asyncCommittingSession, true);
+                SessionHolder.lockAndExecute(asyncCommittingSession, () -> {
+                    if (!GlobalStatus.AsyncCommitting.equals(asyncCommittingSession.getStatus())) {

Review Comment:
   Why do we need to add this status check? Aren’t the transactions entering this task already queried based on their status?



-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org


Re: [PR] bugfix: prevent async commit cleanup race [incubator-seata]

Posted by "Zhengcy05 (via GitHub)" <gi...@apache.org>.
Zhengcy05 commented on code in PR #8201:
URL: https://github.com/apache/incubator-seata/pull/8201#discussion_r3774884032


##########
server/src/main/java/org/apache/seata/server/coordinator/DefaultCoordinator.java:
##########
@@ -530,7 +530,12 @@ protected void handleAsyncCommitting() {
         }
         SessionHelper.forEach(asyncCommittingSessions, asyncCommittingSession -> {
             try {
-                core.doGlobalCommit(asyncCommittingSession, true);
+                SessionHolder.lockAndExecute(asyncCommittingSession, () -> {
+                    if (!GlobalStatus.AsyncCommitting.equals(asyncCommittingSession.getStatus())) {

Review Comment:
   Yes, This was a mistake on my part, I should have just used `lockAndExecute()` directly.



-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org


Re: [PR] bugfix: prevent async commit cleanup race [incubator-seata]

Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #8201:
URL: https://github.com/apache/incubator-seata/pull/8201#issuecomment-5277632544

   ## [Codecov](https://app.codecov.io/gh/apache/incubator-seata/pull/8201?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 73.30%. Comparing base ([`5c171c0`](https://app.codecov.io/gh/apache/incubator-seata/commit/5c171c07f7cce8435133d008b2f0a7ce6914420a?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`a991260`](https://app.codecov.io/gh/apache/incubator-seata/commit/a991260ee66f7b1eb1c3612bb8bada459d3e3141?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##                2.x    #8201      +/-   ##
   ============================================
   + Coverage     73.29%   73.30%   +0.01%     
   - Complexity     1142     1143       +1     
   ============================================
     Files          1153     1153              
     Lines         42340    42340              
     Branches       5058     5058              
   ============================================
   + Hits          31031    31039       +8     
   + Misses         8826     8821       -5     
   + Partials       2483     2480       -3     
   ```
   [see 6 files with indirect coverage changes](https://app.codecov.io/gh/apache/incubator-seata/pull/8201/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   
   [![Impacted file tree graph](https://app.codecov.io/gh/apache/incubator-seata/pull/8201/graphs/tree.svg?width=650&height=150&src=pr&token=tbmHt2ZfxO&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)](https://app.codecov.io/gh/apache/incubator-seata/pull/8201?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org


Re: [PR] bugfix: prevent async commit cleanup race [incubator-seata]

Posted by "funky-eyes (via GitHub)" <gi...@apache.org>.
funky-eyes merged PR #8201:
URL: https://github.com/apache/incubator-seata/pull/8201


-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org


Re: [PR] bugfix: prevent async commit cleanup race [incubator-seata]

Posted by "wangsansan (via GitHub)" <gi...@apache.org>.
wangsansan commented on PR #8201:
URL: https://github.com/apache/incubator-seata/pull/8201#issuecomment-5434032513

   这个修复了我提的issue,现在我该把自己部署的seata server升级到哪个版本?我们现在的工程现状是seata server用的2.4.0,但是业务服务,也就是client端用的是2.1.0?


-- 
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: notifications-unsubscribe@seata.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@seata.apache.org
For additional commands, e-mail: notifications-help@seata.apache.org