diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2017-07-06 14:21:05 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2017-07-11 08:58:34 +0200 |
commit | 75e926deef21688a74904b1feae2a687309a6ab3 (patch) | |
tree | 75f551cccf3900744b6a84dfd967b21cfc654822 /server | |
parent | 6f107dcbe90b0fea564e1ecaa96643bfc539329a (diff) | |
download | sonarqube-75e926deef21688a74904b1feae2a687309a6ab3.tar.gz sonarqube-75e926deef21688a74904b1feae2a687309a6ab3.zip |
SONAR-9480 fix support of multiple docs to recover with same id
Diffstat (limited to 'server')
13 files changed, 103 insertions, 100 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/es/EsQueueDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/es/EsQueueDto.java index 26f310d34ca..63751bf5de5 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/es/EsQueueDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/es/EsQueueDto.java @@ -93,25 +93,6 @@ public final class EsQueueDto { return sb.toString(); } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof EsQueueDto)) { - return false; - } - - EsQueueDto that = (EsQueueDto) o; - - return uuid.equals(that.uuid); - } - - @Override - public int hashCode() { - return uuid.hashCode(); - } - public static EsQueueDto create(Type docType, String docUuid) { return new EsQueueDto().setDocType(docType).setDocId(docUuid); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/RecoveryIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/es/RecoveryIndexer.java index 985143d03b1..709f652e88c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/es/RecoveryIndexer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/es/RecoveryIndexer.java @@ -29,7 +29,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.commons.lang.math.RandomUtils; import org.sonar.api.Startable; -import org.sonar.api.config.Settings; +import org.sonar.api.config.Configuration; import org.sonar.api.utils.System2; import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; @@ -63,7 +63,7 @@ public class RecoveryIndexer implements Startable { .setNameFormat("RecoveryIndexer-%d") .build()); private final System2 system2; - private final Settings settings; + private final Configuration config; private final DbClient dbClient; private final UserIndexer userIndexer; private final RuleIndexer ruleIndexer; @@ -71,10 +71,10 @@ public class RecoveryIndexer implements Startable { private final long minAgeInMs; private final long loopLimit; - public RecoveryIndexer(System2 system2, Settings settings, DbClient dbClient, + public RecoveryIndexer(System2 system2, Configuration config, DbClient dbClient, UserIndexer userIndexer, RuleIndexer ruleIndexer, ActiveRuleIndexer activeRuleIndexer) { this.system2 = system2; - this.settings = settings; + this.config = config; this.dbClient = dbClient; this.userIndexer = userIndexer; this.ruleIndexer = ruleIndexer; @@ -161,10 +161,7 @@ public class RecoveryIndexer implements Startable { } private long getSetting(String key, long defaultValue) { - long val = settings.getLong(key); - if (val <= 0) { - val = defaultValue; - } + long val = config.getLong(key).orElse(defaultValue); LOGGER.debug(LOG_PREFIX + "{}={}", key, val); return val; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/ResiliencyIndexingListener.java b/server/sonar-server/src/main/java/org/sonar/server/es/ResiliencyIndexingListener.java index b9d1d27ff14..cc29e14a9f1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/es/ResiliencyIndexingListener.java +++ b/server/sonar-server/src/main/java/org/sonar/server/es/ResiliencyIndexingListener.java @@ -19,8 +19,8 @@ */ package org.sonar.server.es; +import com.google.common.collect.Multimap; import java.util.Collection; -import java.util.Map; import java.util.Objects; import java.util.function.Function; import org.sonar.core.util.stream.MoreCollectors; @@ -28,8 +28,6 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.es.EsQueueDto; -import static java.util.stream.Collectors.toMap; - /** * Clean-up the db table es_queue when documents * are successfully indexed so that the recovery @@ -50,11 +48,12 @@ public class ResiliencyIndexingListener implements IndexingListener { @Override public void onSuccess(Collection<String> docIds) { if (!docIds.isEmpty()) { - Map<String, EsQueueDto> itemsById = items.stream().collect(toMap(EsQueueDto::getDocId, Function.identity())); + Multimap<String, EsQueueDto> itemsById = items.stream().collect(MoreCollectors.index(EsQueueDto::getDocId, Function.identity())); Collection<EsQueueDto> itemsToDelete = docIds .stream() .map(itemsById::get) + .flatMap(Collection::stream) .filter(Objects::nonNull) .collect(MoreCollectors.toArrayList(docIds.size())); dbClient.esQueueDao().delete(dbSession, itemsToDelete); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java index 70e11dee084..cf2bd389b2c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleUpdater.java @@ -81,8 +81,7 @@ public class RuleUpdater { apply(update, rule, userSession); update(dbSession, rule); updateParameters(dbSession, organization, update, rule); - ruleIndexer.commitAndIndex(dbSession, rule.getKey()); - ruleIndexer.commitAndIndex(dbSession, organization, rule.getKey()); + ruleIndexer.commitAndIndex(dbSession, rule.getKey(), organization); return true; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java index 226e3cda99f..e0317b989c8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleExtensionDoc.java @@ -26,7 +26,6 @@ import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.sonar.api.rule.RuleKey; import org.sonar.db.rule.RuleExtensionForIndexingDto; import org.sonar.db.rule.RuleForIndexingDto; -import org.sonar.db.rule.RuleMetadataDto; import org.sonar.server.es.BaseDoc; public class RuleExtensionDoc extends BaseDoc { @@ -41,7 +40,7 @@ public class RuleExtensionDoc extends BaseDoc { @Override public String getId() { - return getRuleKey() + "|" + getScope().getScope(); + return idOf(getRuleKey(), getScope()); } @Override @@ -81,13 +80,6 @@ public class RuleExtensionDoc extends BaseDoc { return this; } - public static RuleExtensionDoc of(RuleKey key, RuleExtensionScope scope, RuleMetadataDto ruleExtension) { - return new RuleExtensionDoc() - .setRuleKey(key) - .setScope(scope) - .setTags(ruleExtension.getTags()); - } - public static RuleExtensionDoc of(RuleForIndexingDto rule) { return new RuleExtensionDoc() .setRuleKey(rule.getRuleKey()) @@ -102,6 +94,10 @@ public class RuleExtensionDoc extends BaseDoc { .setTags(rule.getTagsAsSet()); } + public static String idOf(RuleKey ruleKey, RuleExtensionScope scope) { + return ruleKey + "|" + scope.getScope(); + } + @Override public String toString() { return ReflectionToStringBuilder.toString(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndexer.java index 7c5db551866..eaf63b2f452 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndexer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndexer.java @@ -45,9 +45,10 @@ import org.sonar.server.es.ResilientIndexer; import org.sonar.server.es.StartupIndexer; import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static java.util.Objects.requireNonNull; -import static org.sonar.core.util.stream.MoreCollectors.toHashSet; +import static org.sonar.core.util.stream.MoreCollectors.toArrayList; import static org.sonar.server.rule.index.RuleIndexDefinition.INDEX_TYPE_RULE; import static org.sonar.server.rule.index.RuleIndexDefinition.INDEX_TYPE_RULE_EXTENSION; @@ -95,49 +96,41 @@ public class RuleIndexer implements StartupIndexer, ResilientIndexer { commitAndIndex(dbSession, singletonList(ruleKey)); } - public void commitAndIndex(DbSession dbSession, Collection<RuleKey> ruleDtos) { - List<EsQueueDto> items = ruleDtos.stream() - .map(key -> EsQueueDto.create(EsQueueDto.Type.RULE, key.toString())) + public void commitAndIndex(DbSession dbSession, Collection<RuleKey> ruleKeys) { + List<EsQueueDto> items = ruleKeys.stream() + .map(RuleIndexer::createQueueDtoForRule) .collect(MoreCollectors.toArrayList()); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); - postCommit(dbSession, ruleDtos, items); + postCommit(dbSession, items); } - public void commitAndIndex(DbSession dbSession, OrganizationDto organizationDto, RuleKey ruleKey) { - List<EsQueueDto> items = singletonList(EsQueueDto.create(EsQueueDto.Type.RULE_EXTENSION, ruleKey + "|" + organizationDto.getUuid())); - + /** + * Commit a change on a rule and its extension on the given organization + */ + public void commitAndIndex(DbSession dbSession, RuleKey ruleKey, OrganizationDto organization) { + List<EsQueueDto> items = asList(createQueueDtoForRule(ruleKey), createQueueDtoForRuleExtension(ruleKey, organization)); dbClient.esQueueDao().insert(dbSession, items); dbSession.commit(); - postCommit(dbSession, ruleKey, organizationDto, items); + postCommit(dbSession, items); } /** - * Entry point for Byteman tests. See directory tests/resilience. - * The parameter "ruleKeys" is used only by the Byteman script. + * This method is used by the Byteman script of integration tests. */ - private void postCommit(DbSession dbSession, Collection<RuleKey> ruleKeys, Collection<EsQueueDto> items) { - index(dbSession, items); - } - - private void postCommit(DbSession dbSession, RuleKey ruleKeys, OrganizationDto organizationDto, Collection<EsQueueDto> items) { + private void postCommit(DbSession dbSession, List<EsQueueDto> items) { index(dbSession, items); } @Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { - if (items.isEmpty()) { - return new IndexingResult(); - } - IndexingResult result = new IndexingResult(); - - ListMultimap<EsQueueDto.Type, EsQueueDto> itemsByType = groupItemsByType(items); - - result.add(doIndexRules(dbSession, itemsByType.get(EsQueueDto.Type.RULE))); - result.add(doIndexRuleExtensions(dbSession, itemsByType.get(EsQueueDto.Type.RULE_EXTENSION))); - + if (!items.isEmpty()) { + ListMultimap<EsQueueDto.Type, EsQueueDto> itemsByType = groupItemsByType(items); + result.add(doIndexRules(dbSession, itemsByType.get(EsQueueDto.Type.RULE))); + result.add(doIndexRuleExtensions(dbSession, itemsByType.get(EsQueueDto.Type.RULE_EXTENSION))); + } return result; } @@ -145,28 +138,28 @@ public class RuleIndexer implements StartupIndexer, ResilientIndexer { BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, new ResiliencyIndexingListener(dbClient, dbSession, items)); bulkIndexer.start(); - Set<RuleKey> rules = items + List<RuleKey> ruleKeys = items .stream() .filter(i -> { requireNonNull(i.getDocId(), () -> "BUG - " + i + " has not been persisted before indexing"); return i.getDocType() == EsQueueDto.Type.RULE; }) .map(i -> RuleKey.parse(i.getDocId())) - .collect(toHashSet(items.size())); + .collect(toArrayList(items.size())); - dbClient.ruleDao().scrollIndexingRulesByKeys(dbSession, rules, + dbClient.ruleDao().scrollIndexingRulesByKeys(dbSession, ruleKeys, // only index requests, no deletion requests. // Deactivated users are not deleted but updated. r -> { - rules.remove(r.getRuleKey()); bulkIndexer.add(newRuleDocIndexRequest(r)); bulkIndexer.add(newRuleExtensionDocIndexRequest(r)); + ruleKeys.remove(r.getRuleKey()); }); // the remaining items reference rows that don't exist in db. They must // be deleted from index. - rules.forEach(r -> bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE, r.toString())); - rules.forEach(r -> bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE_EXTENSION, r.toString())); + ruleKeys.forEach(r -> bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE, r.toString(), r.toString())); + ruleKeys.forEach(r -> bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE_EXTENSION, RuleExtensionDoc.idOf(r, RuleExtensionScope.system()), r.toString())); return bulkIndexer.stop(); } @@ -175,26 +168,30 @@ public class RuleIndexer implements StartupIndexer, ResilientIndexer { BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, new ResiliencyIndexingListener(dbClient, dbSession, items)); bulkIndexer.start(); - Set<RuleExtensionId> docIds = items + List<RuleExtensionId> docIds = items .stream() .filter(i -> { requireNonNull(i.getDocId(), () -> "BUG - " + i + " has not been persisted before indexing"); return i.getDocType() == EsQueueDto.Type.RULE_EXTENSION; }) .map(RuleIndexer::explodeRuleExtensionDocId) - .collect(toHashSet(items.size())); + .collect(toArrayList(items.size())); dbClient.ruleDao().scrollIndexingRuleExtensionsByIds(dbSession, docIds, // only index requests, no deletion requests. // Deactivated users are not deleted but updated. r -> { - docIds.remove(new RuleExtensionId(r.getOrganizationUuid(), r.getPluginName(), r.getPluginRuleKey())); + RuleExtensionId docId = new RuleExtensionId(r.getOrganizationUuid(), r.getPluginName(), r.getPluginRuleKey()); + docIds.remove(docId); bulkIndexer.add(newRuleExtensionDocIndexRequest(r)); }); // the remaining items reference rows that don't exist in db. They must // be deleted from index. - docIds.forEach(r -> bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE_EXTENSION, r.getId())); + docIds.forEach(docId -> { + RuleKey ruleKey = RuleKey.of(docId.getRepositoryName(), docId.getRuleKey()); + bulkIndexer.addDeletion(RuleIndexDefinition.INDEX_TYPE_RULE_EXTENSION, docId.getId(), ruleKey.toString()); + }); return bulkIndexer.stop(); } @@ -239,4 +236,14 @@ public class RuleIndexer implements StartupIndexer, ResilientIndexer { checkArgument(esQueueDto.getDocType() == EsQueueDto.Type.RULE_EXTENSION); return new RuleExtensionId(esQueueDto.getDocId()); } + + private static EsQueueDto createQueueDtoForRule(RuleKey ruleKey) { + return EsQueueDto.create(EsQueueDto.Type.RULE, ruleKey.toString(), null, ruleKey.toString()); + } + + private static EsQueueDto createQueueDtoForRuleExtension(RuleKey ruleKey, OrganizationDto organization) { + String docId = RuleExtensionDoc.idOf(ruleKey, RuleExtensionScope.organization(organization)); + return EsQueueDto.create(EsQueueDto.Type.RULE_EXTENSION, docId, null, ruleKey.toString()); + } + } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndexer.java b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndexer.java index 239a9bbcb60..eaede45f8aa 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndexer.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/index/UserIndexer.java @@ -38,14 +38,14 @@ import org.sonar.server.es.BulkIndexer.Size; import org.sonar.server.es.EsClient; import org.sonar.server.es.IndexType; import org.sonar.server.es.IndexingListener; +import org.sonar.server.es.IndexingResult; import org.sonar.server.es.ResiliencyIndexingListener; import org.sonar.server.es.ResilientIndexer; -import org.sonar.server.es.IndexingResult; import org.sonar.server.es.StartupIndexer; import static java.util.Collections.singletonList; import static java.util.Objects.requireNonNull; -import static org.sonar.core.util.stream.MoreCollectors.toHashSet; +import static org.sonar.core.util.stream.MoreCollectors.toArrayList; import static org.sonar.server.user.index.UserIndexDefinition.INDEX_TYPE_USER; public class UserIndexer implements StartupIndexer, ResilientIndexer { @@ -113,14 +113,14 @@ public class UserIndexer implements StartupIndexer, ResilientIndexer { if (items.isEmpty()) { return new IndexingResult(); } - Set<String> logins = items + List<String> logins = items .stream() .filter(i -> { requireNonNull(i.getDocId(), () -> "BUG - " + i + " has not been persisted before indexing"); return i.getDocType() == EsQueueDto.Type.USER; }) .map(EsQueueDto::getDocId) - .collect(toHashSet(items.size())); + .collect(toArrayList(items.size())); ListMultimap<String, String> organizationUuidsByLogin = ArrayListMultimap.create(); dbClient.organizationMemberDao().selectForUserIndexing(dbSession, logins, organizationUuidsByLogin::put); diff --git a/server/sonar-server/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java index 0c8fa0f5f10..b3f42589d13 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/es/RecoveryIndexerTest.java @@ -33,7 +33,6 @@ import org.junit.Test; import org.junit.rules.DisableOnDebug; import org.junit.rules.TestRule; import org.junit.rules.Timeout; -import org.sonar.api.config.Settings; import org.sonar.api.config.internal.MapSettings; import org.sonar.api.utils.internal.TestSystem2; import org.sonar.api.utils.log.LogTester; @@ -49,6 +48,7 @@ import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.user.index.UserIndexDefinition; import org.sonar.server.user.index.UserIndexer; +import static java.util.Arrays.asList; import static java.util.stream.IntStream.rangeClosed; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doAnswer; @@ -72,7 +72,7 @@ public class RecoveryIndexerTest { @Rule public final LogTester logTester = new LogTester().setLevel(TRACE); @Rule - public TestRule safeguard = new DisableOnDebug(new Timeout(60, TimeUnit.SECONDS)); + public TestRule safeguard = new DisableOnDebug(Timeout.builder().withTimeout(60, TimeUnit.SECONDS).withLookingForStuckThread(true).build()); private UserIndexer mockedUserIndexer = mock(UserIndexer.class); private RuleIndexer mockedRuleIndexer = mock(RuleIndexer.class); @@ -101,10 +101,10 @@ public class RecoveryIndexerTest { @Test public void start_triggers_recovery_run_at_fixed_rate() throws Exception { - Settings settings = new MapSettings() + MapSettings settings = new MapSettings() .setProperty("sonar.search.recovery.initialDelayInMs", "0") .setProperty("sonar.search.recovery.delayInMs", "1"); - underTest = spy(new RecoveryIndexer(system2, settings, db.getDbClient(), mockedUserIndexer, mockedRuleIndexer, mockedActiveRuleIndexer)); + underTest = spy(new RecoveryIndexer(system2, settings.asConfig(), db.getDbClient(), mockedUserIndexer, mockedRuleIndexer, mockedActiveRuleIndexer)); AtomicInteger calls = new AtomicInteger(0); doAnswer(invocation -> { calls.incrementAndGet(); @@ -242,7 +242,7 @@ public class RecoveryIndexerTest { // 10 docs to process, by groups of 3. // The first group successfully recovers only 1 docs --> above 30% of failures --> stop run PartiallyFailingUserIndexer failingAboveRatioUserIndexer = new PartiallyFailingUserIndexer(1); - Settings settings = new MapSettings() + MapSettings settings = new MapSettings() .setProperty("sonar.search.recovery.loopLimit", "3"); underTest = newRecoveryIndexer(failingAboveRatioUserIndexer, mockedRuleIndexer, settings); underTest.recover(); @@ -262,7 +262,7 @@ public class RecoveryIndexerTest { // 10 docs to process, by groups of 5. // Each group successfully recovers 4 docs --> below 30% of failures --> continue run PartiallyFailingUserIndexer failingAboveRatioUserIndexer = new PartiallyFailingUserIndexer(4, 4, 2); - Settings settings = new MapSettings() + MapSettings settings = new MapSettings() .setProperty("sonar.search.recovery.loopLimit", "5"); underTest = newRecoveryIndexer(failingAboveRatioUserIndexer, mockedRuleIndexer, settings); underTest.recover(); @@ -287,6 +287,29 @@ public class RecoveryIndexerTest { assertThatQueueHasSize(1); } + @Test + public void recover_multiple_times_the_same_document() { + UserDto user = db.users().insertUser(); + EsQueueDto item1 = EsQueueDto.create(EsQueueDto.Type.USER, user.getLogin()); + EsQueueDto item2 = EsQueueDto.create(EsQueueDto.Type.USER, user.getLogin()); + EsQueueDto item3 = EsQueueDto.create(EsQueueDto.Type.USER, user.getLogin()); + db.getDbClient().esQueueDao().insert(db.getSession(), asList(item1, item2, item3)); + db.commit(); + + ProxyUserIndexer userIndexer = new ProxyUserIndexer(); + advanceInTime(); + underTest = newRecoveryIndexer(userIndexer, mockedRuleIndexer); + underTest.recover(); + + assertThatQueueHasSize(0); + assertThat(userIndexer.called) + .extracting(EsQueueDto::getUuid) + .containsExactlyInAnyOrder(item1.getUuid(), item2.getUuid(), item3.getUuid()); + + assertThatLogsContain(TRACE, "Elasticsearch recovery - processing 3 USER"); + assertThatLogsContain(INFO, "Elasticsearch recovery - 3 documents processed [0 failures]"); + } + private class ProxyUserIndexer extends UserIndexer { private final List<EsQueueDto> called = new ArrayList<>(); @@ -363,7 +386,8 @@ public class RecoveryIndexerTest { List<EsQueueDto> filteredItems = items.stream().filter( i -> !i.getUuid().equals(failing.getUuid())).collect(toArrayList()); IndexingResult result = super.index(dbSession, filteredItems); - if (items.contains(failing)) { + if (result.getTotal() == items.size() - 1) { + // the failing item was in the items list result.incrementRequests(); } @@ -425,15 +449,15 @@ public class RecoveryIndexerTest { } private RecoveryIndexer newRecoveryIndexer(UserIndexer userIndexer, RuleIndexer ruleIndexer) { - Settings settings = new MapSettings() + MapSettings settings = new MapSettings() .setProperty("sonar.search.recovery.initialDelayInMs", "0") .setProperty("sonar.search.recovery.delayInMs", "1") .setProperty("sonar.search.recovery.minAgeInMs", "1"); return newRecoveryIndexer(userIndexer, ruleIndexer, settings); } - private RecoveryIndexer newRecoveryIndexer(UserIndexer userIndexer, RuleIndexer ruleIndexer, Settings settings) { - return new RecoveryIndexer(system2, settings, db.getDbClient(), userIndexer, ruleIndexer, mockedActiveRuleIndexer); + private RecoveryIndexer newRecoveryIndexer(UserIndexer userIndexer, RuleIndexer ruleIndexer, MapSettings settings) { + return new RecoveryIndexer(system2, settings.asConfig(), db.getDbClient(), userIndexer, ruleIndexer, mockedActiveRuleIndexer); } private EsQueueDto createUnindexedUser() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java index b32d3e58cd1..356bfbf4ad8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/TagsActionTest.java @@ -96,12 +96,12 @@ public class TagsActionTest { RuleDefinitionDto r = dbTester.rules().insert(setSystemTags("tag1")); ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey()); dbTester.rules().insertOrUpdateMetadata(r, organization, setTags("tag2")); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, r.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey(), organization); RuleDefinitionDto r2 = dbTester.rules().insert(setSystemTags("tag3")); ruleIndexer.commitAndIndex(dbTester.getSession(), r2.getKey()); dbTester.rules().insertOrUpdateMetadata(r2, organization, setTags("tag4", "tag5")); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, r2.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), r2.getKey(), organization); String result = tester.newRequest() .setParam("organization", organization.getKey()) @@ -118,7 +118,7 @@ public class TagsActionTest { RuleDefinitionDto r = dbTester.rules().insert(setSystemTags("tag6")); ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey()); dbTester.rules().insertOrUpdateMetadata(r, organization, setTags("tag7")); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, r.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey(), organization); String result = tester.newRequest() .setParam("organization", organization.getKey()) @@ -180,7 +180,7 @@ public class TagsActionTest { RuleDefinitionDto r = dbTester.rules().insert(setSystemTags("cwe")); ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey()); dbTester.rules().insertOrUpdateMetadata(r, organization, setTags("security")); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, r.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey(), organization); String result = tester.newRequest() .setParam("organization", organization.getKey()) diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java index 95a47a88e51..aaf4de5a8f5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexerTest.java @@ -102,7 +102,7 @@ public class RuleIndexerTest { underTest.commitAndIndex(dbTester.getSession(), rule.getKey()); OrganizationDto organization = dbTester.organizations().insert(); dbTester.rules().insertOrUpdateMetadata(rule, organization, m -> m.setTags(ImmutableSet.of("bla"))); - underTest.commitAndIndex(dbTester.getSession(), organization, rule.getKey()); + underTest.commitAndIndex(dbTester.getSession(), rule.getKey(), organization); RuleExtensionDoc doc = new RuleExtensionDoc() .setRuleKey(rule.getKey()) diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java index e7dd9c99e82..ba57d07a228 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java @@ -738,7 +738,7 @@ public class SearchActionTest { @SafeVarargs private final RuleMetadataDto insertMetadata(OrganizationDto organization, RuleDefinitionDto rule, Consumer<RuleMetadataDto>... populaters) { RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, organization, populaters); - ruleIndexer.commitAndIndex(db.getSession(), organization, rule.getKey()); + ruleIndexer.commitAndIndex(db.getSession(), rule.getKey(), organization); return metadata; } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java index df4b13920f0..7859a14ac68 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java @@ -236,7 +236,7 @@ public class ShowActionTest { @SafeVarargs private final RuleMetadataDto insertMetadata(OrganizationDto organization, RuleDefinitionDto rule, Consumer<RuleMetadataDto>... populaters) { RuleMetadataDto metadata = dbTester.rules().insertOrUpdateMetadata(rule, organization, populaters); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, rule.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), rule.getKey(), organization); return metadata; } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java index a75116f809b..d8e56b62b29 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/TagsActionTest.java @@ -110,7 +110,7 @@ public class TagsActionTest { RuleDefinitionDto r = dbTester.rules().insert(setSystemTags()); ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey()); dbTester.rules().insertOrUpdateMetadata(r, organization, setTags("tag")); - ruleIndexer.commitAndIndex(dbTester.getSession(), organization, r.getKey()); + ruleIndexer.commitAndIndex(dbTester.getSession(), r.getKey(), organization); String result = tester.newRequest().setParam("organization", organization.getKey()).execute().getInput(); assertJson(result).isSimilarTo("{\"tags\":[\"tag\"]}"); |