You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2012/06/06 17:15:14 UTC

svn commit: r1346934 - /lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java

Author: markrmiller
Date: Wed Jun  6 15:15:14 2012
New Revision: 1346934

URL: http://svn.apache.org/viewvc?rev=1346934&view=rev
Log:
complete a simple TODO: but we really should only retry on connection errors...

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java?rev=1346934&r1=1346933&r2=1346934&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java Wed Jun  6 15:15:14 2012
@@ -355,12 +355,25 @@ public class SolrCmdDistributor {
             // error during request
             
             // if there is a retry url, we want to retry...
-            // TODO: but we really should only retry on connection errors...
-            if (sreq.retries < MAX_RETRIES_ON_FORWARD && sreq.node.checkRetry()) {
+            boolean isRetry = sreq.node.checkRetry();
+            boolean doRetry = false;
+            int rspCode = sreq.rspCode;
+            
+            // this can happen in certain situations such as shutdown
+            if (isRetry && (rspCode == 404 || rspCode == 403 || rspCode == 503 || rspCode == 500)) {
+              doRetry = true;
+            }
+            
+            // if its an ioexception, lets try again
+            if (isRetry && sreq.exception instanceof IOException) {
+              doRetry = true;
+            }
+            
+            if (isRetry && sreq.retries < MAX_RETRIES_ON_FORWARD && doRetry) {
               sreq.retries++;
               sreq.rspCode = 0;
               sreq.exception = null;
-              SolrException.log(SolrCmdDistributor.log, "forwarding update to " + sreq.node.getUrl() + " failed - retrying ... ");
+              SolrException.log(SolrCmdDistributor.log, "forwarding update to " + sreq.node.getUrl() + " failed - retrying ... ", null);
               Thread.sleep(500);
               submit(sreq);
               checkResponses(block);