summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-10-07 16:58:24 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-10-07 16:58:24 +0200
commit322f2c1d29e55aa798037193a4f13a48a137484f (patch)
tree2f51686481fd1d2852b1cbe5175573c701203751 /vespaclient-container-plugin
parentd8365f1cde0c00a5a671f87c0baad461beff28c2 (diff)
Destroy visitor session in other thread to avoid deadlock, and 1000 queue size
Diffstat (limited to 'vespaclient-container-plugin')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/DocumentOperationExecutorImpl.java12
-rw-r--r--vespaclient-container-plugin/src/main/resources/configdefinitions/document-operation-executor.def2
2 files changed, 11 insertions, 3 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/DocumentOperationExecutorImpl.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/DocumentOperationExecutorImpl.java
index 7074d363316..79c63522686 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/DocumentOperationExecutorImpl.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/DocumentOperationExecutorImpl.java
@@ -40,6 +40,7 @@ import java.util.StringJoiner;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -85,6 +86,7 @@ public class DocumentOperationExecutorImpl implements DocumentOperationExecutor
private final DelayQueue throttled;
private final DelayQueue timeouts;
private final Map<VisitorControlHandler, VisitorSession> visits = new ConcurrentHashMap<>();
+ private final Executor visitSessionShutdownExecutor = Executors.newSingleThreadExecutor();
public DocumentOperationExecutorImpl(ClusterListConfig clustersConfig, AllClustersBucketSpacesConfig bucketsConfig,
DocumentOperationExecutorConfig executorConfig, DocumentAccess access, Clock clock) {
@@ -212,12 +214,18 @@ public class DocumentOperationExecutorImpl implements DocumentOperationExecutor
context.error(ERROR, message != null ? message : "Visiting failed");
}
done.set(true); // This may be reached before dispatching thread is done putting us in the map.
- visits.computeIfPresent(this, (__, session) -> { session.destroy(); return null; });
+ visits.computeIfPresent(this, (__, session) -> {
+ visitSessionShutdownExecutor.execute(() -> session.destroy());
+ return null;
+ });
}
});
visits.put(parameters.getControlHandler(), access.createVisitorSession(parameters));
if (done.get())
- visits.computeIfPresent(parameters.getControlHandler(), (__, session) -> { session.destroy(); return null; });
+ visits.computeIfPresent(parameters.getControlHandler(), (__, session) -> {
+ visitSessionShutdownExecutor.execute(() -> session.destroy());
+ return null;
+ });
}
catch (IllegalArgumentException | ParseException e) {
context.error(BAD_REQUEST, Exceptions.toMessageString(e));
diff --git a/vespaclient-container-plugin/src/main/resources/configdefinitions/document-operation-executor.def b/vespaclient-container-plugin/src/main/resources/configdefinitions/document-operation-executor.def
index 19f4f50648b..770189f90f5 100644
--- a/vespaclient-container-plugin/src/main/resources/configdefinitions/document-operation-executor.def
+++ b/vespaclient-container-plugin/src/main/resources/configdefinitions/document-operation-executor.def
@@ -11,5 +11,5 @@ defaultTimeoutSeconds int default=180
visitTimeoutSeconds int default=120
# Bound on number of document operations to keep in retry queue — further operations are rejected
-maxThrottled int default=200
+maxThrottled int default=1000