Details
Description
In CloudSolrServer.request, urlLists (and the like) is updated if lastClusterStateHashCode is different from the current hash code of clusterState. However, each time this happen, only the cache entry for the current collection being requested is updated. In the following condition this causes a race:
query collection A so a cache entry exists
update collection A
query collection B, request method notices the hash code changed and update cache for collection B, updates lastClusterStateHashCode
query collection A, since lastClusterStateHashCode has been updated, no update for cache for collection A even though it's stale
Can fix one of two ways:
1. Track lastClusterStateHashCode per collection and lazily update each entry
2. Every time we notice lastClusterStateHashCode != clusterState.hashCode(),
2a. rebuild the entire cache for all collections
2b. clear all current cache for collections