aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
authorStephane Gamard <stephane.gamard@searchbox.com>2014-05-01 00:50:24 +0200
committerStephane Gamard <stephane.gamard@searchbox.com>2014-05-01 00:50:24 +0200
commit03d4c11b952b7c240c08b523c5470da2c297fb44 (patch)
treeba5a40eb78e5fd6fac79fe7ebf95a956b55ae55b /sonar-server
parent1b84be0cba036bc7d782f9191874bf144c6fe534 (diff)
downloadsonarqube-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')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java13
-rw-r--r--sonar-server/src/main/java/org/sonar/server/rule2/RuleService.java8
-rw-r--r--sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java9
-rw-r--r--sonar-server/src/main/java/org/sonar/server/search/Index.java2
-rw-r--r--sonar-server/src/test/java/org/sonar/server/rule2/RuleMediumTest.java25
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());