Skip to content

Commit 16490d7

Browse files
authored
TEST: Update settings should go through cluster state (#29682)
Today we update index settings directly via IndexService instead of the cluster state in IndexServiceTests. However, those changes will be lost if there is a cluster state update. In general, we should update index settings via client and limit the direct usage in only special tests. This commit replaces direct usages by the updateSettings api of client. Closes #24491
1 parent 752ba2f commit 16490d7

File tree

2 files changed

+20
-26
lines changed

2 files changed

+20
-26
lines changed

buildSrc/src/main/resources/checkstyle_suppressions.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,6 @@
535535
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]gateway[/\\]ReplicaShardAllocatorTests.java" checks="LineLength" />
536536
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]gateway[/\\]ReusePeerRecoverySharedTest.java" checks="LineLength" />
537537
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]get[/\\]GetActionIT.java" checks="LineLength" />
538-
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]index[/\\]IndexServiceTests.java" checks="LineLength" />
539538
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]index[/\\]IndexingSlowLogTests.java" checks="LineLength" />
540539
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]index[/\\]MergePolicySettingsTests.java" checks="LineLength" />
541540
<suppress files="server[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]index[/\\]SearchSlowLogTests.java" checks="LineLength" />

server/src/test/java/org/elasticsearch/index/IndexServiceTests.java

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import org.apache.lucene.search.MatchAllDocsQuery;
2323
import org.apache.lucene.search.TopDocs;
24-
import org.elasticsearch.cluster.metadata.IndexMetaData;
2524
import org.elasticsearch.common.Strings;
2625
import org.elasticsearch.common.compress.CompressedXContent;
2726
import org.elasticsearch.common.settings.Settings;
@@ -131,16 +130,16 @@ public void testRefreshTaskIsUpdated() throws IOException {
131130
assertTrue(indexService.getRefreshTask().mustReschedule());
132131

133132
// now disable
134-
IndexMetaData metaData = IndexMetaData.builder(indexService.getMetaData()).settings(Settings.builder().put(indexService.getMetaData().getSettings()).put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), -1)).build();
135-
indexService.updateMetaData(metaData);
133+
client().admin().indices().prepareUpdateSettings("test")
134+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), -1)).get();
136135
assertNotSame(refreshTask, indexService.getRefreshTask());
137136
assertTrue(refreshTask.isClosed());
138137
assertFalse(refreshTask.isScheduled());
139138
assertFalse(indexService.getRefreshTask().mustReschedule());
140139

141140
// set it to 100ms
142-
metaData = IndexMetaData.builder(indexService.getMetaData()).settings(Settings.builder().put(indexService.getMetaData().getSettings()).put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "100ms")).build();
143-
indexService.updateMetaData(metaData);
141+
client().admin().indices().prepareUpdateSettings("test")
142+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "100ms")).get();
144143
assertNotSame(refreshTask, indexService.getRefreshTask());
145144
assertTrue(refreshTask.isClosed());
146145

@@ -150,8 +149,8 @@ public void testRefreshTaskIsUpdated() throws IOException {
150149
assertEquals(100, refreshTask.getInterval().millis());
151150

152151
// set it to 200ms
153-
metaData = IndexMetaData.builder(indexService.getMetaData()).settings(Settings.builder().put(indexService.getMetaData().getSettings()).put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "200ms")).build();
154-
indexService.updateMetaData(metaData);
152+
client().admin().indices().prepareUpdateSettings("test")
153+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "200ms")).get();
155154
assertNotSame(refreshTask, indexService.getRefreshTask());
156155
assertTrue(refreshTask.isClosed());
157156

