From 3bed0a1268da09e076576dae3ea6cfad5d61c69b Mon Sep 17 00:00:00 2001 From: Alex Mukha Date: Mon, 3 Feb 2020 13:27:32 +0000 Subject: [PATCH] Revert "SEARCH-2051 Performance of metadata tracking (#788)" This reverts commit 7aadaff450fd730a09208aab7548567959eaaffa. --- .../repo/solr/SOLRTrackingComponentImpl.java | 281 +++++++++++------- 1 file changed, 171 insertions(+), 110 deletions(-) diff --git a/src/main/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java b/src/main/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java index 84701bef66..cda0ec3e9c 100644 --- a/src/main/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java +++ b/src/main/java/org/alfresco/repo/solr/SOLRTrackingComponentImpl.java @@ -889,22 +889,10 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent nodeMetaData.setAspects(aspects); boolean ignoreLargeMetadata = (typeIndexFilter.shouldBeIgnored(getNodeType(nodeId)) || aspectIndexFilter.shouldBeIgnored(getNodeAspects(nodeId))); - - CategoryPaths categoryPaths = new CategoryPaths(new ArrayList>(), new ArrayList()); - if(!ignoreLargeMetadata && (includePaths || includeParentAssociations)) - { - if(props == null) - { - props = getProperties(nodeId); - } - categoryPaths = getCategoryPaths(status.getNodeRef(), aspects, props); - } - - if (!ignoreLargeMetadata && (typeIndexFilter.isIgnorePathsForSpecificTypes() || aspectIndexFilter.isIgnorePathsForSpecificAspects() || includeParentAssociations)) + if (!ignoreLargeMetadata && (typeIndexFilter.isIgnorePathsForSpecificTypes() || aspectIndexFilter.isIgnorePathsForSpecificAspects())) { // check if parent should be ignored final List parentIds = new LinkedList(); - final List parentAssocs = new ArrayList(100); nodeDAO.getParentAssocs(nodeId, null, null, true, new ChildAssocRefQueryCallback() { @Override @@ -923,7 +911,6 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent public boolean handle(Pair childAssocPair, Pair parentNodePair, Pair childNodePair) { parentIds.add(parentNodePair.getFirst()); - parentAssocs.add(tenantService.getBaseName(childAssocPair.getSecond(), true)); return false; } @@ -946,105 +933,28 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent ignoreLargeMetadata = aspectIndexFilter.shouldBeIgnored(getNodeAspects(parentId)); } } - - if (includeParentAssociations) - { - for(ChildAssociationRef ref : categoryPaths.getCategoryParents()) - { - parentAssocs.add(tenantService.getBaseName(ref, true)); - } - - CRC32 crc = new CRC32(); - for(ChildAssociationRef car : parentAssocs) - { - try - { - crc.update(car.toString().getBytes("UTF-8")); - } - catch (UnsupportedEncodingException e) - { - throw new RuntimeException("UTF-8 encoding is not supported"); - } - } - nodeMetaData.setParentAssocs(parentAssocs, crc.getValue()); - } } - nodeMetaData.setTenantDomain(tenantService.getDomain(nodeRef.getStoreRef().getIdentifier())); - - if(includeChildAssociations || includeChildIds) + CategoryPaths categoryPaths = new CategoryPaths(new ArrayList>(), new ArrayList()); + if(!ignoreLargeMetadata && (includePaths || includeParentAssociations)) { - final List childAssocs = new ArrayList(100); - final List childIds = new ArrayList(100); - nodeDAO.getChildAssocs(nodeId, null, null, null, null, null, new ChildAssocRefQueryCallback() + if(props == null) { - @Override - public boolean preLoadNodes() - { - return false; - } - - @Override - public boolean orderResults() - { - return false; - } - - @Override - public boolean handle(Pair childAssocPair, Pair parentNodePair, - Pair childNodePair) - { - QName nodeType = nodeDAO.getNodeType(childNodePair.getFirst()); - if (includeChildAssociations) - { - boolean addCurrentChildAssoc = true; - if (typeIndexFilter.isIgnorePathsForSpecificTypes()) - { - addCurrentChildAssoc = !typeIndexFilter.shouldBeIgnored(nodeType); - } - if (!addCurrentChildAssoc && aspectIndexFilter.isIgnorePathsForSpecificAspects()) - { - addCurrentChildAssoc = !aspectIndexFilter.shouldBeIgnored(getNodeAspects(childNodePair.getFirst())); - } - if (addCurrentChildAssoc) - { - childAssocs.add(tenantService.getBaseName(childAssocPair.getSecond(), true)); - } - } - - if (includeChildIds) - { - boolean addCurrentId = true; - if (typeIndexFilter.isIgnorePathsForSpecificTypes()) - { - addCurrentId = !typeIndexFilter.shouldBeIgnored(nodeType); - } - if (!addCurrentId) - { - addCurrentId = !aspectIndexFilter.shouldBeIgnored(getNodeAspects(childNodePair.getFirst())); - } - if (addCurrentId) - { - childIds.add(childNodePair.getFirst()); - } - } - return true; - } - - @Override - public void done() - { - } - }); - nodeMetaData.setChildAssocs(childAssocs); - nodeMetaData.setChildIds(childIds); + props = getProperties(nodeId); + } + categoryPaths = getCategoryPaths(status.getNodeRef(), aspects, props); } if (includePaths && !ignoreLargeMetadata) { + if (props == null) + { + props = getProperties(nodeId); + } + List directPaths = nodeDAO.getPaths(new Pair(nodeId, status.getNodeRef()), false); Collection> paths = new ArrayList>(directPaths.size() + categoryPaths.getPaths().size()); - + for (Path path : directPaths) { paths.add(new Pair(path.getBaseNamePath(tenantService), null)); @@ -1055,22 +965,22 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent } if(unversionedStatus != null) { - List unversionedPaths = nodeDAO.getPaths(new Pair(unversionedStatus.getDbId(), unversionedStatus.getNodeRef()), false); - for (Path path : unversionedPaths) - { - paths.add(new Pair(path.getBaseNamePath(tenantService), null)); - } + List unversionedPaths = nodeDAO.getPaths(new Pair(unversionedStatus.getDbId(), unversionedStatus.getNodeRef()), false); + for (Path path : unversionedPaths) + { + paths.add(new Pair(path.getBaseNamePath(tenantService), null)); + } } nodeMetaData.setPaths(paths); - + // Calculate name path Collection> namePaths = new ArrayList>(2); nodeMetaData.setNamePaths(namePaths); for (Pair catPair : paths) { Path path = catPair.getFirst(); - + boolean added = false; List namePath = new ArrayList(path.size()); NEXT_ELEMENT: for (Path.Element pathElement : path) @@ -1108,8 +1018,159 @@ public class SOLRTrackingComponentImpl implements SOLRTrackingComponent } } } + } + + nodeMetaData.setTenantDomain(tenantService.getDomain(nodeRef.getStoreRef().getIdentifier())); + + if(includeChildAssociations) + { + final List childAssocs = new ArrayList(100); + nodeDAO.getChildAssocs(nodeId, null, null, null, null, null, new ChildAssocRefQueryCallback() + { + @Override + public boolean preLoadNodes() + { + return false; + } + + @Override + public boolean orderResults() + { + return false; + } + @Override + public boolean handle(Pair childAssocPair, Pair parentNodePair, + Pair childNodePair) + { + boolean addCurrentChildAssoc = true; + if (typeIndexFilter.isIgnorePathsForSpecificTypes()) + { + QName nodeType = nodeDAO.getNodeType(childNodePair.getFirst()); + addCurrentChildAssoc = !typeIndexFilter.shouldBeIgnored(nodeType); + } + if (!addCurrentChildAssoc && aspectIndexFilter.isIgnorePathsForSpecificAspects()) + { + addCurrentChildAssoc = !aspectIndexFilter.shouldBeIgnored(getNodeAspects(childNodePair.getFirst())); + } + if (addCurrentChildAssoc) + { + childAssocs.add(tenantService.getBaseName(childAssocPair.getSecond(), true)); + } + return true; + } + + @Override + public void done() + { + } + }); + nodeMetaData.setChildAssocs(childAssocs); + } + + if(includeChildIds) + { + final List childIds = new ArrayList(100); + nodeDAO.getChildAssocs(nodeId, null, null, null, null, null, new ChildAssocRefQueryCallback() + { + @Override + public boolean preLoadNodes() + { + return false; + } + + @Override + public boolean orderResults() + { + return false; + } + + @Override + public boolean handle(Pair childAssocPair, Pair parentNodePair, + Pair childNodePair) + { + boolean addCurrentId = true; + if (typeIndexFilter.isIgnorePathsForSpecificTypes()) + { + QName nodeType = nodeDAO.getNodeType(childNodePair.getFirst()); + addCurrentId = !typeIndexFilter.shouldBeIgnored(nodeType); + } + if (!addCurrentId) + { + addCurrentId = !aspectIndexFilter.shouldBeIgnored(getNodeAspects(childNodePair.getFirst())); + } + if (addCurrentId) + { + childIds.add(childNodePair.getFirst()); + } + return true; + } + + @Override + public void done() + { + } + }); + nodeMetaData.setChildIds(childIds); + } + + if(includeParentAssociations && !ignoreLargeMetadata) + { + final List parentAssocs = new ArrayList(100); + nodeDAO.getParentAssocs(nodeId, null, null, null, new ChildAssocRefQueryCallback() + { + @Override + public boolean preLoadNodes() + { + return false; + } + + @Override + public boolean orderResults() + { + return false; + } + + @Override + public boolean handle(Pair childAssocPair, + Pair parentNodePair, Pair childNodePair) + { + parentAssocs.add(tenantService.getBaseName(childAssocPair.getSecond(), true)); + return true; + } + + @Override + public void done() + { + } + }); + for(ChildAssociationRef ref : categoryPaths.getCategoryParents()) + { + parentAssocs.add(tenantService.getBaseName(ref, true)); + } + + CRC32 crc = new CRC32(); + for(ChildAssociationRef car : parentAssocs) + { + try + { + crc.update(car.toString().getBytes("UTF-8")); + } + catch (UnsupportedEncodingException e) + { + throw new RuntimeException("UTF-8 encoding is not supported"); + } + } + nodeMetaData.setParentAssocs(parentAssocs, crc.getValue()); + + // TODO non-child associations +// Collection> sourceAssocs = nodeDAO.getSourceNodeAssocs(nodeId); +// Collection> targetAssocs = nodeDAO.getTargetNodeAssocs(nodeId); +// +// nodeMetaData.setAssocs(); + } + if(includeOwner) { // cached in OwnableService