Search in sources :

Example 1 with AsyncConnection

use of com.mongodb.internal.connection.AsyncConnection in project mongo-java-driver by mongodb.

the class MixedBulkWriteOperation method executeLegacyBatchesAsync.

private void executeLegacyBatchesAsync(final AsyncWriteBinding binding, final AsyncConnection connection, final SingleResultCallback<BulkWriteResult> callback) {
    List<? extends WriteRequest> writeRequests = getWriteRequests();
    LoopState loopState = new LoopState();
    AsyncCallbackRunnable loop = new AsyncCallbackLoop(loopState, iterationCallback -> {
        int i = loopState.iteration();
        if (loopState.breakAndCompleteIf(() -> i == writeRequests.size(), iterationCallback)) {
            return;
        }
        WriteRequest writeRequest = writeRequests.get(i);
        SingleResultCallback<WriteConcernResult> commandCallback = (ignored, t) -> iterationCallback.onResult(null, t);
        if (writeRequest.getType() == INSERT) {
            connection.insertAsync(getNamespace(), isOrdered(), (InsertRequest) writeRequest, binding.getRequestContext(), commandCallback);
        } else if (writeRequest.getType() == UPDATE || writeRequest.getType() == REPLACE) {
            connection.updateAsync(getNamespace(), isOrdered(), (UpdateRequest) writeRequest, binding.getRequestContext(), commandCallback);
        } else {
            connection.deleteAsync(getNamespace(), isOrdered(), (DeleteRequest) writeRequest, binding.getRequestContext(), commandCallback);
        }
    });
    loop.run((voidResult, t) -> {
        if (t != null) {
            callback.onResult(null, t);
        } else {
            callback.onResult(BulkWriteResult.unacknowledged(), null);
        }
    });
}
Also used : LoopState(com.mongodb.internal.async.function.LoopState) AsyncCallbackRunnable(com.mongodb.internal.async.function.AsyncCallbackRunnable) LoopState(com.mongodb.internal.async.function.LoopState) WriteRequest(com.mongodb.internal.bulk.WriteRequest) CommandOperationHelper.addRetryableWriteErrorLabel(com.mongodb.internal.operation.CommandOperationHelper.addRetryableWriteErrorLabel) MongoBulkWriteException(com.mongodb.MongoBulkWriteException) MongoWriteConcernWithResponseException(com.mongodb.internal.connection.MongoWriteConcernWithResponseException) ProtocolHelper(com.mongodb.internal.connection.ProtocolHelper) ConnectionDescription(com.mongodb.connection.ConnectionDescription) BsonArray(org.bson.BsonArray) OperationHelper.validateWriteRequests(com.mongodb.internal.operation.OperationHelper.validateWriteRequests) OperationHelper.withSourceAndConnection(com.mongodb.internal.operation.OperationHelper.withSourceAndConnection) MongoException(com.mongodb.MongoException) AsyncCallbackSupplier(com.mongodb.internal.async.function.AsyncCallbackSupplier) Set(java.util.Set) Collectors(java.util.stream.Collectors) AsyncCallbackRunnable(com.mongodb.internal.async.function.AsyncCallbackRunnable) ServerVersionHelper.serverIsAtLeastVersionThreeDotSix(com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotSix) SingleResultCallback(com.mongodb.internal.async.SingleResultCallback) REPLACE(com.mongodb.internal.bulk.WriteRequest.Type.REPLACE) RetryState(com.mongodb.internal.async.function.RetryState) List(java.util.List) Assertions.notNull(com.mongodb.assertions.Assertions.notNull) Optional(java.util.Optional) RetryingSyncSupplier(com.mongodb.internal.async.function.RetryingSyncSupplier) InsertRequest(com.mongodb.internal.bulk.InsertRequest) RetryingAsyncCallbackSupplier(com.mongodb.internal.async.function.RetryingAsyncCallbackSupplier) CommandOperationHelper.logRetryExecute(com.mongodb.internal.operation.CommandOperationHelper.logRetryExecute) CommandOperationHelper.exceptionTransformingCallback(com.mongodb.internal.operation.CommandOperationHelper.exceptionTransformingCallback) ErrorHandlingResultCallback.errorHandlingCallback(com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback) BsonString(org.bson.BsonString) Supplier(java.util.function.Supplier) BsonDocument(org.bson.BsonDocument) LOGGER(com.mongodb.internal.operation.OperationHelper.LOGGER) Connection(com.mongodb.internal.connection.Connection) NoOpFieldNameValidator(com.mongodb.internal.validator.NoOpFieldNameValidator) WriteBinding(com.mongodb.internal.binding.WriteBinding) Assertions(com.mongodb.assertions.Assertions) WriteConcernResult(com.mongodb.WriteConcernResult) AsyncCallbackLoop(com.mongodb.internal.async.function.AsyncCallbackLoop) AsyncWriteBinding(com.mongodb.internal.binding.AsyncWriteBinding) DeleteRequest(com.mongodb.internal.bulk.DeleteRequest) SessionContext(com.mongodb.internal.session.SessionContext) FieldNameValidator(org.bson.FieldNameValidator) OperationHelper.validateWriteRequestsAndCompleteIfInvalid(com.mongodb.internal.operation.OperationHelper.validateWriteRequestsAndCompleteIfInvalid) INSERT(com.mongodb.internal.bulk.WriteRequest.Type.INSERT) MongoNamespace(com.mongodb.MongoNamespace) UpdateRequest(com.mongodb.internal.bulk.UpdateRequest) OperationHelper.isRetryableWrite(com.mongodb.internal.operation.OperationHelper.isRetryableWrite) CommandOperationHelper.transformWriteException(com.mongodb.internal.operation.CommandOperationHelper.transformWriteException) Assertions.isTrueArgument(com.mongodb.assertions.Assertions.isTrueArgument) Assertions.assertTrue(com.mongodb.assertions.Assertions.assertTrue) OperationHelper.withAsyncSourceAndConnection(com.mongodb.internal.operation.OperationHelper.withAsyncSourceAndConnection) BulkWriteResult(com.mongodb.bulk.BulkWriteResult) Nullable(com.mongodb.lang.Nullable) WriteConcern(com.mongodb.WriteConcern) UPDATE(com.mongodb.internal.bulk.WriteRequest.Type.UPDATE) AsyncConnection(com.mongodb.internal.connection.AsyncConnection) AttachmentKeys(com.mongodb.internal.operation.retry.AttachmentKeys) WriteConcernResult(com.mongodb.WriteConcernResult) UpdateRequest(com.mongodb.internal.bulk.UpdateRequest) WriteRequest(com.mongodb.internal.bulk.WriteRequest) AsyncCallbackLoop(com.mongodb.internal.async.function.AsyncCallbackLoop) DeleteRequest(com.mongodb.internal.bulk.DeleteRequest)

