diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-10-17 22:40:25 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-10-17 22:40:25 +0200 |
commit | a956659db0d09e7242b049c01be39248dad56b67 (patch) | |
tree | 442568814842ec611fb697c363dcb25f399545b8 /vespa-http-client | |
parent | 12a5fcc9b1f923db643e1e7c807d805eab72a752 (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.java | 14 |
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) { |