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