Avoid Class.getSimpleName in UsageTrackingQueryCachingPolicy [LUCENE-8005]
- Dominant language
- Java
- Stars
- 3.6k
- Forks
- 1.4k
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 88
Description
By profiling an Elasticsearch cluster, I found the private method UsageTrackingQueryCachingPolicy.isPointQuery to be quite expensive due to the clazz.getSimpleName() call.
Here is an excerpt from hot_threads:
```
java.lang.Class.getEnclosingMethod0(Native Method)
java.lang.Class.getEnclosingMethodInfo(Class.java:1072)
java.lang.Class.getEnclosingClass(Class.java:1272)
java.lang.Class.getSimpleBinaryName(Class.java:1443)
java.lang.Class.getSimpleName(Class.java:1309)
org.apache.lucene.search.UsageTrackingQueryCachingPolicy.isPointQuery(UsageTrackingQueryCachingPolicy.java:39)
org.apache.lucene.search.UsageTrackingQueryCachingPolicy.isCostly(UsageTrackingQueryCachingPolicy.java:54)
org.apache.lucene.search.UsageTrackingQueryCachingPolicy.minFrequencyToCache(UsageTrackingQueryCachingPolicy.java:121)
org.apache.lucene.search.UsageTrackingQueryCachingPolicy.shouldCache(UsageTrackingQueryCachingPolicy.java:179)
org.elasticsearch.index.shard.ElasticsearchQueryCachingPolicy.shouldCache(ElasticsearchQueryCachingPolicy.java:53)
org.apache.lucene.search.LRUQueryCache$CachingWrapperWeight.bulkScorer(LRUQueryCache.java:806)
org.elasticsearch.indices.IndicesQueryCache$CachingWeightWrapper.bulkScorer(IndicesQueryCache.java:168)
org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:665)
org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:472)
org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:388)
org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:108)
```
---
Migrated from [LUCENE-8005](https://issues.apache.org/jira/browse/LUCENE-8005) by Scott Somerville (@scottsom), updated Oct 24 2017
Attachments: [LUCENE-8005.patch](https://apache.github.io/lucene-jira-archive/attachments/LUCENE-8005/LUCENE-8005.patch) (versions: 2)
Contributor guide
Research direction
Start in UsageTrackingQueryCachingPolicy.isPointQuery, identified in the profiling stack, and review the attached LUCENE-8005.patch for prior context. Confirm how the Class.getSimpleName call affects point-query detection, then verify that the expensive call is avoided without changing caching behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- performance, search
- Issue type
- Refactor
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100