diff --git a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java index 04a19e32c4ebc..29947c090d0be 100644 --- a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java @@ -296,6 +296,7 @@ public void apply(Settings value, Settings current, Settings previous) { IndicesQueryCache.INDICES_CACHE_QUERY_SIZE_SETTING, IndicesQueryCache.INDICES_CACHE_QUERY_COUNT_SETTING, IndicesQueryCache.INDICES_QUERIES_CACHE_ALL_SEGMENTS_SETTING, + IndicesQueryCache.INDICES_QUERY_CACHE_HISTORY_SIZE, IndicesService.CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING, IndicesService.CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING, IndicesService.INDICES_ID_FIELD_DATA_ENABLED_SETTING, diff --git a/server/src/main/java/org/opensearch/index/shard/IndexShard.java b/server/src/main/java/org/opensearch/index/shard/IndexShard.java index eb3999718ca5b..7e343b327c467 100644 --- a/server/src/main/java/org/opensearch/index/shard/IndexShard.java +++ b/server/src/main/java/org/opensearch/index/shard/IndexShard.java @@ -181,6 +181,7 @@ import org.opensearch.index.warmer.ShardIndexWarmerService; import org.opensearch.index.warmer.WarmerStats; import org.opensearch.indices.IndexingMemoryController; +import org.opensearch.indices.IndicesQueryCache; import org.opensearch.indices.IndicesService; import org.opensearch.indices.RemoteStoreSettings; import org.opensearch.indices.cluster.IndicesClusterStateService; @@ -472,7 +473,8 @@ public boolean shouldCache(Query query) { } }; } else { - cachingPolicy = new UsageTrackingQueryCachingPolicy(); + int cachingPolicyHistorySize = IndicesQueryCache.INDICES_QUERY_CACHE_HISTORY_SIZE.get(settings); + cachingPolicy = new UsageTrackingQueryCachingPolicy(cachingPolicyHistorySize); } indexShardOperationPermits = new IndexShardOperationPermits(shardId, threadPool); readerWrapper = indexReaderWrapper; diff --git a/server/src/main/java/org/opensearch/indices/IndicesQueryCache.java b/server/src/main/java/org/opensearch/indices/IndicesQueryCache.java index d52532d2f548e..c8af8e40add37 100644 --- a/server/src/main/java/org/opensearch/indices/IndicesQueryCache.java +++ b/server/src/main/java/org/opensearch/indices/IndicesQueryCache.java @@ -92,6 +92,15 @@ public class IndicesQueryCache implements QueryCache, OpenSearchQueryCache { Property.NodeScope ); + // Passed to the policy controlling access to the query cache. Plug this into TieredQueryCache too. + public static final Setting INDICES_QUERY_CACHE_HISTORY_SIZE = Setting.intSetting( + "indices.queries.cache.history_size", + 256, + 1, + 10_000, + Property.NodeScope + ); + private final LRUQueryCache cache; private final ShardCoreKeyMap shardKeyMap = new ShardCoreKeyMap(); private final Map shardStats = new ConcurrentHashMap<>();