diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index dee3965495b..5aafe67e713 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -228,6 +228,8 @@ Improvements --------------------- * SOLR-17860: DocBasedVersionConstraintsProcessorFactory now supports PULL replicas. (Houston Putman) +* SOLR-17893: Speed up Remote Proxy for high QPS, utilizing ClusterState caching. (Houston Putman) + Optimizations --------------------- (No changes) diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java index b9f3842b820..c0b78fc1a9f 100644 --- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java +++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java @@ -327,7 +327,7 @@ protected DocCollection resolveDocCollection(String collectionName) { } ZkStateReader zkStateReader = cores.getZkController().getZkStateReader(); Supplier logic = - () -> zkStateReader.getClusterState().getCollectionOrNull(collectionName); + () -> zkStateReader.getClusterState().getCollectionOrNull(collectionName, true); DocCollection docCollection = logic.get(); if (docCollection != null) { @@ -930,7 +930,7 @@ private SolrCore checkProps(ZkNodeProps zkProps) { protected String getRemoteCoreUrl(String collectionName) throws SolrException { ClusterState clusterState = cores.getZkController().getClusterState(); - final DocCollection docCollection = clusterState.getCollectionOrNull(collectionName); + final DocCollection docCollection = clusterState.getCollectionOrNull(collectionName, true); if (docCollection == null) { return null; } diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java index 7d0f80379b2..6a61ad69fe4 100644 --- a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java +++ b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java @@ -762,6 +762,7 @@ public synchronized DocCollection get(boolean allowCached) { Stat freshStats = null; try { freshStats = zkClient.exists(DocCollection.getCollectionPath(collName), null, true); + lastUpdateTime = System.nanoTime(); } catch (Exception e) { } if (freshStats != null