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 2021/01/24 02:18:08 UTC

[lucene-solr] 01/16: @1277 Don't keep going on bulk update request on a 404.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 960063aba921e9e534d97b8ffaef648247992621
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Jan 21 19:36:04 2021 -0600

    @1277 Don't keep going on bulk update request on a 404.
---
 .../org/apache/solr/cloud/RecoveryStrategy.java    |  2 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |  2 +-
 .../solr/handler/component/HttpShardHandler.java   |  2 +-
 .../org/apache/solr/update/SolrCmdDistributor.java | 24 ++++++++++++++++++++--
 .../apache/solr/update/MockingHttp2SolrClient.java |  2 +-
 .../client/solrj/impl/CloudHttp2SolrClient.java    |  2 +-
 .../solr/client/solrj/impl/Http2SolrClient.java    | 14 ++++++-------
 .../solr/client/solrj/impl/LBHttp2SolrClient.java  |  8 ++++----
 .../solr/client/solrj/util/AsyncListener.java      |  2 +-
 9 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
index 68d99fc..8eb64a9 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
@@ -971,7 +971,7 @@ public class RecoveryStrategy implements Runnable, Closeable {
     }
 
     @Override
-    public void onFailure(Throwable throwable) {
+    public void onFailure(Throwable throwable, int code) {
       try {
         latch.countDown();
       } catch (NullPointerException e) {
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index 972d012..1419340 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -1908,7 +1908,7 @@ public class IndexFetcher {
           }
 
           @Override
-          public void onFailure(Throwable throwable) {
+          public void onFailure(Throwable throwable, int code) {
             log.error("Exception fetching file", throwable);
           }
         });
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
index a36744c..31ae407 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
@@ -201,7 +201,7 @@ public class HttpShardHandler extends ShardHandler {
         responses.add(srsp);
       }
 
-      public void onFailure(Throwable throwable) {
+      public void onFailure(Throwable throwable, int code) {
         ssr.elapsedTime = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
         srsp.setException(throwable);
         if (throwable instanceof SolrException) {
diff --git a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
index dc643e8..8ef8913 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
@@ -66,6 +66,7 @@ public class SolrCmdDistributor implements Closeable {
   private final Http2SolrClient solrClient;
   private volatile boolean closed;
   private final Set<Cancellable> cancels = ConcurrentHashMap.newKeySet(32);
+  private volatile Throwable cancelExeption;
 
   public SolrCmdDistributor(ZkStateReader zkStateReader, UpdateShardHandler updateShardHandler) {
     assert ObjectReleaseTracker.track(this);
@@ -83,6 +84,13 @@ public class SolrCmdDistributor implements Closeable {
 
   public void finish() {
     assert !finished : "lifecycle sanity check";
+
+    if (cancelExeption != null) {
+      Throwable exp = cancelExeption;
+      cancelExeption = null;
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, exp);
+    }
+
     if (isClosed == null || isClosed != null && !isClosed.isClosed()) {
       solrClient.waitForOutstandingRequests();
     } else {
@@ -222,6 +230,12 @@ public class SolrCmdDistributor implements Closeable {
 
   private void submit(final Req req) {
 
+    if (cancelExeption != null) {
+      Throwable exp = cancelExeption;
+      cancelExeption = null;
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, exp);
+    }
+
     if (log.isDebugEnabled()) {
       log.debug("sending update to " + req.node.getUrl() + " retry:" + req.retries + " " + req.cmd + " params:" + req.uReq.getParams());
     }
@@ -266,9 +280,15 @@ public class SolrCmdDistributor implements Closeable {
         }
 
         @Override
-        public void onFailure(Throwable t) {
-          log.error("Exception sending dist update", t);
+        public void onFailure(Throwable t, int code) {
+          log.error("Exception sending dist update {}", code, t);
           cancels.remove(cancelIndex);
+
+          if (code == 404) {
+            cancelExeption = t;
+            return;
+          }
+
           Error error = new Error();
           error.t = t;
           error.req = req;
diff --git a/solr/core/src/test/org/apache/solr/update/MockingHttp2SolrClient.java b/solr/core/src/test/org/apache/solr/update/MockingHttp2SolrClient.java
index 93bbc64..aed9391 100644
--- a/solr/core/src/test/org/apache/solr/update/MockingHttp2SolrClient.java
+++ b/solr/core/src/test/org/apache/solr/update/MockingHttp2SolrClient.java
@@ -146,7 +146,7 @@ public class MockingHttp2SolrClient extends Http2SolrClient {
           e = new SolrServerException(e);
         }
       }
-      asyncListener.onFailure(e);
+      asyncListener.onFailure(e, 500);
     }
 
     return super.asyncRequest(request, collection, asyncListener);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
index d9c8fe9..359a4d8 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
@@ -331,7 +331,7 @@ public class CloudHttp2SolrClient extends BaseCloudSolrClient {
     }
 
     @Override
-    public void onFailure(Throwable t) {
+    public void onFailure(Throwable t, int code) {
       tsExceptions.put(url, t);
       latch.countDown();
     }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index 6298773..945fb62 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -443,7 +443,7 @@ public class Http2SolrClient extends SolrClient {
         req.request.idleTimeout(idleTimeout, TimeUnit.MILLISECONDS);
       }
     } catch (Exception e) {
-      asyncListener.onFailure(e);
+      asyncListener.onFailure(e, 500);
       return FAILED_MAKING_REQUEST_CANCELLABLE;
     }
     final ResponseParser parser = solrRequest.getResponseParser() == null
@@ -470,7 +470,7 @@ public class Http2SolrClient extends SolrClient {
 
             } catch (Exception e) {
               if (SolrException.getRootCause(e) != CANCELLED_EXCEPTION) {
-                asyncListener.onFailure(e);
+                asyncListener.onFailure(e, 500);
               }
             } finally {
               arrived = true;
@@ -485,7 +485,7 @@ public class Http2SolrClient extends SolrClient {
           super.onFailure(response, failure);
           try {
             if (SolrException.getRootCause(failure) != CANCELLED_EXCEPTION) {
-              asyncListener.onFailure(failure);
+              asyncListener.onFailure(failure, response.getStatus());
             } else {
               asyncListener.onSuccess(new NamedList<>());
             }
@@ -521,7 +521,7 @@ public class Http2SolrClient extends SolrClient {
     } catch (Exception e) {
 
       if (e != CANCELLED_EXCEPTION) {
-        asyncListener.onFailure(e);
+        asyncListener.onFailure(e, 500);
       }
       //log.info("UNREGISTER TRACKER");
      // asyncTracker.arrive();
@@ -540,14 +540,14 @@ public class Http2SolrClient extends SolrClient {
     try {
       req = makeRequest(solrRequest, collection);
     } catch (Exception e) {
-      asyncListener.onFailure(e);
+      asyncListener.onFailure(e, 500);
       return FAILED_MAKING_REQUEST_CANCELLABLE;
     }
     MyInputStreamResponseListener mysl = new MyInputStreamResponseListener(httpClient, asyncListener);
     try {
       req.request.send(mysl);
     } catch (Exception e) {
-      asyncListener.onFailure(e);
+      asyncListener.onFailure(e, 500);
 
       throw new SolrException(SolrException.ErrorCode.UNKNOWN, e);
     }
@@ -1461,7 +1461,7 @@ public class Http2SolrClient extends SolrClient {
     public void onFailure(Response response, Throwable failure) {
       super.onFailure(response, failure);
       try {
-        asyncListener.onFailure(new SolrServerException(failure.getMessage(), failure));
+        asyncListener.onFailure(new SolrServerException(failure.getMessage(), failure), response.getStatus());
       } catch (Exception e) {
         log.error("Exception in async failure listener", e);
       }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
index 13a42ef..756f239 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
@@ -120,7 +120,7 @@ public class LBHttp2SolrClient extends LBSolrClient {
           try {
             url = it.nextOrError(e);
           } catch (Exception ex) {
-            asyncListener.onFailure(e);
+            asyncListener.onFailure(e, 500);
             return;
           }
           try {
@@ -136,7 +136,7 @@ public class LBHttp2SolrClient extends LBSolrClient {
             MDC.remove("LBSolrClient.url");
           }
         } else {
-          asyncListener.onFailure(e);
+          asyncListener.onFailure(e, 500);
         }
       }
     };
@@ -144,7 +144,7 @@ public class LBHttp2SolrClient extends LBSolrClient {
       Cancellable cancellable = doRequest(it.nextOrError(), req, rsp, isNonRetryable, it.isServingZombieServer(), retryListener);
       currentCancellable.set(cancellable);
     } catch (SolrServerException e) {
-      asyncListener.onFailure(e);
+      asyncListener.onFailure(e, 500);
     }
     return () -> {
 
@@ -177,7 +177,7 @@ public class LBHttp2SolrClient extends LBSolrClient {
       }
 
       @Override
-      public void onFailure(Throwable oe) {
+      public void onFailure(Throwable oe, int code) {
         try {
           throw (Exception) oe;
         } catch (BaseHttpSolrClient.RemoteExecutionException e) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/util/AsyncListener.java b/solr/solrj/src/java/org/apache/solr/client/solrj/util/AsyncListener.java
index 1ddd41e..79c07f0 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/util/AsyncListener.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/util/AsyncListener.java
@@ -31,6 +31,6 @@ public interface AsyncListener<T> {
   }
 
   void onSuccess(T t);
-  void onFailure(Throwable throwable);
+  void onFailure(Throwable throwable, int code);
 
 }