summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-02-12 13:47:10 +0100
committerGitHub <noreply@github.com>2018-02-12 13:47:10 +0100
commit7d8fdd685c3fedb2b263b356c67f84d92a2a6f89 (patch)
treec0dede12d8cdee2cf504525684b745c071563738
parentb5b25dd286fd9be627081eb982db26df5a6faba6 (diff)
parentf7f9a2546d53fd748d78160b5af1111894f92509 (diff)
Merge pull request #5012 from vespa-engine/hmusum/avoid-sending-response-if-client-is-gone
No point in replying if connection back to client is gone
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java16
1 files changed, 12 insertions, 4 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
index 2ef0393e215..a5f288bf254 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/RpcServer.java
@@ -116,7 +116,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
this.metrics = metrics.getOrCreateMetricUpdater(Collections.<String, String>emptyMap());
this.hostLivenessTracker = hostLivenessTracker;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(config.maxgetconfigclients());
- int numberOfRpcThreads = config.numRpcThreads() == 0 ? Runtime.getRuntime().availableProcessors() : config.numRpcThreads();
+ int numberOfRpcThreads = (config.numRpcThreads() == 0) ? Runtime.getRuntime().availableProcessors() : config.numRpcThreads();
executorService = new ThreadPoolExecutor(numberOfRpcThreads, numberOfRpcThreads,
0, TimeUnit.SECONDS, workQueue, ThreadFactoryFactory.getThreadFactory(THREADPOOL_NAME));
delayedConfigResponses = new DelayedConfigResponses(this, config.numDelayedResponseThreads());
@@ -462,7 +462,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
request.parameters().add(new StringValue(fileData.filename()));
request.parameters().add(new StringValue(fileData.type().name()));
request.parameters().add(new Int64Value(fileData.size()));
- target.invokeSync(request, 600);
+ invokeRpcIfValidConnection(request);
if (request.isError()) {
log.warning("Failed delivering meta for reference '" + fileData.fileReference().value() + "' with file '" + fileData.filename() + "' to " +
target.toString() + " with error: '" + request.errorMessage() + "'.");
@@ -480,7 +480,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
request.parameters().add(new Int32Value(session));
request.parameters().add(new Int32Value(partId));
request.parameters().add(new DataValue(buf));
- target.invokeSync(request, 600);
+ invokeRpcIfValidConnection(request);
if (request.isError()) {
throw new IllegalArgumentException("Failed delivering reference '" + ref.value() + "' to " +
target.toString() + " with error: '" + request.errorMessage() + "'.");
@@ -497,7 +497,7 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
request.parameters().add(new Int64Value(fileData.xxhash()));
request.parameters().add(new Int32Value(status.getCode()));
request.parameters().add(new StringValue(status.getDescription()));
- target.invokeSync(request, 600);
+ invokeRpcIfValidConnection(request);
if (request.isError()) {
throw new IllegalArgumentException("Failed delivering reference '" + fileData.fileReference().value() + "' with file '" + fileData.filename() + "' to " +
target.toString() + " with error: '" + request.errorMessage() + "'.");
@@ -507,6 +507,14 @@ public class RpcServer implements Runnable, ReloadListener, TenantListener {
}
}
}
+
+ private void invokeRpcIfValidConnection(Request request) {
+ if (target.isValid()) {
+ target.invokeSync(request, 600);
+ } else {
+ throw new RuntimeException("Connection to " + target + " is invalid", target.getConnectionLostReason());
+ }
+ }
}
@SuppressWarnings("UnusedDeclaration")