diff --git a/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java b/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java index 2cb8e011293..1bd4622e615 100644 --- a/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java +++ b/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java @@ -39,6 +39,7 @@ import org.elasticsearch.index.store.support.AbstractIndexStore; import org.elasticsearch.index.translog.TranslogService; import org.elasticsearch.index.translog.fs.FsTranslog; import org.elasticsearch.indices.ttl.IndicesTTLService; +import org.elasticsearch.indices.warmer.InternalIndicesWarmer; /** */ @@ -113,6 +114,7 @@ public class IndexDynamicSettingsModule extends AbstractModule { indexDynamicSettings.addDynamicSetting(TranslogService.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE, Validator.BYTES_SIZE); indexDynamicSettings.addDynamicSetting(TranslogService.INDEX_TRANSLOG_FLUSH_THRESHOLD_PERIOD, Validator.TIME); indexDynamicSettings.addDynamicSetting(TranslogService.INDEX_TRANSLOG_DISABLE_FLUSH); + indexDynamicSettings.addDynamicSetting(InternalIndicesWarmer.INDEX_WARMER_ENABLED); } public void addDynamicSettings(String... settings) { diff --git a/src/main/java/org/elasticsearch/indices/warmer/InternalIndicesWarmer.java b/src/main/java/org/elasticsearch/indices/warmer/InternalIndicesWarmer.java index 6f236972f2e..c55cdbb139a 100644 --- a/src/main/java/org/elasticsearch/indices/warmer/InternalIndicesWarmer.java +++ b/src/main/java/org/elasticsearch/indices/warmer/InternalIndicesWarmer.java @@ -38,6 +38,8 @@ import java.util.concurrent.TimeUnit; */ public class InternalIndicesWarmer extends AbstractComponent implements IndicesWarmer { + public static final String INDEX_WARMER_ENABLED = "index.warmer.enabled"; + private final ThreadPool threadPool; private final ClusterService clusterService; @@ -69,7 +71,7 @@ public class InternalIndicesWarmer extends AbstractComponent implements IndicesW if (indexMetaData == null) { return; } - if (!indexMetaData.settings().getAsBoolean("index.warmer.enabled", settings.getAsBoolean("index.warmer.enabled", true))) { + if (!indexMetaData.settings().getAsBoolean(INDEX_WARMER_ENABLED, settings.getAsBoolean(INDEX_WARMER_ENABLED, true))) { return; } IndexService indexService = indicesService.indexService(context.shardId().index().name()); diff --git a/src/test/java/org/elasticsearch/test/integration/indices/wamer/SimpleIndicesWarmerTests.java b/src/test/java/org/elasticsearch/test/integration/indices/wamer/SimpleIndicesWarmerTests.java index bdb4e37d4b5..5f4543d9a9c 100644 --- a/src/test/java/org/elasticsearch/test/integration/indices/wamer/SimpleIndicesWarmerTests.java +++ b/src/test/java/org/elasticsearch/test/integration/indices/wamer/SimpleIndicesWarmerTests.java @@ -19,6 +19,7 @@ package org.elasticsearch.test.integration.indices.wamer; +import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse; import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.common.Priority; @@ -32,6 +33,8 @@ import org.testng.annotations.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; /** */ @@ -175,4 +178,33 @@ public class SimpleIndicesWarmerTests extends AbstractSharedClusterTest { } } + @Test // issue 3246 + public void ensureThatIndexWarmersCanBeChangedOnRuntime() throws Exception { + client().admin().indices().prepareDelete().execute().actionGet(); + client().admin().indices().prepareCreate("test") + .setSettings(ImmutableSettings.settingsBuilder().put("index.number_of_shards", 1)) + .execute().actionGet(); + + client().admin().cluster().prepareHealth("test").setWaitForGreenStatus().execute().actionGet(); + + client().admin().indices().preparePutWarmer("custom_warmer") + .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) + .execute().actionGet(); + + client().prepareIndex("test", "test", "1").setSource("{ \"foo\" : \"bar\"}").setRefresh(true).execute().actionGet(); + + client().admin().indices().prepareUpdateSettings("test").setSettings("{ \"index.warmer.enabled\": false}").execute().actionGet(); + + long warmerRunsAfterDisabling = getWarmerRuns(); + assertThat(warmerRunsAfterDisabling, is(greaterThan(1L))); + + client().prepareIndex("test", "test", "2").setSource("{ \"foo2\" : \"bar2\"}").setRefresh(true).execute().actionGet(); + + assertThat(warmerRunsAfterDisabling, is(getWarmerRuns())); + } + + private long getWarmerRuns() { + IndicesStatsResponse indicesStatsResponse = client().admin().indices().prepareStats("test").clear().setWarmer(true).execute().actionGet(); + return indicesStatsResponse.getIndex("test").getPrimaries().warmer.total(); + } }