From 87ff7ce7a6adcf6aea8e6aa18e991aba7574ac76 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Tue, 26 Nov 2013 15:08:08 +0100 Subject: [PATCH] SONAR-4860 Remove deleted rules from index (removed rules are still kept) --- .../org/sonar/server/rule/RuleRegistry.java | 12 ++++++--- .../org/sonar/server/search/SearchIndex.java | 27 ++++++++++++++++++- .../sonar/server/rule/RuleRegistryTest.java | 20 +++++++++++++- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/rule/RuleRegistry.java b/sonar-server/src/main/java/org/sonar/server/rule/RuleRegistry.java index 65c10b0820e..66e6b3b6db4 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/RuleRegistry.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/RuleRegistry.java @@ -38,10 +38,7 @@ import org.sonar.server.search.SearchIndex; import org.sonar.server.search.SearchQuery; import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; /** * Fill search index with rules @@ -156,6 +153,13 @@ public class RuleRegistry { profiler.start("Index rules"); searchIndex.bulkIndex(INDEX_RULES, TYPE_RULE, ids, docs); profiler.stop(); + + List indexIds = searchIndex.findDocumentIds(SearchQuery.create().index(INDEX_RULES).type(TYPE_RULE)); + indexIds.removeAll(Arrays.asList(ids)); + if (! indexIds.isEmpty()) { + profiler.start("Remove deleted rule documents"); + searchIndex.bulkDelete(INDEX_RULES, TYPE_RULE, indexIds.toArray(new String[0])); + } } private XContentBuilder ruleDocument(RuleDto rule, Collection params) throws IOException { diff --git a/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java b/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java index 9f2774fa7e0..06f512da499 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/SearchIndex.java @@ -189,10 +189,35 @@ public class SearchIndex { return result; } + public void bulkDelete(String index, String type, String[] ids) { + BulkRequestBuilder builder = new BulkRequestBuilder(client); + for (int i=0; i rules = ImmutableList.of(rule1, rule2); + + when(ruleDao.selectNonManual()).thenReturn(rules); + registry.bulkRegisterRules(); + assertThat(registry.findIds(ImmutableMap.of("repositoryKey", "xoo"))) + .hasSize(2) + .containsOnly((int) ruleId1, (int) ruleId2); } } -- 2.39.5