/** * Executes a bulk write operation. * * @param binding the WriteBinding for the operation * @return the bulk write result. * @throws MongoBulkWriteException if a failure to complete the bulk write is detected based on the server response */ @Override public BulkWriteResult execute(final WriteBinding binding) { return withReleasableConnection(binding, new CallableWithConnectionAndSource<BulkWriteResult>() { @Override public BulkWriteResult call(final ConnectionSource connectionSource, final Connection connection) { validateWriteRequestsAndReleaseConnectionIfError(connection); if (getWriteConcern().isAcknowledged() || serverIsAtLeastVersionThreeDotSix(connection.getDescription())) { BulkWriteBatch bulkWriteBatch = BulkWriteBatch.createBulkWriteBatch(namespace, connectionSource.getServerDescription(), connection.getDescription(), ordered, writeConcern, bypassDocumentValidation, retryWrites, writeRequests, binding.getSessionContext()); return executeBulkWriteBatch(binding, connection, bulkWriteBatch); } else { return executeLegacyBatches(connection); } } }); }
final CommandCreator commandCreator, final CommandTransformer<T, R> transformer) { return withReleasableConnection(binding, new CallableWithConnectionAndSource<R>() { @Override public R call(final ConnectionSource source, final Connection connection) {
private BulkWriteResult retryExecuteBatches(final WriteBinding binding, final BulkWriteBatch retryBatch, final MongoException originalError) { logRetryExecute(retryBatch.getPayload().getPayloadType().toString(), originalError); return withReleasableConnection(binding, originalError, new CallableWithConnectionAndSource<BulkWriteResult>() { @Override public BulkWriteResult call(final ConnectionSource source, final Connection connection) { if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { return checkMongoWriteConcernWithResponseException(connection); } else { try { retryBatch.addResult(executeCommand(connection, retryBatch, binding)); } catch (Throwable t) { return checkMongoWriteConcernWithResponseException(connection); } return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } } private BulkWriteResult checkMongoWriteConcernWithResponseException(final Connection connection) { if (originalError instanceof MongoWriteConcernWithResponseException) { retryBatch.addResult((BsonDocument) ((MongoWriteConcernWithResponseException) originalError).getResponse()); return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } else { connection.release(); throw originalError; } } }); }
return withReleasableConnection(binding, originalException, new CallableWithConnectionAndSource<R>() { @Override public R call(final ConnectionSource source, final Connection connection) {
/** * Executes a bulk write operation. * * @param binding the WriteBinding for the operation * @return the bulk write result. * @throws MongoBulkWriteException if a failure to complete the bulk write is detected based on the server response */ @Override public BulkWriteResult execute(final WriteBinding binding) { return withReleasableConnection(binding, new CallableWithConnectionAndSource<BulkWriteResult>() { @Override public BulkWriteResult call(final ConnectionSource connectionSource, final Connection connection) { validateWriteRequestsAndReleaseConnectionIfError(connection); if (getWriteConcern().isAcknowledged() || serverIsAtLeastVersionThreeDotSix(connection.getDescription())) { BulkWriteBatch bulkWriteBatch = BulkWriteBatch.createBulkWriteBatch(namespace, connectionSource.getServerDescription(), connection.getDescription(), ordered, writeConcern, bypassDocumentValidation, retryWrites, writeRequests, binding.getSessionContext()); return executeBulkWriteBatch(binding, connection, bulkWriteBatch); } else { return executeLegacyBatches(connection); } } }); }
final CommandCreator commandCreator, final CommandTransformer<T, R> transformer) { return withReleasableConnection(binding, new CallableWithConnectionAndSource<R>() { @Override public R call(final ConnectionSource source, final Connection connection) {
private BulkWriteResult retryExecuteBatches(final WriteBinding binding, final BulkWriteBatch retryBatch, final MongoException originalError) { logRetryExecute(retryBatch.getPayload().getPayloadType().toString(), originalError); return withReleasableConnection(binding, originalError, new CallableWithConnectionAndSource<BulkWriteResult>() { @Override public BulkWriteResult call(final ConnectionSource source, final Connection connection) { if (!isRetryableWrite(retryWrites, writeConcern, source.getServerDescription(), connection.getDescription(), binding.getSessionContext())) { return checkMongoWriteConcernWithResponseException(connection); } else { try { retryBatch.addResult(executeCommand(connection, retryBatch, binding)); } catch (Throwable t) { return checkMongoWriteConcernWithResponseException(connection); } return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } } private BulkWriteResult checkMongoWriteConcernWithResponseException(final Connection connection) { if (originalError instanceof MongoWriteConcernWithResponseException) { retryBatch.addResult((BsonDocument) ((MongoWriteConcernWithResponseException) originalError).getResponse()); return executeBulkWriteBatch(binding, connection, retryBatch.getNextBatch()); } else { connection.release(); throw originalError; } } }); }
return withReleasableConnection(binding, originalException, new CallableWithConnectionAndSource<R>() { @Override public R call(final ConnectionSource source, final Connection connection) {