jpountz commented on a change in pull request #916: LUCENE-8213: Asynchronous 
Caching in LRUQueryCache
URL: https://github.com/apache/lucene-solr/pull/916#discussion_r331190828
 
 

 ##########
 File path: lucene/core/src/java/org/apache/lucene/search/LRUQueryCache.java
 ##########
 @@ -88,13 +92,47 @@
  * @lucene.experimental
  */
 public class LRUQueryCache implements QueryCache, Accountable {
+  /** Act as key for the inflight queries map */
+  private static class MapKey {
+    private final Query query;
+    private final IndexReader.CacheKey cacheKey;
+
+    public MapKey(Query query, IndexReader.CacheKey cacheKey) {
+      this.query = query;
+      this.cacheKey = cacheKey;
+    }
+
+    public Query getQuery() {
+      return query;
+    }
+
+    public IndexReader.CacheKey getCacheKey() {
+      return cacheKey;
+    }
+
+    @Override
+    public int hashCode() { return query.hashCode() ^ cacheKey.hashCode(); }
 
 Review comment:
   Can you use the usual polynomial formula `h0 + 31 * (h1 + 31 * ( ... ))`. 
The use of `^` is fine here, but it is a source of performance bugs in some 
scenarios. For instance Java's AbstractMap.Entry does this, which means that 
whenever you map a key to itself, the hashcode is 0 (because both hashcodes are 
equal). This is a lot of collisions if you have lots of entries that have the 
same key and value. So I prefer avoiding this pattern.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to