diff --git a/driver-core/src/main/com/mongodb/internal/TimeoutContext.java b/driver-core/src/main/com/mongodb/internal/TimeoutContext.java index 4e63db8730c..35ffedbb16f 100644 --- a/driver-core/src/main/com/mongodb/internal/TimeoutContext.java +++ b/driver-core/src/main/com/mongodb/internal/TimeoutContext.java @@ -29,6 +29,7 @@ import java.util.Optional; import java.util.function.LongConsumer; +import static com.mongodb.assertions.Assertions.assertNotNull; import static com.mongodb.assertions.Assertions.assertNull; import static com.mongodb.assertions.Assertions.isTrue; import static com.mongodb.internal.VisibleForTesting.AccessModifier.PRIVATE; @@ -198,7 +199,7 @@ public void runMaxTimeMS(final LongConsumer onRemaining) { runWithFixedTimeout(timeoutSettings.getMaxTimeMS(), onRemaining); return; } - timeout.shortenBy(minRoundTripTimeMS, MILLISECONDS) + assertNotNull(timeoutIncludingRoundTrip()) .run(MILLISECONDS, () -> {}, onRemaining, diff --git a/driver-core/src/main/com/mongodb/internal/connection/InternalStreamConnection.java b/driver-core/src/main/com/mongodb/internal/connection/InternalStreamConnection.java index de12e5f092f..c1b12f9f18a 100644 --- a/driver-core/src/main/com/mongodb/internal/connection/InternalStreamConnection.java +++ b/driver-core/src/main/com/mongodb/internal/connection/InternalStreamConnection.java @@ -582,17 +582,19 @@ private void sendAndReceiveAsyncInternal(final CommandMessage message, final private void sendCommandMessageAsync(final int messageId, final Decoder decoder, final OperationContext operationContext, final SingleResultCallback callback, final ByteBufferBsonOutput bsonOutput, final CommandEventSender commandEventSender, final boolean responseExpected) { - List byteBuffers = bsonOutput.getByteBuffers(); - boolean[] shouldReturn = {false}; Timeout.onExistsAndExpired(operationContext.getTimeoutContext().timeoutIncludingRoundTrip(), () -> { - callback.onResult(null, createMongoOperationTimeoutExceptionAndClose(commandEventSender)); + bsonOutput.close(); + MongoOperationTimeoutException operationTimeoutException = TimeoutContext.createMongoRoundTripTimeoutException(); + commandEventSender.sendFailedEvent(operationTimeoutException); + callback.onResult(null, operationTimeoutException); shouldReturn[0] = true; }); if (shouldReturn[0]) { return; } + List byteBuffers = bsonOutput.getByteBuffers(); sendMessageAsync(byteBuffers, messageId, operationContext, (result, t) -> { ResourceUtil.release(byteBuffers); bsonOutput.close(); @@ -638,13 +640,6 @@ private void sendCommandMessageAsync(final int messageId, final Decoder d }); } - private MongoOperationTimeoutException createMongoOperationTimeoutExceptionAndClose(final CommandEventSender commandEventSender) { - MongoOperationTimeoutException e = TimeoutContext.createMongoRoundTripTimeoutException(); - close(); - commandEventSender.sendFailedEvent(e); - return e; - } - private T getCommandResult(final Decoder decoder, final ResponseBuffers responseBuffers, final int messageId,