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)
[](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