This is an automated email from the ASF dual-hosted git repository.
timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 987d1a1a3ab IGNITE-22215 Fix for ThinClientIndexQueryTest#testPageSize
(#11349)
987d1a1a3ab is described below
commit 987d1a1a3ab7e5a634a5e7ee4357d1004ee2bb78
Author: oleg-vlsk <[email protected]>
AuthorDate: Tue May 28 02:33:55 2024 +1000
IGNITE-22215 Fix for ThinClientIndexQueryTest#testPageSize (#11349)
---
.../cache/query/ThinClientIndexQueryTest.java | 58 ++++++++++++++++++++--
1 file changed, 54 insertions(+), 4 deletions(-)
diff --git
a/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
b/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
index 08cc8b76477..0d9ffed37b5 100644
---
a/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
+++
b/modules/indexing/src/test/java/org/apache/ignite/cache/query/ThinClientIndexQueryTest.java
@@ -18,12 +18,14 @@
package org.apache.ignite.cache.query;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
+import java.util.stream.Collectors;
import javax.cache.Cache;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteDataStreamer;
@@ -40,6 +42,8 @@ import org.apache.ignite.configuration.ClientConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
import org.apache.ignite.internal.client.thin.ProtocolBitmaskFeature;
+import org.apache.ignite.internal.processors.cache.query.GridCacheQueryRequest;
+import
org.apache.ignite.internal.processors.cache.query.GridCacheQueryResponse;
import
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.F;
@@ -224,14 +228,46 @@ public class ThinClientIndexQueryTest extends
GridCommonAbstractTest {
for (int pageSize: F.asList(1, 10, 100, 1000, 10_000)) {
idxQry.setPageSize(pageSize);
-
TestRecordingCommunicationSpi.spi(grid(0)).record(GridQueryNextPageRequest.class);
+ for (int i = 0; i < NODES; i++) {
+ TestRecordingCommunicationSpi.spi(grid(i)).record(
+ GridCacheQueryRequest.class,
+ GridCacheQueryResponse.class);
+ }
assertClientQuery(cache, NULLS_CNT, CNT, idxQry);
- List<Object> reqs =
TestRecordingCommunicationSpi.spi(grid(0)).recordedMessages(true);
+ int nodeOneEntries = cache.query(new ScanQuery<Integer,
Person>().setLocal(true)).getAll().size();
+ int nodeTwoEntries = (CNT - NULLS_CNT) - nodeOneEntries;
+
+ int nodeOneExpectedReqs = (nodeOneEntries + pageSize - 1) /
pageSize;
+ int nodeTwoExpectedReqs = (nodeTwoEntries + pageSize - 1) /
pageSize;
+
+ int nodeOneLastPageEntries = nodeOneEntries % pageSize;
+ int nodeTwoLastPageEntries = nodeTwoEntries % pageSize;
+
+ List<Object> msgs = new ArrayList<>();
+
+ for (int i = 0; i < NODES; i++)
+
msgs.addAll(TestRecordingCommunicationSpi.spi(grid(i)).recordedMessages(true));
+
+ List<GridCacheQueryRequest> reqs = getFilteredMessages(msgs,
GridCacheQueryRequest.class);
+ List<GridCacheQueryResponse> resp = getFilteredMessages(msgs,
GridCacheQueryResponse.class);
- for (Object r: reqs)
- assertEquals(pageSize,
((GridQueryNextPageRequest)r).pageSize());
+ int reqsSize = reqs.size();
+
+ assert (reqsSize == nodeOneExpectedReqs || reqsSize ==
nodeTwoExpectedReqs) && reqsSize == resp.size();
+
+ for (int i = 0; i < reqsSize; i++) {
+ int reqPage = reqs.get(i).pageSize();
+ int respData = resp.get(i).data().size();
+
+ assert reqPage == pageSize;
+
+ if (i == reqsSize - 1 && (nodeOneLastPageEntries != 0 ||
nodeTwoLastPageEntries != 0))
+ assert respData == nodeOneLastPageEntries || respData
== nodeTwoLastPageEntries;
+ else
+ assert respData == reqPage;
+ }
}
for (int pageSize: F.asList(-10, -1, 0)) {
@@ -449,6 +485,20 @@ public class ThinClientIndexQueryTest extends
GridCommonAbstractTest {
}
}
+ /**
+ * Filter messages in a collection by a certain class.
+ *
+ * @param msgs List of mixed messages.
+ * @param cls Class of messages that need to be filtered.
+ * @return List of messages filtered by the specified class.
+ */
+ public <T> List<T> getFilteredMessages(List<Object> msgs, Class<T> cls) {
+ return msgs.stream()
+ .filter(msg -> msg.getClass().equals(cls))
+ .map(msg -> (T)msg)
+ .collect(Collectors.toList());
+ }
+
/** */
private static class Person {
/** */