From 6ecd87351d9afcf895ccb14e276009bab953db8b Mon Sep 17 00:00:00 2001 From: ZhangCheng Date: Tue, 31 Dec 2024 09:52:26 +0800 Subject: [PATCH] Fix sonar issue of transaction test (#34213) * Fix snoar issue of transaction test * Fix snoar issue of transaction test * Fix sonar issue of transaction test * Add switching transaction rule test case --- .../transaction/TransactionConnectionContext.java | 7 ++++--- .../alterresource/SwitchingTransactionRuleTestCase.java | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/transaction/TransactionConnectionContext.java b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/transaction/TransactionConnectionContext.java index 67f058db78db6..a393a03c96964 100644 --- a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/transaction/TransactionConnectionContext.java +++ b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/transaction/TransactionConnectionContext.java @@ -21,6 +21,7 @@ import lombok.Setter; import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; /** * Transaction connection context. @@ -41,7 +42,7 @@ public final class TransactionConnectionContext implements AutoCloseable { @Setter private volatile String readWriteSplitReplicaRoute; - private volatile TransactionManager transactionManager; + private AtomicReference transactionManager; /** * Begin transaction. @@ -52,7 +53,7 @@ public final class TransactionConnectionContext implements AutoCloseable { public void beginTransaction(final String transactionType, final TransactionManager transactionManager) { this.transactionType = transactionType; inTransaction = true; - this.transactionManager = transactionManager; + this.transactionManager = new AtomicReference<>(transactionManager); } /** @@ -88,7 +89,7 @@ public Optional getReadWriteSplitReplicaRoute() { * @return transaction manager */ public Optional getTransactionManager() { - return Optional.ofNullable(transactionManager); + return null == transactionManager ? Optional.empty() : Optional.ofNullable(transactionManager.get()); } @Override diff --git a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/cases/alterresource/SwitchingTransactionRuleTestCase.java b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/cases/alterresource/SwitchingTransactionRuleTestCase.java index 219cd3b5d0f59..1e9bf84b66df2 100644 --- a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/cases/alterresource/SwitchingTransactionRuleTestCase.java +++ b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/cases/alterresource/SwitchingTransactionRuleTestCase.java @@ -100,18 +100,18 @@ private static class AlterTransactionRuleTask implements Runnable { private final CommonSQLCommand commonSQL; - @SneakyThrows({SQLException.class, InterruptedException.class}) + @SneakyThrows(SQLException.class) @Override public void run() { while (!IS_FINISHED.get()) { alterLocalTransactionRule(); - TimeUnit.SECONDS.sleep(20); + Awaitility.await().atMost(20L, TimeUnit.SECONDS).pollInterval(19L, TimeUnit.SECONDS).until(() -> true); alterXaTransactionRule("Narayana"); if (SWITCH_COUNT.incrementAndGet() >= MAX_SWITCH_COUNT) { IS_FINISHED.set(true); break; } - TimeUnit.SECONDS.sleep(20); + Awaitility.await().atMost(20L, TimeUnit.SECONDS).pollInterval(19L, TimeUnit.SECONDS).until(() -> true); } } @@ -220,7 +220,8 @@ private static void executeOneTransaction(final Connection connection) throws SQ PreparedStatement deleteStatement = connection.prepareStatement("delete from account where id = ?"); deleteStatement.setObject(1, id); deleteStatement.execute(); - Thread.sleep(random.nextInt(900) + 100); + long time = random.nextLong(900) + 100; + Awaitility.await().atMost(time + 10L, TimeUnit.MILLISECONDS).pollInterval(time, TimeUnit.MILLISECONDS).until(() -> true); // CHECKSTYLE:OFF } catch (final Exception ex) { // CHECKSTYLE:ON