This is an automated email from the ASF dual-hosted git repository. sk0x50 pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push: new d008791f2ad IGNITE-25930 Fix ItSqlAsynchronousApiTest.cancelScript (#6265) d008791f2ad is described below commit d008791f2ad7e03e9cc892b2248af167ff6a0efd Author: Slava Koptilin <slava.kopti...@gmail.com> AuthorDate: Thu Jul 17 11:59:42 2025 +0300 IGNITE-25930 Fix ItSqlAsynchronousApiTest.cancelScript (#6265) --- .../ignite/internal/sql/api/ItSqlApiBaseTest.java | 24 ++++++++++++---------- .../internal/sql/api/ItSqlAsynchronousApiTest.java | 5 ++--- .../internal/sql/api/ItSqlSynchronousApiTest.java | 5 ++--- .../internal/sql/BaseSqlIntegrationTest.java | 16 +++++++++++++-- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java index f92bc0422f4..253a1301621 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java @@ -240,7 +240,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { } // No new transactions through ddl. - assertEquals(0, txManager.pending()); + waitUntilActiveTransactionsCount(is(0)); } /** Check correctness of implicit and explicit transactions. */ @@ -301,7 +301,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { assertEquals(ROW_COUNT + 1 + 1 + 1 + 1 + 1 + 1, txManagerInternal.finished() - txPrevCnt); - assertEquals(0, txManagerInternal.pending()); + waitUntilActiveTransactionsCount(is(0)); } /** Check correctness of explicit transaction rollback. */ @@ -552,7 +552,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { assertEquals(ROW_COUNT, txManager.finished() - txPrevCnt); // No new transactions through ddl. - assertEquals(0, txManager.pending()); + waitUntilActiveTransactionsCount(is(0)); checkDml(ROW_COUNT, sql, "UPDATE TEST SET VAL0 = VAL0 + ?", 1); @@ -772,7 +772,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { execute(1, sql, "SELECT * FROM TEST"); - assertEquals(0, txManager().pending(), "Expected no pending transactions"); + waitUntilActiveTransactionsCount(is(0)); } /** @@ -810,7 +810,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { assertEquals(1, execute(sql, "SELECT ID FROM TEST WHERE ID = -1").result().size()); } - assertEquals(0, txManager().pending()); + waitUntilActiveTransactionsCount(is(0)); } @Test @@ -829,9 +829,11 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { .build(); ResultSet<?> rs = executeForRead(sql, statement); - assertEquals(1, txManager().pending()); + waitUntilActiveTransactionsCount(is(1)); + rs.close(); - assertEquals(0, txManager().pending(), "Expected no pending transactions"); + + waitUntilActiveTransactionsCount(is(0)); } @Test @@ -973,13 +975,13 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { expectQueryCancelled(() -> await(scriptFut)); waitUntilRunningQueriesCount(is(0)); - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); // Checks the exception that is thrown if a query is canceled before a cursor is obtained. expectQueryCancelled(() -> executeScript(sql, token, "SELECT 1; SELECT 2;")); waitUntilRunningQueriesCount(is(0)); - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); } @Test @@ -1009,7 +1011,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { // Query was actually cancelled. waitUntilRunningQueriesCount(is(0)); expectQueryCancelled(() -> await(f)); - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); } @ParameterizedTest @@ -1056,7 +1058,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { // Query was actually cancelled. waitUntilRunningQueriesCount(is(0)); expectQueryCancelled(() -> await(fut)); - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); } } diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java index e501ae35e6d..66906a1464d 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlAsynchronousApiTest.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.sql.api; import static org.apache.ignite.internal.testframework.IgniteTestUtils.await; -import static org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; @@ -202,7 +201,7 @@ public class ItSqlAsynchronousApiTest extends ItSqlApiBaseTest { await(cancelHandle.cancelAsync()); // Expect all transactions to be rolled back. - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); } private void executeBatchAndCancel(Function<CancellationToken, CompletableFuture<long[]>> execute) throws InterruptedException { @@ -223,7 +222,7 @@ public class ItSqlAsynchronousApiTest extends ItSqlApiBaseTest { await(cancelHandle.cancelAsync()); // Expect all transactions to be rolled back. - waitForCondition(() -> txManager().pending() == 0, 5000); + waitUntilActiveTransactionsCount(is(0)); } private static class DrainResultSet implements Executable { diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlSynchronousApiTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlSynchronousApiTest.java index 33c9950a489..696ba381f73 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlSynchronousApiTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlSynchronousApiTest.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.sql.api; import static org.apache.ignite.internal.testframework.IgniteTestUtils.await; -import static org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCondition; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; @@ -163,7 +162,7 @@ public class ItSqlSynchronousApiTest extends ItSqlApiBaseTest { await(cancelHandle.cancelAsync()); // Expect all transactions to be rolled back. - assertThat(txManager().pending(), is(0)); + waitUntilActiveTransactionsCount(is(0)); } private void executeBatchAndCancel(Function<CancellationToken, long[]> execute) throws InterruptedException { @@ -186,7 +185,7 @@ public class ItSqlSynchronousApiTest extends ItSqlApiBaseTest { await(cancelHandle.cancelAsync()); // Expect all transactions to be rolled back. - waitForCondition(() -> txManager().pending() == 0, 5000); + waitUntilActiveTransactionsCount(is(0)); } @Override diff --git a/modules/sql-engine/src/testFixtures/java/org/apache/ignite/internal/sql/BaseSqlIntegrationTest.java b/modules/sql-engine/src/testFixtures/java/org/apache/ignite/internal/sql/BaseSqlIntegrationTest.java index 4febb9446cd..ca39a5353aa 100644 --- a/modules/sql-engine/src/testFixtures/java/org/apache/ignite/internal/sql/BaseSqlIntegrationTest.java +++ b/modules/sql-engine/src/testFixtures/java/org/apache/ignite/internal/sql/BaseSqlIntegrationTest.java @@ -17,8 +17,10 @@ package org.apache.ignite.internal.sql; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl; import static org.apache.ignite.internal.testframework.IgniteTestUtils.await; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -27,7 +29,6 @@ import static org.junit.jupiter.api.Assertions.assertSame; import java.util.List; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.apache.ignite.Ignite; import org.apache.ignite.internal.ClusterPerClassIntegrationTest; @@ -49,6 +50,7 @@ import org.apache.ignite.sql.ColumnMetadata; import org.apache.ignite.sql.IgniteSql; import org.apache.ignite.table.Table; import org.apache.ignite.tx.IgniteTransactions; +import org.awaitility.Awaitility; import org.hamcrest.Matcher; import org.jetbrains.annotations.Nullable; import org.junit.jupiter.api.extension.ExtendWith; @@ -283,13 +285,23 @@ public abstract class BaseSqlIntegrationTest extends ClusterPerClassIntegrationT SqlTestUtils.waitUntilRunningQueriesCount(queryProcessor(), matcher); } + /** + * Waits until the number of active (pending) transactions matches the specified matcher. + * + * @param matcher Matcher to check the number of active transactions. + * @throws AssertionError If after waiting the number of active transactions still does not match the specified matcher. + */ + protected void waitUntilActiveTransactionsCount(Matcher<Integer> matcher) { + Awaitility.await().timeout(5, SECONDS).untilAsserted(() -> assertThat(txManager().pending(), matcher)); + } + protected static void gatherStatistics() { SqlStatisticManagerImpl statisticManager = (SqlStatisticManagerImpl) ((SqlQueryProcessor) unwrapIgniteImpl(CLUSTER.aliveNode()) .queryEngine()).sqlStatisticManager(); statisticManager.forceUpdateAll(); try { - statisticManager.lastUpdateStatisticFuture().get(5_000, TimeUnit.SECONDS); + statisticManager.lastUpdateStatisticFuture().get(5_000, SECONDS); } catch (InterruptedException | ExecutionException | TimeoutException e) { throw new RuntimeException(e); }