Skip to content

Commit 2131e11

Browse files
authored
Apply ignore_throttled also to concrete indices (#35335)
Today we only apply `ingore_throttled` to expansions from wildcards, date math expressions and aliases. Yet, this is tricky since we might have resolved certain expressions in pre-filter steps like security. It's more consistent to apply this logic to all expressions including concrete indices. Relates to #34354
1 parent 5ae0319 commit 2131e11

File tree

4 files changed

+10
-17
lines changed

4 files changed

+10
-17
lines changed

server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public boolean ignoreAliases() {
248248

249249
/**
250250
*
251-
* @return whether indices that are marked as throttled should be ignored when resolving a wildcard or alias
251+
* @return whether indices that are marked as throttled should be ignored
252252
*/
253253
public boolean ignoreThrottled() {
254254
return options.contains(Option.IGNORE_THROTTLED);

server/src/main/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolver.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ Index[] concreteIndices(Context context, String... indexExpressions) {
147147
if (indexExpressions == null || indexExpressions.length == 0) {
148148
indexExpressions = new String[]{MetaData.ALL};
149149
}
150-
Set<String> originalIndexExpression = Sets.newHashSet(indexExpressions);
151150
MetaData metaData = context.getState().metaData();
152151
IndicesOptions options = context.getOptions();
153152
final boolean failClosed = options.forbidClosedIndices() && options.ignoreUnavailable() == false;
@@ -197,7 +196,7 @@ Index[] concreteIndices(Context context, String... indexExpressions) {
197196
" The write index may be explicitly disabled using is_write_index=false or the alias points to multiple" +
198197
" indices without one being designated as a write index");
199198
}
200-
if (addIndex(writeIndex, context, originalIndexExpression)) {
199+
if (addIndex(writeIndex, context)) {
201200
concreteIndices.add(writeIndex.getIndex());
202201
}
203202
} else {
@@ -216,12 +215,12 @@ Index[] concreteIndices(Context context, String... indexExpressions) {
216215
if (failClosed) {
217216
throw new IndexClosedException(index.getIndex());
218217
} else {
219-
if (options.forbidClosedIndices() == false && addIndex(index, context, originalIndexExpression)) {
218+
if (options.forbidClosedIndices() == false && addIndex(index, context)) {
220219
concreteIndices.add(index.getIndex());
221220
}
222221
}
223222
} else if (index.getState() == IndexMetaData.State.OPEN) {
224-
if (addIndex(index, context, originalIndexExpression)) {
223+
if (addIndex(index, context)) {
225224
concreteIndices.add(index.getIndex());
226225
}
227226
} else {
@@ -239,13 +238,8 @@ Index[] concreteIndices(Context context, String... indexExpressions) {
239238
return concreteIndices.toArray(new Index[concreteIndices.size()]);
240239
}
241240

242-
private static boolean addIndex(IndexMetaData metaData, Context context, Set<String> originalIndices) {
243-
if (context.options.ignoreThrottled()) {
244-
if (originalIndices.contains(metaData.getIndex().getName()) == false) {
245-
return IndexSettings.INDEX_SEARCH_THROTTLED.get(metaData.getSettings()) == false;
246-
}
247-
}
248-
return true;
241+
private static boolean addIndex(IndexMetaData metaData, Context context) {
242+
return (context.options.ignoreThrottled() && IndexSettings.INDEX_SEARCH_THROTTLED.get(metaData.getSettings())) == false;
249243
}
250244

251245
private static IllegalArgumentException aliasesNotSupportedException(String expression) {

server/src/test/java/org/elasticsearch/cluster/metadata/IndexNameExpressionResolverTests.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,21 +1357,19 @@ public void testIgnoreThrottled() {
13571357
{
13581358
Index[] indices = indexNameExpressionResolver.concreteIndices(state,
13591359
IndicesOptions.STRICT_EXPAND_OPEN_FORBID_CLOSED_IGNORE_THROTTLED, "ind*", "test-index");
1360-
assertEquals(2, indices.length);
1360+
assertEquals(1, indices.length);
13611361
Arrays.sort(indices, Comparator.comparing(Index::getName));
13621362
assertEquals("index", indices[0].getName());
1363-
assertEquals("test-index", indices[1].getName());
13641363
}
13651364

13661365
{
13671366
Index[] indices = indexNameExpressionResolver.concreteIndices(state,
13681367
new IndicesOptions(EnumSet.of(IndicesOptions.Option.ALLOW_NO_INDICES,
13691368
IndicesOptions.Option.IGNORE_THROTTLED),
13701369
EnumSet.of(IndicesOptions.WildcardStates.OPEN)), "ind*", "test-index");
1371-
assertEquals(2, indices.length);
1370+
assertEquals(1, indices.length);
13721371
Arrays.sort(indices, Comparator.comparing(Index::getName));
13731372
assertEquals("index", indices[0].getName());
1374-
assertEquals("test-index", indices[1].getName());
13751373
}
13761374
{
13771375
Index[] indices = indexNameExpressionResolver.concreteIndices(state,

server/src/test/java/org/elasticsearch/search/SearchServiceTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,8 @@ public void testSetSearchThrottled() {
533533
Index index = resolveIndex("throttled_threadpool_index");
534534
assertTrue(service.getIndicesService().indexServiceSafe(index).getIndexSettings().isSearchThrottled());
535535
client().prepareIndex("throttled_threadpool_index", "_doc", "1").setSource("field", "value").setRefreshPolicy(IMMEDIATE).get();
536-
SearchResponse searchResponse = client().prepareSearch("throttled_threadpool_index").setSize(1).get();
536+
SearchResponse searchResponse = client().prepareSearch("throttled_threadpool_index")
537+
.setIndicesOptions(IndicesOptions.STRICT_EXPAND_OPEN_FORBID_CLOSED).setSize(1).get();
537538
assertSearchHits(searchResponse, "1");
538539
// we add a search action listener in a plugin above to assert that this is actually used
539540
client().execute(

0 commit comments

Comments
 (0)