From 2540eff4d72fd54ba4360483617121d38b20cc81 Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Fri, 7 Feb 2025 16:02:17 +0530 Subject: [PATCH 1/5] [MNT-24778] Limit Increased for facet solr query to max transaction id --- .../alfresco/solr/SolrInformationServer.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java index bc1eec7f2..a92e69d2d 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java @@ -3747,7 +3747,7 @@ public class SolrInformationServer implements InformationServer long iterationStart = batchStartId; NamedList idCounts = this.getFacets(request, field + ":[" + batchStartId + " TO " + batchEndId + "]", - field, 1); // Min count of 1 ensures that the id returned is in the index + field, 1, maxId); // Min count of 1 ensures that the id returned is in the index for (Map.Entry idCount : idCounts) { idInIndex = Long.parseLong(idCount.getKey()); @@ -3847,6 +3847,24 @@ public class SolrInformationServer implements InformationServer NamedList facetFields = (NamedList) facetCounts.get("facet_fields"); return (NamedList) facetFields.get(field); } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private NamedList getFacets(SolrQueryRequest request, String query, String field, int minCount, long maxCount) + { + ModifiableSolrParams params = + new ModifiableSolrParams(request.getParams()) + .set(CommonParams.Q, query) + .set(CommonParams.ROWS, 0) + .set(FacetParams.FACET, true) + .set(FacetParams.FACET_FIELD, field) + .set(FacetParams.FACET_LIMIT, (int)maxCount) + .set(FacetParams.FACET_MINCOUNT, minCount); + + SolrQueryResponse response = cloud.getResponse(nativeRequestHandler, request, params); + NamedList facetCounts = (NamedList) response.getValues().get("facet_counts"); + NamedList facetFields = (NamedList) facetCounts.get("facet_fields"); + return (NamedList) facetFields.get(field); + } public int getDocListSize(String query) { From e99caded8c0eacaadc54bb0878f5987dcaae3af7 Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Tue, 11 Feb 2025 21:29:44 +0530 Subject: [PATCH 2/5] [MNT-24778] Added test case and overflow handling for int conversion --- .../alfresco/solr/SolrInformationServer.java | 5 +-- .../solr/SolrInformationServerTest.java | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java index a92e69d2d..b3e8e6018 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/SolrInformationServer.java @@ -3849,7 +3849,8 @@ public class SolrInformationServer implements InformationServer } @SuppressWarnings({ "unchecked", "rawtypes" }) - private NamedList getFacets(SolrQueryRequest request, String query, String field, int minCount, long maxCount) + NamedList getFacets(SolrQueryRequest request, String query, String field, int minCount, + long maxCount) { ModifiableSolrParams params = new ModifiableSolrParams(request.getParams()) @@ -3857,7 +3858,7 @@ public class SolrInformationServer implements InformationServer .set(CommonParams.ROWS, 0) .set(FacetParams.FACET, true) .set(FacetParams.FACET_FIELD, field) - .set(FacetParams.FACET_LIMIT, (int)maxCount) + .set(FacetParams.FACET_LIMIT, Math.toIntExact(Math.min(maxCount, Integer.MAX_VALUE))) .set(FacetParams.FACET_MINCOUNT, minCount); SolrQueryResponse response = cloud.getResponse(nativeRequestHandler, request, params); diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java index ca6d0999c..faf30db3e 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java @@ -27,7 +27,6 @@ package org.alfresco.solr; import static java.util.Optional.ofNullable; - import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ANY; import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.ASSOC_REF; import static org.alfresco.service.cmr.dictionary.DataTypeDefinition.BOOLEAN; @@ -71,11 +70,11 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -533,5 +532,38 @@ public class SolrInformationServerTest // verifies if the method was called verify(updateRequestProcessor).processAdd(any()); } + + @Test + public void testGetFacets() { + SimpleOrderedMap responseContent = new SimpleOrderedMap<>(); + // Create facet_fields (TXID) as SimpleOrderedMap with Integer as value type + SimpleOrderedMap txidFacet = new SimpleOrderedMap<>(); + txidFacet.add("1", 1); + txidFacet.add("2", 1); + txidFacet.add("3", 1); + // Create and populate the NamedList to simulate facet_counts + NamedList facetCounts = new NamedList<>(); + facetCounts.add("facet_queries", new SimpleOrderedMap<>()); + facetCounts.add("facet_fields", new SimpleOrderedMap<>()); + // Add TXID facet to facet_fields + SimpleOrderedMap facetFields = (SimpleOrderedMap) facetCounts.get("facet_fields"); + facetFields.add("TXID", txidFacet); + // Add the facet_counts to the main facetMap + responseContent.add("facet_counts", facetCounts); + // Set up the request handler to return the fake response. + doAnswer(invocation -> { + SolrQueryResponse solrQueryResponse = invocation.getArgument(1); + solrQueryResponse.setAllValues(responseContent); + return null; + }).when(handler).handleRequest(any(SolrQueryRequest.class), any(SolrQueryResponse.class)); + NamedList actualResult = infoServer.getFacets(request, "TXID:[1 TO 411]", "TXID", 1, 3); + assertEquals(new NamedList<>() { + { + add("1", 1); + add("2", 1); + add("3", 1); + } + }, actualResult); + } } From 5be3d81724a2603cb080d63984d2e81a303388a4 Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Tue, 11 Feb 2025 21:31:43 +0530 Subject: [PATCH 3/5] [MNT-24778] formatting issue fix --- .../java/org/alfresco/solr/SolrInformationServerTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java index faf30db3e..af680fa88 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java @@ -70,7 +70,6 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; @@ -534,8 +533,8 @@ public class SolrInformationServerTest } @Test - public void testGetFacets() { - + public void testGetFacets() + { SimpleOrderedMap responseContent = new SimpleOrderedMap<>(); // Create facet_fields (TXID) as SimpleOrderedMap with Integer as value type SimpleOrderedMap txidFacet = new SimpleOrderedMap<>(); From 2d469878eee6529f0027942162e2fc7d2779e91f Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Wed, 12 Feb 2025 09:59:04 +0530 Subject: [PATCH 4/5] [MNT-24778] Provided Integer Type to NamedList --- .../test/java/org/alfresco/solr/SolrInformationServerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java index af680fa88..32b8b9593 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java @@ -557,7 +557,7 @@ public class SolrInformationServerTest return null; }).when(handler).handleRequest(any(SolrQueryRequest.class), any(SolrQueryResponse.class)); NamedList actualResult = infoServer.getFacets(request, "TXID:[1 TO 411]", "TXID", 1, 3); - assertEquals(new NamedList<>() { + assertEquals(new NamedList() { { add("1", 1); add("2", 1); From 466ba392546ba1f196c3fb466538f76a27748444 Mon Sep 17 00:00:00 2001 From: Vedant Mehra Date: Fri, 14 Feb 2025 10:57:19 +0530 Subject: [PATCH 5/5] review comments incorporation --- .../java/org/alfresco/solr/SolrInformationServerTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java index 32b8b9593..1fe634bad 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/SolrInformationServerTest.java @@ -556,13 +556,14 @@ public class SolrInformationServerTest solrQueryResponse.setAllValues(responseContent); return null; }).when(handler).handleRequest(any(SolrQueryRequest.class), any(SolrQueryResponse.class)); - NamedList actualResult = infoServer.getFacets(request, "TXID:[1 TO 411]", "TXID", 1, 3); - assertEquals(new NamedList() { + NamedList actualResult = infoServer.getFacets(request, "TXID:[1 TO 3]", "TXID", 1, 3); + NamedList expectedResult = new NamedList() { { add("1", 1); add("2", 1); add("3", 1); } - }, actualResult); + }; + assertEquals(expectedResult, actualResult); } }