This is an automated email from the ASF dual-hosted git repository.
korlov 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 79268a026c IGNITE-23480 Sql. Add debug output to investigate flakiness
of basicMultiStatementQuery test (#4586)
79268a026c is described below
commit 79268a026c6d3b4eaf00e55c8facff0906656b78
Author: korlov42 <[email protected]>
AuthorDate: Mon Oct 21 13:45:14 2024 +0300
IGNITE-23480 Sql. Add debug output to investigate flakiness of
basicMultiStatementQuery test (#4586)
---
.../sql/engine/BaseSqlMultiStatementTest.java | 33 +++++++++++++++-------
.../sql/engine/exec/rel/AsyncRootNode.java | 2 +-
2 files changed, 24 insertions(+), 11 deletions(-)
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/BaseSqlMultiStatementTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/BaseSqlMultiStatementTest.java
index 320c407849..23ed7fc3d8 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/BaseSqlMultiStatementTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/BaseSqlMultiStatementTest.java
@@ -23,17 +23,19 @@ import static
org.apache.ignite.internal.testframework.IgniteTestUtils.waitForCo
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.ignite.internal.sql.BaseSqlIntegrationTest;
import org.apache.ignite.internal.sql.engine.property.SqlProperties;
import org.apache.ignite.internal.sql.engine.property.SqlPropertiesHelper;
+import org.apache.ignite.internal.sql.engine.util.CursorUtils;
import org.apache.ignite.internal.tx.InternalTransaction;
import org.apache.ignite.internal.util.AsyncCursor.BatchedResult;
import org.jetbrains.annotations.Nullable;
@@ -136,23 +138,34 @@ public abstract class BaseSqlMultiStatementTest extends
BaseSqlIntegrationTest {
BatchedResult<InternalSqlRow> res = await(cursor.requestNextAsync(1));
assertNotNull(res);
+ Function<InternalSqlRow, List<Object>> rowConverter = internalRow -> {
+ List<Object> row = new ArrayList<>(internalRow.fieldCount());
+ for (int i = 0; i < internalRow.fieldCount(); i++) {
+ row.add(internalRow.get(i));
+ }
+
+ return row;
+ };
+
if (expected.length == 0) {
assertThat(res.items(), empty());
} else {
List<InternalSqlRow> items = res.items();
- List<Object> rows = new ArrayList<>(items.size());
- for (InternalSqlRow item : items) {
- List<Object> row = new ArrayList<>(item.fieldCount());
- for (int i = 0; i < item.fieldCount(); i++) {
- row.add(item.get(i));
- }
- rows.add(row);
- }
+ List<Object> rows = items.stream()
+ .map(rowConverter)
+ .collect(Collectors.toList());
assertEquals(List.of(List.of(expected)), rows);
}
- assertFalse(res.hasMore());
+ if (res.hasMore()) {
+ List<Object> remainingRows = CursorUtils.getAllFromCursor(cursor)
+ .stream()
+ .map(rowConverter)
+ .collect(Collectors.toList());
+
+ fail("Cursor must not have more data, but was: " + remainingRows);
+ }
cursor.closeAsync();
}
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
index 20b42ce50c..26e5fb7bfd 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/AsyncRootNode.java
@@ -242,7 +242,7 @@ public class AsyncRootNode<InRowT, OutRowT> implements
Downstream<InRowT>, Async
if (waiting == 0) {
source.request(waiting = IN_BUFFER_SIZE);
- } else if (waiting == -1 && buff.isEmpty()) {
+ } else if (!hasMoreRows) {
closeAsync();
}
}