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);
}