From: Stephane Gamard Date: Tue, 29 Jul 2014 12:55:27 +0000 (+0200) Subject: SONAR-5237 - Fixed implicit limit on results for RuleIndex::getByIds() X-Git-Tag: 4.4~3 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7e9c9bbea62d1f97fcee2569914105241ce1e98b;p=sonarqube.git SONAR-5237 - Fixed implicit limit on results for RuleIndex::getByIds() --- diff --git a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java index 3906b7f27fd..94424812b3c 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/index/RuleIndex.java @@ -423,13 +423,27 @@ public class RuleIndex extends BaseIndex { */ @Deprecated public List getByIds(Collection ids) { - SearchResponse response = getClient().prepareSearch(this.getIndexName()) + SearchResponse scrollResp = getClient().prepareSearch(this.getIndexName()) .setTypes(this.getIndexType()) + .setSearchType(SearchType.SCAN) + .setScroll(TimeValue.timeValueSeconds(3L)) + .setSize(100) .setQuery(QueryBuilders.termsQuery(RuleNormalizer.RuleField.ID.field(), ids)) .get(); + List rules = newArrayList(); - for (SearchHit hit : response.getHits()) { - rules.add(toDoc(hit.getSource())); + while (true) { + scrollResp = getClient() + .prepareSearchScroll(scrollResp.getScrollId()) + .setScroll(TimeValue.timeValueSeconds(3L)) + .get(); + for (SearchHit hit : scrollResp.getHits()) { + rules.add(toDoc(hit.getSource())); + } + //Break condition: No hits are returned + if (scrollResp.getHits().getHits().length == 0) { + break; + } } return rules; } diff --git a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java index 3b3950d6993..927ea0838a9 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java @@ -54,8 +54,10 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; @@ -930,6 +932,19 @@ public class RuleIndexMediumTest { assertThat(index.search(availableSinceNowQuery, new QueryOptions()).getHits()).hasSize(0); } + @Test + public void scroll_byIds() throws Exception { + Set ids = new HashSet(); + for (int i = 0; i < 150; i++) { + RuleDto rule = RuleTesting.newDto(RuleKey.of("scroll", "r_" + i)); + dao.insert(dbSession, rule); + dbSession.commit(); + ids.add(rule.getId()); + } + List rules = index.getByIds(ids); + assertThat(rules).hasSize(ids.size()); + } + private static List ruleKeys(List rules){ return newArrayList(Iterables.transform(rules, new Function() { @Override