@@ -161,8 +160,8 @@ public void testRefreshTaskIsUpdated() throws IOException {
161160
assertEquals(200, refreshTask.getInterval().millis());
162161

163162
// set it to 200ms again
164-
metaData = IndexMetaData.builder(indexService.getMetaData()).settings(Settings.builder().put(indexService.getMetaData().getSettings()).put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "200ms")).build();
165-
indexService.updateMetaData(metaData);
163+
client().admin().indices().prepareUpdateSettings("test")
164+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "200ms")).get();
166165
assertSame(refreshTask, indexService.getRefreshTask());
167166
assertTrue(indexService.getRefreshTask().mustReschedule());
168167
assertTrue(refreshTask.isScheduled());
@@ -174,7 +173,9 @@ public void testRefreshTaskIsUpdated() throws IOException {
174173
}
175174

176175
public void testFsyncTaskIsRunning() throws IOException {
177-
IndexService indexService = createIndex("test", Settings.builder().put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(), Translog.Durability.ASYNC).build());
176+
Settings settings = Settings.builder()
177+
.put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(), Translog.Durability.ASYNC).build();
178+
IndexService indexService = createIndex("test", settings);
178179
IndexService.AsyncTranslogFSync fsyncTask = indexService.getFsyncTask();
179180
assertNotNull(fsyncTask);
180181
assertEquals(5000, fsyncTask.getInterval().millis());
@@ -198,12 +199,10 @@ public void testRefreshActuallyWorks() throws Exception {
198199
IndexShard shard = indexService.getShard(0);
199200
client().prepareIndex("test", "test", "0").setSource("{\"foo\": \"bar\"}", XContentType.JSON).get();
200201
// now disable the refresh
201-
IndexMetaData metaData = IndexMetaData.builder(indexService.getMetaData())
202-
.settings(Settings.builder().put(indexService.getMetaData().getSettings())
203-
.put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), -1)).build();
202+
client().admin().indices().prepareUpdateSettings("test")
203+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), -1)).get();
204204
// when we update we reschedule the existing task AND fire off an async refresh to make sure we make everything visible
205205
// before that this is why we need to wait for the refresh task to be unscheduled and the first doc to be visible
206-
indexService.updateMetaData(metaData);
207206
assertTrue(refreshTask.isClosed());
208207
refreshTask = indexService.getRefreshTask();
209208
assertBusy(() -> {
@@ -217,10 +216,8 @@ public void testRefreshActuallyWorks() throws Exception {
217216
assertFalse(refreshTask.isClosed());
218217
// refresh every millisecond
219218
client().prepareIndex("test", "test", "1").setSource("{\"foo\": \"bar\"}", XContentType.JSON).get();
220-
metaData = IndexMetaData.builder(indexService.getMetaData())
221-
.settings(Settings.builder().put(indexService.getMetaData().getSettings())
222-
.put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "1ms")).build();
223-
indexService.updateMetaData(metaData);
219+
client().admin().indices().prepareUpdateSettings("test")
220+
.setSettings(Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), "1ms")).get();
224221
assertTrue(refreshTask.isClosed());
225222
assertBusy(() -> {
226223
// this one becomes visible due to the force refresh we are running on updateMetaData if the interval changes
@@ -303,13 +300,11 @@ public void testAsyncTranslogTrimActuallyWorks() throws Exception {
303300
assertTrue(indexService.getRefreshTask().mustReschedule());
304301
client().prepareIndex("test", "test", "1").setSource("{\"foo\": \"bar\"}", XContentType.JSON).get();
305302
client().admin().indices().prepareFlush("test").get();
306-
IndexMetaData metaData = IndexMetaData.builder(indexService.getMetaData()).settings(Settings.builder()
307-
.put(indexService.getMetaData().getSettings())
308-
.put(IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.getKey(), -1)
309-
.put(IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.getKey(), -1))
310-
.build();
311-
indexService.updateMetaData(metaData);
312-
303+
client().admin().indices().prepareUpdateSettings("test")
304+
.setSettings(Settings.builder()
305+
.put(IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.getKey(), -1)
306+
.put(IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.getKey(), -1))
307+
.get();
313308
IndexShard shard = indexService.getShard(0);
314309
assertBusy(() -> assertThat(shard.estimateTranslogOperationsFromMinSeq(0L), equalTo(0)));
315310
}

0 commit comments

Comments
 (0)