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 83fbd97081f..82da3fc7646 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/AbstractWriteSearchIndexOperation.java @@ -19,7 +19,6 @@ import com.mongodb.MongoCommandException; import com.mongodb.MongoNamespace; -import com.mongodb.WriteConcern; import com.mongodb.internal.async.SingleResultCallback; import com.mongodb.internal.binding.AsyncWriteBinding; import com.mongodb.internal.binding.WriteBinding; @@ -40,12 +39,9 @@ */ abstract class AbstractWriteSearchIndexOperation implements AsyncWriteOperation, WriteOperation { private final MongoNamespace namespace; - private final WriteConcern writeConcern; - AbstractWriteSearchIndexOperation(final MongoNamespace mongoNamespace, - final WriteConcern writeConcern) { + AbstractWriteSearchIndexOperation(final MongoNamespace mongoNamespace) { this.namespace = mongoNamespace; - this.writeConcern = writeConcern; } @Override @@ -101,8 +97,4 @@ void swallowOrThrow(@Nullable final E mongoExecutionExcept MongoNamespace getNamespace() { return namespace; } - - WriteConcern getWriteConcern() { - return writeConcern; - } } diff --git a/driver-core/src/main/com/mongodb/internal/operation/CreateSearchIndexesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/CreateSearchIndexesOperation.java index 0832668a85a..1a44d887586 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/CreateSearchIndexesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/CreateSearchIndexesOperation.java @@ -17,7 +17,6 @@ package com.mongodb.internal.operation; import com.mongodb.MongoNamespace; -import com.mongodb.WriteConcern; import org.bson.BsonArray; import org.bson.BsonDocument; import org.bson.BsonString; @@ -26,7 +25,6 @@ import java.util.stream.Collectors; import static com.mongodb.assertions.Assertions.assertNotNull; -import static com.mongodb.internal.operation.WriteConcernHelper.appendWriteConcernToCommand; /** * An operation that creates one or more Atlas Search indexes. @@ -37,9 +35,8 @@ final class CreateSearchIndexesOperation extends AbstractWriteSearchIndexOperati private static final String COMMAND_NAME = "createSearchIndexes"; private final List indexRequests; - CreateSearchIndexesOperation(final MongoNamespace namespace, final List indexRequests, - final WriteConcern writeConcern) { - super(namespace, writeConcern); + CreateSearchIndexesOperation(final MongoNamespace namespace, final List indexRequests) { + super(namespace); this.indexRequests = assertNotNull(indexRequests); } @@ -61,9 +58,7 @@ private static BsonDocument convert(final SearchIndexRequest request) { @Override BsonDocument buildCommand() { - BsonDocument command = new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) + return new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) .append("indexes", convert(indexRequests)); - appendWriteConcernToCommand(getWriteConcern(), command); - return command; } } diff --git a/driver-core/src/main/com/mongodb/internal/operation/DropSearchIndexOperation.java b/driver-core/src/main/com/mongodb/internal/operation/DropSearchIndexOperation.java index 422af56b55b..657dedca942 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/DropSearchIndexOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/DropSearchIndexOperation.java @@ -17,13 +17,11 @@ package com.mongodb.internal.operation; import com.mongodb.MongoNamespace; -import com.mongodb.WriteConcern; import com.mongodb.lang.Nullable; import org.bson.BsonDocument; import org.bson.BsonString; import static com.mongodb.internal.operation.CommandOperationHelper.isNamespaceError; -import static com.mongodb.internal.operation.WriteConcernHelper.appendWriteConcernToCommand; /** * An operation that drops an Alas Search index. @@ -34,9 +32,8 @@ final class DropSearchIndexOperation extends AbstractWriteSearchIndexOperation { private static final String COMMAND_NAME = "dropSearchIndex"; private final String indexName; - DropSearchIndexOperation(final MongoNamespace namespace, final String indexName, - final WriteConcern writeConcern) { - super(namespace, writeConcern); + DropSearchIndexOperation(final MongoNamespace namespace, final String indexName) { + super(namespace); this.indexName = indexName; } @@ -49,9 +46,7 @@ void swallowOrThrow(@Nullable final E mongoExecutionExcept @Override BsonDocument buildCommand() { - BsonDocument command = new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) + return new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) .append("name", new BsonString(indexName)); - appendWriteConcernToCommand(getWriteConcern(), command); - return command; } } 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 f0f6e72b680..ed84e9b2e72 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/Operations.java +++ b/driver-core/src/main/com/mongodb/internal/operation/Operations.java @@ -651,20 +651,19 @@ CreateSearchIndexesOperation createSearchIndexes(final List in .map(this::createSearchIndexRequest) .collect(Collectors.toList()); - return new CreateSearchIndexesOperation(assertNotNull(namespace), indexRequests, writeConcern); + return new CreateSearchIndexesOperation(assertNotNull(namespace), indexRequests); } UpdateSearchIndexesOperation updateSearchIndex(final String indexName, final Bson definition) { BsonDocument definitionDocument = assertNotNull(toBsonDocument(definition)); SearchIndexRequest searchIndexRequest = new SearchIndexRequest(definitionDocument, indexName); - return new UpdateSearchIndexesOperation(assertNotNull(namespace), searchIndexRequest, - writeConcern); + return new UpdateSearchIndexesOperation(assertNotNull(namespace), searchIndexRequest); } DropSearchIndexOperation dropSearchIndex(final String indexName) { - return new DropSearchIndexOperation(assertNotNull(namespace), indexName, writeConcern); + return new DropSearchIndexOperation(assertNotNull(namespace), indexName); } diff --git a/driver-core/src/main/com/mongodb/internal/operation/UpdateSearchIndexesOperation.java b/driver-core/src/main/com/mongodb/internal/operation/UpdateSearchIndexesOperation.java index 72402a0d22e..7bd33730680 100644 --- a/driver-core/src/main/com/mongodb/internal/operation/UpdateSearchIndexesOperation.java +++ b/driver-core/src/main/com/mongodb/internal/operation/UpdateSearchIndexesOperation.java @@ -17,12 +17,9 @@ package com.mongodb.internal.operation; import com.mongodb.MongoNamespace; -import com.mongodb.WriteConcern; import org.bson.BsonDocument; import org.bson.BsonString; -import static com.mongodb.internal.operation.WriteConcernHelper.appendWriteConcernToCommand; - /** * An operation that updates an Atlas Search index. * @@ -32,19 +29,16 @@ final class UpdateSearchIndexesOperation extends AbstractWriteSearchIndexOperati private static final String COMMAND_NAME = "updateSearchIndex"; private final SearchIndexRequest request; - UpdateSearchIndexesOperation(final MongoNamespace namespace, final SearchIndexRequest request, - final WriteConcern writeConcern) { - super(namespace, writeConcern); + UpdateSearchIndexesOperation(final MongoNamespace namespace, final SearchIndexRequest request) { + super(namespace); this.request = request; } @Override BsonDocument buildCommand() { - BsonDocument command = new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) + return new BsonDocument(COMMAND_NAME, new BsonString(getNamespace().getCollectionName())) .append("name", new BsonString(request.getIndexName())) .append("definition", request.getDefinition()); - appendWriteConcernToCommand(getWriteConcern(), command); - return command; } } diff --git a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoCollectionImpl.java b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoCollectionImpl.java index 953b45ac9ac..d9fa18c6a54 100644 --- a/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoCollectionImpl.java +++ b/driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/MongoCollectionImpl.java @@ -694,7 +694,10 @@ public ListSearchIndexesPublisher listSearchIndexes() { @Override public ListSearchIndexesPublisher listSearchIndexes(final Class resultClass) { notNull("resultClass", resultClass); - return new ListSearchIndexesPublisherImpl<>(mongoOperationPublisher.withDocumentClass(resultClass)); + + return new ListSearchIndexesPublisherImpl<>(mongoOperationPublisher + .withReadConcern(ReadConcern.DEFAULT) + .withDocumentClass(resultClass)); } @Override 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 fc949859530..0ffc9cea7a5 100644 --- a/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/ListSearchIndexesIterableImpl.java @@ -53,10 +53,9 @@ final class ListSearchIndexesIterableImpl extends MongoIterableImpl resultClass, - final CodecRegistry codecRegistry, final ReadPreference readPreference, - final boolean retryReads) { - super(null, executor, readConcern, readPreference, retryReads); + final Class resultClass, final CodecRegistry codecRegistry, + final ReadPreference readPreference, final boolean retryReads) { + super(null, executor, ReadConcern.DEFAULT, readPreference, retryReads); this.resultClass = resultClass; this.operations = new SyncOperations<>(namespace, BsonDocument.class, readPreference, codecRegistry, retryReads); 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 98ed5ec334f..2d9e6cf42e8 100755 --- a/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java +++ b/driver-sync/src/main/com/mongodb/client/internal/MongoCollectionImpl.java @@ -947,7 +947,7 @@ private ListIndexesIterable createListIndexesIterable(@Nullab } private ListSearchIndexesIterable createListSearchIndexesIterable(final Class resultClass) { - return new ListSearchIndexesIterableImpl<>(getNamespace(), executor, readConcern, + return new ListSearchIndexesIterableImpl<>(getNamespace(), executor, resultClass, codecRegistry, readPreference, retryReads); } diff --git a/driver-sync/src/test/functional/com/mongodb/client/AbstractAtlasSearchIndexManagementProseTest.java b/driver-sync/src/test/functional/com/mongodb/client/AbstractAtlasSearchIndexManagementProseTest.java index 47a0c5f3d45..fd7bc428576 100644 --- a/driver-sync/src/test/functional/com/mongodb/client/AbstractAtlasSearchIndexManagementProseTest.java +++ b/driver-sync/src/test/functional/com/mongodb/client/AbstractAtlasSearchIndexManagementProseTest.java @@ -17,7 +17,12 @@ package com.mongodb.client; import com.mongodb.MongoClientSettings; +import com.mongodb.ReadConcern; +import com.mongodb.WriteConcern; import com.mongodb.client.model.SearchIndexModel; +import com.mongodb.event.CommandListener; +import com.mongodb.event.CommandStartedEvent; +import org.bson.BsonDocument; import org.bson.Document; import org.bson.conversions.Bson; import org.junit.jupiter.api.AfterEach; @@ -38,7 +43,9 @@ import java.util.stream.StreamSupport; import static com.mongodb.ClusterFixture.serverVersionAtLeast; +import static com.mongodb.assertions.Assertions.assertFalse; import static com.mongodb.client.Fixture.getMongoClientSettings; +import static com.mongodb.client.Fixture.getMongoClientSettingsBuilder; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; @@ -74,8 +81,8 @@ public abstract class AbstractAtlasSearchIndexManagementProseTest { protected abstract MongoClient createMongoClient(MongoClientSettings settings); protected AbstractAtlasSearchIndexManagementProseTest() { - Assumptions.assumeTrue(serverVersionAtLeast(6, 0)); - Assumptions.assumeTrue(hasAtlasSearchIndexHelperEnabled(), "Atlas Search Index tests are disabled"); //TODO enable by flag + Assumptions.assumeTrue(serverVersionAtLeast(6, 0)); + Assumptions.assumeTrue(hasAtlasSearchIndexHelperEnabled(), "Atlas Search Index tests are disabled"); } private static boolean hasAtlasSearchIndexHelperEnabled() { @@ -84,7 +91,29 @@ private static boolean hasAtlasSearchIndexHelperEnabled() { @BeforeEach public void setUp() { - client = createMongoClient(getMongoClientSettings()); + MongoClientSettings mongoClientSettings = getMongoClientSettingsBuilder() + .writeConcern(WriteConcern.MAJORITY) + .readConcern(ReadConcern.MAJORITY) + .addCommandListener(new CommandListener() { + @Override + public void commandStarted(final CommandStartedEvent event) { + /* This test case examines scenarios where the write or read concern is not forwarded to the server + for any Atlas Index Search commands. If a write or read concern is included in the command, + the server will return an error. */ + if (isSearchIndexCommand(event)) { + BsonDocument command = event.getCommand(); + assertFalse(command.containsKey("writeConcern")); + assertFalse(command.containsKey("readConcern")); + } + } + + private boolean isSearchIndexCommand(final CommandStartedEvent event) { + return event.getCommand().toJson().contains("SearchIndex"); + } + }) + .build(); + + client = createMongoClient(mongoClientSettings); db = client.getDatabase("test"); String collectionName = UUID.randomUUID().toString();