From d6faa32dec7f7df675cab0e4ac8a8a5f1b55e3b8 Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Fri, 27 Dec 2019 13:26:55 +0100 Subject: [PATCH 1/3] Delete nodes only if they exist --- .../alfresco/solr/SolrInformationServer.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 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 e545e35b4..8a784b734 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 @@ -164,6 +164,8 @@ import org.apache.solr.schema.SchemaField; import org.apache.solr.search.DelegatingCollector; import org.apache.solr.search.DocIterator; import org.apache.solr.search.DocList; +import org.apache.solr.search.QueryCommand; +import org.apache.solr.search.QueryResult; import org.apache.solr.search.QueryWrapperFilter; import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.update.AddUpdateCommand; @@ -2190,13 +2192,26 @@ public class SolrInformationServer implements InformationServer } } } - + private void deleteErrorNode(UpdateRequestProcessor processor, SolrQueryRequest request, Node node) throws IOException { + String errorDocId = PREFIX_ERROR + node.getId(); - DeleteUpdateCommand delErrorDocCmd = new DeleteUpdateCommand(request); - delErrorDocCmd.setId(errorDocId); - processor.processDelete(delErrorDocCmd); + + // Try finding the node before performing removal operation + QueryResult result = new QueryResult(); + Query query = new TermQuery(new Term("id", errorDocId)); + QueryCommand queryCommand = new QueryCommand(); + queryCommand.setQuery(query); + core.getSearcher().get().search(result, queryCommand); + + if (result.getDocList().size() > 0) + { + DeleteUpdateCommand delErrorDocCmd = new DeleteUpdateCommand(request); + delErrorDocCmd.setId(errorDocId); + processor.processDelete(delErrorDocCmd); + } + } @@ -2208,12 +2223,24 @@ public class SolrInformationServer implements InformationServer // MNT-13767 fix, remove by node DBID. deleteNode(processor, request, node.getId()); } - + private void deleteNode(UpdateRequestProcessor processor, SolrQueryRequest request, long dbid) throws IOException { - DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request); - delDocCmd.setQuery(FIELD_DBID + ":" + dbid); - processor.processDelete(delDocCmd); + + // Try finding the node before performing removal operation + QueryResult result = new QueryResult(); + Query query = new TermQuery(new Term(FIELD_DBID, String.valueOf(dbid))); + QueryCommand queryCommand = new QueryCommand(); + queryCommand.setQuery(query); + core.getSearcher().get().search(result, queryCommand); + + if (result.getDocList().size() > 0) + { + DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request); + delDocCmd.setQuery(FIELD_DBID + ":" + dbid); + processor.processDelete(delDocCmd); + } + } private boolean isContentIndexedForNode(Map properties) From c1ed26602d4d6a9b105fd16b708785636bd3b698 Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Thu, 9 Jan 2020 12:58:18 +0100 Subject: [PATCH 2/3] Use LongPoint for query related with DBID, as using String was producing empty results. --- .../alfresco/solr/SolrInformationServer.java | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 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 8a784b734..a3a26191e 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 @@ -134,6 +134,7 @@ import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.document.Document; +import org.apache.lucene.document.LongPoint; import org.apache.lucene.index.IndexCommit; import org.apache.lucene.index.IndexableField; import org.apache.lucene.index.LeafReaderContext; @@ -164,6 +165,7 @@ import org.apache.solr.schema.SchemaField; import org.apache.solr.search.DelegatingCollector; import org.apache.solr.search.DocIterator; import org.apache.solr.search.DocList; +import org.apache.solr.search.DocSet; import org.apache.solr.search.QueryCommand; import org.apache.solr.search.QueryResult; import org.apache.solr.search.QueryWrapperFilter; @@ -2199,13 +2201,9 @@ public class SolrInformationServer implements InformationServer String errorDocId = PREFIX_ERROR + node.getId(); // Try finding the node before performing removal operation - QueryResult result = new QueryResult(); - Query query = new TermQuery(new Term("id", errorDocId)); - QueryCommand queryCommand = new QueryCommand(); - queryCommand.setQuery(query); - core.getSearcher().get().search(result, queryCommand); + DocSet docSet = core.getSearcher().get().getDocSet(new TermQuery(new Term("id", errorDocId))); - if (result.getDocList().size() > 0) + if (docSet.size() > 0) { DeleteUpdateCommand delErrorDocCmd = new DeleteUpdateCommand(request); delErrorDocCmd.setId(errorDocId); @@ -2214,7 +2212,6 @@ public class SolrInformationServer implements InformationServer } - private void deleteNode(UpdateRequestProcessor processor, SolrQueryRequest request, Node node) throws IOException { LOGGER.debug("Deleting node {}", node.getId()); @@ -2223,18 +2220,14 @@ public class SolrInformationServer implements InformationServer // MNT-13767 fix, remove by node DBID. deleteNode(processor, request, node.getId()); } - + private void deleteNode(UpdateRequestProcessor processor, SolrQueryRequest request, long dbid) throws IOException { // Try finding the node before performing removal operation - QueryResult result = new QueryResult(); - Query query = new TermQuery(new Term(FIELD_DBID, String.valueOf(dbid))); - QueryCommand queryCommand = new QueryCommand(); - queryCommand.setQuery(query); - core.getSearcher().get().search(result, queryCommand); + DocSet docSet = core.getSearcher().get().getDocSet(LongPoint.newExactQuery(FIELD_DBID, dbid)); - if (result.getDocList().size() > 0) + if (docSet.size() > 0) { DeleteUpdateCommand delDocCmd = new DeleteUpdateCommand(request); delDocCmd.setQuery(FIELD_DBID + ":" + dbid); From 8e3ed43abec6fa79e780b5ac979e24cdf24b350b Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Thu, 9 Jan 2020 16:59:55 +0100 Subject: [PATCH 3/3] Use Searcher from Request instead of from Core. --- .../java/org/alfresco/solr/SolrInformationServer.java | 8 ++++---- 1 file changed, 4 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 a3a26191e..c5b07d69f 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 @@ -2201,7 +2201,7 @@ public class SolrInformationServer implements InformationServer String errorDocId = PREFIX_ERROR + node.getId(); // Try finding the node before performing removal operation - DocSet docSet = core.getSearcher().get().getDocSet(new TermQuery(new Term("id", errorDocId))); + DocSet docSet = request.getSearcher().getDocSet(new TermQuery(new Term(FIELD_SOLR4_ID, errorDocId))); if (docSet.size() > 0) { @@ -2220,12 +2220,12 @@ public class SolrInformationServer implements InformationServer // MNT-13767 fix, remove by node DBID. deleteNode(processor, request, node.getId()); } - + private void deleteNode(UpdateRequestProcessor processor, SolrQueryRequest request, long dbid) throws IOException { // Try finding the node before performing removal operation - DocSet docSet = core.getSearcher().get().getDocSet(LongPoint.newExactQuery(FIELD_DBID, dbid)); + DocSet docSet = request.getSearcher().getDocSet(LongPoint.newExactQuery(FIELD_DBID, dbid)); if (docSet.size() > 0) { @@ -2233,7 +2233,7 @@ public class SolrInformationServer implements InformationServer delDocCmd.setQuery(FIELD_DBID + ":" + dbid); processor.processDelete(delDocCmd); } - + } private boolean isContentIndexedForNode(Map properties)