summaryrefslogtreecommitdiffstats
path: root/vespa-http-client
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-10-17 22:40:25 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-17 22:40:25 +0200
commita956659db0d09e7242b049c01be39248dad56b67 (patch)
tree442568814842ec611fb697c363dcb25f399545b8 /vespa-http-client
parent12a5fcc9b1f923db643e1e7c807d805eab72a752 (diff)
Avoid holding the global monitor lock while sending blocked document.
Holding the global lock will trying to put on a full Q is doomed to deadlock with another IOThread.
Diffstat (limited to 'vespa-http-client')
-rw-r--r--vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationProcessor.java14
1 files changed, 9 insertions, 5 deletions
diff --git a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationProcessor.java b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationProcessor.java
index d300bead9c1..6d39584769c 100644
--- a/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationProcessor.java
+++ b/vespa-http-client/src/main/java/com/yahoo/vespa/http/client/core/operationProcessor/OperationProcessor.java
@@ -56,7 +56,7 @@ public class OperationProcessor {
private final boolean blockOperationsToSameDocument;
private int traceCounter = 0;
private final boolean traceToStderr;
- private final String clientId = new BigInteger(130, random).toString(32);;
+ private final String clientId = new BigInteger(130, random).toString(32);
public OperationProcessor(
IncompleteResultsThrottler incompleteResultsThrottler,
@@ -162,7 +162,8 @@ public class OperationProcessor {
}
private Result process(EndpointResult endpointResult, int clusterId) {
-
+ Result result;
+ Document blockedDocumentToSend = null;
synchronized (monitor) {
if (!docSendInfoByOperationId.containsKey(endpointResult.getOperationId())) {
log.finer("Received out-of-order or too late result, discarding: " + endpointResult);
@@ -184,7 +185,7 @@ public class OperationProcessor {
return null;
}
- Result result = documentSendInfo.createResult();
+ result = documentSendInfo.createResult();
docSendInfoByOperationId.remove(endpointResult.getOperationId());
String documentId = documentSendInfo.getDocument().getDocumentId();
@@ -196,10 +197,13 @@ public class OperationProcessor {
if (blockedDocuments.isEmpty()) {
inflightDocumentIds.remove(documentId);
} else {
- sendToClusters(blockedDocuments.remove(0));
+ blockedDocumentToSend = blockedDocuments.remove(0);
}
- return result;
}
+ if (blockedDocumentToSend != null) {
+ sendToClusters(blockedDocumentToSend);
+ }
+ return result;
}
public void resultReceived(EndpointResult endpointResult, int clusterId) {