You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2016/08/02 01:07:34 UTC
[14/40] lucene-solr:apiv2: SOLR-9334:
CloudSolrClient.collectionStateCache is unbounded
SOLR-9334: CloudSolrClient.collectionStateCache is unbounded
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4ed68bc8
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4ed68bc8
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4ed68bc8
Branch: refs/heads/apiv2
Commit: 4ed68bc80e7990f4acd1b73dce3b5b8cd16d9fe5
Parents: dcc9a4b
Author: Noble Paul <no...@apache.org>
Authored: Mon Jul 25 20:47:19 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Mon Jul 25 20:47:19 2016 +0530
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +++
.../solr/client/solrj/impl/CloudSolrClient.java | 23 +++++++++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ed68bc8/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 55fae47..e392df3 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -161,6 +161,9 @@ Bug Fixes
* SOLR-9309: Fix SolrCloud RTG response structure when multi ids requested but only 1 found (hossman)
+* SOLR-9334: CloudSolrClient.collectionStateCache is unbounded (noble)
+
+
Optimizations
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ed68bc8/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index 876f7f8..b4c9b4f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -38,6 +38,8 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import org.apache.http.NoHttpResponseException;
import org.apache.http.client.HttpClient;
@@ -147,10 +149,16 @@ public class CloudSolrClient extends SolrClient {
protected final Map<String, ExpiringCachedDocCollection> collectionStateCache = new ConcurrentHashMap<String, ExpiringCachedDocCollection>(){
+ final Lock evictLock = new ReentrantLock(true);
@Override
public ExpiringCachedDocCollection get(Object key) {
ExpiringCachedDocCollection val = super.get(key);
- if(val == null) return null;
+ if(val == null) {
+ // a new collection is likely to be added now.
+ //check if there are stale items and remove them
+ evictStale();
+ return null;
+ }
if(val.isExpired(timeToLive)) {
super.remove(key);
return null;
@@ -158,6 +166,19 @@ public class CloudSolrClient extends SolrClient {
return val;
}
+ void evictStale() {
+ if(!evictLock.tryLock()) return;
+ try {
+ for (Entry<String, ExpiringCachedDocCollection> e : entrySet()) {
+ if(e.getValue().isExpired(timeToLive)){
+ super.remove(e.getKey());
+ }
+ }
+ } finally {
+ evictLock.unlock();
+ }
+ }
+
};
class ExpiringCachedDocCollection {