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 <[email protected]>
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);
}