From 372fd3830285342d5345fe0d06933e588faf3aa2 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Wed, 28 May 2014 10:19:56 +0200 Subject: [PATCH] DAOv.2 - Removed json files for ESNode settings --- .../java/org/sonar/server/search/ESNode.java | 52 +++++++++++++------ .../server/search/config/elasticsearch.json | 46 ---------------- .../search/config/templates/default.json | 8 --- .../org/sonar/server/search/ESNodeTest.java | 8 +-- 4 files changed, 41 insertions(+), 73 deletions(-) delete mode 100644 sonar-server/src/main/resources/org/sonar/server/search/config/elasticsearch.json delete mode 100644 sonar-server/src/main/resources/org/sonar/server/search/config/templates/default.json diff --git a/sonar-server/src/main/java/org/sonar/server/search/ESNode.java b/sonar-server/src/main/java/org/sonar/server/search/ESNode.java index 4a94740986d..0f69106a5fb 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/ESNode.java +++ b/sonar-server/src/main/java/org/sonar/server/search/ESNode.java @@ -22,8 +22,8 @@ package org.sonar.server.search; import com.google.common.annotations.VisibleForTesting; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; import org.elasticsearch.action.admin.cluster.health.ClusterHealthStatus; +import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.common.logging.ESLoggerFactory; import org.elasticsearch.common.logging.slf4j.Slf4jESLoggerFactory; @@ -38,7 +38,6 @@ import org.sonar.api.config.Settings; import org.sonar.api.platform.ServerFileSystem; import java.io.File; -import java.io.IOException; /** * ElasticSearch Node used to connect to index. @@ -73,8 +72,8 @@ public class ESNode implements Startable { @Override public void start() { - IndexProperties.ES_TYPE type = settings.hasKey(IndexProperties.TYPE)? - IndexProperties.ES_TYPE.valueOf(settings.getString(IndexProperties.TYPE)): + IndexProperties.ES_TYPE type = settings.hasKey(IndexProperties.TYPE) ? + IndexProperties.ES_TYPE.valueOf(settings.getString(IndexProperties.TYPE)) : IndexProperties.ES_TYPE.DATA; switch (type) { @@ -91,7 +90,7 @@ public class ESNode implements Startable { } } - private void initMemoryES(){ + private void initMemoryES() { ImmutableSettings.Builder builder = ImmutableSettings.settingsBuilder() .put("node.name", "node-test-" + System.currentTimeMillis()) .put("node.data", true) @@ -105,21 +104,43 @@ public class ESNode implements Startable { .put("node.local", true); initDirs(builder); - + node = NodeBuilder.nodeBuilder() .settings(builder) .node(); node.start(); + + addIndexTemplates(); } - private void initTransportES(){ + private void initTransportES() { throw new IllegalStateException("Not implemented yet"); } private void initDataES() { initLogging(); - ImmutableSettings.Builder esSettings = ImmutableSettings.builder() - .loadFromUrl(getClass().getResource("config/elasticsearch.json")); + ImmutableSettings.Builder esSettings = ImmutableSettings.settingsBuilder() + .put("node.name", "sonarqube-" + System.currentTimeMillis()) + .put("node.data", true) + .put("node.local", true) + .put("cluster.name", "sonarqube") + .put("index.number_of_shards", "1") + .put("index.number_of_replicas", "0") + .put("index.mapper.dynamic", false) + + .put("index.analysis.analyzer.sortable.type", "custom") + .put("index.analysis.analyzer.sortable.tokenizer", "keyword") + .put("index.analysis.analyzer.sortable.filter", "lowercase") + + .put("index.analysis.analyzer.rule_name.type", "custom") + .put("index.analysis.analyzer.rule_name.tokenizer", "standard") + .putArray("index.analysis.analyzer.rule_name.filter", "lowercase", "rule_name_ngram") + + .put("index.analysis.filter.rule_name_ngram.type", "nGram") + .put("index.analysis.filter.rule_name_ngram.min_gram", 3) + .put("index.analysis.filter.rule_name_ngram.max_gram", 5) + .putArray("index.analysis.filter.rule_name_ngram.token_chars", "letter", "digit"); + initDirs(esSettings); initRestConsole(esSettings); initNetwork(esSettings); @@ -145,13 +166,12 @@ public class ESNode implements Startable { } private void addIndexTemplates() { - try { - node.client().admin().indices().preparePutTemplate("default") - .setSource(IOUtils.toString(getClass().getResource("config/templates/default.json"))) - .execute().actionGet(); - } catch (IOException ioe) { - throw new IllegalStateException("Unable to load index templates", ioe); - } + + PutIndexTemplateResponse response = node.client().admin().indices() + .preparePutTemplate("default") + .setTemplate("*") + .addMapping("_default_", "{\"dynamic\": \"strict\"}") + .get(); } private void initLogging() { diff --git a/sonar-server/src/main/resources/org/sonar/server/search/config/elasticsearch.json b/sonar-server/src/main/resources/org/sonar/server/search/config/elasticsearch.json deleted file mode 100644 index 64913338ee0..00000000000 --- a/sonar-server/src/main/resources/org/sonar/server/search/config/elasticsearch.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "cluster": { - "name": "sonarqube" - }, - "node": { - "name": "sonarqube", - "local": true, - "data": true - }, - "discovery": { - "zen": { - "multicast": { - "enabled": false - } - } - }, - "index": { - "number_of_shards": 1, - "number_of_replicas": 0, - "mapper": { - "dynamic": false - }, - "analysis": { - "analyzer": { - "sortable": { - "type": "custom", - "tokenizer": "keyword", - "filter": "lowercase" - }, - "rule_name": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase", "rule_name_ngram"] - } - }, - "filter": { - "rule_name_ngram": { - "type": "nGram", - "min_gram": 3, - "max_gram": 5, - "token_chars": [ "letter", "digit" ] - } - } - } - } -} diff --git a/sonar-server/src/main/resources/org/sonar/server/search/config/templates/default.json b/sonar-server/src/main/resources/org/sonar/server/search/config/templates/default.json deleted file mode 100644 index 0e7a25d7c67..00000000000 --- a/sonar-server/src/main/resources/org/sonar/server/search/config/templates/default.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "template": "*", - "mappings": { - "_default_": { - "dynamic": "strict" - } - } -} diff --git a/sonar-server/src/test/java/org/sonar/server/search/ESNodeTest.java b/sonar-server/src/test/java/org/sonar/server/search/ESNodeTest.java index 1c98d7020ed..5f9b5a8ec48 100644 --- a/sonar-server/src/test/java/org/sonar/server/search/ESNodeTest.java +++ b/sonar-server/src/test/java/org/sonar/server/search/ESNodeTest.java @@ -25,6 +25,7 @@ import org.elasticsearch.action.admin.cluster.health.ClusterHealthStatus; import org.elasticsearch.client.AdminClient; import org.elasticsearch.client.ClusterAdminClient; import org.elasticsearch.cluster.ClusterState; +import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.index.mapper.StrictDynamicMappingException; import org.junit.After; @@ -99,17 +100,18 @@ public class ESNodeTest { node.client().admin().indices().prepareCreate("polop") .addMapping("type1", "{\"type1\": {\"properties\": {\"value\": {\"type\": \"string\"}}}}") .execute().actionGet(); - node.client().admin().cluster().prepareHealth("polop").setWaitForYellowStatus().execute().actionGet(); + node.client().admin().cluster().prepareHealth("polop").setWaitForYellowStatus().get(TimeValue.timeValueMillis(1000)); // default "sortable" analyzer is defined for all indices - assertThat(node.client().admin().indices().prepareAnalyze("polop", "This Is A Wonderful Text").setAnalyzer("sortable").execute().actionGet() + assertThat(node.client().admin().indices() + .prepareAnalyze("polop", "This Is A Wonderful Text").setAnalyzer("sortable").get() .getTokens().get(0).getTerm()).isEqualTo("this is a wonderful text"); // strict mapping is enforced try { node.client().prepareIndex("polop", "type1", "666").setSource( XContentFactory.jsonBuilder().startObject().field("unknown", "plouf").endObject() - ).execute().actionGet(); + ).get(); } finally { node.stop(); } -- 2.39.5