diff --git a/driver-core/src/main/com/mongodb/internal/operation/AsyncCommandBatchCursor.java b/driver-core/src/main/com/mongodb/internal/operation/AsyncCommandBatchCursor.java index 942721a27a..792c10b4bb 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AsyncCommandBatchCursor.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AsyncCommandBatchCursor.java @@ -60,6 +60,7 @@ import static com.mongodb.internal.operation.CommandBatchCursorHelper.getMoreCommandDocument; import static com.mongodb.internal.operation.CommandBatchCursorHelper.logCommandCursorResult; import static com.mongodb.internal.operation.CommandBatchCursorHelper.translateCommandException; +import static com.mongodb.internal.operation.CommandCursorResult.withEmptyResults; import static java.util.Collections.emptyList; class AsyncCommandBatchCursor implements AsyncAggregateResponseBatchCursor { @@ -117,6 +118,7 @@ public void next(final SingleResultCallback> callback) { } if (serverCursorIsNull || !batchResults.isEmpty()) { + commandCursorResult = withEmptyResults(commandCursorResult); funcCallback.onResult(batchResults, null); } else { getMore(localServerCursor, funcCallback); @@ -206,6 +208,7 @@ private void getMoreLoop(final AsyncConnection connection, final ServerCursor se resourceManager.setServerCursor(nextServerCursor); List nextBatch = commandCursorResult.getResults(); if (nextServerCursor == null || !nextBatch.isEmpty()) { + commandCursorResult = withEmptyResults(commandCursorResult); callback.onResult(nextBatch, null); return; } diff --git a/driver-core/src/main/com/mongodb/internal/operation/CommandBatchCursor.java b/driver-core/src/main/com/mongodb/internal/operation/CommandBatchCursor.java index d201976e5e..24ecc99b9f 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CommandBatchCursor.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CommandBatchCursor.java @@ -144,6 +144,7 @@ private List doNext() { List retVal = nextBatch; nextBatch = null; + commandCursorResult = CommandCursorResult.withEmptyResults(commandCursorResult); return retVal; } diff --git a/driver-core/src/main/com/mongodb/internal/operation/CommandCursorResult.java b/driver-core/src/main/com/mongodb/internal/operation/CommandCursorResult.java index 7bfbfb33cb..813d8c145c 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CommandCursorResult.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CommandCursorResult.java @@ -23,6 +23,7 @@ import org.bson.BsonDocument; import org.bson.BsonTimestamp; +import java.util.Collections; import java.util.List; import static com.mongodb.assertions.Assertions.isTrue; @@ -60,6 +61,31 @@ public CommandCursorResult( this.postBatchResumeToken = cursorDocument.getDocument(POST_BATCH_RESUME_TOKEN, null); } + private CommandCursorResult( + final ServerAddress serverAddress, + final List results, + final MongoNamespace namespace, + final long cursorId, + @Nullable final BsonTimestamp operationTime, + @Nullable final BsonDocument postBatchResumeToken) { + this.serverAddress = serverAddress; + this.results = results; + this.namespace = namespace; + this.cursorId = cursorId; + this.operationTime = operationTime; + this.postBatchResumeToken = postBatchResumeToken; + } + + public static CommandCursorResult withEmptyResults(final CommandCursorResult commandCursorResult) { + return new CommandCursorResult<>( + commandCursorResult.getServerAddress(), + Collections.emptyList(), + commandCursorResult.getNamespace(), + commandCursorResult.getCursorId(), + commandCursorResult.getOperationTime(), + commandCursorResult.getPostBatchResumeToken()); + } + /** * Gets the namespace. *