diff options
author | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-05-01 00:50:24 +0200 |
---|---|---|
committer | Stephane Gamard <stephane.gamard@searchbox.com> | 2014-05-01 00:50:24 +0200 |
commit | 03d4c11b952b7c240c08b523c5470da2c297fb44 (patch) | |
tree | ba5a40eb78e5fd6fac79fe7ebf95a956b55ae55b /sonar-server | |
parent | 1b84be0cba036bc7d782f9191874bf144c6fe534 (diff) | |
download | sonarqube-03d4c11b952b7c240c08b523c5470da2c297fb44.tar.gz sonarqube-03d4c11b952b7c240c08b523c5470da2c297fb44.zip |
SONAR-5237
- Implemented NRT for RuleService and RuleIndex (RuleService#refresh & RuleIndex#refresh)
- Fixed RuleService#search with empty filter values
Diffstat (limited to 'sonar-server')
5 files changed, 50 insertions, 7 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java index 9c7c5a58da0..6b37b8f7093 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java @@ -165,7 +165,18 @@ public class RuleIndex extends BaseIndex<RuleKey, RuleDto> { this.addTermFilter(RuleField.SEVERITY.key(), query.getSeverities(), fb); this.addTermFilter(RuleField.KEY.key(), query.getKey(), fb); - QueryBuilder mainQuery = QueryBuilders.filteredQuery(qb, fb); + + QueryBuilder mainQuery; + + if((query.getLanguages() != null && !query.getLanguages().isEmpty()) || + (query.getRepositories() != null && !query.getRepositories().isEmpty()) || + (query.getSeverities() != null && !query.getSeverities().isEmpty()) || + (query.getKey() != null && !query.getKey().isEmpty())) { + + mainQuery = QueryBuilders.filteredQuery(qb, fb); + } else { + mainQuery = qb; + } //Create ES query Object; SearchRequestBuilder esSearch = getClient() diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java index c2ccc9e5afd..5ca3914b256 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java @@ -54,11 +54,13 @@ public class RuleService implements ServerComponent { return new RuleQuery(); } - /** - * @see #newRuleQuery() - */ public Results search(RuleQuery query, QueryOptions options) { options.filterFieldsToReturn(RuleIndex.PUBLIC_FIELDS); return index.search(query, options); } + + public RuleService refresh(){ + this.index.refresh(); + return this; + } } diff --git a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index 0193500bd8d..d032be44617 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -64,7 +64,7 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem public void start() { /* Setup the index if necessary */ - this.intializeIndex(); + this.initializeIndex(); } @Override @@ -74,7 +74,7 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem /* Cluster And ES Stats/Client methods */ - private void intializeIndex() { + private void initializeIndex() { String index = this.getIndexName(); @@ -113,6 +113,11 @@ public abstract class BaseIndex<K extends Serializable, E extends Dto<K>> implem protected abstract String getKeyValue(K key); @Override + public void refresh(){ + getClient().admin().indices().prepareRefresh(this.getIndexName()).get(); + } + + @Override public Hit getByKey(K key) { GetResponse result = getClient().prepareGet(this.getIndexName(), this.getType(), this.getKeyValue(key)) .get(); diff --git a/sonar-server/src/main/java/org/sonar/server/search/Index.java b/sonar-server/src/main/java/org/sonar/server/search/Index.java index bb29abb781b..e41e2767b3e 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/Index.java +++ b/sonar-server/src/main/java/org/sonar/server/search/Index.java @@ -32,6 +32,8 @@ public interface Index<K extends Serializable> extends Startable { @CheckForNull Hit getByKey(K key); + void refresh(); + void insert(K key); void update(K key); diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java index 77e7b12a368..10373e7e104 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java @@ -20,6 +20,7 @@ package org.sonar.server.rule2; import com.google.common.collect.Iterables; +import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; import org.junit.After; import org.junit.ClassRule; import org.junit.Test; @@ -28,6 +29,8 @@ import org.sonar.api.rule.RuleStatus; import org.sonar.api.rule.Severity; import org.sonar.api.utils.DateUtils; import org.sonar.check.Cardinality; +import org.sonar.core.persistence.DbSession; +import org.sonar.core.persistence.MyBatis; import org.sonar.core.rule.RuleDto; import org.sonar.server.search.Hit; import org.sonar.server.search.QueryOptions; @@ -64,6 +67,8 @@ public class RuleMediumTest { // verify that rule is indexed in es RuleIndex index = tester.get(RuleIndex.class); + index.refresh(); + Hit hit = index.getByKey(ruleKey); assertThat(hit).isNotNull(); assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.REPOSITORY.key())).isEqualTo(ruleKey.repository()); @@ -74,13 +79,31 @@ public class RuleMediumTest { assertThat(hit.getFieldAsString(RuleNormalizer.RuleField.STATUS.key())).isEqualTo(RuleStatus.READY.toString()); } + + @Test + public void search_rules_no_filters() throws InterruptedException { + RuleDao dao = tester.get(RuleDao.class); + dao.insert(newRuleDto(RuleKey.of("javascript", "S001"))); + + RuleService service = tester.get(RuleService.class).refresh();; + + RuleQuery query = service.newRuleQuery(); + Results results = service.search(query, new QueryOptions()); + + assertThat(results.getTotal()).isEqualTo(1); + assertThat(results.getHits()).hasSize(1); + assertThat(Iterables.getFirst(results.getHits(), null).getFieldAsString("key")).isEqualTo("S001"); + + } + @Test public void search_rules_by_repositories() throws InterruptedException { RuleDao dao = tester.get(RuleDao.class); dao.insert(newRuleDto(RuleKey.of("javascript", "S001"))); dao.insert(newRuleDto(RuleKey.of("java", "S002"))); - RuleService service = tester.get(RuleService.class); + RuleService service = tester.get(RuleService.class).refresh(); + RuleQuery query = service.newRuleQuery().setRepositories(Arrays.asList("findbugs", "java")); Results results = service.search(query, new QueryOptions()); |