From d6faa32dec7f7df675cab0e4ac8a8a5f1b55e3b8 Mon Sep 17 00:00:00 2001 From: Angel Borroy Date: Fri, 27 Dec 2019 13:26:55 +0100 Subject: [PATCH] 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)