Skip to content

Commit a91a9a5

Browse files
authored
Fix bitset filter cache loading in Stateless (#114191)
As recognized in PR #113478 reviewing, the bitset filter cache was wrongly eagerly loaded only for fast refresh indices on index nodes. However, it should be eagerly loaded for any index that can be searched. This PR fixes this.
1 parent a2f3278 commit a91a9a5

File tree

2 files changed

+11
-31
lines changed

2 files changed

+11
-31
lines changed

server/src/main/java/org/elasticsearch/index/cache/bitset/BitsetFilterCache.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@
5858
import java.util.concurrent.ExecutionException;
5959
import java.util.concurrent.Executor;
6060

61-
import static org.elasticsearch.index.IndexSettings.INDEX_FAST_REFRESH_SETTING;
62-
6361
/**
6462
* This is a cache for {@link BitDocIdSet} based filters and is unbounded by size or time.
6563
* <p>
@@ -105,9 +103,7 @@ static boolean shouldLoadRandomAccessFiltersEagerly(IndexSettings settings) {
105103
boolean loadFiltersEagerlySetting = settings.getValue(INDEX_LOAD_RANDOM_ACCESS_FILTERS_EAGERLY_SETTING);
106104
boolean isStateless = DiscoveryNode.isStateless(settings.getNodeSettings());
107105
if (isStateless) {
108-
return DiscoveryNode.hasRole(settings.getNodeSettings(), DiscoveryNodeRole.SEARCH_ROLE)
109-
&& loadFiltersEagerlySetting
110-
&& INDEX_FAST_REFRESH_SETTING.get(settings.getSettings());
106+
return loadFiltersEagerlySetting && DiscoveryNode.hasRole(settings.getNodeSettings(), DiscoveryNodeRole.SEARCH_ROLE);
111107
} else {
112108
return loadFiltersEagerlySetting;
113109
}

server/src/test/java/org/elasticsearch/index/cache/bitset/BitSetFilterCacheTests.java

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import java.util.concurrent.atomic.AtomicLong;
4949

5050
import static org.elasticsearch.cluster.node.DiscoveryNode.STATELESS_ENABLED_SETTING_NAME;
51-
import static org.elasticsearch.index.IndexSettings.INDEX_FAST_REFRESH_SETTING;
5251
import static org.elasticsearch.index.cache.bitset.BitsetFilterCache.INDEX_LOAD_RANDOM_ACCESS_FILTERS_EAGERLY_SETTING;
5352
import static org.hamcrest.Matchers.equalTo;
5453
import static org.hamcrest.Matchers.greaterThan;
@@ -271,38 +270,23 @@ public void onRemoval(ShardId shardId, Accountable accountable) {
271270
public void testShouldLoadRandomAccessFiltersEagerly() {
272271
var values = List.of(true, false);
273272
for (var hasIndexRole : values) {
274-
for (var indexFastRefresh : values) {
275-
for (var loadFiltersEagerly : values) {
276-
for (var isStateless : values) {
277-
if (isStateless) {
278-
assertEquals(
279-
loadFiltersEagerly && indexFastRefresh && hasIndexRole == false,
280-
BitsetFilterCache.shouldLoadRandomAccessFiltersEagerly(
281-
bitsetFilterCacheSettings(isStateless, hasIndexRole, loadFiltersEagerly, indexFastRefresh)
282-
)
283-
);
284-
} else {
285-
assertEquals(
286-
loadFiltersEagerly,
287-
BitsetFilterCache.shouldLoadRandomAccessFiltersEagerly(
288-
bitsetFilterCacheSettings(isStateless, hasIndexRole, loadFiltersEagerly, indexFastRefresh)
289-
)
290-
);
291-
}
273+
for (var loadFiltersEagerly : values) {
274+
for (var isStateless : values) {
275+
boolean result = BitsetFilterCache.shouldLoadRandomAccessFiltersEagerly(
276+
bitsetFilterCacheSettings(isStateless, hasIndexRole, loadFiltersEagerly)
277+
);
278+
if (isStateless) {
279+
assertEquals(loadFiltersEagerly && hasIndexRole == false, result);
280+
} else {
281+
assertEquals(loadFiltersEagerly, result);
292282
}
293283
}
294284
}
295285
}
296286
}
297287

298-
private IndexSettings bitsetFilterCacheSettings(
299-
boolean isStateless,
300-
boolean hasIndexRole,
301-
boolean loadFiltersEagerly,
302-
boolean indexFastRefresh
303-
) {
288+
private IndexSettings bitsetFilterCacheSettings(boolean isStateless, boolean hasIndexRole, boolean loadFiltersEagerly) {
304289
var indexSettingsBuilder = Settings.builder().put(INDEX_LOAD_RANDOM_ACCESS_FILTERS_EAGERLY_SETTING.getKey(), loadFiltersEagerly);
305-
if (isStateless) indexSettingsBuilder.put(INDEX_FAST_REFRESH_SETTING.getKey(), indexFastRefresh);
306290

307291
var nodeSettingsBuilder = Settings.builder()
308292
.putList(

0 commit comments

Comments
 (0)