You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/04/27 08:26:36 UTC
[shardingsphere] branch master updated: Fix transaction pmd (#25355)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 2b9faded332 Fix transaction pmd (#25355)
2b9faded332 is described below
commit 2b9faded332ff55fe88abd5b31254e93c1bf4497
Author: ZhangCheng <ch...@apache.org>
AuthorDate: Thu Apr 27 16:26:28 2023 +0800
Fix transaction pmd (#25355)
---
.../content/user-manual/error-code/sql-error-code.cn.md | 1 +
.../content/user-manual/error-code/sql-error-code.en.md | 1 +
.../globalclock/type/tso/provider/LocalTSOProvider.java | 5 -----
.../transaction/spi/ShardingSphereTransactionManager.java | 6 ++++++
.../ShardingSphereTransactionManagerEngine.java | 4 +---
.../exception/CloseTransactionManagerFailedException.java} | 14 ++++++++++----
.../transaction/xa/XAShardingSphereTransactionManager.java | 2 +-
.../xa/XAShardingSphereTransactionManagerTest.java | 2 +-
.../manager/NarayanaXATransactionManagerProvider.java | 11 +++++++++--
.../transaction/xa/spi/XATransactionManagerProvider.java | 6 ++++++
.../proxy/backend/connector/BackendConnection.java | 2 +-
.../connector/jdbc/connection/ConnectionPostProcessor.java | 4 +++-
.../jdbc/transaction/BackendTransactionManager.java | 8 +-------
.../jdbc/transaction/LocalTransactionManager.java | 8 +-------
14 files changed, 42 insertions(+), 32 deletions(-)
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index 75f718ed4f9..de0c6e04fa0 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -73,6 +73,7 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
| 25000 | 14202 | Max length of xa unique resource name \`%s\` exceeded: should be less than 45. |
| 25000 | 14203 | Check privileges failed on data source, reason is: \`%s\` |
| 25000 | 14204 | Failed to create XA transaction manager, requires \`%s\` privileges |
+| 25000 | 14205 | Close transaction manager failed, \`%s\` |
| 25000 | 14301 | ShardingSphere Seata-AT transaction has been disabled. |
| 25000 | 14302 | Please config application id within seata.conf file. |
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index f83b773d8ae..dd314d92beb 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -73,6 +73,7 @@ SQL error codes provide by standard `SQL State`, `Vendor Code` and `Reason`, whi
| 25000 | 14202 | Max length of xa unique resource name \`%s\` exceeded: should be less than 45. |
| 25000 | 14203 | Check privileges failed on data source, reason is: \`%s\` |
| 25000 | 14204 | Failed to create XA transaction manager, requires \`%s\` privileges |
+| 25000 | 14205 | Close transaction manager failed, \`%s\` |
| 25000 | 14301 | ShardingSphere Seata-AT transaction has been disabled. |
| 25000 | 14302 | Please config application id within seata.conf file. |
diff --git a/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/LocalTSOProvider.java b/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/LocalTSOProvider.java
index 1dd05cf1671..0cda6f4cb7c 100644
--- a/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/LocalTSOProvider.java
+++ b/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/LocalTSOProvider.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.globalclock.type.tso.provider;
-import java.util.Properties;
import java.util.concurrent.atomic.AtomicLong;
/**
@@ -27,10 +26,6 @@ public final class LocalTSOProvider implements TSOProvider {
private final AtomicLong localClock = new AtomicLong();
- @Override
- public void init(final Properties props) {
- }
-
@Override
public long getCurrentTimestamp() {
return localClock.get();
diff --git a/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
index e610ca3fb45..db16f0c29c4 100644
--- a/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
+++ b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
@@ -96,4 +96,10 @@ public interface ShardingSphereTransactionManager extends AutoCloseable {
default boolean containsProviderType(String providerType) {
return true;
}
+
+ /**
+ * Close transaction manager.
+ */
+ @Override
+ void close();
}
diff --git a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
index 7a5dd346adb..b1e6b6e1916 100644
--- a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
+++ b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
@@ -80,10 +80,8 @@ public final class ShardingSphereTransactionManagerEngine {
/**
* Close transaction managers.
- *
- * @throws Exception exception
*/
- public void close() throws Exception {
+ public void close() {
for (Entry<TransactionType, ShardingSphereTransactionManager> entry : transactionManagers.entrySet()) {
entry.getValue().close();
}
diff --git a/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/TSOProvider.java b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/exception/CloseTransactionManagerFailedException.java
similarity index 58%
rename from kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/TSOProvider.java
rename to kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/exception/CloseTransactionManagerFailedException.java
index bc46bbd91e4..7cd557eb1c7 100644
--- a/kernel/global-clock/type/tso/core/src/main/java/org/apache/shardingsphere/globalclock/type/tso/provider/TSOProvider.java
+++ b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/exception/CloseTransactionManagerFailedException.java
@@ -15,12 +15,18 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.globalclock.type.tso.provider;
+package org.apache.shardingsphere.transaction.exception;
-import org.apache.shardingsphere.globalclock.core.provider.GlobalClockProvider;
+import org.apache.shardingsphere.infra.util.exception.external.sql.sqlstate.XOpenSQLState;
/**
- * Timestamp oracle provider.
+ * Close transaction manager failed exception.
*/
-public interface TSOProvider extends GlobalClockProvider {
+public final class CloseTransactionManagerFailedException extends TransactionSQLException {
+
+ private static final long serialVersionUID = -3396778990357223580L;
+
+ public CloseTransactionManagerFailedException(final Exception exception) {
+ super(XOpenSQLState.INVALID_TRANSACTION_STATE, 205, "Close transaction manager failed, `%s`", exception.getMessage());
+ }
}
diff --git a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
index c038767f1b3..52995b97071 100644
--- a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
+++ b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
@@ -128,7 +128,7 @@ public final class XAShardingSphereTransactionManager implements ShardingSphereT
}
@Override
- public void close() throws Exception {
+ public void close() {
for (XATransactionDataSource each : cachedDataSources.values()) {
each.close();
}
diff --git a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
index 7d9eadac266..a49a9e8906b 100644
--- a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
+++ b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
@@ -55,7 +55,7 @@ class XAShardingSphereTransactionManagerTest {
}
@AfterEach
- void tearDown() throws Exception {
+ void tearDown() {
xaTransactionManager.close();
}
diff --git a/kernel/transaction/type/xa/provider/narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/manager/NarayanaXATransactionManagerProvider.java b/kernel/transaction/type/xa/provider/narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/manager/NarayanaXATransactionManagerProvider.java
index e59c7e5728d..76c3ca3a6ca 100644
--- a/kernel/transaction/type/xa/provider/narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/manager/NarayanaXATransactionManagerProvider.java
+++ b/kernel/transaction/type/xa/provider/narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/manager/NarayanaXATransactionManagerProvider.java
@@ -27,6 +27,7 @@ import com.arjuna.common.util.propertyservice.PropertiesFactory;
import lombok.Getter;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.util.reflection.ReflectionUtils;
+import org.apache.shardingsphere.transaction.exception.CloseTransactionManagerFailedException;
import org.apache.shardingsphere.transaction.xa.spi.SingleXAResource;
import org.apache.shardingsphere.transaction.xa.spi.XATransactionManagerProvider;
@@ -79,8 +80,14 @@ public final class NarayanaXATransactionManagerProvider implements XATransaction
}
@Override
- public void close() throws Exception {
- recoveryManagerService.stop();
+ public void close() {
+ try {
+ recoveryManagerService.stop();
+ // CHECKSTYLE:OFF
+ } catch (final Exception ex) {
+ // CHECKSTYLE:ON
+ throw new CloseTransactionManagerFailedException(ex);
+ }
recoveryManagerService.destroy();
cleanPropertiesFactory();
cleanBeanInstances();
diff --git a/kernel/transaction/type/xa/spi/src/main/java/org/apache/shardingsphere/transaction/xa/spi/XATransactionManagerProvider.java b/kernel/transaction/type/xa/spi/src/main/java/org/apache/shardingsphere/transaction/xa/spi/XATransactionManagerProvider.java
index 6f6d887cdb5..3708957924b 100644
--- a/kernel/transaction/type/xa/spi/src/main/java/org/apache/shardingsphere/transaction/xa/spi/XATransactionManagerProvider.java
+++ b/kernel/transaction/type/xa/spi/src/main/java/org/apache/shardingsphere/transaction/xa/spi/XATransactionManagerProvider.java
@@ -61,4 +61,10 @@ public interface XATransactionManagerProvider extends TypedSPI, AutoCloseable {
* @return transaction manager
*/
TransactionManager getTransactionManager();
+
+ /**
+ * Close XA transaction manager provider.
+ */
+ @Override
+ void close();
}
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/BackendConnection.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/BackendConnection.java
index c06f50ea239..4e08c9ad027 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/BackendConnection.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/BackendConnection.java
@@ -149,7 +149,7 @@ public final class BackendConnection implements ExecutorJDBCConnectionManager {
throw sqlException;
}
- private void replayMethodsInvocation(final Connection target) {
+ private void replayMethodsInvocation(final Connection target) throws SQLException {
for (ConnectionPostProcessor each : connectionPostProcessors) {
each.process(target);
}
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/connection/ConnectionPostProcessor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/connection/ConnectionPostProcessor.java
index bbcd91d8817..45c69fe9ab8 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/connection/ConnectionPostProcessor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/connection/ConnectionPostProcessor.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.connector.jdbc.connection;
import java.sql.Connection;
+import java.sql.SQLException;
/**
* Connection post processor.
@@ -29,6 +30,7 @@ public interface ConnectionPostProcessor {
* Process connection.
*
* @param target target connection
+ * @throws SQLException SQL exception
*/
- void process(Connection target);
+ void process(Connection target) throws SQLException;
}
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
index d837f943e36..984b14850ce 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
@@ -138,13 +138,7 @@ public final class BackendTransactionManager implements TransactionManager {
for (Connection each : connection.getCachedConnections().values()) {
ConnectionSavepointManager.getInstance().setSavepoint(each, savepointName);
}
- connection.getConnectionPostProcessors().add(target -> {
- try {
- ConnectionSavepointManager.getInstance().setSavepoint(target, savepointName);
- } catch (final SQLException ex) {
- throw new RuntimeException(ex);
- }
- });
+ connection.getConnectionPostProcessors().add(target -> ConnectionSavepointManager.getInstance().setSavepoint(target, savepointName));
}
@Override
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/LocalTransactionManager.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/LocalTransactionManager.java
index 76cc9ee219b..130c8ef3315 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/LocalTransactionManager.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/LocalTransactionManager.java
@@ -39,13 +39,7 @@ public final class LocalTransactionManager {
* Begin transaction.
*/
public void begin() {
- connection.getConnectionPostProcessors().add(target -> {
- try {
- target.setAutoCommit(false);
- } catch (final SQLException ex) {
- throw new RuntimeException(ex);
- }
- });
+ connection.getConnectionPostProcessors().add(target -> target.setAutoCommit(false));
}
/**