diff --git a/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java b/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java index 8410a030185..6ebcfda6dbe 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java @@ -37,7 +37,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -abstract class AbstractWriteSearchIndexOperation implements AsyncWriteOperation, WriteOperation { +abstract class AbstractWriteSearchIndexOperation implements WriteOperation { private final MongoNamespace namespace; AbstractWriteSearchIndexOperation(final MongoNamespace namespace) { diff --git a/driver-core/src/main/com/mongodb/internal/operation/AggregateOperation.java b/driver-core/src/main/com/mongodb/internal/operation/AggregateOperation.java index f9f25cd5fe1..1c9abfc68ca 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AggregateOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AggregateOperation.java @@ -41,7 +41,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class AggregateOperation implements AsyncExplainableReadOperation>, ExplainableReadOperation> { +public class AggregateOperation implements ReadOperationExplainable { private final AggregateOperationImpl wrapped; public AggregateOperation(final MongoNamespace namespace, final List pipeline, final Decoder decoder) { @@ -151,13 +151,7 @@ public void executeAsync(final AsyncReadBinding binding, final SingleResultCallb } @Override - public ReadOperation asExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { - return createExplainableOperation(verbosity, resultDecoder); - } - - @Override - public AsyncReadOperation asAsyncExplainableOperation(@Nullable final ExplainVerbosity verbosity, - final Decoder resultDecoder) { + public ReadOperationSimple asExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { return createExplainableOperation(verbosity, resultDecoder); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/AggregateOperationImpl.java b/driver-core/src/main/com/mongodb/internal/operation/AggregateOperationImpl.java index 3a650fc2f9b..4c9bc3828b7 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AggregateOperationImpl.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AggregateOperationImpl.java @@ -52,7 +52,7 @@ import static com.mongodb.internal.operation.SyncOperationHelper.CommandReadTransformer; import static com.mongodb.internal.operation.SyncOperationHelper.executeRetryableRead; -class AggregateOperationImpl implements AsyncReadOperation>, ReadOperation> { +class AggregateOperationImpl implements ReadOperationCursor { private static final String COMMAND_NAME = "aggregate"; private static final String RESULT = "result"; private static final String CURSOR = "cursor"; diff --git a/driver-core/src/main/com/mongodb/internal/operation/AggregateToCollectionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/AggregateToCollectionOperation.java index 022c00383bc..16f33ad45e5 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AggregateToCollectionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AggregateToCollectionOperation.java @@ -54,7 +54,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class AggregateToCollectionOperation implements ReadOperation, AsyncReadOperation { +public class AggregateToCollectionOperation implements ReadOperationSimple { private static final String COMMAND_NAME = "aggregate"; private final MongoNamespace namespace; private final List pipeline; diff --git a/driver-core/src/main/com/mongodb/internal/operation/AsyncOperations.java b/driver-core/src/main/com/mongodb/internal/operation/AsyncOperations.java deleted file mode 100644 index a70af7c64fd..00000000000 --- a/driver-core/src/main/com/mongodb/internal/operation/AsyncOperations.java +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mongodb.internal.operation; - -import com.mongodb.AutoEncryptionSettings; -import com.mongodb.MongoNamespace; -import com.mongodb.ReadConcern; -import com.mongodb.ReadPreference; -import com.mongodb.WriteConcern; -import com.mongodb.bulk.BulkWriteResult; -import com.mongodb.client.cursor.TimeoutMode; -import com.mongodb.client.model.BulkWriteOptions; -import com.mongodb.client.model.Collation; -import com.mongodb.client.model.CountOptions; -import com.mongodb.client.model.CreateCollectionOptions; -import com.mongodb.client.model.CreateIndexOptions; -import com.mongodb.client.model.CreateViewOptions; -import com.mongodb.client.model.DeleteOptions; -import com.mongodb.client.model.DropCollectionOptions; -import com.mongodb.client.model.DropIndexOptions; -import com.mongodb.client.model.EstimatedDocumentCountOptions; -import com.mongodb.client.model.FindOneAndDeleteOptions; -import com.mongodb.client.model.FindOneAndReplaceOptions; -import com.mongodb.client.model.FindOneAndUpdateOptions; -import com.mongodb.client.model.IndexModel; -import com.mongodb.client.model.InsertManyOptions; -import com.mongodb.client.model.InsertOneOptions; -import com.mongodb.client.model.RenameCollectionOptions; -import com.mongodb.client.model.ReplaceOptions; -import com.mongodb.client.model.SearchIndexModel; -import com.mongodb.client.model.UpdateOptions; -import com.mongodb.client.model.WriteModel; -import com.mongodb.client.model.bulk.ClientBulkWriteOptions; -import com.mongodb.client.model.bulk.ClientBulkWriteResult; -import com.mongodb.client.model.bulk.ClientNamespacedWriteModel; -import com.mongodb.client.model.changestream.FullDocument; -import com.mongodb.client.model.changestream.FullDocumentBeforeChange; -import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.client.model.AggregationLevel; -import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; -import com.mongodb.lang.Nullable; -import org.bson.BsonDocument; -import org.bson.BsonTimestamp; -import org.bson.BsonValue; -import org.bson.codecs.Decoder; -import org.bson.codecs.configuration.CodecRegistry; -import org.bson.conversions.Bson; - -import java.util.List; - -import static com.mongodb.assertions.Assertions.assertNotNull; -import static java.util.concurrent.TimeUnit.MILLISECONDS; - -/** - *

This class is not part of the public API and may be removed or changed at any time

- */ -public final class AsyncOperations { - private final Operations operations; - private final TimeoutSettings timeoutSettings; - - public AsyncOperations(final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, - final CodecRegistry codecRegistry, final ReadConcern readConcern, final WriteConcern writeConcern, - final boolean retryWrites, final boolean retryReads, final TimeoutSettings timeoutSettings) { - WriteConcern writeConcernToUse = writeConcern; - if (timeoutSettings.getTimeoutMS() != null) { - writeConcernToUse = assertNotNull(WriteConcernHelper.cloneWithoutTimeout(writeConcern)); - } - this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcernToUse, - retryWrites, retryReads); - this.timeoutSettings = timeoutSettings; - } - - public MongoNamespace getNamespace() { - return assertNotNull(operations.getNamespace()); - } - - public Class getDocumentClass() { - return operations.getDocumentClass(); - } - - public ReadPreference getReadPreference() { - return operations.getReadPreference(); - } - - public CodecRegistry getCodecRegistry() { - return operations.getCodecRegistry(); - } - - public ReadConcern getReadConcern() { - return operations.getReadConcern(); - } - - public WriteConcern getWriteConcern() { - return operations.getWriteConcern(); - } - - public TimeoutSettings getTimeoutSettings() { - return timeoutSettings; - } - - public boolean isRetryWrites() { - return operations.isRetryWrites(); - } - - public boolean isRetryReads() { - return operations.isRetryReads(); - } - - public TimeoutSettings createTimeoutSettings(final long maxTimeMS) { - return timeoutSettings.withMaxTimeMS(maxTimeMS); - } - - public TimeoutSettings createTimeoutSettings(final long maxTimeMS, final long maxAwaitTimeMS) { - return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(maxTimeMS, maxAwaitTimeMS); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final CountOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final EstimatedDocumentCountOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOptions options) { - return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(options.getMaxTime(MILLISECONDS), options.getMaxAwaitTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndDeleteOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndReplaceOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndUpdateOptions options) { - return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); - } - - public AsyncReadOperation countDocuments(final Bson filter, final CountOptions options) { - return operations.countDocuments(filter, options); - } - - public AsyncReadOperation estimatedDocumentCount(final EstimatedDocumentCountOptions options) { - return operations.estimatedDocumentCount(options); - } - - public AsyncReadOperation> findFirst(final Bson filter, final Class resultClass, - final FindOptions options) { - return operations.findFirst(filter, resultClass, options); - } - - public AsyncExplainableReadOperation> find(final Bson filter, final Class resultClass, - final FindOptions options) { - return operations.find(filter, resultClass, options); - } - - public AsyncReadOperation> find(final MongoNamespace findNamespace, final Bson filter, - final Class resultClass, final FindOptions options) { - return operations.find(findNamespace, filter, resultClass, options); - } - - public AsyncReadOperation> distinct(final String fieldName, final Bson filter, - final Class resultClass, final Collation collation, final BsonValue comment, final Bson hint, - final String hintString) { - return operations.distinct(fieldName, filter, resultClass, collation, comment, hint, hintString); - } - - public AsyncExplainableReadOperation> aggregate( - final List pipeline, - final Class resultClass, - @Nullable final TimeoutMode timeoutMode, - @Nullable final Integer batchSize, - final Collation collation, final Bson hint, - final String hintString, - final BsonValue comment, - final Bson variables, - final Boolean allowDiskUse, - final AggregationLevel aggregationLevel) { - return operations.aggregate(pipeline, resultClass, timeoutMode, batchSize, collation, hint, hintString, - comment, variables, allowDiskUse, aggregationLevel); - } - - public AsyncReadOperation aggregateToCollection(final List pipeline, - @Nullable final TimeoutMode timeoutMode, final Boolean allowDiskUse, final Boolean bypassDocumentValidation, - final Collation collation, final Bson hint, final String hintString, final BsonValue comment, - final Bson variables, final AggregationLevel aggregationLevel) { - return operations.aggregateToCollection(pipeline, timeoutMode, allowDiskUse, bypassDocumentValidation, collation, hint, - hintString, comment, variables, aggregationLevel); - } - - @SuppressWarnings("deprecation") - public AsyncWriteOperation mapReduceToCollection(final String databaseName, final String collectionName, - final String mapFunction, final String reduceFunction, - final String finalizeFunction, final Bson filter, final int limit, - final boolean jsMode, final Bson scope, - final Bson sort, final boolean verbose, - final com.mongodb.client.model.MapReduceAction action, - final Boolean bypassDocumentValidation, final Collation collation) { - return operations.mapReduceToCollection(databaseName, collectionName, mapFunction, reduceFunction, finalizeFunction, filter, limit, - jsMode, scope, sort, verbose, action, bypassDocumentValidation, collation); - } - - public AsyncReadOperation> mapReduce(final String mapFunction, final String reduceFunction, - final String finalizeFunction, final Class resultClass, - final Bson filter, final int limit, - final boolean jsMode, final Bson scope, - final Bson sort, final boolean verbose, - final Collation collation) { - return operations.mapReduce(mapFunction, reduceFunction, finalizeFunction, resultClass, filter, limit, jsMode, scope, - sort, verbose, collation); - } - - public AsyncWriteOperation findOneAndDelete(final Bson filter, final FindOneAndDeleteOptions options) { - return operations.findOneAndDelete(filter, options); - } - - public AsyncWriteOperation findOneAndReplace(final Bson filter, final TDocument replacement, - final FindOneAndReplaceOptions options) { - return operations.findOneAndReplace(filter, replacement, options); - } - - public AsyncWriteOperation findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { - return operations.findOneAndUpdate(filter, update, options); - } - - public AsyncWriteOperation findOneAndUpdate(final Bson filter, final List update, - final FindOneAndUpdateOptions options) { - return operations.findOneAndUpdate(filter, update, options); - } - - public AsyncWriteOperation insertOne(final TDocument document, final InsertOneOptions options) { - return operations.insertOne(document, options); - } - - - public AsyncWriteOperation replaceOne(final Bson filter, final TDocument replacement, final ReplaceOptions options) { - return operations.replaceOne(filter, replacement, options); - } - - public AsyncWriteOperation deleteOne(final Bson filter, final DeleteOptions options) { - return operations.deleteOne(filter, options); - } - - public AsyncWriteOperation deleteMany(final Bson filter, final DeleteOptions options) { - return operations.deleteMany(filter, options); - } - - public AsyncWriteOperation updateOne(final Bson filter, final Bson update, final UpdateOptions updateOptions) { - return operations.updateOne(filter, update, updateOptions); - } - - public AsyncWriteOperation updateOne(final Bson filter, final List update, - final UpdateOptions updateOptions) { - return operations.updateOne(filter, update, updateOptions); - } - - public AsyncWriteOperation updateMany(final Bson filter, final Bson update, final UpdateOptions updateOptions) { - return operations.updateMany(filter, update, updateOptions); - } - - public AsyncWriteOperation updateMany(final Bson filter, final List update, - final UpdateOptions updateOptions) { - return operations.updateMany(filter, update, updateOptions); - } - - public AsyncWriteOperation insertMany(final List documents, - final InsertManyOptions options) { - return operations.insertMany(documents, options); - } - - public AsyncWriteOperation bulkWrite(final List> requests, - final BulkWriteOptions options) { - return operations.bulkWrite(requests, options); - } - - public AsyncWriteOperation clientBulkWriteOperation( - final List clientWriteModels, - @Nullable final ClientBulkWriteOptions options) { - return operations.clientBulkWriteOperation(clientWriteModels, options); - } - - public AsyncReadOperation commandRead(final Bson command, final Class resultClass) { - return operations.commandRead(command, resultClass); - } - - public AsyncWriteOperation dropDatabase() { - return operations.dropDatabase(); - } - - public AsyncWriteOperation createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions, - final AutoEncryptionSettings autoEncryptionSettings) { - return operations.createCollection(collectionName, createCollectionOptions, autoEncryptionSettings); - } - - - public AsyncWriteOperation dropCollection(final DropCollectionOptions dropCollectionOptions, - final AutoEncryptionSettings autoEncryptionSettings) { - return operations.dropCollection(dropCollectionOptions, autoEncryptionSettings); - } - - public AsyncWriteOperation renameCollection(final MongoNamespace newCollectionNamespace, - final RenameCollectionOptions options) { - return operations.renameCollection(newCollectionNamespace, options); - } - - public AsyncWriteOperation createView(final String viewName, final String viewOn, final List pipeline, - final CreateViewOptions createViewOptions) { - return operations.createView(viewName, viewOn, pipeline, createViewOptions); - } - - public AsyncWriteOperation createIndexes(final List indexes, final CreateIndexOptions options) { - return operations.createIndexes(indexes, options); - } - - public AsyncWriteOperation createSearchIndexes(final List indexes) { - return operations.createSearchIndexes(indexes); - } - - public AsyncWriteOperation updateSearchIndex(final String indexName, final Bson definition) { - return operations.updateSearchIndex(indexName, definition); - } - - public AsyncWriteOperation dropSearchIndex(final String indexName) { - return operations.dropSearchIndex(indexName); - } - - public AsyncExplainableReadOperation> listSearchIndexes(final Class resultClass, - @Nullable final String indexName, @Nullable final Integer batchSize, @Nullable final Collation collation, - @Nullable final BsonValue comment, @Nullable final Boolean allowDiskUse) { - return operations.listSearchIndexes(resultClass, indexName, batchSize, collation, comment, allowDiskUse); - } - - public AsyncWriteOperation dropIndex(final String indexName, final DropIndexOptions options) { - return operations.dropIndex(indexName, options); - } - - public AsyncWriteOperation dropIndex(final Bson keys, final DropIndexOptions options) { - return operations.dropIndex(keys, options); - } - - public AsyncReadOperation> listCollections(final String databaseName, - final Class resultClass, final Bson filter, final boolean collectionNamesOnly, final boolean authorizedCollections, - @Nullable final Integer batchSize, final BsonValue comment, @Nullable final TimeoutMode timeoutMode) { - return operations.listCollections(databaseName, resultClass, filter, collectionNamesOnly, authorizedCollections, - batchSize, comment, timeoutMode); - } - - public AsyncReadOperation> listDatabases(final Class resultClass, final Bson filter, - final Boolean nameOnly, final Boolean authorizedDatabases, final BsonValue comment) { - return operations.listDatabases(resultClass, filter, nameOnly, authorizedDatabases, comment); - } - - public AsyncReadOperation> listIndexes(final Class resultClass, - @Nullable final Integer batchSize, final BsonValue comment, @Nullable final TimeoutMode timeoutMode) { - return operations.listIndexes(resultClass, batchSize, comment, timeoutMode); - } - - public AsyncReadOperation> changeStream(final FullDocument fullDocument, - final FullDocumentBeforeChange fullDocumentBeforeChange, final List pipeline, - final Decoder decoder, final ChangeStreamLevel changeStreamLevel, final Integer batchSize, final Collation collation, - final BsonValue comment, final BsonDocument resumeToken, final BsonTimestamp startAtOperationTime, - final BsonDocument startAfter, final boolean showExpandedEvents) { - return operations.changeStream(fullDocument, fullDocumentBeforeChange, pipeline, decoder, changeStreamLevel, batchSize, - collation, comment, resumeToken, startAtOperationTime, startAfter, showExpandedEvents); - } -} diff --git a/driver-core/src/main/com/mongodb/internal/operation/AsyncWriteOperation.java b/driver-core/src/main/com/mongodb/internal/operation/AsyncWriteOperation.java deleted file mode 100644 index ca6f5f910a5..00000000000 --- a/driver-core/src/main/com/mongodb/internal/operation/AsyncWriteOperation.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mongodb.internal.operation; - -import com.mongodb.internal.async.SingleResultCallback; -import com.mongodb.internal.binding.AsyncWriteBinding; - -/** - * An operation which asynchronously writes to a MongoDB server. - * - * @param the operations result type. - * - *

This class is not part of the public API and may be removed or changed at any time

- */ -public interface AsyncWriteOperation { - - /** - * @return the command name of the operation, e.g. "insert", "update", "delete", "bulkWrite", etc. - */ - String getCommandName(); - - /** - * General execute which can return anything of type T - * - * @param binding the binding to execute in the context of - * @param callback the callback to be called when the operation has been executed - */ - void executeAsync(AsyncWriteBinding binding, SingleResultCallback callback); -} diff --git a/driver-core/src/main/com/mongodb/internal/operation/BaseFindAndModifyOperation.java b/driver-core/src/main/com/mongodb/internal/operation/BaseFindAndModifyOperation.java index c1fc6adc9f3..c5d56fda81c 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/BaseFindAndModifyOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/BaseFindAndModifyOperation.java @@ -45,7 +45,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public abstract class BaseFindAndModifyOperation implements AsyncWriteOperation, WriteOperation { +public abstract class BaseFindAndModifyOperation implements WriteOperation { private static final String COMMAND_NAME = "findAndModify"; private final MongoNamespace namespace; private final WriteConcern writeConcern; diff --git a/driver-core/src/main/com/mongodb/internal/operation/ChangeStreamOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ChangeStreamOperation.java index 84d5513dd69..f4c896ba6e9 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ChangeStreamOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ChangeStreamOperation.java @@ -51,7 +51,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class ChangeStreamOperation implements AsyncReadOperation>, ReadOperation> { +public class ChangeStreamOperation implements ReadOperationCursor { private static final RawBsonDocumentCodec RAW_BSON_DOCUMENT_CODEC = new RawBsonDocumentCodec(); private final AggregateOperationImpl wrapped; private final FullDocument fullDocument; diff --git a/driver-core/src/main/com/mongodb/internal/operation/ClientBulkWriteOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ClientBulkWriteOperation.java index b2a3c93e4d5..2b9e79f6f06 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ClientBulkWriteOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ClientBulkWriteOperation.java @@ -146,7 +146,7 @@ /** * This class is not part of the public API and may be removed or changed at any time. */ -public final class ClientBulkWriteOperation implements AsyncWriteOperation, WriteOperation { +public final class ClientBulkWriteOperation implements WriteOperation { private static final ConcreteClientBulkWriteOptions EMPTY_OPTIONS = new ConcreteClientBulkWriteOptions(); private static final String BULK_WRITE_COMMAND_NAME = "bulkWrite"; private static final EncoderContext DEFAULT_ENCODER_CONTEXT = EncoderContext.builder().build(); diff --git a/driver-core/src/main/com/mongodb/internal/operation/CommandReadOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CommandReadOperation.java index 1e395315c24..6965bfc34a3 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CommandReadOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CommandReadOperation.java @@ -32,7 +32,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CommandReadOperation implements AsyncReadOperation, ReadOperation { +public class CommandReadOperation implements ReadOperationSimple { private final String commandName; private final String databaseName; private final CommandCreator commandCreator; diff --git a/driver-core/src/main/com/mongodb/internal/operation/CountDocumentsOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CountDocumentsOperation.java index 6789adb093c..9460026062a 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CountDocumentsOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CountDocumentsOperation.java @@ -37,7 +37,7 @@ /** *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CountDocumentsOperation implements AsyncReadOperation, ReadOperation { +public class CountDocumentsOperation implements ReadOperationSimple { private static final String COMMAND_NAME = "aggregate"; private static final Decoder DECODER = new BsonDocumentCodec(); private final MongoNamespace namespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/CountOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CountOperation.java index 23dfe4b52e8..6d0b7b78f93 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CountOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CountOperation.java @@ -41,7 +41,7 @@ /** *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CountOperation implements AsyncReadOperation, ReadOperation { +public class CountOperation implements ReadOperationSimple { private static final String COMMAND_NAME = "count"; private static final Decoder DECODER = new BsonDocumentCodec(); private final MongoNamespace namespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/CreateCollectionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CreateCollectionOperation.java index 582a622d21b..5284076eecb 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CreateCollectionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CreateCollectionOperation.java @@ -66,7 +66,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CreateCollectionOperation implements AsyncWriteOperation, WriteOperation { +public class CreateCollectionOperation implements WriteOperation { private static final String ENCRYPT_PREFIX = "enxcol_."; private static final BsonDocument ENCRYPT_CLUSTERED_INDEX = BsonDocument.parse("{key: {_id: 1}, unique: true}"); private static final BsonArray SAFE_CONTENT_ARRAY = new BsonArray( diff --git a/driver-core/src/main/com/mongodb/internal/operation/CreateIndexesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CreateIndexesOperation.java index 34eaea3713d..b9b4242a3f4 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CreateIndexesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CreateIndexesOperation.java @@ -57,7 +57,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CreateIndexesOperation implements AsyncWriteOperation, WriteOperation { +public class CreateIndexesOperation implements WriteOperation { private static final String COMMAND_NAME = "createIndexes"; private final MongoNamespace namespace; private final List requests; diff --git a/driver-core/src/main/com/mongodb/internal/operation/CreateViewOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CreateViewOperation.java index 26ece818ec6..49b47fb7e9c 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CreateViewOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CreateViewOperation.java @@ -46,7 +46,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class CreateViewOperation implements AsyncWriteOperation, WriteOperation { +public class CreateViewOperation implements WriteOperation { private final String databaseName; private final String viewName; private final String viewOn; diff --git a/driver-core/src/main/com/mongodb/internal/operation/DistinctOperation.java b/driver-core/src/main/com/mongodb/internal/operation/DistinctOperation.java index 6fe02f7ac08..489e3923bdc 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/DistinctOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/DistinctOperation.java @@ -45,7 +45,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class DistinctOperation implements AsyncReadOperation>, ReadOperation> { +public class DistinctOperation implements ReadOperationCursor { private static final String COMMAND_NAME = "distinct"; private static final String VALUES = "values"; private final MongoNamespace namespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/DropCollectionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/DropCollectionOperation.java index bf9ac326376..5f61f2980f8 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/DropCollectionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/DropCollectionOperation.java @@ -59,7 +59,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class DropCollectionOperation implements AsyncWriteOperation, WriteOperation { +public class DropCollectionOperation implements WriteOperation { private static final String ENCRYPT_PREFIX = "enxcol_."; private static final BsonValueCodec BSON_VALUE_CODEC = new BsonValueCodec(); private final MongoNamespace namespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/DropDatabaseOperation.java b/driver-core/src/main/com/mongodb/internal/operation/DropDatabaseOperation.java index 8900d112bb8..d619176e8a3 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/DropDatabaseOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/DropDatabaseOperation.java @@ -42,7 +42,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class DropDatabaseOperation implements AsyncWriteOperation, WriteOperation { +public class DropDatabaseOperation implements WriteOperation { private final String databaseName; private final WriteConcern writeConcern; diff --git a/driver-core/src/main/com/mongodb/internal/operation/DropIndexOperation.java b/driver-core/src/main/com/mongodb/internal/operation/DropIndexOperation.java index 81fcf5129e7..3671a90aa56 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/DropIndexOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/DropIndexOperation.java @@ -40,7 +40,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class DropIndexOperation implements AsyncWriteOperation, WriteOperation { +public class DropIndexOperation implements WriteOperation { private static final String COMMAND_NAME = "dropIndexes"; private final MongoNamespace namespace; private final String indexName; diff --git a/driver-core/src/main/com/mongodb/internal/operation/EstimatedDocumentCountOperation.java b/driver-core/src/main/com/mongodb/internal/operation/EstimatedDocumentCountOperation.java index 1d8ddd429ea..427cd40dc40 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/EstimatedDocumentCountOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/EstimatedDocumentCountOperation.java @@ -44,7 +44,7 @@ /** *

This class is not part of the public API and may be removed or changed at any time

*/ -public class EstimatedDocumentCountOperation implements AsyncReadOperation, ReadOperation { +public class EstimatedDocumentCountOperation implements ReadOperationSimple { private static final String COMMAND_NAME = "count"; private static final Decoder DECODER = new BsonDocumentCodec(); private final MongoNamespace namespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/FindOperation.java b/driver-core/src/main/com/mongodb/internal/operation/FindOperation.java index ab37613db13..04d4d7afd67 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/FindOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/FindOperation.java @@ -67,7 +67,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class FindOperation implements AsyncExplainableReadOperation>, ExplainableReadOperation> { +public class FindOperation implements ReadOperationExplainable { private static final String COMMAND_NAME = "find"; private static final String FIRST_BATCH = "firstBatch"; @@ -361,11 +361,6 @@ private static SingleResultCallback exceptionTransformingCallback(final S public CommandReadOperation asExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { return createExplainableOperation(verbosity, resultDecoder); } - @Override - public AsyncReadOperation asAsyncExplainableOperation(@Nullable final ExplainVerbosity verbosity, - final Decoder resultDecoder) { - return createExplainableOperation(verbosity, resultDecoder); - } CommandReadOperation createExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { return new CommandReadOperation<>(getNamespace().getDatabaseName(), getCommandName(), diff --git a/driver-core/src/main/com/mongodb/internal/operation/ListCollectionsOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ListCollectionsOperation.java index cb20bbf897f..8740986b23f 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ListCollectionsOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ListCollectionsOperation.java @@ -69,7 +69,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class ListCollectionsOperation implements AsyncReadOperation>, ReadOperation> { +public class ListCollectionsOperation implements ReadOperationCursor { private static final String COMMAND_NAME = "listCollections"; private final String databaseName; private final Decoder decoder; diff --git a/driver-core/src/main/com/mongodb/internal/operation/ListDatabasesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ListDatabasesOperation.java index ae05eb245b2..4787153190b 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ListDatabasesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ListDatabasesOperation.java @@ -42,7 +42,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class ListDatabasesOperation implements AsyncReadOperation>, ReadOperation> { +public class ListDatabasesOperation implements ReadOperationCursor { private static final String COMMAND_NAME = "listDatabases"; private static final String DATABASES = "databases"; private final Decoder decoder; diff --git a/driver-core/src/main/com/mongodb/internal/operation/ListIndexesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ListIndexesOperation.java index d52021b2dca..a97acd64d58 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ListIndexesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ListIndexesOperation.java @@ -64,7 +64,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class ListIndexesOperation implements AsyncReadOperation>, ReadOperation> { +public class ListIndexesOperation implements ReadOperationCursor { private static final String COMMAND_NAME = "listIndexes"; private final MongoNamespace namespace; private final Decoder decoder; diff --git a/driver-core/src/main/com/mongodb/internal/operation/ListSearchIndexesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ListSearchIndexesOperation.java index dd28e5f3e25..7fadead0b57 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ListSearchIndexesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ListSearchIndexesOperation.java @@ -42,8 +42,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public final class ListSearchIndexesOperation - implements AsyncExplainableReadOperation>, ExplainableReadOperation> { +public final class ListSearchIndexesOperation implements ReadOperationExplainable { private static final String COMMAND_NAME = "aggregate"; private static final String STAGE_LIST_SEARCH_INDEXES = "$listSearchIndexes"; private final MongoNamespace namespace; @@ -107,16 +106,10 @@ public void executeAsync(final AsyncReadBinding binding, final SingleResultCallb } @Override - public ReadOperation asExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { + public ReadOperationSimple asExplainableOperation(@Nullable final ExplainVerbosity verbosity, final Decoder resultDecoder) { return asAggregateOperation().asExplainableOperation(verbosity, resultDecoder); } - @Override - public AsyncReadOperation asAsyncExplainableOperation(@Nullable final ExplainVerbosity verbosity, - final Decoder resultDecoder) { - return asAggregateOperation().asAsyncExplainableOperation(verbosity, resultDecoder); - } - private AggregateOperation asAggregateOperation() { BsonDocument searchDefinition = getSearchDefinition(); BsonDocument listSearchIndexesStage = new BsonDocument(STAGE_LIST_SEARCH_INDEXES, searchDefinition); diff --git a/driver-core/src/main/com/mongodb/internal/operation/MapReduceToCollectionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/MapReduceToCollectionOperation.java index 79151c0fb6e..bfcc73a5aa6 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/MapReduceToCollectionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/MapReduceToCollectionOperation.java @@ -58,7 +58,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class MapReduceToCollectionOperation implements AsyncWriteOperation, WriteOperation { +public class MapReduceToCollectionOperation implements WriteOperation { private static final String COMMAND_NAME = "mapReduce"; private final MongoNamespace namespace; private final BsonJavaScript mapFunction; @@ -234,17 +234,7 @@ public void executeAsync(final AsyncWriteBinding binding, final SingleResultCall * @param explainVerbosity the explain verbosity * @return a read operation that when executed will explain this operation */ - public ReadOperation asExplainableOperation(final ExplainVerbosity explainVerbosity) { - return createExplainableOperation(explainVerbosity); - } - - /** - * Gets an operation whose execution explains this operation. - * - * @param explainVerbosity the explain verbosity - * @return a read operation that when executed will explain this operation - */ - public AsyncReadOperation asExplainableOperationAsync(final ExplainVerbosity explainVerbosity) { + public ReadOperationSimple asExplainableOperation(final ExplainVerbosity explainVerbosity) { return createExplainableOperation(explainVerbosity); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/MapReduceWithInlineResultsOperation.java b/driver-core/src/main/com/mongodb/internal/operation/MapReduceWithInlineResultsOperation.java index 76f3e674308..3976e5662f3 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/MapReduceWithInlineResultsOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/MapReduceWithInlineResultsOperation.java @@ -53,8 +53,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class MapReduceWithInlineResultsOperation implements ReadOperation>, - AsyncReadOperation> { +public class MapReduceWithInlineResultsOperation implements ReadOperation, MapReduceAsyncBatchCursor> { private static final String COMMAND_NAME = "mapReduce"; private final MongoNamespace namespace; private final BsonJavaScript mapFunction; @@ -185,11 +184,7 @@ public void executeAsync(final AsyncReadBinding binding, final SingleResultCallb asyncTransformer(), false, errHandlingCallback); } - public ReadOperation asExplainableOperation(final ExplainVerbosity explainVerbosity) { - return createExplainableOperation(explainVerbosity); - } - - public AsyncReadOperation asExplainableOperationAsync(final ExplainVerbosity explainVerbosity) { + public ReadOperationSimple asExplainableOperation(final ExplainVerbosity explainVerbosity) { return createExplainableOperation(explainVerbosity); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/MixedBulkWriteOperation.java b/driver-core/src/main/com/mongodb/internal/operation/MixedBulkWriteOperation.java index 9bc947f0450..39ff2dab17f 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/MixedBulkWriteOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/MixedBulkWriteOperation.java @@ -78,7 +78,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class MixedBulkWriteOperation implements AsyncWriteOperation, WriteOperation { +public class MixedBulkWriteOperation implements WriteOperation { private final MongoNamespace namespace; private final List writeRequests; private final boolean ordered; diff --git a/driver-core/src/main/com/mongodb/internal/operation/Operations.java b/driver-core/src/main/com/mongodb/internal/operation/Operations.java index 88af67a1204..1cfef2481a3 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/Operations.java +++ b/driver-core/src/main/com/mongodb/internal/operation/Operations.java @@ -58,6 +58,7 @@ import com.mongodb.client.model.bulk.ClientNamespacedWriteModel; import com.mongodb.client.model.changestream.FullDocument; import com.mongodb.client.model.changestream.FullDocumentBeforeChange; +import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.bulk.DeleteRequest; import com.mongodb.internal.bulk.IndexRequest; import com.mongodb.internal.bulk.InsertRequest; @@ -90,64 +91,137 @@ import static com.mongodb.assertions.Assertions.notNull; import static java.lang.String.format; import static java.util.Collections.singletonList; +import static java.util.concurrent.TimeUnit.MILLISECONDS; -final class Operations { +public final class Operations { + @Nullable private final MongoNamespace namespace; - private final Class documentClass; + private final Class documentClass; private final ReadPreference readPreference; private final CodecRegistry codecRegistry; private final ReadConcern readConcern; private final WriteConcern writeConcern; private final boolean retryWrites; private final boolean retryReads; + private final TimeoutSettings timeoutSettings; + + public Operations(final Class documentClass, final ReadPreference readPreference, final CodecRegistry codecRegistry, + final boolean retryReads, final TimeoutSettings timeoutSettings) { + this(null, documentClass, readPreference, codecRegistry, ReadConcern.DEFAULT, WriteConcern.ACKNOWLEDGED, + true, retryReads, timeoutSettings); + } + + public Operations(@Nullable final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, + final CodecRegistry codecRegistry, final boolean retryReads, final TimeoutSettings timeoutSettings) { + this(namespace, documentClass, readPreference, codecRegistry, ReadConcern.DEFAULT, WriteConcern.ACKNOWLEDGED, + true, retryReads, timeoutSettings); + } - Operations(@Nullable final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, + public Operations(@Nullable final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, final CodecRegistry codecRegistry, final ReadConcern readConcern, final WriteConcern writeConcern, final boolean retryWrites, - final boolean retryReads) { + final boolean retryReads, final TimeoutSettings timeoutSettings) { this.namespace = namespace; this.documentClass = documentClass; this.readPreference = readPreference; this.codecRegistry = codecRegistry; this.readConcern = readConcern; - this.writeConcern = writeConcern; this.retryWrites = retryWrites; this.retryReads = retryReads; + this.timeoutSettings = timeoutSettings; + + WriteConcern writeConcernToUse = writeConcern; + if (timeoutSettings.getTimeoutMS() != null) { + writeConcernToUse = assertNotNull(WriteConcernHelper.cloneWithoutTimeout(writeConcern)); + } + this.writeConcern = writeConcernToUse; } @Nullable - MongoNamespace getNamespace() { + public MongoNamespace getNamespace() { return namespace; } - Class getDocumentClass() { + public Class getDocumentClass() { return documentClass; } - ReadPreference getReadPreference() { + public ReadPreference getReadPreference() { return readPreference; } - CodecRegistry getCodecRegistry() { + public CodecRegistry getCodecRegistry() { return codecRegistry; } - ReadConcern getReadConcern() { + public ReadConcern getReadConcern() { return readConcern; } - WriteConcern getWriteConcern() { + public WriteConcern getWriteConcern() { return writeConcern; } - boolean isRetryWrites() { + public boolean isRetryWrites() { return retryWrites; } - boolean isRetryReads() { + public boolean isRetryReads() { return retryReads; } - CountDocumentsOperation countDocuments(final Bson filter, final CountOptions options) { + public TimeoutSettings getTimeoutSettings() { + return timeoutSettings; + } + + public TimeoutSettings createTimeoutSettings(final long maxTimeMS) { + return timeoutSettings.withMaxTimeMS(maxTimeMS); + } + + public TimeoutSettings createTimeoutSettings(final long maxTimeMS, final long maxAwaitTimeMS) { + return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(maxTimeMS, maxAwaitTimeMS); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final CountOptions options) { + return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final EstimatedDocumentCountOptions options) { + return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final FindOptions options) { + return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(options.getMaxTime(MILLISECONDS), options.getMaxAwaitTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final FindOneAndDeleteOptions options) { + return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final FindOneAndReplaceOptions options) { + return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final FindOneAndUpdateOptions options) { + return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final CreateIndexOptions options) { + return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); + } + + @SuppressWarnings("deprecation") // MaxTime + public TimeoutSettings createTimeoutSettings(final DropIndexOptions options) { + return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); + } + + public CountDocumentsOperation countDocuments(final Bson filter, final CountOptions options) { CountDocumentsOperation operation = new CountDocumentsOperation( assertNotNull(namespace)) .retryReads(retryReads) @@ -164,31 +238,31 @@ CountDocumentsOperation countDocuments(final Bson filter, final CountOptions opt return operation; } - EstimatedDocumentCountOperation estimatedDocumentCount(final EstimatedDocumentCountOptions options) { + public EstimatedDocumentCountOperation estimatedDocumentCount(final EstimatedDocumentCountOptions options) { return new EstimatedDocumentCountOperation( assertNotNull(namespace)) .retryReads(retryReads) .comment(options.getComment()); } - FindOperation findFirst(final Bson filter, final Class resultClass, + public FindOperation findFirst(final Bson filter, final Class resultClass, final FindOptions options) { return createFindOperation(assertNotNull(namespace), filter, resultClass, options).batchSize(0).limit(-1); } - FindOperation find(final Bson filter, final Class resultClass, + public FindOperation find(final Bson filter, final Class resultClass, final FindOptions options) { return createFindOperation(assertNotNull(namespace), filter, resultClass, options); } - FindOperation find(final MongoNamespace findNamespace, @Nullable final Bson filter, - final Class resultClass, final FindOptions options) { + public FindOperation find(final MongoNamespace findNamespace, @Nullable final Bson filter, + final Class resultClass, final FindOptions options) { return createFindOperation(findNamespace, filter, resultClass, options); } - private FindOperation createFindOperation(final MongoNamespace findNamespace, @Nullable final Bson filter, - final Class resultClass, final FindOptions options) { - FindOperation operation = new FindOperation<>( + private FindOperation createFindOperation(final MongoNamespace findNamespace, @Nullable final Bson filter, + final Class resultClass, final FindOptions options) { + FindOperation operation = new FindOperation<>( findNamespace, codecRegistry.get(resultClass)) .retryReads(retryReads) .filter(filter == null ? new BsonDocument() : filter.toBsonDocument(documentClass, codecRegistry)) @@ -218,9 +292,9 @@ private FindOperation createFindOperation(final MongoNamespac return operation; } - DistinctOperation distinct(final String fieldName, @Nullable final Bson filter, final Class resultClass, + public DistinctOperation distinct(final String fieldName, @Nullable final Bson filter, final Class resultClass, final Collation collation, final BsonValue comment, @Nullable final Bson hint, @Nullable final String hintString) { - DistinctOperation operation = new DistinctOperation<>(assertNotNull(namespace), + DistinctOperation operation = new DistinctOperation<>(assertNotNull(namespace), fieldName, codecRegistry.get(resultClass)) .retryReads(retryReads) .filter(filter == null ? null : filter.toBsonDocument(documentClass, codecRegistry)) @@ -235,7 +309,7 @@ DistinctOperation distinct(final String fieldName, @Nullable return operation; } - AggregateOperation aggregate(final List pipeline, final Class resultClass, + public AggregateOperation aggregate(final List pipeline, final Class resultClass, @Nullable final TimeoutMode timeoutMode, @Nullable final Integer batchSize, final Collation collation, @Nullable final Bson hint, @Nullable final String hintString, final BsonValue comment, final Bson variables, final Boolean allowDiskUse, final AggregationLevel aggregationLevel) { @@ -251,7 +325,7 @@ AggregateOperation aggregate(final List pipel .timeoutMode(timeoutMode); } - AggregateToCollectionOperation aggregateToCollection(final List pipeline, @Nullable final TimeoutMode timeoutMode, + public AggregateToCollectionOperation aggregateToCollection(final List pipeline, @Nullable final TimeoutMode timeoutMode, final Boolean allowDiskUse, final Boolean bypassDocumentValidation, final Collation collation, @Nullable final Bson hint, @Nullable final String hintString, final BsonValue comment, final Bson variables, final AggregationLevel aggregationLevel) { return new AggregateToCollectionOperation(assertNotNull(namespace), @@ -266,7 +340,7 @@ AggregateToCollectionOperation aggregateToCollection(final List } @SuppressWarnings("deprecation") - MapReduceToCollectionOperation mapReduceToCollection(final String databaseName, final String collectionName, + public MapReduceToCollectionOperation mapReduceToCollection(final String databaseName, final String collectionName, final String mapFunction, final String reduceFunction, @Nullable final String finalizeFunction, final Bson filter, final int limit, final boolean jsMode, @@ -293,11 +367,11 @@ MapReduceToCollectionOperation mapReduceToCollection(final String databaseName, return operation; } - MapReduceWithInlineResultsOperation mapReduce(final String mapFunction, final String reduceFunction, - @Nullable final String finalizeFunction, final Class resultClass, final Bson filter, final int limit, + public MapReduceWithInlineResultsOperation mapReduce(final String mapFunction, final String reduceFunction, + @Nullable final String finalizeFunction, final Class resultClass, final Bson filter, final int limit, final boolean jsMode, final Bson scope, final Bson sort, final boolean verbose, final Collation collation) { - MapReduceWithInlineResultsOperation operation = + MapReduceWithInlineResultsOperation operation = new MapReduceWithInlineResultsOperation<>( assertNotNull(namespace), new BsonJavaScript(mapFunction), new BsonJavaScript(reduceFunction), codecRegistry.get(resultClass)) @@ -314,7 +388,7 @@ MapReduceWithInlineResultsOperation mapReduce(final String ma return operation; } - FindAndDeleteOperation findOneAndDelete(final Bson filter, final FindOneAndDeleteOptions options) { + public FindAndDeleteOperation findOneAndDelete(final Bson filter, final FindOneAndDeleteOptions options) { return new FindAndDeleteOperation<>( assertNotNull(namespace), writeConcern, retryWrites, getCodec()) .filter(toBsonDocument(filter)) @@ -327,7 +401,7 @@ FindAndDeleteOperation findOneAndDelete(final Bson filter, final Find .let(toBsonDocument(options.getLet())); } - FindAndReplaceOperation findOneAndReplace(final Bson filter, final TDocument replacement, + public FindAndReplaceOperation findOneAndReplace(final Bson filter, final T replacement, final FindOneAndReplaceOptions options) { return new FindAndReplaceOperation<>( assertNotNull(namespace), writeConcern, retryWrites, getCodec(), documentToBsonDocument(replacement)) @@ -344,7 +418,7 @@ FindAndReplaceOperation findOneAndReplace(final Bson filter, final TD .let(toBsonDocument(options.getLet())); } - FindAndUpdateOperation findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { + public FindAndUpdateOperation findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { return new FindAndUpdateOperation<>( assertNotNull(namespace), writeConcern, retryWrites, getCodec(), assertNotNull(toBsonDocument(update))) .filter(toBsonDocument(filter)) @@ -361,7 +435,7 @@ FindAndUpdateOperation findOneAndUpdate(final Bson filter, final Bson .let(toBsonDocument(options.getLet())); } - FindAndUpdateOperation findOneAndUpdate(final Bson filter, final List update, + public FindAndUpdateOperation findOneAndUpdate(final Bson filter, final List update, final FindOneAndUpdateOptions options) { return new FindAndUpdateOperation<>( assertNotNull(namespace), writeConcern, retryWrites, getCodec(), assertNotNull(toBsonDocumentList(update))) @@ -380,61 +454,61 @@ FindAndUpdateOperation findOneAndUpdate(final Bson filter, final List } - MixedBulkWriteOperation insertOne(final TDocument document, final InsertOneOptions options) { + public MixedBulkWriteOperation insertOne(final T document, final InsertOneOptions options) { return bulkWrite(singletonList(new InsertOneModel<>(document)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()).comment(options.getComment())); } - MixedBulkWriteOperation replaceOne(final Bson filter, final TDocument replacement, final ReplaceOptions options) { + public MixedBulkWriteOperation replaceOne(final Bson filter, final T replacement, final ReplaceOptions options) { return bulkWrite(singletonList(new ReplaceOneModel<>(filter, replacement, options)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()) .comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation deleteOne(final Bson filter, final DeleteOptions options) { + public MixedBulkWriteOperation deleteOne(final Bson filter, final DeleteOptions options) { return bulkWrite(singletonList(new DeleteOneModel<>(filter, options)), new BulkWriteOptions().comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation deleteMany(final Bson filter, final DeleteOptions options) { + public MixedBulkWriteOperation deleteMany(final Bson filter, final DeleteOptions options) { return bulkWrite(singletonList(new DeleteManyModel<>(filter, options)), new BulkWriteOptions().comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation updateOne(final Bson filter, final Bson update, final UpdateOptions options) { + public MixedBulkWriteOperation updateOne(final Bson filter, final Bson update, final UpdateOptions options) { return bulkWrite(singletonList(new UpdateOneModel<>(filter, update, options)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()) .comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation updateOne(final Bson filter, final List update, final UpdateOptions options) { + public MixedBulkWriteOperation updateOne(final Bson filter, final List update, final UpdateOptions options) { return bulkWrite(singletonList(new UpdateOneModel<>(filter, update, options)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()) .comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation updateMany(final Bson filter, final Bson update, final UpdateOptions options) { + public MixedBulkWriteOperation updateMany(final Bson filter, final Bson update, final UpdateOptions options) { return bulkWrite(singletonList(new UpdateManyModel<>(filter, update, options)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()) .comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation updateMany(final Bson filter, final List update, final UpdateOptions options) { + public MixedBulkWriteOperation updateMany(final Bson filter, final List update, final UpdateOptions options) { return bulkWrite(singletonList(new UpdateManyModel<>(filter, update, options)), new BulkWriteOptions().bypassDocumentValidation(options.getBypassDocumentValidation()) .comment(options.getComment()).let(options.getLet())); } - MixedBulkWriteOperation insertMany(final List documents, final InsertManyOptions options) { + public MixedBulkWriteOperation insertMany(final List documents, final InsertManyOptions options) { notNull("documents", documents); List requests = new ArrayList<>(documents.size()); - for (TDocument document : documents) { + for (T document : documents) { if (document == null) { throw new IllegalArgumentException("documents can not contain a null value"); } if (getCodec() instanceof CollectibleCodec) { - document = ((CollectibleCodec) getCodec()).generateIdIfAbsentFromDocument(document); + document = ((CollectibleCodec) getCodec()).generateIdIfAbsentFromDocument(document); } requests.add(new InsertRequest(documentToBsonDocument(document))); } @@ -445,22 +519,21 @@ MixedBulkWriteOperation insertMany(final List documents, fi .comment(options.getComment()); } - @SuppressWarnings("unchecked") - MixedBulkWriteOperation bulkWrite(final List> requests, final BulkWriteOptions options) { + public MixedBulkWriteOperation bulkWrite(final List> requests, final BulkWriteOptions options) { notNull("requests", requests); List writeRequests = new ArrayList<>(requests.size()); - for (WriteModel writeModel : requests) { + for (WriteModel writeModel : requests) { WriteRequest writeRequest; if (writeModel == null) { throw new IllegalArgumentException("requests can not contain a null value"); } else if (writeModel instanceof InsertOneModel) { - TDocument document = ((InsertOneModel) writeModel).getDocument(); + T document = ((InsertOneModel) writeModel).getDocument(); if (getCodec() instanceof CollectibleCodec) { - document = ((CollectibleCodec) getCodec()).generateIdIfAbsentFromDocument(document); + document = ((CollectibleCodec) getCodec()).generateIdIfAbsentFromDocument(document); } writeRequest = new InsertRequest(documentToBsonDocument(document)); } else if (writeModel instanceof ReplaceOneModel) { - ReplaceOneModel replaceOneModel = (ReplaceOneModel) writeModel; + ReplaceOneModel replaceOneModel = (ReplaceOneModel) writeModel; writeRequest = new UpdateRequest(assertNotNull(toBsonDocument(replaceOneModel.getFilter())), documentToBsonDocument(replaceOneModel.getReplacement()), WriteRequest.Type.REPLACE) .upsert(replaceOneModel.getReplaceOptions().isUpsert()) @@ -469,7 +542,7 @@ MixedBulkWriteOperation bulkWrite(final List updateOneModel = (UpdateOneModel) writeModel; + UpdateOneModel updateOneModel = (UpdateOneModel) writeModel; BsonValue update = updateOneModel.getUpdate() != null ? toBsonDocument(updateOneModel.getUpdate()) : new BsonArray(toBsonDocumentList(updateOneModel.getUpdatePipeline())); writeRequest = new UpdateRequest(assertNotNull(toBsonDocument(updateOneModel.getFilter())), update, WriteRequest.Type.UPDATE) @@ -481,7 +554,7 @@ MixedBulkWriteOperation bulkWrite(final List updateManyModel = (UpdateManyModel) writeModel; + UpdateManyModel updateManyModel = (UpdateManyModel) writeModel; BsonValue update = updateManyModel.getUpdate() != null ? toBsonDocument(updateManyModel.getUpdate()) : new BsonArray(toBsonDocumentList(updateManyModel.getUpdatePipeline())); writeRequest = new UpdateRequest(assertNotNull(toBsonDocument(updateManyModel.getFilter())), update, WriteRequest.Type.UPDATE) @@ -492,13 +565,13 @@ MixedBulkWriteOperation bulkWrite(final List deleteOneModel = (DeleteOneModel) writeModel; + DeleteOneModel deleteOneModel = (DeleteOneModel) writeModel; writeRequest = new DeleteRequest(assertNotNull(toBsonDocument(deleteOneModel.getFilter()))).multi(false) .collation(deleteOneModel.getOptions().getCollation()) .hint(toBsonDocument(deleteOneModel.getOptions().getHint())) .hintString(deleteOneModel.getOptions().getHintString()); } else if (writeModel instanceof DeleteManyModel) { - DeleteManyModel deleteManyModel = (DeleteManyModel) writeModel; + DeleteManyModel deleteManyModel = (DeleteManyModel) writeModel; writeRequest = new DeleteRequest(assertNotNull(toBsonDocument(deleteManyModel.getFilter()))).multi(true) .collation(deleteManyModel.getOptions().getCollation()) .hint(toBsonDocument(deleteManyModel.getOptions().getHint())) @@ -516,7 +589,7 @@ MixedBulkWriteOperation bulkWrite(final List CommandReadOperation commandRead(final Bson command, final Class resultClass) { + public CommandReadOperation commandRead(final Bson command, final Class resultClass) { notNull("command", command); notNull("resultClass", resultClass); return new CommandReadOperation<>(assertNotNull(namespace).getDatabaseName(), @@ -524,12 +597,12 @@ CommandReadOperation commandRead(final Bson command, final Cl } - DropDatabaseOperation dropDatabase() { + public DropDatabaseOperation dropDatabase() { return new DropDatabaseOperation(assertNotNull(namespace).getDatabaseName(), getWriteConcern()); } - CreateCollectionOperation createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions, + public CreateCollectionOperation createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions, @Nullable final AutoEncryptionSettings autoEncryptionSettings) { CreateCollectionOperation operation = new CreateCollectionOperation( assertNotNull(namespace).getDatabaseName(), collectionName, writeConcern) @@ -571,7 +644,7 @@ CreateCollectionOperation createCollection(final String collectionName, final Cr return operation; } - DropCollectionOperation dropCollection( + public DropCollectionOperation dropCollection( final DropCollectionOptions dropCollectionOptions, @Nullable final AutoEncryptionSettings autoEncryptionSettings) { DropCollectionOperation operation = new DropCollectionOperation( @@ -590,13 +663,13 @@ DropCollectionOperation dropCollection( } - RenameCollectionOperation renameCollection(final MongoNamespace newCollectionNamespace, + public RenameCollectionOperation renameCollection(final MongoNamespace newCollectionNamespace, final RenameCollectionOptions renameCollectionOptions) { return new RenameCollectionOperation(assertNotNull(namespace), newCollectionNamespace, writeConcern).dropTarget(renameCollectionOptions.isDropTarget()); } - CreateViewOperation createView(final String viewName, final String viewOn, final List pipeline, + public CreateViewOperation createView(final String viewName, final String viewOn, final List pipeline, final CreateViewOptions createViewOptions) { notNull("options", createViewOptions); notNull("pipeline", pipeline); @@ -604,7 +677,7 @@ CreateViewOperation createView(final String viewName, final String viewOn, final viewOn, assertNotNull(toBsonDocumentList(pipeline)), writeConcern).collation(createViewOptions.getCollation()); } - CreateIndexesOperation createIndexes(final List indexes, final CreateIndexOptions createIndexOptions) { + public CreateIndexesOperation createIndexes(final List indexes, final CreateIndexOptions createIndexOptions) { notNull("indexes", indexes); notNull("createIndexOptions", createIndexOptions); List indexRequests = new ArrayList<>(indexes.size()); @@ -639,41 +712,41 @@ CreateIndexesOperation createIndexes(final List indexes, final Creat .commitQuorum(createIndexOptions.getCommitQuorum()); } - CreateSearchIndexesOperation createSearchIndexes(final List indexes) { + public CreateSearchIndexesOperation createSearchIndexes(final List indexes) { List indexRequests = indexes.stream() .map(this::createSearchIndexRequest) .collect(Collectors.toList()); return new CreateSearchIndexesOperation(assertNotNull(namespace), indexRequests); } - UpdateSearchIndexesOperation updateSearchIndex(final String indexName, final Bson definition) { + public WriteOperation updateSearchIndex(final String indexName, final Bson definition) { BsonDocument definitionDocument = assertNotNull(toBsonDocument(definition)); SearchIndexRequest searchIndexRequest = new SearchIndexRequest(definitionDocument, indexName); return new UpdateSearchIndexesOperation(assertNotNull(namespace), searchIndexRequest); } - DropSearchIndexOperation dropSearchIndex(final String indexName) { + public WriteOperation dropSearchIndex(final String indexName) { return new DropSearchIndexOperation(assertNotNull(namespace), indexName); } - ListSearchIndexesOperation listSearchIndexes(final Class resultClass, + public ListSearchIndexesOperation listSearchIndexes(final Class resultClass, @Nullable final String indexName, @Nullable final Integer batchSize, @Nullable final Collation collation, @Nullable final BsonValue comment, @Nullable final Boolean allowDiskUse) { return new ListSearchIndexesOperation<>(assertNotNull(namespace), codecRegistry.get(resultClass), indexName, batchSize, collation, comment, allowDiskUse, retryReads); } - DropIndexOperation dropIndex(final String indexName, final DropIndexOptions ignoredOptions) { + public DropIndexOperation dropIndex(final String indexName, final DropIndexOptions ignoredOptions) { return new DropIndexOperation(assertNotNull(namespace), indexName, writeConcern); } - DropIndexOperation dropIndex(final Bson keys, final DropIndexOptions ignoredOptions) { + public DropIndexOperation dropIndex(final Bson keys, final DropIndexOptions ignoredOptions) { return new DropIndexOperation(assertNotNull(namespace), keys.toBsonDocument(BsonDocument.class, codecRegistry), writeConcern); } - ListCollectionsOperation listCollections(final String databaseName, final Class resultClass, + public ListCollectionsOperation listCollections(final String databaseName, final Class resultClass, final Bson filter, final boolean collectionNamesOnly, final boolean authorizedCollections, @Nullable final Integer batchSize, @@ -688,7 +761,7 @@ ListCollectionsOperation listCollections(final String databas .timeoutMode(timeoutMode); } - ListDatabasesOperation listDatabases(final Class resultClass, final Bson filter, + public ListDatabasesOperation listDatabases(final Class resultClass, final Bson filter, final Boolean nameOnly, final Boolean authorizedDatabasesOnly, final BsonValue comment) { return new ListDatabasesOperation<>(codecRegistry.get(resultClass)) @@ -699,7 +772,7 @@ ListDatabasesOperation listDatabases(final Class res .comment(comment); } - ListIndexesOperation listIndexes(final Class resultClass, @Nullable final Integer batchSize, + public ListIndexesOperation listIndexes(final Class resultClass, @Nullable final Integer batchSize, final BsonValue comment, @Nullable final TimeoutMode timeoutMode) { return new ListIndexesOperation<>(assertNotNull(namespace), codecRegistry.get(resultClass)) @@ -709,9 +782,9 @@ ListIndexesOperation listIndexes(final Class resultC .timeoutMode(timeoutMode); } - ChangeStreamOperation changeStream(final FullDocument fullDocument, + public ChangeStreamOperation changeStream(final FullDocument fullDocument, final FullDocumentBeforeChange fullDocumentBeforeChange, final List pipeline, - final Decoder decoder, final ChangeStreamLevel changeStreamLevel, @Nullable final Integer batchSize, + final Decoder decoder, final ChangeStreamLevel changeStreamLevel, @Nullable final Integer batchSize, final Collation collation, final BsonValue comment, final BsonDocument resumeToken, final BsonTimestamp startAtOperationTime, final BsonDocument startAfter, final boolean showExpandedEvents) { return new ChangeStreamOperation<>( @@ -729,17 +802,17 @@ ChangeStreamOperation changeStream(final FullDocument fullDoc .retryReads(retryReads); } - ClientBulkWriteOperation clientBulkWriteOperation( + public ClientBulkWriteOperation clientBulkWriteOperation( final List clientWriteModels, @Nullable final ClientBulkWriteOptions options) { return new ClientBulkWriteOperation(clientWriteModels, options, writeConcern, retryWrites, codecRegistry); } - private Codec getCodec() { + private Codec getCodec() { return codecRegistry.get(documentClass); } - private BsonDocument documentToBsonDocument(final TDocument document) { + private BsonDocument documentToBsonDocument(final T document) { if (document instanceof BsonDocument) { return (BsonDocument) document; } else { diff --git a/driver-core/src/main/com/mongodb/internal/operation/ReadOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ReadOperation.java index a60e60f58f5..6a90d490b30 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ReadOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ReadOperation.java @@ -16,6 +16,8 @@ package com.mongodb.internal.operation; +import com.mongodb.internal.async.SingleResultCallback; +import com.mongodb.internal.binding.AsyncReadBinding; import com.mongodb.internal.binding.ReadBinding; /** @@ -23,7 +25,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public interface ReadOperation { +public interface ReadOperation { /** * @return the command name of the operation, e.g. "insert", "update", "delete", "bulkWrite", etc. @@ -37,4 +39,12 @@ public interface ReadOperation { * @return T, the result of the execution */ T execute(ReadBinding binding); + + /** + * General execute which can return anything of type R + * + * @param binding the binding to execute in the context of + * @param callback the callback to be called when the operation has been executed + */ + void executeAsync(AsyncReadBinding binding, SingleResultCallback callback); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/AsyncExplainableReadOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationCursor.java similarity index 70% rename from driver-core/src/main/com/mongodb/internal/operation/AsyncExplainableReadOperation.java rename to driver-core/src/main/com/mongodb/internal/operation/ReadOperationCursor.java index f85cbe1b471..75393a755cf 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AsyncExplainableReadOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationCursor.java @@ -16,13 +16,12 @@ package com.mongodb.internal.operation; -import com.mongodb.ExplainVerbosity; -import com.mongodb.lang.Nullable; -import org.bson.codecs.Decoder; +import com.mongodb.internal.async.AsyncBatchCursor; /** + * An operation that reads from a MongoDB server and returns a cursor. + * *

This class is not part of the public API and may be removed or changed at any time

*/ -public interface AsyncExplainableReadOperation extends AsyncReadOperation { - AsyncReadOperation asAsyncExplainableOperation(@Nullable ExplainVerbosity verbosity, Decoder resultDecoder); +public interface ReadOperationCursor extends ReadOperation, AsyncBatchCursor> { } diff --git a/driver-core/src/main/com/mongodb/internal/operation/ExplainableReadOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationExplainable.java similarity index 81% rename from driver-core/src/main/com/mongodb/internal/operation/ExplainableReadOperation.java rename to driver-core/src/main/com/mongodb/internal/operation/ReadOperationExplainable.java index ebabf773aed..613e9b3b4d2 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/ExplainableReadOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationExplainable.java @@ -23,6 +23,6 @@ /** *

This class is not part of the public API and may be removed or changed at any time

*/ -public interface ExplainableReadOperation extends ReadOperation { - ReadOperation asExplainableOperation(@Nullable ExplainVerbosity verbosity, Decoder resultDecoder); +public interface ReadOperationExplainable extends ReadOperationCursor { + ReadOperationSimple asExplainableOperation(@Nullable ExplainVerbosity verbosity, Decoder resultDecoder); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/AsyncReadOperation.java b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationSimple.java similarity index 50% rename from driver-core/src/main/com/mongodb/internal/operation/AsyncReadOperation.java rename to driver-core/src/main/com/mongodb/internal/operation/ReadOperationSimple.java index 3c9cf2117ed..1268d140363 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AsyncReadOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/ReadOperationSimple.java @@ -16,28 +16,10 @@ package com.mongodb.internal.operation; -import com.mongodb.internal.async.SingleResultCallback; -import com.mongodb.internal.binding.AsyncReadBinding; - /** - * An operation which asynchronously reads from a MongoDB server. - * - * @param the operations result type. + * An operation that reads from a MongoDB server and returns the same type for sync and async. * *

This class is not part of the public API and may be removed or changed at any time

*/ -public interface AsyncReadOperation { - - /** - * @return the command name of the operation, e.g. "insert", "update", "delete", "bulkWrite", etc. - */ - String getCommandName(); - - /** - * General execute which can return anything of type T - * - * @param binding the binding to execute in the context of - * @param callback the callback to be called when the operation has been executed - */ - void executeAsync(AsyncReadBinding binding, SingleResultCallback callback); +public interface ReadOperationSimple extends ReadOperation { } diff --git a/driver-core/src/main/com/mongodb/internal/operation/RenameCollectionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/RenameCollectionOperation.java index 1ca81e215b5..ea477bf67bd 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/RenameCollectionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/RenameCollectionOperation.java @@ -47,7 +47,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public class RenameCollectionOperation implements AsyncWriteOperation, WriteOperation { +public class RenameCollectionOperation implements WriteOperation { private static final String COMMAND_NAME = "renameCollection"; private final MongoNamespace originalNamespace; private final MongoNamespace newNamespace; diff --git a/driver-core/src/main/com/mongodb/internal/operation/SyncOperations.java b/driver-core/src/main/com/mongodb/internal/operation/SyncOperations.java deleted file mode 100644 index 72f738ec971..00000000000 --- a/driver-core/src/main/com/mongodb/internal/operation/SyncOperations.java +++ /dev/null @@ -1,371 +0,0 @@ -/* - * Copyright 2008-present MongoDB, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.mongodb.internal.operation; - -import com.mongodb.AutoEncryptionSettings; -import com.mongodb.MongoNamespace; -import com.mongodb.ReadConcern; -import com.mongodb.ReadPreference; -import com.mongodb.WriteConcern; -import com.mongodb.bulk.BulkWriteResult; -import com.mongodb.client.cursor.TimeoutMode; -import com.mongodb.client.model.BulkWriteOptions; -import com.mongodb.client.model.Collation; -import com.mongodb.client.model.CountOptions; -import com.mongodb.client.model.CreateCollectionOptions; -import com.mongodb.client.model.CreateIndexOptions; -import com.mongodb.client.model.CreateViewOptions; -import com.mongodb.client.model.DeleteOptions; -import com.mongodb.client.model.DropCollectionOptions; -import com.mongodb.client.model.DropIndexOptions; -import com.mongodb.client.model.EstimatedDocumentCountOptions; -import com.mongodb.client.model.FindOneAndDeleteOptions; -import com.mongodb.client.model.FindOneAndReplaceOptions; -import com.mongodb.client.model.FindOneAndUpdateOptions; -import com.mongodb.client.model.IndexModel; -import com.mongodb.client.model.InsertManyOptions; -import com.mongodb.client.model.InsertOneOptions; -import com.mongodb.client.model.RenameCollectionOptions; -import com.mongodb.client.model.ReplaceOptions; -import com.mongodb.client.model.SearchIndexModel; -import com.mongodb.client.model.UpdateOptions; -import com.mongodb.client.model.WriteModel; -import com.mongodb.client.model.bulk.ClientBulkWriteOptions; -import com.mongodb.client.model.bulk.ClientNamespacedWriteModel; -import com.mongodb.client.model.changestream.FullDocument; -import com.mongodb.client.model.changestream.FullDocumentBeforeChange; -import com.mongodb.client.model.bulk.ClientBulkWriteResult; -import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.client.model.AggregationLevel; -import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; -import com.mongodb.lang.Nullable; -import org.bson.BsonDocument; -import org.bson.BsonTimestamp; -import org.bson.BsonValue; -import org.bson.codecs.Decoder; -import org.bson.codecs.configuration.CodecRegistry; -import org.bson.conversions.Bson; - -import java.util.List; - -import static com.mongodb.assertions.Assertions.assertNotNull; -import static java.util.concurrent.TimeUnit.MILLISECONDS; - -/** - *

This class is not part of the public API and may be removed or changed at any time

- */ -public final class SyncOperations { - private final Operations operations; - private final TimeoutSettings timeoutSettings; - - public SyncOperations(final Class documentClass, final ReadPreference readPreference, - final CodecRegistry codecRegistry, final boolean retryReads, final TimeoutSettings timeoutSettings) { - this(null, documentClass, readPreference, codecRegistry, ReadConcern.DEFAULT, WriteConcern.ACKNOWLEDGED, true, retryReads, timeoutSettings); - } - - public SyncOperations(final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, - final CodecRegistry codecRegistry, final boolean retryReads, final TimeoutSettings timeoutSettings) { - this(namespace, documentClass, readPreference, codecRegistry, ReadConcern.DEFAULT, WriteConcern.ACKNOWLEDGED, true, retryReads, timeoutSettings); - } - - public SyncOperations(@Nullable final MongoNamespace namespace, final Class documentClass, final ReadPreference readPreference, - final CodecRegistry codecRegistry, final ReadConcern readConcern, final WriteConcern writeConcern, - final boolean retryWrites, final boolean retryReads, final TimeoutSettings timeoutSettings) { - WriteConcern writeConcernToUse = writeConcern; - if (timeoutSettings.getTimeoutMS() != null) { - writeConcernToUse = assertNotNull(WriteConcernHelper.cloneWithoutTimeout(writeConcern)); - } - this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcernToUse, - retryWrites, retryReads); - this.timeoutSettings = timeoutSettings; - } - - public TimeoutSettings createTimeoutSettings(final long maxTimeMS) { - return timeoutSettings.withMaxTimeMS(maxTimeMS); - } - - public TimeoutSettings createTimeoutSettings(final long maxTimeMS, final long maxAwaitTimeMS) { - return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(maxTimeMS, maxAwaitTimeMS); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final CountOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final EstimatedDocumentCountOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOptions options) { - return timeoutSettings.withMaxTimeAndMaxAwaitTimeMS(options.getMaxTime(MILLISECONDS), options.getMaxAwaitTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndDeleteOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndReplaceOptions options) { - return createTimeoutSettings(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final FindOneAndUpdateOptions options) { - return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final CreateIndexOptions options) { - return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); - } - - @SuppressWarnings("deprecation") // MaxTime - public TimeoutSettings createTimeoutSettings(final DropIndexOptions options) { - return timeoutSettings.withMaxTimeMS(options.getMaxTime(MILLISECONDS)); - } - - public ReadOperation countDocuments(final Bson filter, final CountOptions options) { - return operations.countDocuments(filter, options); - } - - public ReadOperation estimatedDocumentCount(final EstimatedDocumentCountOptions options) { - return operations.estimatedDocumentCount(options); - } - - public ReadOperation> findFirst(final Bson filter, final Class resultClass, - final FindOptions options) { - return operations.findFirst(filter, resultClass, options); - } - - public ExplainableReadOperation> find(final Bson filter, final Class resultClass, - final FindOptions options) { - return operations.find(filter, resultClass, options); - } - - public ReadOperation> find(final MongoNamespace findNamespace, final Bson filter, - final Class resultClass, final FindOptions options) { - return operations.find(findNamespace, filter, resultClass, options); - } - - public ReadOperation> distinct(final String fieldName, final Bson filter, - final Class resultClass, - final Collation collation, final BsonValue comment, - final Bson hint, final String hintString) { - return operations.distinct(fieldName, filter, resultClass, collation, comment, hint, hintString); - } - - public ExplainableReadOperation> aggregate(final List pipeline, - final Class resultClass, - @Nullable final TimeoutMode timeoutMode, @Nullable final Integer batchSize, - final Collation collation, final Bson hint, final String hintString, final BsonValue comment, final Bson variables, - final Boolean allowDiskUse, final AggregationLevel aggregationLevel) { - return operations.aggregate(pipeline, resultClass, timeoutMode, batchSize, collation, hint, hintString, - comment, variables, allowDiskUse, aggregationLevel); - } - - public AggregateToCollectionOperation aggregateToCollection(final List pipeline, - @Nullable final TimeoutMode timeoutMode, final Boolean allowDiskUse, final Boolean bypassDocumentValidation, - final Collation collation, @Nullable final Bson hint, @Nullable final String hintString, final BsonValue comment, - final Bson variables, final AggregationLevel aggregationLevel) { - return operations.aggregateToCollection(pipeline, timeoutMode, allowDiskUse, bypassDocumentValidation, collation, hint, hintString, - comment, variables, aggregationLevel); - } - - @SuppressWarnings("deprecation") - public WriteOperation mapReduceToCollection(final String databaseName, final String collectionName, - final String mapFunction, final String reduceFunction, - final String finalizeFunction, final Bson filter, final int limit, - final boolean jsMode, final Bson scope, - final Bson sort, final boolean verbose, - final com.mongodb.client.model.MapReduceAction action, - final Boolean bypassDocumentValidation, final Collation collation) { - return operations.mapReduceToCollection(databaseName, collectionName, mapFunction, reduceFunction, finalizeFunction, filter, limit, - jsMode, scope, sort, verbose, action, bypassDocumentValidation, collation); - } - - public ReadOperation> mapReduce(final String mapFunction, final String reduceFunction, - final String finalizeFunction, final Class resultClass, - final Bson filter, final int limit, - final boolean jsMode, final Bson scope, - final Bson sort, final boolean verbose, - final Collation collation) { - return operations.mapReduce(mapFunction, reduceFunction, finalizeFunction, resultClass, filter, limit, jsMode, scope, - sort, verbose, collation); - } - - public WriteOperation findOneAndDelete(final Bson filter, final FindOneAndDeleteOptions options) { - return operations.findOneAndDelete(filter, options); - } - - public WriteOperation findOneAndReplace(final Bson filter, final TDocument replacement, - final FindOneAndReplaceOptions options) { - return operations.findOneAndReplace(filter, replacement, options); - } - - public WriteOperation findOneAndUpdate(final Bson filter, final Bson update, final FindOneAndUpdateOptions options) { - return operations.findOneAndUpdate(filter, update, options); - } - - public WriteOperation findOneAndUpdate(final Bson filter, final List update, - final FindOneAndUpdateOptions options) { - return operations.findOneAndUpdate(filter, update, options); - } - - public WriteOperation insertOne(final TDocument document, final InsertOneOptions options) { - return operations.insertOne(document, options); - } - - - public WriteOperation replaceOne(final Bson filter, final TDocument replacement, final ReplaceOptions options) { - return operations.replaceOne(filter, replacement, options); - } - - public WriteOperation deleteOne(final Bson filter, final DeleteOptions options) { - return operations.deleteOne(filter, options); - } - - public WriteOperation deleteMany(final Bson filter, final DeleteOptions options) { - return operations.deleteMany(filter, options); - } - - public WriteOperation updateOne(final Bson filter, final Bson update, final UpdateOptions updateOptions) { - return operations.updateOne(filter, update, updateOptions); - } - - public WriteOperation updateOne(final Bson filter, final List update, - final UpdateOptions updateOptions) { - return operations.updateOne(filter, update, updateOptions); - } - - public WriteOperation updateMany(final Bson filter, final Bson update, final UpdateOptions updateOptions) { - return operations.updateMany(filter, update, updateOptions); - } - - public WriteOperation updateMany(final Bson filter, final List update, - final UpdateOptions updateOptions) { - return operations.updateMany(filter, update, updateOptions); - } - - public WriteOperation insertMany(final List documents, - final InsertManyOptions options) { - return operations.insertMany(documents, options); - } - - public WriteOperation bulkWrite(final List> requests, - final BulkWriteOptions options) { - return operations.bulkWrite(requests, options); - } - - public ReadOperation commandRead(final Bson command, final Class resultClass) { - return operations.commandRead(command, resultClass); - } - - public WriteOperation dropDatabase() { - return operations.dropDatabase(); - } - - public WriteOperation createCollection(final String collectionName, final CreateCollectionOptions createCollectionOptions, - @Nullable final AutoEncryptionSettings autoEncryptionSettings) { - return operations.createCollection(collectionName, createCollectionOptions, autoEncryptionSettings); - } - - public WriteOperation dropCollection(final DropCollectionOptions dropCollectionOptions, - @Nullable final AutoEncryptionSettings autoEncryptionSettings) { - return operations.dropCollection(dropCollectionOptions, autoEncryptionSettings); - } - - public WriteOperation renameCollection(final MongoNamespace newCollectionNamespace, final RenameCollectionOptions options) { - return operations.renameCollection(newCollectionNamespace, options); - } - - public WriteOperation createView(final String viewName, final String viewOn, final List pipeline, - final CreateViewOptions createViewOptions) { - return operations.createView(viewName, viewOn, pipeline, createViewOptions); - } - - public WriteOperation createIndexes(final List indexes, final CreateIndexOptions options) { - return operations.createIndexes(indexes, options); - } - - public WriteOperation createSearchIndexes(final List indexes) { - return operations.createSearchIndexes(indexes); - } - - public WriteOperation updateSearchIndex(final String indexName, final Bson definition) { - return operations.updateSearchIndex(indexName, definition); - } - - public WriteOperation dropSearchIndex(final String indexName) { - return operations.dropSearchIndex(indexName); - } - - - public ExplainableReadOperation> listSearchIndexes(final Class resultClass, - @Nullable final String indexName, @Nullable final Integer batchSize, @Nullable final Collation collation, - @Nullable final BsonValue comment, @Nullable final Boolean allowDiskUse) { - return operations.listSearchIndexes(resultClass, indexName, batchSize, collation, comment, allowDiskUse); - } - - public WriteOperation dropIndex(final String indexName, final DropIndexOptions options) { - return operations.dropIndex(indexName, options); - } - - public WriteOperation dropIndex(final Bson keys, final DropIndexOptions options) { - return operations.dropIndex(keys, options); - } - - public ReadOperation> listCollections(final String databaseName, final Class resultClass, - final Bson filter, final boolean collectionNamesOnly, - final boolean authorizedCollections, - @Nullable final Integer batchSize, - final BsonValue comment, @Nullable final TimeoutMode timeoutMode) { - return operations.listCollections(databaseName, resultClass, filter, collectionNamesOnly, authorizedCollections, - batchSize, comment, timeoutMode); - - } - - public ReadOperation> listDatabases(final Class resultClass, final Bson filter, - final Boolean nameOnly, - final Boolean authorizedDatabases, final BsonValue comment) { - return operations.listDatabases(resultClass, filter, nameOnly, authorizedDatabases, comment); - } - - public ReadOperation> listIndexes(final Class resultClass, @Nullable final Integer batchSize, - final BsonValue comment, @Nullable final TimeoutMode timeoutMode) { - return operations.listIndexes(resultClass, batchSize, comment, timeoutMode); - } - - public ReadOperation> changeStream(final FullDocument fullDocument, - final FullDocumentBeforeChange fullDocumentBeforeChange, final List pipeline, final Decoder decoder, - final ChangeStreamLevel changeStreamLevel, @Nullable final Integer batchSize, final Collation collation, - final BsonValue comment, final BsonDocument resumeToken, final BsonTimestamp startAtOperationTime, - final BsonDocument startAfter, final boolean showExpandedEvents) { - return operations.changeStream(fullDocument, fullDocumentBeforeChange, pipeline, decoder, changeStreamLevel, batchSize, - collation, comment, resumeToken, startAtOperationTime, startAfter, showExpandedEvents); - } - - public WriteOperation clientBulkWriteOperation( - final List clientWriteModels, - @Nullable final ClientBulkWriteOptions options) { - return operations.clientBulkWriteOperation(clientWriteModels, options); - } -} diff --git a/driver-core/src/main/com/mongodb/internal/operation/TransactionOperation.java b/driver-core/src/main/com/mongodb/internal/operation/TransactionOperation.java index e344cfb2b69..a15a2aa88e3 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/TransactionOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/TransactionOperation.java @@ -42,7 +42,7 @@ * *

This class is not part of the public API and may be removed or changed at any time

*/ -public abstract class TransactionOperation implements AsyncWriteOperation, WriteOperation { +public abstract class TransactionOperation implements WriteOperation { private final WriteConcern writeConcern; TransactionOperation(final WriteConcern writeConcern) { diff --git a/driver-core/src/main/com/mongodb/internal/operation/WriteOperation.java b/driver-core/src/main/com/mongodb/internal/operation/WriteOperation.java index e7e606bd01a..73cec2f416b 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/WriteOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/WriteOperation.java @@ -16,6 +16,8 @@ package com.mongodb.internal.operation; +import com.mongodb.internal.async.SingleResultCallback; +import com.mongodb.internal.binding.AsyncWriteBinding; import com.mongodb.internal.binding.WriteBinding; /** @@ -37,4 +39,12 @@ public interface WriteOperation { * @return T, the result of the execution */ T execute(WriteBinding binding); + + /** + * General execute which can return anything of type T + * + * @param binding the binding to execute in the context of + * @param callback the callback to be called when the operation has been executed + */ + void executeAsync(AsyncWriteBinding binding, SingleResultCallback callback); } diff --git a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java index 30792bf0487..6bbf9233cb1 100644 --- a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java +++ b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java @@ -64,8 +64,6 @@ import com.mongodb.internal.connection.StreamFactoryFactory; import com.mongodb.internal.connection.TlsChannelStreamFactoryFactory; import com.mongodb.internal.connection.netty.NettyStreamFactoryFactory; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; import com.mongodb.internal.operation.BatchCursor; import com.mongodb.internal.operation.CommandReadOperation; import com.mongodb.internal.operation.DropDatabaseOperation; @@ -696,34 +694,34 @@ public static T executeSync(final WriteOperation op, final ReadWriteBindi } @SuppressWarnings("overloads") - public static T executeSync(final ReadOperation op) { + public static T executeSync(final ReadOperation op) { return executeSync(op, getBinding()); } @SuppressWarnings("overloads") - public static T executeSync(final ReadOperation op, final ReadWriteBinding binding) { + public static T executeSync(final ReadOperation op, final ReadWriteBinding binding) { return op.execute(binding); } @SuppressWarnings("overloads") - public static T executeAsync(final AsyncWriteOperation op) throws Throwable { + public static T executeAsync(final WriteOperation op) throws Throwable { return executeAsync(op, getAsyncBinding()); } @SuppressWarnings("overloads") - public static T executeAsync(final AsyncWriteOperation op, final AsyncWriteBinding binding) throws Throwable { + public static T executeAsync(final WriteOperation op, final AsyncWriteBinding binding) throws Throwable { FutureResultCallback futureResultCallback = new FutureResultCallback<>(); op.executeAsync(binding, futureResultCallback); return futureResultCallback.get(TIMEOUT, SECONDS); } @SuppressWarnings("overloads") - public static T executeAsync(final AsyncReadOperation op) throws Throwable { + public static T executeAsync(final ReadOperation op) throws Throwable { return executeAsync(op, getAsyncBinding()); } @SuppressWarnings("overloads") - public static T executeAsync(final AsyncReadOperation op, final AsyncReadBinding binding) throws Throwable { + public static T executeAsync(final ReadOperation op, final AsyncReadBinding binding) throws Throwable { FutureResultCallback futureResultCallback = new FutureResultCallback<>(); op.executeAsync(binding, futureResultCallback); return futureResultCallback.get(TIMEOUT, SECONDS); @@ -741,7 +739,7 @@ public static void loopCursor(final List> batchCursors, } } - public static void loopCursor(final AsyncReadOperation> op, final Block block) throws Throwable { + public static void loopCursor(final ReadOperation> op, final Block block) throws Throwable { FutureResultCallback futureResultCallback = new FutureResultCallback<>(); loopCursor(executeAsync(op), block, futureResultCallback); futureResultCallback.get(TIMEOUT, SECONDS); diff --git a/driver-core/src/test/functional/com/mongodb/OperationFunctionalSpecification.groovy b/driver-core/src/test/functional/com/mongodb/OperationFunctionalSpecification.groovy index 9fc12eddd93..dcefaaa65ba 100644 --- a/driver-core/src/test/functional/com/mongodb/OperationFunctionalSpecification.groovy +++ b/driver-core/src/test/functional/com/mongodb/OperationFunctionalSpecification.groovy @@ -47,8 +47,6 @@ import com.mongodb.internal.connection.AsyncConnection import com.mongodb.internal.connection.Connection import com.mongodb.internal.connection.ServerHelper import com.mongodb.internal.connection.SplittablePayload -import com.mongodb.internal.operation.AsyncReadOperation -import com.mongodb.internal.operation.AsyncWriteOperation import com.mongodb.internal.operation.MixedBulkWriteOperation import com.mongodb.internal.operation.ReadOperation import com.mongodb.internal.operation.WriteOperation @@ -416,9 +414,9 @@ class OperationFunctionalSpecification extends Specification { 1 * connection.release() } - if (operation instanceof AsyncReadOperation) { + if (operation instanceof ReadOperation) { operation.executeAsync(readBinding, callback) - } else if (operation instanceof AsyncWriteOperation) { + } else if (operation instanceof WriteOperation) { operation.executeAsync(writeBinding, callback) } try { diff --git a/driver-core/src/test/functional/com/mongodb/internal/operation/AggregateOperationSpecification.groovy b/driver-core/src/test/functional/com/mongodb/internal/operation/AggregateOperationSpecification.groovy index b2814756eeb..0ce503f466e 100644 --- a/driver-core/src/test/functional/com/mongodb/internal/operation/AggregateOperationSpecification.groovy +++ b/driver-core/src/test/functional/com/mongodb/internal/operation/AggregateOperationSpecification.groovy @@ -290,7 +290,7 @@ class AggregateOperationSpecification extends OperationFunctionalSpecification { def 'should be able to explain an empty pipeline'() { given: def operation = new AggregateOperation(getNamespace(), [], new BsonDocumentCodec()) - operation = async ? operation.asAsyncExplainableOperation(QUERY_PLANNER, new BsonDocumentCodec()) : + operation = async ? operation.asExplainableOperation(QUERY_PLANNER, new BsonDocumentCodec()) : operation.asExplainableOperation(QUERY_PLANNER, new BsonDocumentCodec()) when: diff --git a/driver-core/src/test/unit/com/mongodb/internal/operation/OperationUnitSpecification.groovy b/driver-core/src/test/unit/com/mongodb/internal/operation/OperationUnitSpecification.groovy index 6305988116d..d298112656e 100644 --- a/driver-core/src/test/unit/com/mongodb/internal/operation/OperationUnitSpecification.groovy +++ b/driver-core/src/test/unit/com/mongodb/internal/operation/OperationUnitSpecification.groovy @@ -201,9 +201,9 @@ class OperationUnitSpecification extends Specification { 1 * connection.release() - if (operation instanceof AsyncReadOperation) { + if (operation instanceof ReadOperation) { operation.executeAsync(readBinding, callback) - } else if (operation instanceof AsyncWriteOperation) { + } else if (operation instanceof WriteOperation) { operation.executeAsync(writeBinding, callback) } try { diff --git a/driver-legacy/src/main/com/mongodb/DB.java b/driver-legacy/src/main/com/mongodb/DB.java index 7b47cfb8515..b5aa60a58e1 100644 --- a/driver-legacy/src/main/com/mongodb/DB.java +++ b/driver-legacy/src/main/com/mongodb/DB.java @@ -24,13 +24,12 @@ import com.mongodb.client.model.ValidationAction; import com.mongodb.client.model.ValidationLevel; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; import com.mongodb.internal.operation.CommandReadOperation; import com.mongodb.internal.operation.CreateCollectionOperation; import com.mongodb.internal.operation.CreateViewOperation; import com.mongodb.internal.operation.DropDatabaseOperation; import com.mongodb.internal.operation.ListCollectionsOperation; -import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonDocumentWrapper; @@ -223,7 +222,7 @@ public Set getCollectionNames() { new MongoIterableImpl(null, executor, ReadConcern.DEFAULT, primary(), mongo.getMongoClientOptions().getRetryReads(), DB.this.getTimeoutSettings()) { @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return new ListCollectionsOperation<>(name, commandCodec).nameOnly(true); } diff --git a/driver-legacy/src/main/com/mongodb/DBCollection.java b/driver-legacy/src/main/com/mongodb/DBCollection.java index 54eb354a877..4159d50ea50 100644 --- a/driver-legacy/src/main/com/mongodb/DBCollection.java +++ b/driver-legacy/src/main/com/mongodb/DBCollection.java @@ -50,7 +50,7 @@ import com.mongodb.internal.operation.MapReduceToCollectionOperation; import com.mongodb.internal.operation.MapReduceWithInlineResultsOperation; import com.mongodb.internal.operation.MixedBulkWriteOperation; -import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.internal.operation.RenameCollectionOperation; import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; @@ -1038,7 +1038,7 @@ public List distinct(final String fieldName, final DBCollectionDistinctOptions o options.getReadPreference() != null ? options.getReadPreference() : getReadPreference(), retryReads, DBCollection.this.getTimeoutSettings()) { @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return new DistinctOperation<>(getNamespace(), fieldName, new BsonValueCodec()) .filter(wrapAllowNull(options.getFilter())) .collation(options.getCollation()) @@ -1873,7 +1873,7 @@ public List getIndexInfo() { return new MongoIterableImpl(null, executor, ReadConcern.DEFAULT, primary(), retryReads, DBCollection.this.getTimeoutSettings()) { @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return new ListIndexesOperation<>(getNamespace(), getDefaultDBObjectCodec()) .retryReads(retryReads); } diff --git a/driver-legacy/src/main/com/mongodb/LegacyMixedBulkWriteOperation.java b/driver-legacy/src/main/com/mongodb/LegacyMixedBulkWriteOperation.java index acd9c3d606e..95990833f00 100644 --- a/driver-legacy/src/main/com/mongodb/LegacyMixedBulkWriteOperation.java +++ b/driver-legacy/src/main/com/mongodb/LegacyMixedBulkWriteOperation.java @@ -19,6 +19,8 @@ import com.mongodb.bulk.BulkWriteError; import com.mongodb.bulk.BulkWriteResult; import com.mongodb.bulk.WriteConcernError; +import com.mongodb.internal.async.SingleResultCallback; +import com.mongodb.internal.binding.AsyncWriteBinding; import com.mongodb.internal.binding.WriteBinding; import com.mongodb.internal.bulk.DeleteRequest; import com.mongodb.internal.bulk.InsertRequest; @@ -109,6 +111,11 @@ public WriteConcernResult execute(final WriteBinding binding) { } } + @Override + public void executeAsync(final AsyncWriteBinding binding, final SingleResultCallback callback) { + throw new UnsupportedOperationException("This operation is sync only"); + } + private MongoException convertBulkWriteException(final MongoBulkWriteException e) { BulkWriteError lastError = getLastError(e); if (lastError != null) { diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/AggregatePublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/AggregatePublisherImpl.java index d96c0e933da..959dfcd87c4 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/AggregatePublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/AggregatePublisherImpl.java @@ -21,12 +21,12 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; import com.mongodb.internal.client.model.AggregationLevel; import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.operation.AsyncExplainableReadOperation; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.AggregateOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.ReadOperationSimple; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.AggregatePublisher; import com.mongodb.reactivestreams.client.ClientSession; @@ -146,7 +146,7 @@ public Publisher toCollection() { throw new IllegalStateException("The last stage of the aggregation pipeline must be $out or $merge"); } return getMongoOperationPublisher().createReadOperationMono( - (asyncOperations) -> asyncOperations.createTimeoutSettings(maxTimeMS, maxAwaitTimeMS), + operations -> operations.createTimeoutSettings(maxTimeMS, maxAwaitTimeMS), this::getAggregateToCollectionOperation, getClientSession()); } @@ -173,21 +173,21 @@ public Publisher explain(final Class explainResultClass, final Explain private Publisher publishExplain(final Class explainResultClass, @Nullable final ExplainVerbosity verbosity) { notNull("explainDocumentClass", explainResultClass); return getMongoOperationPublisher().createReadOperationMono( - AsyncOperations::getTimeoutSettings, - () -> asAggregateOperation(1).asAsyncExplainableOperation(verbosity, + Operations::getTimeoutSettings, + () -> asAggregateOperation(1).asExplainableOperation(verbosity, getCodecRegistry().get(explainResultClass)), getClientSession()); } @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { MongoNamespace outNamespace = getOutNamespace(); if (outNamespace != null) { - AsyncReadOperation aggregateToCollectionOperation = getAggregateToCollectionOperation(); + ReadOperationSimple aggregateToCollectionOperation = getAggregateToCollectionOperation(); FindOptions findOptions = new FindOptions().collation(collation).comment(comment).batchSize(initialBatchSize); - AsyncReadOperation> findOperation = + ReadOperationCursor findOperation = getOperations().find(outNamespace, new BsonDocument(), getDocumentClass(), findOptions); return new VoidReadOperationThenCursorReadOperation<>(aggregateToCollectionOperation, findOperation); @@ -197,17 +197,17 @@ AsyncReadOperation> asAsyncReadOperation(final int initialBa } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS, maxAwaitTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS, maxAwaitTimeMS)); } - private AsyncExplainableReadOperation> asAggregateOperation(final int initialBatchSize) { + private AggregateOperation asAggregateOperation(final int initialBatchSize) { return getOperations() .aggregate(pipeline, getDocumentClass(), getTimeoutMode(), initialBatchSize, collation, hint, hintString, comment, variables, allowDiskUse, aggregationLevel); } - private AsyncReadOperation getAggregateToCollectionOperation() { + private ReadOperationSimple getAggregateToCollectionOperation() { return getOperations().aggregateToCollection(pipeline, getTimeoutMode(), allowDiskUse, bypassDocumentValidation, collation, hint, hintString, comment, variables, aggregationLevel); } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/BatchCursorPublisher.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/BatchCursorPublisher.java index 13ee27f002f..1d68eb0e56a 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/BatchCursorPublisher.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/BatchCursorPublisher.java @@ -22,8 +22,9 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.VisibleForTesting; import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import org.bson.codecs.configuration.CodecRegistry; @@ -57,11 +58,11 @@ public abstract class BatchCursorPublisher implements Publisher { this.batchSize = batchSize; } - abstract AsyncReadOperation> asAsyncReadOperation(int initialBatchSize); - abstract Function, TimeoutSettings> getTimeoutSettings(); + abstract ReadOperationCursor asReadOperation(int initialBatchSize); + abstract Function, TimeoutSettings> getTimeoutSettings(); - AsyncReadOperation> asAsyncFirstReadOperation() { - return asAsyncReadOperation(1); + ReadOperationCursor asReadOperationFirst() { + return asReadOperation(1); } @Nullable @@ -73,7 +74,7 @@ MongoOperationPublisher getMongoOperationPublisher() { return mongoOperationPublisher; } - AsyncOperations getOperations() { + Operations getOperations() { return mongoOperationPublisher.getOperations(); } @@ -122,7 +123,7 @@ public TimeoutMode getTimeoutMode() { } public Publisher first() { - return batchCursor(this::asAsyncFirstReadOperation) + return batchCursor(this::asReadOperationFirst) .flatMap(batchCursor -> { batchCursor.setBatchSize(1); return Mono.from(batchCursor.next()) @@ -142,14 +143,13 @@ public void subscribe(final Subscriber subscriber) { } public Mono> batchCursor(final int initialBatchSize) { - return batchCursor(() -> asAsyncReadOperation(initialBatchSize)); + return batchCursor(() -> asReadOperation(initialBatchSize)); } - Mono> batchCursor(final Supplier>> supplier) { + Mono> batchCursor(final Supplier>> supplier) { return mongoOperationPublisher.createReadOperationMono(getTimeoutSettings(), supplier, clientSession).map(BatchCursor::new); } - protected long validateMaxAwaitTime(final long maxAwaitTime, final TimeUnit timeUnit) { notNull("timeUnit", timeUnit); Long timeoutMS = mongoOperationPublisher.getTimeoutSettings().getTimeoutMS(); diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ChangeStreamPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ChangeStreamPublisherImpl.java index 8fc1a093aab..b00dfb85952 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ChangeStreamPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ChangeStreamPublisherImpl.java @@ -21,10 +21,9 @@ import com.mongodb.client.model.changestream.FullDocument; import com.mongodb.client.model.changestream.FullDocumentBeforeChange; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ChangeStreamPublisher; import com.mongodb.reactivestreams.client.ClientSession; @@ -138,13 +137,13 @@ public Publisher withDocumentClass(final Class return new BatchCursorPublisher(getClientSession(), getMongoOperationPublisher().withDocumentClass(clazz), getBatchSize()) { @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { return createChangeStreamOperation(getMongoOperationPublisher().getCodecRegistry().get(clazz), initialBatchSize); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(0, maxAwaitTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(0, maxAwaitTimeMS)); } }; } @@ -168,17 +167,17 @@ public ChangeStreamPublisherImpl startAfter(final BsonDocument startAfter) { } @Override - AsyncReadOperation>> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor> asReadOperation(final int initialBatchSize) { return createChangeStreamOperation(codec, initialBatchSize); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(0, maxAwaitTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(0, maxAwaitTimeMS)); } - private AsyncReadOperation> createChangeStreamOperation(final Codec codec, final int initialBatchSize) { + private ReadOperationCursor createChangeStreamOperation(final Codec codec, final int initialBatchSize) { return getOperations().changeStream(fullDocument, fullDocumentBeforeChange, pipeline, codec, changeStreamLevel, initialBatchSize, collation, comment, resumeToken, startAtOperationTime, startAfter, showExpandedEvents); } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ClientSessionPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ClientSessionPublisherImpl.java index 62314c7e141..52f33ec25cc 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ClientSessionPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ClientSessionPublisherImpl.java @@ -25,10 +25,10 @@ import com.mongodb.WriteConcern; import com.mongodb.internal.TimeoutContext; import com.mongodb.internal.operation.AbortTransactionOperation; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; import com.mongodb.internal.operation.CommitTransactionOperation; +import com.mongodb.internal.operation.ReadOperation; import com.mongodb.internal.operation.WriteConcernHelper; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.internal.session.BaseClientSessionImpl; import com.mongodb.internal.session.ServerSessionPool; import com.mongodb.lang.Nullable; @@ -82,7 +82,7 @@ public boolean notifyMessageSent() { @Override public void notifyOperationInitiated(final Object operation) { - assertTrue(operation instanceof AsyncReadOperation || operation instanceof AsyncWriteOperation); + assertTrue(operation instanceof ReadOperation || operation instanceof WriteOperation); if (!(hasActiveTransaction() || operation instanceof CommitTransactionOperation)) { assertTrue(getPinnedServerAddress() == null || (transactionState != TransactionState.ABORTED && transactionState != TransactionState.NONE)); diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/DistinctPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/DistinctPublisherImpl.java index 30e85189e8d..e17b37bf959 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/DistinctPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/DistinctPublisherImpl.java @@ -19,9 +19,8 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.DistinctPublisher; @@ -109,13 +108,13 @@ public DistinctPublisher timeoutMode(final TimeoutMode timeoutMode) { } @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { // initialBatchSize is ignored for distinct operations. return getOperations().distinct(fieldName, filter, getDocumentClass(), collation, comment, hint, hintString); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/FindPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/FindPublisherImpl.java index ff9fb3a8036..e223b9daea9 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/FindPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/FindPublisherImpl.java @@ -21,11 +21,10 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.operation.AsyncExplainableReadOperation; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.ReadOperationExplainable; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.FindPublisher; @@ -217,22 +216,22 @@ private Publisher publishExplain(final Class explainResultClass, @Null notNull("explainDocumentClass", explainResultClass); return getMongoOperationPublisher().createReadOperationMono( getTimeoutSettings(), - () -> asAsyncReadOperation(0) - .asAsyncExplainableOperation(verbosity, getCodecRegistry().get(explainResultClass)), getClientSession()); + () -> asReadOperation(0) + .asExplainableOperation(verbosity, getCodecRegistry().get(explainResultClass)), getClientSession()); } @Override - AsyncExplainableReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationExplainable asReadOperation(final int initialBatchSize) { return getOperations().find(filter, getDocumentClass(), findOptions.withBatchSize(initialBatchSize)); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(findOptions)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(findOptions)); } @Override - AsyncReadOperation> asAsyncFirstReadOperation() { + ReadOperationCursor asReadOperationFirst() { return getOperations().findFirst(filter, getDocumentClass(), findOptions); } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListCollectionsPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListCollectionsPublisherImpl.java index 057a8067ad3..1f1e5f9d00a 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListCollectionsPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListCollectionsPublisherImpl.java @@ -19,9 +19,8 @@ import com.mongodb.ReadConcern; import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.ListCollectionNamesPublisher; @@ -96,13 +95,13 @@ void authorizedCollections(final boolean authorizedCollections) { } - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { return getOperations().listCollections(getNamespace().getDatabaseName(), getDocumentClass(), filter, collectionNamesOnly, authorizedCollections, initialBatchSize, comment, getTimeoutMode()); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListDatabasesPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListDatabasesPublisherImpl.java index b897a8bf9df..5c7b408ef3f 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListDatabasesPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListDatabasesPublisherImpl.java @@ -18,9 +18,8 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.ListDatabasesPublisher; @@ -93,11 +92,11 @@ public ListDatabasesPublisher timeoutMode(final TimeoutMode timeoutMode) { } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { // initialBatchSize is ignored for distinct operations. return getOperations().listDatabases(getDocumentClass(), filter, nameOnly, authorizedDatabasesOnly, comment); } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListIndexesPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListIndexesPublisherImpl.java index 79e5ce2a14a..851c56fcc54 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListIndexesPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListIndexesPublisherImpl.java @@ -18,9 +18,8 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.ListIndexesPublisher; @@ -73,12 +72,12 @@ public ListIndexesPublisher timeoutMode(final TimeoutMode timeoutMode) { return this; } - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { return getOperations().listIndexes(getDocumentClass(), initialBatchSize, comment, getTimeoutMode()); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListSearchIndexesPublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListSearchIndexesPublisherImpl.java index 035d7d3bbec..c4c703e9774 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListSearchIndexesPublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ListSearchIndexesPublisherImpl.java @@ -20,10 +20,8 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.async.AsyncBatchCursor; -import com.mongodb.internal.operation.AsyncExplainableReadOperation; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationExplainable; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ListSearchIndexesPublisher; import org.bson.BsonString; @@ -128,22 +126,19 @@ public Publisher explain(final Class explainResultClass, final Explain private Publisher publishExplain(final Class explainResultClass, @Nullable final ExplainVerbosity verbosity) { return getMongoOperationPublisher().createReadOperationMono( - (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)), - () -> asAggregateOperation(1).asAsyncExplainableOperation(verbosity, + (operations -> operations.createTimeoutSettings(maxTimeMS)), + () -> asReadOperation(1).asExplainableOperation(verbosity, getCodecRegistry().get(explainResultClass)), getClientSession()); } @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { - return asAggregateOperation(initialBatchSize); + ReadOperationExplainable asReadOperation(final int initialBatchSize) { + return getOperations().listSearchIndexes(getDocumentClass(), indexName, initialBatchSize, collation, comment, allowDiskUse); } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } - private AsyncExplainableReadOperation> asAggregateOperation(final int initialBatchSize) { - return getOperations().listSearchIndexes(getDocumentClass(), indexName, initialBatchSize, collation, comment, allowDiskUse); - } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MapReducePublisherImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MapReducePublisherImpl.java index a01dc7e3eae..27e69762a09 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MapReducePublisherImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MapReducePublisherImpl.java @@ -25,12 +25,15 @@ import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.binding.AsyncReadBinding; import com.mongodb.internal.binding.AsyncWriteBinding; +import com.mongodb.internal.binding.WriteBinding; import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; import com.mongodb.internal.operation.MapReduceAsyncBatchCursor; +import com.mongodb.internal.operation.MapReduceBatchCursor; import com.mongodb.internal.operation.MapReduceStatistics; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import org.bson.BsonDocument; @@ -167,7 +170,7 @@ public Publisher toCollection() { throw new IllegalStateException("The options must specify a non-inline result"); } return getMongoOperationPublisher().createWriteOperationMono( - (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)), + (operations -> operations.createTimeoutSettings(maxTimeMS)), this::createMapReduceToCollectionOperation, getClientSession()); } @@ -188,12 +191,12 @@ ReadPreference getReadPreference() { } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (asyncOperations -> asyncOperations.createTimeoutSettings(maxTimeMS)); + Function, TimeoutSettings> getTimeoutSettings() { + return (operations -> operations.createTimeoutSettings(maxTimeMS)); } @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + public ReadOperationCursor asReadOperation(final int initialBatchSize) { if (inline) { // initialBatchSize is ignored for map reduce operations. return createMapReduceInlineOperation(); @@ -214,21 +217,21 @@ private WrappedMapReduceWriteOperation createMapReduceToCollectionOperation() { limit, jsMode, scope, sort, verbose, action, bypassDocumentValidation, collation)); } - private AsyncReadOperation> createFindOperation(final int initialBatchSize) { + private ReadOperationCursor createFindOperation(final int initialBatchSize) { String dbName = databaseName != null ? databaseName : getNamespace().getDatabaseName(); FindOptions findOptions = new FindOptions().collation(collation).batchSize(initialBatchSize); return getOperations().find(new MongoNamespace(dbName, collectionName), new BsonDocument(), getDocumentClass(), findOptions); } // this could be inlined, but giving it a name so that it's unit-testable - static class WrappedMapReduceReadOperation implements AsyncReadOperation> { - private final AsyncReadOperation> operation; + static class WrappedMapReduceReadOperation implements ReadOperationCursorAsyncOnly { + private final ReadOperation, MapReduceAsyncBatchCursor> operation; - WrappedMapReduceReadOperation(final AsyncReadOperation> operation) { + WrappedMapReduceReadOperation(final ReadOperation, MapReduceAsyncBatchCursor> operation) { this.operation = operation; } - AsyncReadOperation> getOperation() { + ReadOperation, MapReduceAsyncBatchCursor> getOperation() { return operation; } @@ -243,14 +246,14 @@ public void executeAsync(final AsyncReadBinding binding, final SingleResultCallb } } - static class WrappedMapReduceWriteOperation implements AsyncWriteOperation { - private final AsyncWriteOperation operation; + static class WrappedMapReduceWriteOperation implements WriteOperation { + private final WriteOperation operation; - WrappedMapReduceWriteOperation(final AsyncWriteOperation operation) { + WrappedMapReduceWriteOperation(final WriteOperation operation) { this.operation = operation; } - AsyncWriteOperation getOperation() { + WriteOperation getOperation() { return operation; } @@ -259,6 +262,11 @@ public String getCommandName() { return operation.getCommandName(); } + @Override + public Void execute(final WriteBinding binding) { + throw new UnsupportedOperationException("This operation is async only"); + } + @Override public void executeAsync(final AsyncWriteBinding binding, final SingleResultCallback callback) { operation.executeAsync(binding, (result, t) -> callback.onResult(null, t)); diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoOperationPublisher.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoOperationPublisher.java index 58030f75fa9..f10705c63f2 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoOperationPublisher.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoOperationPublisher.java @@ -60,10 +60,10 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.bulk.WriteRequest; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; import com.mongodb.internal.operation.IndexHelper; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import org.bson.BsonDocument; @@ -83,6 +83,7 @@ import java.util.function.Function; import java.util.function.Supplier; +import static com.mongodb.assertions.Assertions.assertNotNull; import static com.mongodb.assertions.Assertions.isTrue; import static com.mongodb.assertions.Assertions.notNull; import static java.util.Collections.singletonList; @@ -93,7 +94,7 @@ */ public final class MongoOperationPublisher { - private final AsyncOperations operations; + private final Operations operations; private final UuidRepresentation uuidRepresentation; @Nullable private final AutoEncryptionSettings autoEncryptionSettings; @@ -115,7 +116,7 @@ public final class MongoOperationPublisher { final boolean retryWrites, final boolean retryReads, final UuidRepresentation uuidRepresentation, @Nullable final AutoEncryptionSettings autoEncryptionSettings, final TimeoutSettings timeoutSettings, final OperationExecutor executor) { - this.operations = new AsyncOperations<>(namespace, notNull("documentClass", documentClass), + this.operations = new Operations<>(namespace, notNull("documentClass", documentClass), notNull("readPreference", readPreference), notNull("codecRegistry", codecRegistry), notNull("readConcern", readConcern), notNull("writeConcern", writeConcern), retryWrites, retryReads, timeoutSettings); @@ -125,7 +126,7 @@ public final class MongoOperationPublisher { } MongoNamespace getNamespace() { - return operations.getNamespace(); + return assertNotNull(operations.getNamespace()); } ReadPreference getReadPreference() { @@ -165,7 +166,7 @@ Class getDocumentClass() { return operations.getDocumentClass(); } - public AsyncOperations getOperations() { + public Operations getOperations() { return operations; } @@ -275,13 +276,13 @@ public Publisher runCommand( Publisher estimatedDocumentCount(final EstimatedDocumentCountOptions options) { return createReadOperationMono( - (asyncOperations -> asyncOperations.createTimeoutSettings(options)), + (operations -> operations.createTimeoutSettings(options)), () -> operations.estimatedDocumentCount(notNull("options", options)), null); } Publisher countDocuments(@Nullable final ClientSession clientSession, final Bson filter, final CountOptions options) { return createReadOperationMono( - (asyncOperations -> asyncOperations.createTimeoutSettings(options)), + (operations -> operations.createTimeoutSettings(options)), () -> operations.countDocuments(notNull("filter", filter), notNull("options", options) ), clientSession); } @@ -498,34 +499,34 @@ Publisher renameCollection( } - Mono createReadOperationMono(final Function, TimeoutSettings> timeoutSettingsFunction, - final Supplier> operation, @Nullable final ClientSession clientSession) { - return createReadOperationMono(() -> timeoutSettingsFunction.apply(operations), operation, clientSession, getReadPreference()); + Mono createReadOperationMono(final Function, TimeoutSettings> timeoutSettingsFunction, + final Supplier> operationSupplier, @Nullable final ClientSession clientSession) { + return createReadOperationMono(() -> timeoutSettingsFunction.apply(operations), operationSupplier, clientSession, getReadPreference()); } - Mono createReadOperationMono(final Supplier timeoutSettingsSupplier, - final Supplier> operationSupplier, @Nullable final ClientSession clientSession, + Mono createReadOperationMono(final Supplier timeoutSettingsSupplier, + final Supplier> operationSupplier, @Nullable final ClientSession clientSession, final ReadPreference readPreference) { - AsyncReadOperation readOperation = operationSupplier.get(); + ReadOperation readOperation = operationSupplier.get(); return getExecutor(timeoutSettingsSupplier.get()) .execute(readOperation, readPreference, getReadConcern(), clientSession); } - Mono createWriteOperationMono(final Function, TimeoutSettings> timeoutSettingsFunction, - final Supplier> operationSupplier, @Nullable final ClientSession clientSession) { + Mono createWriteOperationMono(final Function, TimeoutSettings> timeoutSettingsFunction, + final Supplier> operationSupplier, @Nullable final ClientSession clientSession) { return createWriteOperationMono(() -> timeoutSettingsFunction.apply(operations), operationSupplier, clientSession); } Mono createWriteOperationMono(final Supplier timeoutSettingsSupplier, - final Supplier> operationSupplier, @Nullable final ClientSession clientSession) { - AsyncWriteOperation writeOperation = operationSupplier.get(); + final Supplier> operationSupplier, @Nullable final ClientSession clientSession) { + WriteOperation writeOperation = operationSupplier.get(); return getExecutor(timeoutSettingsSupplier.get()) .execute(writeOperation, getReadConcern(), clientSession); } private Mono createSingleWriteRequestMono( - final Supplier> operation, + final Supplier> operation, @Nullable final ClientSession clientSession, final WriteRequest.Type type) { return createWriteOperationMono(operations::getTimeoutSettings, operation, clientSession) diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutor.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutor.java index dc165e5a5d4..cd666720f33 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutor.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutor.java @@ -19,8 +19,8 @@ import com.mongodb.ReadConcern; import com.mongodb.ReadPreference; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import reactor.core.publisher.Mono; @@ -41,7 +41,7 @@ public interface OperationExecutor { * @param session the session to associate this operation with * @param the operations result type. */ - Mono execute(AsyncReadOperation operation, ReadPreference readPreference, ReadConcern readConcern, + Mono execute(ReadOperation operation, ReadPreference readPreference, ReadConcern readConcern, @Nullable ClientSession session); /** @@ -52,7 +52,7 @@ Mono execute(AsyncReadOperation operation, ReadPreference readPreferen * @param readConcern the read concern * @param the operations result type. */ - Mono execute(AsyncWriteOperation operation, ReadConcern readConcern, @Nullable ClientSession session); + Mono execute(WriteOperation operation, ReadConcern readConcern, @Nullable ClientSession session); /** * Create a new OperationExecutor with a specific timeout settings diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutorImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutorImpl.java index dacf0c9b82e..56b0526e4cb 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutorImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/OperationExecutorImpl.java @@ -31,9 +31,9 @@ import com.mongodb.internal.binding.AsyncReadWriteBinding; import com.mongodb.internal.connection.OperationContext; import com.mongodb.internal.connection.ReadConcernAwareNoOpSessionContext; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; import com.mongodb.internal.operation.OperationHelper; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.ReactiveContextProvider; @@ -72,7 +72,7 @@ public class OperationExecutorImpl implements OperationExecutor { } @Override - public Mono execute(final AsyncReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, + public Mono execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, @Nullable final ClientSession session) { isTrue("open", !mongoClient.getCluster().isClosed()); notNull("operation", operation); @@ -109,7 +109,7 @@ public Mono execute(final AsyncReadOperation operation, final ReadPref } @Override - public Mono execute(final AsyncWriteOperation operation, final ReadConcern readConcern, + public Mono execute(final WriteOperation operation, final ReadConcern readConcern, @Nullable final ClientSession session) { isTrue("open", !mongoClient.getCluster().isClosed()); notNull("operation", operation); diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ReadOperationCursorAsyncOnly.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ReadOperationCursorAsyncOnly.java new file mode 100644 index 00000000000..c1a28e1849e --- /dev/null +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ReadOperationCursorAsyncOnly.java @@ -0,0 +1,29 @@ +/* + * Copyright 2008-present MongoDB, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.mongodb.reactivestreams.client.internal; + +import com.mongodb.internal.binding.ReadBinding; +import com.mongodb.internal.operation.BatchCursor; +import com.mongodb.internal.operation.ReadOperationCursor; + +public interface ReadOperationCursorAsyncOnly extends ReadOperationCursor { + + default BatchCursor execute(final ReadBinding binding) { + throw new UnsupportedOperationException("This operation is async only"); + } + +} diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidReadOperationThenCursorReadOperation.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidReadOperationThenCursorReadOperation.java index 8352b5fe225..e74949432b9 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidReadOperationThenCursorReadOperation.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidReadOperationThenCursorReadOperation.java @@ -19,23 +19,24 @@ import com.mongodb.internal.async.AsyncBatchCursor; import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.binding.AsyncReadBinding; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.ReadOperationSimple; -class VoidReadOperationThenCursorReadOperation implements AsyncReadOperation> { - private final AsyncReadOperation readOperation; - private final AsyncReadOperation> cursorReadOperation; +class VoidReadOperationThenCursorReadOperation implements ReadOperationCursorAsyncOnly { + private final ReadOperationSimple readOperation; + private final ReadOperationCursor cursorReadOperation; - VoidReadOperationThenCursorReadOperation(final AsyncReadOperation readOperation, - final AsyncReadOperation> cursorReadOperation) { + VoidReadOperationThenCursorReadOperation(final ReadOperationSimple readOperation, + final ReadOperationCursor cursorReadOperation) { this.readOperation = readOperation; this.cursorReadOperation = cursorReadOperation; } - public AsyncReadOperation getReadOperation() { + public ReadOperationSimple getReadOperation() { return readOperation; } - public AsyncReadOperation> getCursorReadOperation() { + public ReadOperationCursor getCursorReadOperation() { return cursorReadOperation; } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidWriteOperationThenCursorReadOperation.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidWriteOperationThenCursorReadOperation.java index e0f812f0579..428ad21ca26 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidWriteOperationThenCursorReadOperation.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/VoidWriteOperationThenCursorReadOperation.java @@ -20,15 +20,15 @@ import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.binding.AsyncReadBinding; import com.mongodb.internal.binding.AsyncWriteBinding; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.WriteOperation; -class VoidWriteOperationThenCursorReadOperation implements AsyncReadOperation> { - private final AsyncWriteOperation writeOperation; - private final AsyncReadOperation> cursorReadOperation; +class VoidWriteOperationThenCursorReadOperation implements ReadOperationCursorAsyncOnly { + private final WriteOperation writeOperation; + private final ReadOperationCursor cursorReadOperation; - VoidWriteOperationThenCursorReadOperation(final AsyncWriteOperation writeOperation, - final AsyncReadOperation> cursorReadOperation) { + VoidWriteOperationThenCursorReadOperation(final WriteOperation writeOperation, + final ReadOperationCursor cursorReadOperation) { this.writeOperation = writeOperation; this.cursorReadOperation = cursorReadOperation; } diff --git a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/internal/BatchCursorPublisherTest.java b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/internal/BatchCursorPublisherTest.java index 102b96e424f..b8f88596691 100644 --- a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/internal/BatchCursorPublisherTest.java +++ b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/internal/BatchCursorPublisherTest.java @@ -21,8 +21,8 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.async.AsyncBatchCursor; import com.mongodb.internal.async.SingleResultCallback; -import com.mongodb.internal.operation.AsyncOperations; -import com.mongodb.internal.operation.AsyncReadOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import org.bson.Document; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -59,7 +59,7 @@ public class BatchCursorPublisherTest { private static final String ERROR_RETURNING_RESULTS = "Error returning results"; @Mock - private AsyncReadOperation> readOperation; + private ReadOperationCursor readOperation; @Mock private AsyncBatchCursor batchCursor; @@ -169,13 +169,13 @@ BatchCursorPublisher createVerifiableBatchCursor(final List BatchCursorPublisher publisher = new BatchCursorPublisher( null, OPERATION_PUBLISHER) { @Override - AsyncReadOperation> asAsyncReadOperation(final int initialBatchSize) { + ReadOperationCursor asReadOperation(final int initialBatchSize) { return readOperation; } @Override - Function, TimeoutSettings> getTimeoutSettings() { - return (AsyncOperations::getTimeoutSettings); + Function, TimeoutSettings> getTimeoutSettings() { + return (Operations::getTimeoutSettings); } }; diff --git a/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestHelper.java b/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestHelper.java index 46f4e86762b..450536df2b8 100644 --- a/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestHelper.java +++ b/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestHelper.java @@ -26,8 +26,8 @@ import com.mongodb.internal.bulk.IndexRequest; import com.mongodb.internal.bulk.WriteRequest; import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.NonNull; import com.mongodb.lang.Nullable; import org.bson.BsonReader; @@ -113,10 +113,10 @@ static MongoOperationPublisher createMongoOperationPublisher(final Ope public static void assertOperationIsTheSameAs(@Nullable final Object expectedOperation, @Nullable final Object actualOperation) { - if (expectedOperation instanceof AsyncReadOperation) { - assertTrue(actualOperation instanceof AsyncReadOperation, "Both async read operations"); + if (expectedOperation instanceof ReadOperation) { + assertTrue(actualOperation instanceof ReadOperation, "Both async read operations"); } else { - assertTrue(actualOperation instanceof AsyncWriteOperation, "Both async write operations"); + assertTrue(actualOperation instanceof WriteOperation, "Both async write operations"); } Map expectedMap = getClassGetterValues(unwrapOperation(expectedOperation)); @@ -132,7 +132,7 @@ public static void assertPublisherIsTheSameAs(final Publisher expectedPublish } private static Object unwrapOperation(@Nullable final Object operation) { - assertTrue(operation instanceof AsyncReadOperation || operation instanceof AsyncWriteOperation, + assertTrue(operation instanceof ReadOperation || operation instanceof WriteOperation, "Must be a read or write operation"); if (operation instanceof MapReducePublisherImpl.WrappedMapReduceReadOperation) { return ((MapReducePublisherImpl.WrappedMapReduceReadOperation) operation).getOperation(); @@ -178,7 +178,7 @@ private static Map> getClassPrivateFieldValues(@Nullabl private static Object checkValueTypes(final Object instance) { Object actual = instance instanceof Optional ? ((Optional) instance).orElse(instance) : instance; - if (actual instanceof AsyncReadOperation || actual instanceof AsyncWriteOperation) { + if (actual instanceof ReadOperation || actual instanceof WriteOperation) { return getClassPrivateFieldValues(actual); } else if (actual.getClass().getSimpleName().equals("ChangeStreamDocumentCodec")) { return getClassGetterValues(actual); diff --git a/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestOperationExecutor.java b/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestOperationExecutor.java index 6989d0b2d2e..831d22b3080 100644 --- a/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestOperationExecutor.java +++ b/driver-reactive-streams/src/test/unit/com/mongodb/reactivestreams/client/internal/TestOperationExecutor.java @@ -19,8 +19,8 @@ import com.mongodb.ReadConcern; import com.mongodb.ReadPreference; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.AsyncReadOperation; -import com.mongodb.internal.operation.AsyncWriteOperation; +import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import com.mongodb.reactivestreams.client.ClientSession; import reactor.core.publisher.Mono; @@ -35,15 +35,15 @@ public class TestOperationExecutor implements OperationExecutor { private final List clientSessions = new ArrayList<>(); private final List readPreferences = new ArrayList<>(); - private final List readOperations = new ArrayList<>(); - private final List writeOperations = new ArrayList<>(); + private final List readOperations = new ArrayList<>(); + private final List writeOperations = new ArrayList<>(); public TestOperationExecutor(final List responses) { this.responses = new ArrayList<>(responses); } @Override - public Mono execute(final AsyncReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, + public Mono execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, @Nullable final ClientSession session) { readPreferences.add(readPreference); clientSessions.add(session); @@ -53,7 +53,7 @@ public Mono execute(final AsyncReadOperation operation, final ReadPref @Override - public Mono execute(final AsyncWriteOperation operation, final ReadConcern readConcern, + public Mono execute(final WriteOperation operation, final ReadConcern readConcern, @Nullable final ClientSession session) { clientSessions.add(session); writeOperations.add(operation); @@ -92,7 +92,7 @@ ClientSession getClientSession() { } @Nullable - AsyncReadOperation getReadOperation() { + ReadOperation getReadOperation() { return readOperations.isEmpty() ? null : readOperations.remove(0); } @@ -102,7 +102,7 @@ ReadPreference getReadPreference() { } @Nullable - AsyncWriteOperation getWriteOperation() { + WriteOperation getWriteOperation() { return writeOperations.isEmpty() ? null : writeOperations.remove(0); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/AggregateIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/AggregateIterableImpl.java index 23c8fb35283..082bbbf2c00 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/AggregateIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/AggregateIterableImpl.java @@ -28,10 +28,9 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.client.model.AggregationLevel; import com.mongodb.internal.client.model.FindOptions; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ExplainableReadOperation; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.ReadOperationExplainable; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -46,7 +45,7 @@ import static com.mongodb.assertions.Assertions.notNull; class AggregateIterableImpl extends MongoIterableImpl implements AggregateIterable { - private final SyncOperations operations; + private final Operations operations; private final MongoNamespace namespace; private final Class documentClass; private final Class resultClass; @@ -81,7 +80,7 @@ class AggregateIterableImpl extends MongoIterableImpl pipeline, final AggregationLevel aggregationLevel, final boolean retryReads, final TimeoutSettings timeoutSettings) { super(clientSession, executor, readConcern, readPreference, retryReads, timeoutSettings); - this.operations = new SyncOperations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, + this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, true, retryReads, timeoutSettings); this.namespace = notNull("namespace", namespace); this.documentClass = notNull("documentClass", documentClass); @@ -205,7 +204,7 @@ private E executeExplain(final Class explainResultClass, @Nullable final } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { MongoNamespace outNamespace = getOutNamespace(); if (outNamespace != null) { validateTimeoutMode(); @@ -229,7 +228,7 @@ protected OperationExecutor getExecutor() { return getExecutor(operations.createTimeoutSettings(maxTimeMS, maxAwaitTimeMS)); } - private ExplainableReadOperation> asAggregateOperation() { + private ReadOperationExplainable asAggregateOperation() { return operations.aggregate(pipeline, resultClass, getTimeoutMode(), getBatchSize(), collation, hint, hintString, comment, variables, allowDiskUse, aggregationLevel); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/ChangeStreamIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/ChangeStreamIterableImpl.java index 4b7b3865569..b4540bc5238 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ChangeStreamIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ChangeStreamIterableImpl.java @@ -31,8 +31,8 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -58,7 +58,7 @@ public class ChangeStreamIterableImpl extends MongoIterableImpl pipeline; private final Codec> codec; private final ChangeStreamLevel changeStreamLevel; - private final SyncOperations operations; + private final Operations operations; private FullDocument fullDocument = FullDocument.DEFAULT; private FullDocumentBeforeChange fullDocumentBeforeChange = FullDocumentBeforeChange.DEFAULT; private BsonDocument resumeToken; @@ -86,7 +86,7 @@ public ChangeStreamIterableImpl(@Nullable final ClientSession clientSession, fin this.pipeline = notNull("pipeline", pipeline); this.codec = ChangeStreamDocument.createCodec(notNull("resultClass", resultClass), codecRegistry); this.changeStreamLevel = notNull("changeStreamLevel", changeStreamLevel); - this.operations = new SyncOperations<>(namespace, resultClass, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(namespace, resultClass, readPreference, codecRegistry, retryReads, timeoutSettings); } @Override @@ -140,7 +140,7 @@ public MongoChangeStreamCursor cursor() { } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { throw new UnsupportedOperationException(); } @@ -205,7 +205,7 @@ public ChangeStreamDocument first() { } @Override - public ReadOperation>> asReadOperation() { + public ReadOperationCursor> asReadOperation() { throw new UnsupportedOperationException(); } @@ -214,7 +214,7 @@ protected OperationExecutor getExecutor() { return getExecutor(operations.createTimeoutSettings(0, maxAwaitTimeMS)); } - private ReadOperation> createChangeStreamOperation() { + private ReadOperationCursor createChangeStreamOperation() { return operations.changeStream(fullDocument, fullDocumentBeforeChange, pipeline, new RawBsonDocumentCodec(), changeStreamLevel, getBatchSize(), collation, comment, resumeToken, startAtOperationTime, startAfter, showExpandedEvents); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/DistinctIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/DistinctIterableImpl.java index fdda7777fe5..d3403738088 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/DistinctIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/DistinctIterableImpl.java @@ -24,9 +24,8 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonString; import org.bson.BsonValue; @@ -38,7 +37,7 @@ import static com.mongodb.assertions.Assertions.notNull; class DistinctIterableImpl extends MongoIterableImpl implements DistinctIterable { - private final SyncOperations operations; + private final Operations operations; private final Class resultClass; private final String fieldName; @@ -55,7 +54,7 @@ class DistinctIterableImpl extends MongoIterableImpl(namespace, documentClass, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, retryReads, timeoutSettings); this.resultClass = notNull("resultClass", resultClass); this.fieldName = notNull("mapFunction", fieldName); this.filter = filter; @@ -117,7 +116,7 @@ public DistinctIterable hintString(@Nullable final String hint) { } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return operations.distinct(fieldName, filter, resultClass, collation, comment, hint, hintString); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/FindIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/FindIterableImpl.java index fbead0d7911..9b0321abbbc 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/FindIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/FindIterableImpl.java @@ -28,8 +28,8 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.client.model.FindOptions; import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ExplainableReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationExplainable; import com.mongodb.lang.Nullable; import org.bson.BsonValue; import org.bson.Document; @@ -42,7 +42,7 @@ class FindIterableImpl extends MongoIterableImpl implements FindIterable { - private final SyncOperations operations; + private final Operations operations; private final Class resultClass; private final FindOptions findOptions; @@ -55,7 +55,7 @@ class FindIterableImpl extends MongoIterableImpl im final ReadConcern readConcern, final OperationExecutor executor, final Bson filter, final boolean retryReads, final TimeoutSettings timeoutSettings) { super(clientSession, executor, readConcern, readPreference, retryReads, timeoutSettings); - this.operations = new SyncOperations<>(namespace, documentClass, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, retryReads, timeoutSettings); this.resultClass = notNull("resultClass", resultClass); this.filter = notNull("filter", filter); this.findOptions = new FindOptions(); @@ -244,7 +244,7 @@ private E executeExplain(final Class explainResultClass, @Nullable final asReadOperation().asExplainableOperation(verbosity, codecRegistry.get(explainResultClass)), getReadPreference(), getReadConcern(), getClientSession()); } - public ExplainableReadOperation> asReadOperation() { + public ReadOperationExplainable asReadOperation() { return operations.find(filter, resultClass, findOptions); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/ListCollectionsIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/ListCollectionsIterableImpl.java index 7d617947077..60755456811 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ListCollectionsIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ListCollectionsIterableImpl.java @@ -23,9 +23,8 @@ import com.mongodb.client.ListCollectionsIterable; import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -39,7 +38,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; class ListCollectionsIterableImpl extends MongoIterableImpl implements ListCollectionsIterable { - private final SyncOperations operations; + private final Operations operations; private final String databaseName; private final Class resultClass; private Bson filter; @@ -53,7 +52,7 @@ class ListCollectionsIterableImpl extends MongoIterableImpl im final OperationExecutor executor, final boolean retryReads, final TimeoutSettings timeoutSettings) { super(clientSession, executor, ReadConcern.DEFAULT, readPreference, retryReads, timeoutSettings); // TODO: read concern? this.collectionNamesOnly = collectionNamesOnly; - this.operations = new SyncOperations<>(BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); this.databaseName = notNull("databaseName", databaseName); this.resultClass = notNull("resultClass", resultClass); } @@ -104,7 +103,7 @@ ListCollectionsIterableImpl authorizedCollections(final boolean authori } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return operations.listCollections(databaseName, resultClass, filter, collectionNamesOnly, authorizedCollections, getBatchSize(), comment, getTimeoutMode()); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/ListDatabasesIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/ListDatabasesIterableImpl.java index 83bc08b3dd1..f6e7d9a5021 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ListDatabasesIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ListDatabasesIterableImpl.java @@ -21,9 +21,8 @@ import com.mongodb.client.ListDatabasesIterable; import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -41,7 +40,7 @@ *

This class is not part of the public API and may be removed or changed at any time

*/ public class ListDatabasesIterableImpl extends MongoIterableImpl implements ListDatabasesIterable { - private final SyncOperations operations; + private final Operations operations; private final Class resultClass; private long maxTimeMS; @@ -54,7 +53,7 @@ public ListDatabasesIterableImpl(@Nullable final ClientSession clientSession, fi final CodecRegistry codecRegistry, final ReadPreference readPreference, final OperationExecutor executor, final boolean retryReads, final TimeoutSettings timeoutSettings) { super(clientSession, executor, ReadConcern.DEFAULT, readPreference, retryReads, timeoutSettings); // TODO: read concern? - this.operations = new SyncOperations<>(BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); this.resultClass = notNull("clazz", resultClass); } @@ -108,11 +107,10 @@ public ListDatabasesIterable comment(@Nullable final BsonValue comment) } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return operations.listDatabases(resultClass, filter, nameOnly, authorizedDatabasesOnly, comment); } - protected OperationExecutor getExecutor() { return getExecutor(operations.createTimeoutSettings(maxTimeMS)); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/ListIndexesIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/ListIndexesIterableImpl.java index 19be1bdc8ed..e555984422b 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ListIndexesIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ListIndexesIterableImpl.java @@ -23,9 +23,8 @@ import com.mongodb.client.ListIndexesIterable; import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -38,7 +37,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; class ListIndexesIterableImpl extends MongoIterableImpl implements ListIndexesIterable { - private final SyncOperations operations; + private final Operations operations; private final Class resultClass; private long maxTimeMS; private BsonValue comment; @@ -47,7 +46,7 @@ class ListIndexesIterableImpl extends MongoIterableImpl implem final CodecRegistry codecRegistry, final ReadPreference readPreference, final OperationExecutor executor, final boolean retryReads, final TimeoutSettings timeoutSettings) { super(clientSession, executor, ReadConcern.DEFAULT, readPreference, retryReads, timeoutSettings); - this.operations = new SyncOperations<>(namespace, BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(namespace, BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); this.resultClass = notNull("resultClass", resultClass); } @@ -83,7 +82,7 @@ public ListIndexesIterable comment(@Nullable final BsonValue comment) { } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return operations.listIndexes(resultClass, getBatchSize(), comment, getTimeoutMode()); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java index c67106d357d..7fd6ecd4a93 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java @@ -24,10 +24,9 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; -import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ExplainableReadOperation; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; +import com.mongodb.internal.operation.ReadOperationExplainable; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; @@ -40,7 +39,7 @@ import static com.mongodb.assertions.Assertions.notNull; final class ListSearchIndexesIterableImpl extends MongoIterableImpl implements ListSearchIndexesIterable { - private final SyncOperations operations; + private final Operations operations; private final Class resultClass; @Nullable private Boolean allowDiskUse; @@ -59,12 +58,12 @@ final class ListSearchIndexesIterableImpl extends MongoIterableImpl(namespace, BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); + this.operations = new Operations<>(namespace, BsonDocument.class, readPreference, codecRegistry, retryReads, timeoutSettings); this.codecRegistry = codecRegistry; } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { return asAggregateOperation(); } @@ -146,7 +145,7 @@ private E executeExplain(final Class explainResultClass, @Nullable final .asExplainableOperation(verbosity, codecRegistry.get(explainResultClass)), getReadPreference(), getReadConcern(), getClientSession()); } - private ExplainableReadOperation> asAggregateOperation() { + private ReadOperationExplainable asAggregateOperation() { return operations.listSearchIndexes(resultClass, indexName, getBatchSize(), collation, comment, allowDiskUse); } diff --git a/driver-sync/src/main/com/mongodb/client/internal/MapReduceIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/MapReduceIterableImpl.java index 541bd9d3518..b56bcb76d46 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/MapReduceIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MapReduceIterableImpl.java @@ -24,13 +24,16 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.client.model.Collation; import com.mongodb.internal.TimeoutSettings; +import com.mongodb.internal.async.AsyncBatchCursor; +import com.mongodb.internal.async.SingleResultCallback; +import com.mongodb.internal.binding.AsyncReadBinding; import com.mongodb.internal.binding.ReadBinding; import com.mongodb.internal.client.model.FindOptions; import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.MapReduceBatchCursor; import com.mongodb.internal.operation.MapReduceStatistics; -import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.MapReduceWithInlineResultsOperation; +import com.mongodb.internal.operation.Operations; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; @@ -44,7 +47,7 @@ @SuppressWarnings("deprecation") class MapReduceIterableImpl extends MongoIterableImpl implements com.mongodb.client.MapReduceIterable { - private final SyncOperations operations; + private final Operations operations; private final MongoNamespace namespace; private final Class resultClass; private final String mapFunction; @@ -70,7 +73,7 @@ class MapReduceIterableImpl extends MongoIterableImpl(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, + this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, false, false, timeoutSettings); this.namespace = notNull("namespace", namespace); this.resultClass = notNull("resultClass", resultClass); @@ -194,9 +197,9 @@ protected OperationExecutor getExecutor() { } @Override - public ReadOperation> asReadOperation() { + public ReadOperationCursor asReadOperation() { if (inline) { - ReadOperation> operation = operations.mapReduce(mapFunction, reduceFunction, finalizeFunction, + MapReduceWithInlineResultsOperation operation = operations.mapReduce(mapFunction, reduceFunction, finalizeFunction, resultClass, filter, limit, jsMode, scope, sort, verbose, collation); return new WrappedMapReduceReadOperation<>(operation); } else { @@ -221,14 +224,14 @@ private WriteOperation createMapReduceToCollectionOperation } // this could be inlined, but giving it a name so that it's unit-testable - static class WrappedMapReduceReadOperation implements ReadOperation> { - private final ReadOperation> operation; + static class WrappedMapReduceReadOperation implements ReadOperationCursor { + private final MapReduceWithInlineResultsOperation operation; - ReadOperation> getOperation() { + MapReduceWithInlineResultsOperation getOperation() { return operation; } - WrappedMapReduceReadOperation(final ReadOperation> operation) { + WrappedMapReduceReadOperation(final MapReduceWithInlineResultsOperation operation) { this.operation = operation; } @@ -241,5 +244,10 @@ public String getCommandName() { public BatchCursor execute(final ReadBinding binding) { return operation.execute(binding); } + + @Override + public void executeAsync(final AsyncReadBinding binding, final SingleResultCallback> callback) { + throw new UnsupportedOperationException("This operation is sync only"); + } } } diff --git a/driver-sync/src/main/com/mongodb/client/internal/MongoClusterImpl.java b/driver-sync/src/main/com/mongodb/client/internal/MongoClusterImpl.java index 0430d9407c1..058122e9c26 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/MongoClusterImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MongoClusterImpl.java @@ -39,8 +39,8 @@ import com.mongodb.client.MongoIterable; import com.mongodb.client.SynchronousContextProvider; import com.mongodb.client.model.bulk.ClientBulkWriteOptions; -import com.mongodb.client.model.bulk.ClientNamespacedWriteModel; import com.mongodb.client.model.bulk.ClientBulkWriteResult; +import com.mongodb.client.model.bulk.ClientNamespacedWriteModel; import com.mongodb.internal.IgnorableRequestContext; import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.binding.ClusterAwareReadWriteBinding; @@ -53,8 +53,8 @@ import com.mongodb.internal.connection.OperationContext; import com.mongodb.internal.connection.ReadConcernAwareNoOpSessionContext; import com.mongodb.internal.operation.OperationHelper; +import com.mongodb.internal.operation.Operations; import com.mongodb.internal.operation.ReadOperation; -import com.mongodb.internal.operation.SyncOperations; import com.mongodb.internal.operation.WriteOperation; import com.mongodb.internal.session.ServerSessionPool; import com.mongodb.lang.Nullable; @@ -98,7 +98,7 @@ final class MongoClusterImpl implements MongoCluster { private final TimeoutSettings timeoutSettings; private final UuidRepresentation uuidRepresentation; private final WriteConcern writeConcern; - private final SyncOperations operations; + private final Operations operations; MongoClusterImpl( @Nullable final AutoEncryptionSettings autoEncryptionSettings, final Cluster cluster, final CodecRegistry codecRegistry, @@ -123,7 +123,7 @@ final class MongoClusterImpl implements MongoCluster { this.timeoutSettings = timeoutSettings; this.uuidRepresentation = uuidRepresentation; this.writeConcern = writeConcern; - operations = new SyncOperations<>( + operations = new Operations<>( null, BsonDocument.class, readPreference, @@ -156,6 +156,7 @@ public ReadConcern getReadConcern() { } @Override + @Nullable public Long getTimeout(final TimeUnit timeUnit) { Long timeoutMS = timeoutSettings.getTimeoutMS(); return timeoutMS == null ? null : timeUnit.convert(timeoutMS, TimeUnit.MILLISECONDS); @@ -398,7 +399,7 @@ final class OperationExecutorImpl implements OperationExecutor { } @Override - public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern) { + public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern) { return execute(operation, readPreference, readConcern, null); } @@ -408,7 +409,7 @@ public T execute(final WriteOperation operation, final ReadConcern readCo } @Override - public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, + public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, @Nullable final ClientSession session) { if (session != null) { session.notifyOperationInitiated(operation); diff --git a/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java b/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java index 8466950d7e5..736e1541212 100755 --- a/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java @@ -64,7 +64,7 @@ import com.mongodb.internal.client.model.AggregationLevel; import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; import com.mongodb.internal.operation.IndexHelper; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; import com.mongodb.internal.operation.WriteOperation; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; @@ -98,7 +98,7 @@ class MongoCollectionImpl implements MongoCollection { private final boolean retryWrites; private final boolean retryReads; private final ReadConcern readConcern; - private final SyncOperations operations; + private final Operations operations; private final UuidRepresentation uuidRepresentation; @Nullable private final AutoEncryptionSettings autoEncryptionSettings; @@ -123,7 +123,7 @@ class MongoCollectionImpl implements MongoCollection { this.uuidRepresentation = notNull("uuidRepresentation", uuidRepresentation); this.autoEncryptionSettings = autoEncryptionSettings; this.timeoutSettings = timeoutSettings; - this.operations = new SyncOperations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, + this.operations = new Operations<>(namespace, documentClass, readPreference, codecRegistry, readConcern, writeConcern, retryWrites, retryReads, timeoutSettings); } @@ -158,6 +158,7 @@ public ReadConcern getReadConcern() { } @Override + @Nullable public Long getTimeout(final TimeUnit timeUnit) { Long timeoutMS = timeoutSettings.getTimeoutMS(); return timeoutMS == null ? null : notNull("timeUnit", timeUnit).convert(timeoutMS, MILLISECONDS); diff --git a/driver-sync/src/main/com/mongodb/client/internal/MongoDatabaseImpl.java b/driver-sync/src/main/com/mongodb/client/internal/MongoDatabaseImpl.java index b2b3284980d..cf13ff1f427 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/MongoDatabaseImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MongoDatabaseImpl.java @@ -34,7 +34,7 @@ import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.client.model.AggregationLevel; import com.mongodb.internal.client.model.changestream.ChangeStreamLevel; -import com.mongodb.internal.operation.SyncOperations; +import com.mongodb.internal.operation.Operations; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.Document; @@ -69,7 +69,7 @@ public class MongoDatabaseImpl implements MongoDatabase { private final TimeoutSettings timeoutSettings; private final OperationExecutor executor; - private final SyncOperations operations; + private final Operations operations; public MongoDatabaseImpl(final String name, final CodecRegistry codecRegistry, final ReadPreference readPreference, final WriteConcern writeConcern, final boolean retryWrites, final boolean retryReads, @@ -88,7 +88,7 @@ public MongoDatabaseImpl(final String name, final CodecRegistry codecRegistry, f this.autoEncryptionSettings = autoEncryptionSettings; this.timeoutSettings = timeoutSettings; this.executor = notNull("executor", executor); - this.operations = new SyncOperations<>(new MongoNamespace(name, COMMAND_COLLECTION_NAME), BsonDocument.class, readPreference, + this.operations = new Operations<>(new MongoNamespace(name, COMMAND_COLLECTION_NAME), BsonDocument.class, readPreference, codecRegistry, readConcern, writeConcern, retryWrites, retryReads, timeoutSettings); } @@ -118,6 +118,7 @@ public ReadConcern getReadConcern() { } @Override + @Nullable public Long getTimeout(final TimeUnit timeUnit) { Long timeoutMS = timeoutSettings.getTimeoutMS(); return timeoutMS == null ? null : notNull("timeUnit", timeUnit).convert(timeoutMS, MILLISECONDS); diff --git a/driver-sync/src/main/com/mongodb/client/internal/MongoIterableImpl.java b/driver-sync/src/main/com/mongodb/client/internal/MongoIterableImpl.java index d4b948c07a1..b642f0f1189 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/MongoIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MongoIterableImpl.java @@ -25,7 +25,7 @@ import com.mongodb.client.cursor.TimeoutMode; import com.mongodb.internal.TimeoutSettings; import com.mongodb.internal.operation.BatchCursor; -import com.mongodb.internal.operation.ReadOperation; +import com.mongodb.internal.operation.ReadOperationCursor; import com.mongodb.lang.Nullable; import java.util.Collection; @@ -58,7 +58,7 @@ public MongoIterableImpl(@Nullable final ClientSession clientSession, final Oper this.timeoutSettings = timeoutSettings; } - public abstract ReadOperation> asReadOperation(); + public abstract ReadOperationCursor asReadOperation(); @Nullable ClientSession getClientSession() { diff --git a/driver-sync/src/main/com/mongodb/client/internal/OperationExecutor.java b/driver-sync/src/main/com/mongodb/client/internal/OperationExecutor.java index 37df6dffe32..1ec19483afc 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/OperationExecutor.java +++ b/driver-sync/src/main/com/mongodb/client/internal/OperationExecutor.java @@ -40,7 +40,7 @@ public interface OperationExecutor { * @param readConcern the read concern * @return the result of executing the operation. */ - T execute(ReadOperation operation, ReadPreference readPreference, ReadConcern readConcern); + T execute(ReadOperation operation, ReadPreference readPreference, ReadConcern readConcern); /** * Execute the write operation. @@ -62,7 +62,7 @@ public interface OperationExecutor { * @param session the session to associate this operation with * @return the result of executing the operation. */ - T execute(ReadOperation operation, ReadPreference readPreference, ReadConcern readConcern, @Nullable ClientSession session); + T execute(ReadOperation operation, ReadPreference readPreference, ReadConcern readConcern, @Nullable ClientSession session); /** * Execute the write operation. diff --git a/driver-sync/src/test/unit/com/mongodb/client/internal/TestOperationExecutor.java b/driver-sync/src/test/unit/com/mongodb/client/internal/TestOperationExecutor.java index 28206e1be26..adcfaa0f903 100644 --- a/driver-sync/src/test/unit/com/mongodb/client/internal/TestOperationExecutor.java +++ b/driver-sync/src/test/unit/com/mongodb/client/internal/TestOperationExecutor.java @@ -42,7 +42,7 @@ public TestOperationExecutor(final List responses) { } @Override - public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern) { + public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern) { return execute(operation, readPreference, readConcern, null); } @@ -52,7 +52,7 @@ public T execute(final WriteOperation operation, final ReadConcern readCo } @Override - public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, + public T execute(final ReadOperation operation, final ReadPreference readPreference, final ReadConcern readConcern, @Nullable final ClientSession session) { clientSessions.add(session); readOperations.add(operation);