apache / apache/lucene

Avoid Class.getSimpleName in UsageTrackingQueryCachingPolicy [LUCENE-8005]

Open
#9,053 13 comments 0 reactions 0 assignees View on GitHub
legacy-jira-priority:Major type:enhancement
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.