Example 2 with AsyncConnection

use of com.mongodb.internal.connection.AsyncConnection in project mongo-java-driver by mongodb.

the class OperationHelper method validateIndexRequestCollations.

static void validateIndexRequestCollations(final AsyncConnection connection, final List<IndexRequest> requests, final AsyncCallableWithConnection callable) {
    boolean calledTheCallable = false;
    for (IndexRequest request : requests) {
        if (request.getCollation() != null) {
            calledTheCallable = true;
            validateCollation(connection, request.getCollation(), new AsyncCallableWithConnection() {

                @Override
                public void call(final AsyncConnection connection, final Throwable t) {
                    callable.call(connection, t);
                }
            });
            break;
        }
    }
    if (!calledTheCallable) {
        callable.call(connection, null);
    }
}
Also used : AsyncConnection(com.mongodb.internal.connection.AsyncConnection) IndexRequest(com.mongodb.internal.bulk.IndexRequest)

Example 3 with AsyncConnection

use of com.mongodb.internal.connection.AsyncConnection in project mongo-java-driver by mongodb.

the class FindOperation method executeAsync.

@Override
public void executeAsync(final AsyncReadBinding binding, final SingleResultCallback<AsyncBatchCursor<T>> callback) {
    RetryState retryState = initialRetryState(retryReads);
    binding.retain();
    AsyncCallbackSupplier<AsyncBatchCursor<T>> asyncRead = CommandOperationHelper.<AsyncBatchCursor<T>>decorateReadWithRetries(retryState, funcCallback -> {
        logRetryExecute(retryState);
        withAsyncSourceAndConnection(binding::getReadConnectionSource, false, funcCallback, (source, connection, releasingCallback) -> {
            if (retryState.breakAndCompleteIfRetryAnd(() -> !canRetryRead(source.getServerDescription(), connection.getDescription(), binding.getSessionContext()), releasingCallback)) {
                return;
            }
            if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                final SingleResultCallback<AsyncBatchCursor<T>> wrappedCallback = exceptionTransformingCallback(releasingCallback);
                createReadCommandAndExecuteAsync(retryState, binding, source, namespace.getDatabaseName(), getCommandCreator(binding.getSessionContext()), CommandResultDocumentCodec.create(decoder, FIRST_BATCH), asyncTransformer(), connection, wrappedCallback);
            } else {
                retryState.markAsLastAttempt();
                validateFindOptions(source, connection, binding.getSessionContext().getReadConcern(), collation, allowDiskUse, new AsyncCallableWithConnectionAndSource() {

                    @Override
                    public void call(final AsyncConnectionSource source, final AsyncConnection connection, final Throwable t) {
                        if (t != null) {
                            releasingCallback.onResult(null, t);
                        } else {
                            connection.queryAsync(namespace, asDocument(connection.getDescription(), binding.getReadPreference()), projection, skip, limit, batchSize, isSecondaryOk() || binding.getReadPreference().isSecondaryOk(), isTailableCursor(), isAwaitData(), isNoCursorTimeout(), isPartial(), isOplogReplay(), decoder, binding.getRequestContext(), new SingleResultCallback<QueryResult<T>>() {

                                @Override
                                public void onResult(final QueryResult<T> result, final Throwable t) {
                                    if (t != null) {
                                        releasingCallback.onResult(null, t);
                                    } else {
                                        releasingCallback.onResult(new AsyncQueryBatchCursor<T>(result, limit, batchSize, getMaxTimeForCursor(), decoder, source, connection), null);
                                    }
                                }
                            });
                        }
                    }
                });
            }
        });
    }).whenComplete(binding::release);
    asyncRead.get(errorHandlingCallback(callback, LOGGER));
}
Also used : AsyncReadBinding(com.mongodb.internal.binding.AsyncReadBinding) ServerDescription(com.mongodb.connection.ServerDescription) CommandOperationHelper.initialRetryState(com.mongodb.internal.operation.CommandOperationHelper.initialRetryState) BsonValue(org.bson.BsonValue) DocumentHelper.putIfNotNull(com.mongodb.internal.operation.DocumentHelper.putIfNotNull) ConnectionDescription(com.mongodb.connection.ConnectionDescription) ExplainHelper.asExplainCommand(com.mongodb.internal.operation.ExplainHelper.asExplainCommand) DocumentHelper.putIfNotNullOrEmpty(com.mongodb.internal.operation.DocumentHelper.putIfNotNullOrEmpty) MIN_WIRE_VERSION(com.mongodb.internal.operation.ServerVersionHelper.MIN_WIRE_VERSION) CursorType(com.mongodb.CursorType) AsyncCallableWithConnectionAndSource(com.mongodb.internal.operation.OperationHelper.AsyncCallableWithConnectionAndSource) OperationHelper.validateFindOptions(com.mongodb.internal.operation.OperationHelper.validateFindOptions) OperationHelper.canRetryRead(com.mongodb.internal.operation.OperationHelper.canRetryRead) QueryResult(com.mongodb.internal.connection.QueryResult) OperationHelper.withSourceAndConnection(com.mongodb.internal.operation.OperationHelper.withSourceAndConnection) ConnectionSource(com.mongodb.internal.binding.ConnectionSource) ReadBinding(com.mongodb.internal.binding.ReadBinding) AsyncCallbackSupplier(com.mongodb.internal.async.function.AsyncCallbackSupplier) OperationReadConcernHelper.appendReadConcernToCommand(com.mongodb.internal.operation.OperationReadConcernHelper.appendReadConcernToCommand) NoOpSessionContext(com.mongodb.internal.connection.NoOpSessionContext) SingleResultCallback(com.mongodb.internal.async.SingleResultCallback) Decoder(org.bson.codecs.Decoder) RetryState(com.mongodb.internal.async.function.RetryState) CommandReadTransformerAsync(com.mongodb.internal.operation.CommandOperationHelper.CommandReadTransformerAsync) Assertions.notNull(com.mongodb.assertions.Assertions.notNull) ReadPreference.primary(com.mongodb.ReadPreference.primary) ExplainVerbosity(com.mongodb.ExplainVerbosity) ReadPreference(com.mongodb.ReadPreference) CommandOperationHelper.logRetryExecute(com.mongodb.internal.operation.CommandOperationHelper.logRetryExecute) OperationHelper.cursorDocumentToQueryResult(com.mongodb.internal.operation.OperationHelper.cursorDocumentToQueryResult) CommandCreator(com.mongodb.internal.operation.CommandOperationHelper.CommandCreator) BsonBoolean(org.bson.BsonBoolean) MongoCommandException(com.mongodb.MongoCommandException) ErrorHandlingResultCallback.errorHandlingCallback(com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback) CommandReadTransformer(com.mongodb.internal.operation.CommandOperationHelper.CommandReadTransformer) BsonString(org.bson.BsonString) CommandOperationHelper.createReadCommandAndExecuteAsync(com.mongodb.internal.operation.CommandOperationHelper.createReadCommandAndExecuteAsync) MongoQueryException(com.mongodb.MongoQueryException) Supplier(java.util.function.Supplier) BsonDocument(org.bson.BsonDocument) LOGGER(com.mongodb.internal.operation.OperationHelper.LOGGER) Connection(com.mongodb.internal.connection.Connection) SHARD_ROUTER(com.mongodb.connection.ServerType.SHARD_ROUTER) BsonInt64(org.bson.BsonInt64) ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo(com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo) AsyncConnectionSource(com.mongodb.internal.binding.AsyncConnectionSource) SessionContext(com.mongodb.internal.session.SessionContext) Collation(com.mongodb.client.model.Collation) MongoNamespace(com.mongodb.MongoNamespace) CommandOperationHelper.createReadCommandAndExecute(com.mongodb.internal.operation.CommandOperationHelper.createReadCommandAndExecute) CommandOperationHelper.decorateReadWithRetries(com.mongodb.internal.operation.CommandOperationHelper.decorateReadWithRetries) TimeUnit(java.util.concurrent.TimeUnit) AsyncBatchCursor(com.mongodb.internal.async.AsyncBatchCursor) Assertions.isTrueArgument(com.mongodb.assertions.Assertions.isTrueArgument) OperationHelper.withAsyncSourceAndConnection(com.mongodb.internal.operation.OperationHelper.withAsyncSourceAndConnection) Nullable(com.mongodb.lang.Nullable) BsonInt32(org.bson.BsonInt32) AsyncConnection(com.mongodb.internal.connection.AsyncConnection) AsyncBatchCursor(com.mongodb.internal.async.AsyncBatchCursor) SingleResultCallback(com.mongodb.internal.async.SingleResultCallback) QueryResult(com.mongodb.internal.connection.QueryResult) OperationHelper.cursorDocumentToQueryResult(com.mongodb.internal.operation.OperationHelper.cursorDocumentToQueryResult) AsyncConnectionSource(com.mongodb.internal.binding.AsyncConnectionSource) AsyncConnection(com.mongodb.internal.connection.AsyncConnection) AsyncCallableWithConnectionAndSource(com.mongodb.internal.operation.OperationHelper.AsyncCallableWithConnectionAndSource) CommandOperationHelper.initialRetryState(com.mongodb.internal.operation.CommandOperationHelper.initialRetryState) RetryState(com.mongodb.internal.async.function.RetryState)

