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 <153691984+oleg-v...@users.noreply.github.com> 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 { /** */