From 71d5148b1c454cd4749a90e8b4d6224e90e0dc39 Mon Sep 17 00:00:00 2001 From: Alexander Reelsen Date: Thu, 27 Jun 2013 10:47:55 +0200 Subject: [PATCH] Make index.warmer.enabled setting dynamic Even though proposed in the documentation, the realtime enabling/disabling of index warmers was not supported. This commit adds support for index.warmer.enabled as a dynamic setting. Closes #3246 --- .../settings/IndexDynamicSettingsModule.java | 2 ++ .../indices/warmer/InternalIndicesWarmer.java | 4 ++- .../wamer/SimpleIndicesWarmerTests.java | 32 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java b/src/main/java/org/elasticsearch/index/settings/IndexDynamicSettingsModule.java index 2cb8e01129354..1bd4622e615ee 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.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 IndexDynamicSettingsModule() { 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 6f236972f2ef6..c55cdbb139ac8 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 @@ */ 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 void warm(final WarmerContext context) { 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 bdb4e37d4b50e..5f4543d9a9caf 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 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 void deleteNonExistentIndexWarmerTest() { } } + @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(); + } }