Aggregations

AsyncConnection (com.mongodb.internal.connection.AsyncConnection)3 MongoNamespace (com.mongodb.MongoNamespace)2 Assertions.isTrueArgument (com.mongodb.assertions.Assertions.isTrueArgument)2 Assertions.notNull (com.mongodb.assertions.Assertions.notNull)2 ConnectionDescription (com.mongodb.connection.ConnectionDescription)2 ErrorHandlingResultCallback.errorHandlingCallback (com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback)2 SingleResultCallback (com.mongodb.internal.async.SingleResultCallback)2 AsyncCallbackSupplier (com.mongodb.internal.async.function.AsyncCallbackSupplier)2 RetryState (com.mongodb.internal.async.function.RetryState)2 Connection (com.mongodb.internal.connection.Connection)2 CommandOperationHelper.logRetryExecute (com.mongodb.internal.operation.CommandOperationHelper.logRetryExecute)2 LOGGER (com.mongodb.internal.operation.OperationHelper.LOGGER)2 CursorType (com.mongodb.CursorType)1 ExplainVerbosity (com.mongodb.ExplainVerbosity)1 MongoBulkWriteException (com.mongodb.MongoBulkWriteException)1 MongoCommandException (com.mongodb.MongoCommandException)1 MongoException (com.mongodb.MongoException)1 MongoQueryException (com.mongodb.MongoQueryException)1 ReadPreference (com.mongodb.ReadPreference)1 ReadPreference.primary (com.mongodb.ReadPreference.primary)1