SOLR-6603: LBHttpSolrServer - lazily allocate skipped-zombie-servers list. (This closes #97)

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1630285 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Shalin Shekhar Mangar 2014-10-09 05:32:06 +00:00
parent d51eef911f
commit d5191d5674
2 changed files with 23 additions and 7 deletions

View File

@ -214,6 +214,12 @@ Bug Fixes
* SOLR-6545: Query field list with wild card on dynamic field fails. * SOLR-6545: Query field list with wild card on dynamic field fails.
(Burke Webster, Xu Zhang, shalin) (Burke Webster, Xu Zhang, shalin)
Optimizations
----------------------
* SOLR-6603: LBHttpSolrServer - lazily allocate skipped-zombie-servers list.
(Christine Poerschke via shalin)
Other Changes Other Changes
---------------------- ----------------------

View File

@ -286,7 +286,7 @@ public class LBHttpSolrServer extends SolrServer {
Rsp rsp = new Rsp(); Rsp rsp = new Rsp();
Exception ex = null; Exception ex = null;
boolean isUpdate = req.request instanceof IsUpdateRequest; boolean isUpdate = req.request instanceof IsUpdateRequest;
List<ServerWrapper> skipped = new ArrayList<>(req.getNumDeadServersToTry()); List<ServerWrapper> skipped = null;
for (String serverStr : req.getServers()) { for (String serverStr : req.getServers()) {
serverStr = normalize(serverStr); serverStr = normalize(serverStr);
@ -294,8 +294,16 @@ public class LBHttpSolrServer extends SolrServer {
ServerWrapper wrapper = zombieServers.get(serverStr); ServerWrapper wrapper = zombieServers.get(serverStr);
if (wrapper != null) { if (wrapper != null) {
// System.out.println("ZOMBIE SERVER QUERIED: " + serverStr); // System.out.println("ZOMBIE SERVER QUERIED: " + serverStr);
if (skipped.size() < req.getNumDeadServersToTry()) final int numDeadServersToTry = req.getNumDeadServersToTry();
skipped.add(wrapper); if (numDeadServersToTry > 0) {
if (skipped == null) {
skipped = new ArrayList<>(numDeadServersToTry);
skipped.add(wrapper);
}
else if (skipped.size() < numDeadServersToTry) {
skipped.add(wrapper);
}
}
continue; continue;
} }
rsp.server = serverStr; rsp.server = serverStr;
@ -308,10 +316,12 @@ public class LBHttpSolrServer extends SolrServer {
} }
// try the servers we previously skipped // try the servers we previously skipped
for (ServerWrapper wrapper : skipped) { if (skipped != null) {
ex = doRequest(wrapper.solrServer, req, rsp, isUpdate, true, wrapper.getKey()); for (ServerWrapper wrapper : skipped) {
if (ex == null) { ex = doRequest(wrapper.solrServer, req, rsp, isUpdate, true, wrapper.getKey());
return rsp; // SUCCESS if (ex == null) {
return rsp; // SUCCESS
}
} }
} }