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));
     }
     
     /**