From 40a40750f7d4530cfc2a58ac591c907ece715bd4 Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Mon, 7 Sep 2020 15:51:06 +0200 Subject: [PATCH 1/2] SEARCH-2408: Hard limit to 512 ACL Change Set lists to get information from repository. Added a WARN message to log solrcore.properties value has been ignored. --- .../java/org/alfresco/solr/tracker/AclTracker.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java index 0975904cf..41244a26c 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java @@ -81,6 +81,9 @@ public class AclTracker extends ActivatableTracker private static final int MAX_NUMBER_OF_ACL_CHANGE_SETS = 2000; private static final long MAX_TIME_STEP = TIME_STEP_32_DAYS_IN_MS; + + // Repository Remote API doesn't accept more than 512 aclChangeSetIds by invocation + private static final int MAX_ACL_CHANGE_SET_BATCH_SIZE = 512; private int aclTrackerParallelism; @@ -128,6 +131,12 @@ public class AclTracker extends ActivatableTracker super(p, client, coreName, informationServer, Tracker.Type.ACL); changeSetAclsBatchSize = Integer.parseInt(p.getProperty("alfresco.changeSetAclsBatchSize", String.valueOf(DEFAULT_CHANGE_SET_ACLS_BATCH_SIZE))); + if (changeSetAclsBatchSize > MAX_ACL_CHANGE_SET_BATCH_SIZE) + { + LOGGER.warn("Max value for 'alfresco.changeSetAclsBatchSize' is 512. " + + "This value is being taken instead of the one specified in 'solrcore.properties': " + changeSetAclsBatchSize); + changeSetAclsBatchSize = MAX_ACL_CHANGE_SET_BATCH_SIZE; + } aclBatchSize = Integer.parseInt(p.getProperty("alfresco.aclBatchSize", String.valueOf(DEFAULT_ACL_BATCH_SIZE))); docRouter = DocRouterFactory.getRouter(p, shardMethod); @@ -763,6 +772,7 @@ public class AclTracker extends ActivatableTracker long endElapsed = System.nanoTime(); trackerStats.addElapsedAclTime(aclCount, endElapsed-startElapsed); startElapsed = endElapsed; + totalAclCount += aclCount; } } From a5d1460d0a67fb301003f70c10a7cb7ea221c676 Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Mon, 7 Sep 2020 18:11:16 +0200 Subject: [PATCH 2/2] SEARCH-2408: Limit by the count of Change Set instead by the number of ACLs contained in the Change Set batch. --- .../src/main/java/org/alfresco/solr/tracker/AclTracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java index 41244a26c..bc08e05b8 100644 --- a/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java +++ b/search-services/alfresco-search/src/main/java/org/alfresco/solr/tracker/AclTracker.java @@ -758,7 +758,7 @@ public class AclTracker extends ActivatableTracker Collection> changeSetBatches = aclChangeSets.getAclChangeSets().stream() .peek(changeSetsFound::add) .filter(this::isAclChangeSetAlreadyIndexed) - .collect(Collectors.groupingBy(it -> counter.getAndAdd(it.getAclCount()) / changeSetAclsBatchSize)) + .collect(Collectors.groupingBy(it -> counter.getAndAdd(1) / changeSetAclsBatchSize)) .values();