From 0b43922ecbad8209e97656c7edd3b3814d21085a Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Mon, 6 Oct 2014 10:04:35 +0200 Subject: [PATCH] SONAR-5687 - Added cluster mode which sets replication factor to 1 --- .../java/org/sonar/search/SearchServer.java | 12 +++++ .../org/sonar/server/search/BaseIndex.java | 10 ++++- .../sonar/server/search/IndexDefinition.java | 11 ----- .../sonar/server/search/IndexProperties.java | 5 +-- .../sonar/server/search/BaseIndexTest.java | 45 +++++++++++++++++++ 5 files changed, 66 insertions(+), 17 deletions(-) diff --git a/server/sonar-search/src/main/java/org/sonar/search/SearchServer.java b/server/sonar-search/src/main/java/org/sonar/search/SearchServer.java index add2f6df442..5b48fd3969e 100644 --- a/server/sonar-search/src/main/java/org/sonar/search/SearchServer.java +++ b/server/sonar-search/src/main/java/org/sonar/search/SearchServer.java @@ -41,6 +41,7 @@ import java.util.Set; public class SearchServer implements Monitored { + public static final String CLUSTER_ACTIVATION = "sonar.cluster.activation"; public static final String SONAR_NODE_NAME = "sonar.node.name"; public static final String ES_PORT_PROPERTY = "sonar.search.port"; public static final String ES_CLUSTER_PROPERTY = "sonar.cluster.name"; @@ -114,6 +115,9 @@ public class SearchServer implements Monitored { .put("path.logs", esLogDir().getAbsolutePath()); if (!nodes.isEmpty()) { + // When sonar as a master, for the cluster mode + // see https://jira.codehaus.org/browse/SONAR-5687 + props.set(CLUSTER_ACTIVATION, Boolean.TRUE.toString()); LoggerFactory.getLogger(SearchServer.class).info("Joining ES cluster with master: {}", nodes); esSettings.put("discovery.zen.ping.unicast.hosts", StringUtils.join(nodes, ",")); @@ -146,6 +150,14 @@ public class SearchServer implements Monitored { } } + // When SQ is ran as a cluster + // see https://jira.codehaus.org/browse/SONAR-5687 + if (props.valueAsBoolean(CLUSTER_ACTIVATION)) { + esSettings.put("index.number_of_replicas", 1); + } else { + esSettings.put("index.number_of_replicas", 0); + } + // And building our ES Node node = NodeBuilder.nodeBuilder() .settings(esSettings) diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index 247908a85f0..e550cbe271a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -232,8 +232,14 @@ public abstract class BaseIndex, KEY extends Serial protected abstract String getKeyValue(KEY key); public final Settings getIndexSettings() { - return this.addCustomIndexSettings - (this.getBaseIndexSettings()).build(); + ImmutableSettings.Builder settings = this.addCustomIndexSettings(this.getBaseIndexSettings()); + + // In case there is a replication factor set by the index, + // it is removed since we're using global cluster state + // see https://jira.codehaus.org/browse/SONAR-5687 + settings.remove("index.number_of_replicas"); + + return settings.build(); } protected ImmutableSettings.Builder addCustomIndexSettings(ImmutableSettings.Builder baseIndexSettings) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/IndexDefinition.java b/server/sonar-server/src/main/java/org/sonar/server/search/IndexDefinition.java index 0b7a06a6ce6..6fe769ca020 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/IndexDefinition.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/IndexDefinition.java @@ -26,9 +26,6 @@ public class IndexDefinition { private final String indexName; private final String indexType; - private static final String MANAGEMENT_INDEX = "sonarindex"; - private static final String MANAGEMENT_TYPE = "index"; - private IndexDefinition(String indexName, String indexType) { this.indexName = indexName; this.indexType = indexType; @@ -42,14 +39,6 @@ public class IndexDefinition { return indexType; } - public String getManagementIndex() { - return MANAGEMENT_INDEX; - } - - public String getManagementType() { - return MANAGEMENT_TYPE; - } - public static final IndexDefinition RULE = new IndexDefinition("rules", "rule"); public static final IndexDefinition ACTIVE_RULE = new IndexDefinition("rules", "activeRule"); public static final IndexDefinition ISSUES_AUTHORIZATION = new IndexDefinition("issues", "issueAuthorization"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/IndexProperties.java b/server/sonar-server/src/main/java/org/sonar/server/search/IndexProperties.java index d809845e770..d3418e24553 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/IndexProperties.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/IndexProperties.java @@ -25,10 +25,7 @@ public final class IndexProperties { // only static stuff } - public static enum ES_TYPE { - MEMORY, TRANSPORT, DATA - } - + public static final String CLUSTER_ACTIVATION = "sonar.cluster.activation"; public static final String TYPE = "sonar.search.type"; public static final String NODE_PORT = "sonar.search.port"; public static final String CLUSTER_NAME = "sonar.cluster.name"; diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java index 7cb1af52a8c..644fefb3c45 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/BaseIndexTest.java @@ -20,6 +20,7 @@ package org.sonar.server.search; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse; +import org.elasticsearch.common.settings.ImmutableSettings; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -75,6 +76,7 @@ public class BaseIndexTest { public void setup() throws IOException { File dataDir = temp.newFolder(); Settings settings = new Settings(); + settings.setProperty(IndexProperties.CLUSTER_ACTIVATION, false); settings.setProperty(IndexProperties.CLUSTER_NAME, clusterName); settings.setProperty(IndexProperties.NODE_PORT, clusterPort.toString()); settings.setProperty("sonar.path.home", dataDir.getAbsolutePath()); @@ -97,6 +99,49 @@ public class BaseIndexTest { assertThat(indexExistsResponse.isExists()).isTrue(); } + @Test + public void settings_has_no_replication_factor() { + BaseIndex index = getIndex(this.searchClient); + + // base case, there are no replication factors. + assertThat(index.getIndexSettings().get("index.number_of_replicas")).isNull(); + + // replication factor removed from settings when set in index + BaseIndex newIndex = new BaseIndex( + IndexDefinition.TEST, + null, searchClient) { + + @Override + protected ImmutableSettings.Builder addCustomIndexSettings(ImmutableSettings.Builder baseIndexSettings) { + return baseIndexSettings.put("index.number_of_replicas", 22); + } + + @Override + protected String getKeyValue(Serializable key) { + return null; + } + + @Override + protected Map mapProperties() { + return Collections.emptyMap(); + } + + @Override + protected Map mapKey() { + return Collections.emptyMap(); + } + + @Override + public Object toDoc(Map fields) { + return null; + } + }; + newIndex.start(); + + assertThat(index.getIndexSettings().get("index.number_of_replicas")).isNull(); + + } + private BaseIndex getIndex(final SearchClient searchClient) { BaseIndex index = new BaseIndex( IndexDefinition.TEST, -- 2.39.5