From e5457c7eb64c4c7634207afde1997725b618cc5b Mon Sep 17 00:00:00 2001 From: a364176773 <364176773@qq.com> Date: Tue, 6 Dec 2022 18:17:25 +0800 Subject: [PATCH 01/11] bugfix: xa connect in the active,rollback fail --- .../seata/rm/datasource/xa/ConnectionProxyXA.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index 4ae1ee4ac90..61b2f6c6857 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -132,11 +132,19 @@ public synchronized void xaCommit(String xid, long branchId, String applicationD * @param xid global transaction xid * @param branchId transaction branch id * @param applicationData application data - * @throws SQLException SQLException */ public synchronized void xaRollback(String xid, long branchId, String applicationData) throws XAException { XAXid xaXid = XAXidBuilder.build(xid, branchId); - xaRollback(xaXid); + try { + xaRollback(xaXid); + } catch (XAException e) { + if (e.errorCode == XAException.XAER_RMFAIL && e.getMessage().trim().endsWith("ACTIVE state")) { + xaResource.end(xaBranchXid, XAResource.TMFAIL); + xaRollback(xaBranchXid); + } else { + throw e; + } + } } /** @@ -244,7 +252,7 @@ public void rollback() throws SQLException { try { if (!rollBacked) { // XA End: Fail - xaResource.end(this.xaBranchXid, XAResource.TMFAIL); + end(XAResource.TMFAIL); xaRollback(xaBranchXid); } // Branch Report to TC From 386eb012f1c1d6689c72a034da9d38ca259b23fa Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Tue, 6 Dec 2022 22:14:20 +0800 Subject: [PATCH 02/11] update --- .../java/io/seata/rm/datasource/xa/ConnectionProxyXA.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index 61b2f6c6857..d7fc26856d5 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -139,7 +139,7 @@ public synchronized void xaRollback(String xid, long branchId, String applicatio xaRollback(xaXid); } catch (XAException e) { if (e.errorCode == XAException.XAER_RMFAIL && e.getMessage().trim().endsWith("ACTIVE state")) { - xaResource.end(xaBranchXid, XAResource.TMFAIL); + xaResource.end(this.xaBranchXid, XAResource.TMFAIL); xaRollback(xaBranchXid); } else { throw e; @@ -252,7 +252,7 @@ public void rollback() throws SQLException { try { if (!rollBacked) { // XA End: Fail - end(XAResource.TMFAIL); + xaResource.end(this.xaBranchXid, XAResource.TMFAIL); xaRollback(xaBranchXid); } // Branch Report to TC From 813ce8eae0c3bcd10b5da719539ba3465e46599f Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Tue, 6 Dec 2022 22:16:03 +0800 Subject: [PATCH 03/11] update --- .../java/io/seata/rm/datasource/xa/ConnectionProxyXA.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index d7fc26856d5..f2c4ba7834f 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -139,8 +139,8 @@ public synchronized void xaRollback(String xid, long branchId, String applicatio xaRollback(xaXid); } catch (XAException e) { if (e.errorCode == XAException.XAER_RMFAIL && e.getMessage().trim().endsWith("ACTIVE state")) { - xaResource.end(this.xaBranchXid, XAResource.TMFAIL); - xaRollback(xaBranchXid); + xaResource.end(xaXid, XAResource.TMFAIL); + xaRollback(xaXid); } else { throw e; } From 9d1b97abb209e5b32e2e620e74d8e3e10f0d432d Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Tue, 6 Dec 2022 22:45:21 +0800 Subject: [PATCH 04/11] update --- .../rm/datasource/xa/ConnectionProxyXA.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index f2c4ba7834f..d2a4a7eab13 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -135,16 +135,7 @@ public synchronized void xaCommit(String xid, long branchId, String applicationD */ public synchronized void xaRollback(String xid, long branchId, String applicationData) throws XAException { XAXid xaXid = XAXidBuilder.build(xid, branchId); - try { - xaRollback(xaXid); - } catch (XAException e) { - if (e.errorCode == XAException.XAER_RMFAIL && e.getMessage().trim().endsWith("ACTIVE state")) { - xaResource.end(xaXid, XAResource.TMFAIL); - xaRollback(xaXid); - } else { - throw e; - } - } + xaRollback(xaXid); } /** @@ -217,6 +208,7 @@ public synchronized void commit() throws SQLException { throw new SQLException("should NOT commit on an inactive session", SQLSTATE_XA_NOT_END); } try { + // XA End: Success end(XAResource.TMSUCCESS); long now = System.currentTimeMillis(); checkTimeout(now); @@ -252,7 +244,7 @@ public void rollback() throws SQLException { try { if (!rollBacked) { // XA End: Fail - xaResource.end(this.xaBranchXid, XAResource.TMFAIL); + end(XAResource.TMFAIL); xaRollback(xaBranchXid); } // Branch Report to TC @@ -285,9 +277,8 @@ private synchronized void start() throws XAException, SQLException { } private synchronized void end(int flags) throws XAException, SQLException { - termination(); - // XA End: Success xaResource.end(xaBranchXid, flags); + termination(); } private void cleanXABranchContext() { From 955700bcb4560495bcd4fdf7b03faa2065a69e25 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Tue, 6 Dec 2022 22:49:49 +0800 Subject: [PATCH 05/11] update --- .../main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java index d2a4a7eab13..882a71067f2 100644 --- a/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java +++ b/rm-datasource/src/main/java/io/seata/rm/datasource/xa/ConnectionProxyXA.java @@ -244,7 +244,7 @@ public void rollback() throws SQLException { try { if (!rollBacked) { // XA End: Fail - end(XAResource.TMFAIL); + xaResource.end(this.xaBranchXid, XAResource.TMFAIL); xaRollback(xaBranchXid); } // Branch Report to TC From 4ca12738208826d0a945caeef6558223838b6563 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Tue, 6 Dec 2022 23:19:36 +0800 Subject: [PATCH 06/11] update --- changes/en-us/develop.md | 1 + changes/zh-cn/develop.md | 1 + 2 files changed, 2 insertions(+) diff --git a/changes/en-us/develop.md b/changes/en-us/develop.md index ce5b32390e0..f7fda43a0c4 100644 --- a/changes/en-us/develop.md +++ b/changes/en-us/develop.md @@ -41,6 +41,7 @@ Add changes here for all PR submitted to the develop branch. - [[#5093](https://github.com/seata/seata/pull/5093)] fix access key loss after seata server restart - [[#5092](https://github.com/seata/seata/pull/5092)] fix when seata and jpa are used together, their AutoConfiguration order is incorrect - [[#5109](https://github.com/seata/seata/pull/5109)] fix NPE caused when there is no @GlobalTransactional annotation on the RM side +- [[#5131](https://github.com/seata/seata/pull/5131)] rollback active xa connection fail ### optimize: diff --git a/changes/zh-cn/develop.md b/changes/zh-cn/develop.md index 52f8aa53517..f6a58881c29 100644 --- a/changes/zh-cn/develop.md +++ b/changes/zh-cn/develop.md @@ -42,6 +42,7 @@ - [[#5093](https://github.com/seata/seata/pull/5093)] 修复seata server重启后access key丢失问题 - [[#5092](https://github.com/seata/seata/pull/5092)] 修复当seata and jpa共同使用时, AutoConfiguration的顺序不正确的问题 - [[#5109](https://github.com/seata/seata/pull/5109)] 修复当RM侧没有加@GlobalTransactional报NPE的问题 +- [[#5131](https://github.com/seata/seata/pull/5131)] 修复xaconnection处于active状态时无法回滚的问题 ### optimize: - [[#4681](https://github.com/seata/seata/pull/4681)] 优化竞争锁过程 From 4c611a502d1344e4ed02fe183052b40a99faca43 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Wed, 7 Dec 2022 22:28:36 +0800 Subject: [PATCH 07/11] bugfix: hikari dataosurce auto proxy fail --- .../boot/autoconfigure/SeataAutoConfiguration.java | 2 ++ .../autoconfigure/SeataDataSourceAutoConfiguration.java | 9 ++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index a261c789790..c52a2bcd709 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.DependsOn; @@ -43,6 +44,7 @@ * @author xingfudeshi@gmail.com */ @ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) +@EnableConfigurationProperties(SeataProperties.class) @AutoConfigureAfter({SeataCoreAutoConfiguration.class}) public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java index e9222538f9f..50d37458d89 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java @@ -15,12 +15,10 @@ */ package io.seata.spring.boot.autoconfigure; -import javax.sql.DataSource; - import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; import io.seata.spring.boot.autoconfigure.properties.SeataProperties; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; @@ -32,9 +30,9 @@ * * @author xingfudeshi@gmail.com */ -@ConditionalOnBean(DataSource.class) @ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}") -@AutoConfigureAfter({SeataCoreAutoConfiguration.class}) +@AutoConfigureBefore(name = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"}) +@AutoConfigureAfter({SeataCoreAutoConfiguration.class, SeataAutoConfiguration.class}) public class SeataDataSourceAutoConfiguration { /** @@ -46,4 +44,5 @@ public SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProp return new SeataAutoDataSourceProxyCreator(seataProperties.isUseJdkProxy(), seataProperties.getExcludesForAutoProxying(), seataProperties.getDataSourceProxyMode()); } + } From 4621b181a0e88b596e4dd5cbe321875de290a5e3 Mon Sep 17 00:00:00 2001 From: a364176773 <364176773@qq.com> Date: Thu, 8 Dec 2022 12:01:28 +0800 Subject: [PATCH 08/11] update --- .../boot/autoconfigure/SeataAutoConfiguration.java | 1 - .../SeataDataSourceAutoConfiguration.java | 11 ++++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index c52a2bcd709..36945d5fb92 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -44,7 +44,6 @@ * @author xingfudeshi@gmail.com */ @ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) -@EnableConfigurationProperties(SeataProperties.class) @AutoConfigureAfter({SeataCoreAutoConfiguration.class}) public class SeataAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class); diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java index 50d37458d89..b07a5fbec73 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java @@ -15,13 +15,16 @@ */ package io.seata.spring.boot.autoconfigure; +import javax.sql.DataSource; import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator; import io.seata.spring.boot.autoconfigure.properties.SeataProperties; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; +import org.springframework.core.PriorityOrdered; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; @@ -30,9 +33,11 @@ * * @author xingfudeshi@gmail.com */ +@ConditionalOnBean(DataSource.class) @ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}") -@AutoConfigureBefore(name = {"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"}) -@AutoConfigureAfter({SeataCoreAutoConfiguration.class, SeataAutoConfiguration.class}) +@AutoConfigureOrder(PriorityOrdered.LOWEST_PRECEDENCE) +@AutoConfigureAfter(value = {SeataCoreAutoConfiguration.class}, + name = "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration") public class SeataDataSourceAutoConfiguration { /** From b85bc4fcf17dffe25412a2a8f50f14b8b7217426 Mon Sep 17 00:00:00 2001 From: a364176773 <364176773@qq.com> Date: Thu, 8 Dec 2022 12:33:45 +0800 Subject: [PATCH 09/11] update --- .../seata/spring/boot/autoconfigure/SeataAutoConfiguration.java | 1 - 1 file changed, 1 deletion(-) diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java index 36945d5fb92..a261c789790 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.java @@ -30,7 +30,6 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.DependsOn; From 191707a63fd978097d49ca70ec48347c3dc1b735 Mon Sep 17 00:00:00 2001 From: a364176773 <364176773@qq.com> Date: Fri, 9 Dec 2022 13:37:01 +0800 Subject: [PATCH 10/11] update --- .../boot/autoconfigure/SeataDataSourceAutoConfiguration.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java index b07a5fbec73..1df129143fe 100644 --- a/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java +++ b/seata-spring-boot-starter/src/main/java/io/seata/spring/boot/autoconfigure/SeataDataSourceAutoConfiguration.java @@ -24,7 +24,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; -import org.springframework.core.PriorityOrdered; +import org.springframework.core.Ordered; import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR; @@ -35,7 +35,7 @@ */ @ConditionalOnBean(DataSource.class) @ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true} && ${seata.enable-auto-data-source-proxy:true}") -@AutoConfigureOrder(PriorityOrdered.LOWEST_PRECEDENCE) +@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE) @AutoConfigureAfter(value = {SeataCoreAutoConfiguration.class}, name = "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration") public class SeataDataSourceAutoConfiguration { From 97e01151eda68900ba3bd39b0d0f16605c5556ac Mon Sep 17 00:00:00 2001 From: a364176773 <364176773@qq.com> Date: Mon, 12 Dec 2022 10:50:34 +0800 Subject: [PATCH 11/11] update --- changes/en-us/develop.md | 2 +- changes/zh-cn/develop.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/changes/en-us/develop.md b/changes/en-us/develop.md index f7fda43a0c4..e6adc33c449 100644 --- a/changes/en-us/develop.md +++ b/changes/en-us/develop.md @@ -42,7 +42,7 @@ Add changes here for all PR submitted to the develop branch. - [[#5092](https://github.com/seata/seata/pull/5092)] fix when seata and jpa are used together, their AutoConfiguration order is incorrect - [[#5109](https://github.com/seata/seata/pull/5109)] fix NPE caused when there is no @GlobalTransactional annotation on the RM side - [[#5131](https://github.com/seata/seata/pull/5131)] rollback active xa connection fail - +- [[#5134](https://github.com/seata/seata/pull/5134)] hikari datasource auto proxy fail ### optimize: - [[#4774](https://github.com/seata/seata/pull/4774)] optimize mysql8 dependencies for seataio/seata-server image diff --git a/changes/zh-cn/develop.md b/changes/zh-cn/develop.md index f6a58881c29..81bfde44e06 100644 --- a/changes/zh-cn/develop.md +++ b/changes/zh-cn/develop.md @@ -43,6 +43,7 @@ - [[#5092](https://github.com/seata/seata/pull/5092)] 修复当seata and jpa共同使用时, AutoConfiguration的顺序不正确的问题 - [[#5109](https://github.com/seata/seata/pull/5109)] 修复当RM侧没有加@GlobalTransactional报NPE的问题 - [[#5131](https://github.com/seata/seata/pull/5131)] 修复xaconnection处于active状态时无法回滚的问题 +- [[#5134](https://github.com/seata/seata/pull/5134)] 修复hikariDataSource 自动代理在某些情况下失效的问题 ### optimize: - [[#4681](https://github.com/seata/seata/pull/4681)] 优化竞争锁过程