diff --git a/src/MongoDB.Driver.GridFS/GridFSBucket.cs b/src/MongoDB.Driver.GridFS/GridFSBucket.cs index 9313635462d..3b924a9eab5 100644 --- a/src/MongoDB.Driver.GridFS/GridFSBucket.cs +++ b/src/MongoDB.Driver.GridFS/GridFSBucket.cs @@ -814,16 +814,19 @@ private void EnsureIndexes(IReadWriteBindingHandle binding, CancellationToken ca { if (!_ensureIndexesDone) { - var isFilesCollectionEmpty = IsFilesCollectionEmpty(binding, cancellationToken); - if (isFilesCollectionEmpty) + if (!_options.AssumeIndexesExist) { - if (!FilesCollectionIndexesExist(binding, cancellationToken)) + var isFilesCollectionEmpty = IsFilesCollectionEmpty(binding, cancellationToken); + if (isFilesCollectionEmpty) { - CreateFilesCollectionIndexes(binding, cancellationToken); - } - if (!ChunksCollectionIndexesExist(binding, cancellationToken)) - { - CreateChunksCollectionIndexes(binding, cancellationToken); + if (!FilesCollectionIndexesExist(binding, cancellationToken)) + { + CreateFilesCollectionIndexes(binding, cancellationToken); + } + if (!ChunksCollectionIndexesExist(binding, cancellationToken)) + { + CreateChunksCollectionIndexes(binding, cancellationToken); + } } } @@ -843,16 +846,19 @@ private async Task EnsureIndexesAsync(IReadWriteBindingHandle binding, Cancellat { if (!_ensureIndexesDone) { - var isFilesCollectionEmpty = await IsFilesCollectionEmptyAsync(binding, cancellationToken).ConfigureAwait(false); - if (isFilesCollectionEmpty) + if (!_options.AssumeIndexesExist) { - if (!(await FilesCollectionIndexesExistAsync(binding, cancellationToken).ConfigureAwait(false))) - { - await CreateFilesCollectionIndexesAsync(binding, cancellationToken).ConfigureAwait(false); - } - if (!(await ChunksCollectionIndexesExistAsync(binding, cancellationToken).ConfigureAwait(false))) + var isFilesCollectionEmpty = await IsFilesCollectionEmptyAsync(binding, cancellationToken).ConfigureAwait(false); + if (isFilesCollectionEmpty) { - await CreateChunksCollectionIndexesAsync(binding, cancellationToken).ConfigureAwait(false); + if (!(await FilesCollectionIndexesExistAsync(binding, cancellationToken).ConfigureAwait(false))) + { + await CreateFilesCollectionIndexesAsync(binding, cancellationToken).ConfigureAwait(false); + } + if (!(await ChunksCollectionIndexesExistAsync(binding, cancellationToken).ConfigureAwait(false))) + { + await CreateChunksCollectionIndexesAsync(binding, cancellationToken).ConfigureAwait(false); + } } } diff --git a/src/MongoDB.Driver.GridFS/GridFSBucketOptions.cs b/src/MongoDB.Driver.GridFS/GridFSBucketOptions.cs index 145d3f4733b..702cdefa2cc 100644 --- a/src/MongoDB.Driver.GridFS/GridFSBucketOptions.cs +++ b/src/MongoDB.Driver.GridFS/GridFSBucketOptions.cs @@ -29,6 +29,7 @@ public class GridFSBucketOptions private ReadConcern _readConcern; private ReadPreference _readPreference; private WriteConcern _writeConcern; + private bool _assumeIndexesExist; // constructors /// @@ -51,6 +52,7 @@ public GridFSBucketOptions(GridFSBucketOptions other) _readConcern = other.ReadConcern; _readPreference = other.ReadPreference; _writeConcern = other.WriteConcern; + _assumeIndexesExist = other.AssumeIndexesExist; } /// @@ -65,6 +67,7 @@ public GridFSBucketOptions(ImmutableGridFSBucketOptions other) _readConcern = other.ReadConcern; _readPreference = other.ReadPreference; _writeConcern = other.WriteConcern; + _assumeIndexesExist = other.AssumeIndexesExist; } // properties @@ -135,6 +138,18 @@ public WriteConcern WriteConcern get { return _writeConcern; } set { _writeConcern = value; } } + + /// + /// Gets or sets the assume indexes exist setting + /// + /// + /// The assume indexes exist setting + /// + public bool AssumeIndexesExist + { + get { return _assumeIndexesExist; } + set { _assumeIndexesExist = value; } + } } /// @@ -165,6 +180,7 @@ public static ImmutableGridFSBucketOptions Defaults private readonly ReadConcern _readConcern; private readonly ReadPreference _readPreference; private readonly WriteConcern _writeConcern; + private readonly bool _assumeIndexesExist; // constructors /// @@ -174,6 +190,7 @@ public ImmutableGridFSBucketOptions() { _bucketName = "fs"; _chunkSizeBytes = 255 * 1024; + _assumeIndexesExist = false; } /// @@ -188,6 +205,7 @@ public ImmutableGridFSBucketOptions(GridFSBucketOptions other) _readConcern = other.ReadConcern; _readPreference = other.ReadPreference; _writeConcern = other.WriteConcern; + _assumeIndexesExist = other.AssumeIndexesExist; } // properties @@ -256,5 +274,16 @@ public WriteConcern WriteConcern { get { return _writeConcern; } } + + /// + /// Gets the assume ensure indexes setting + /// + /// + /// The assume ensure indexes setting + /// + public bool AssumeIndexesExist + { + get { return _assumeIndexesExist; } + } } } diff --git a/tests/MongoDB.Driver.GridFS.Tests/GridFSBucketOptionsTests.cs b/tests/MongoDB.Driver.GridFS.Tests/GridFSBucketOptionsTests.cs index e6d9ab3f77b..8d182a9ba42 100644 --- a/tests/MongoDB.Driver.GridFS.Tests/GridFSBucketOptionsTests.cs +++ b/tests/MongoDB.Driver.GridFS.Tests/GridFSBucketOptionsTests.cs @@ -117,7 +117,7 @@ public void constructor_with_immutable_other_should_initialize_instance() [Fact] public void constructor_with_mutable_other_should_initialize_instance() { - var other = new GridFSBucketOptions { BucketName = "bucket", ChunkSizeBytes = 123, ReadConcern = ReadConcern.Majority, ReadPreference = ReadPreference.Secondary, WriteConcern = WriteConcern.WMajority }; + var other = new GridFSBucketOptions { BucketName = "bucket", ChunkSizeBytes = 123, ReadConcern = ReadConcern.Majority, ReadPreference = ReadPreference.Secondary, WriteConcern = WriteConcern.WMajority, AssumeIndexesExist = true }; var result = new GridFSBucketOptions(other); @@ -126,6 +126,7 @@ public void constructor_with_mutable_other_should_initialize_instance() result.ReadConcern.Should().Be(other.ReadConcern); result.ReadPreference.Should().Be(other.ReadPreference); result.WriteConcern.Should().Be(other.WriteConcern); + result.AssumeIndexesExist.Should().Be(other.AssumeIndexesExist); } [Fact] @@ -137,6 +138,7 @@ public void constructor_with_no_arguments_should_initialize_instance_with_defaul result.ChunkSizeBytes.Should().Be(255 * 1024); result.ReadPreference.Should().BeNull(); result.WriteConcern.Should().BeNull(); + result.AssumeIndexesExist.Should().BeFalse(); } [Fact] @@ -198,6 +200,26 @@ public void WriteConcern_set_should_have_expected_result() subject.WriteConcern.Should().Be(WriteConcern.WMajority); } + + [Fact] + public void AssumeIndexesExist_get_should_return_expected_result() + { + var subject = new GridFSBucketOptions { AssumeIndexesExist = true }; + + var result = subject.AssumeIndexesExist; + + result.Should().BeTrue(); + } + + [Fact] + public void AssumeIndexesExist_set_should_have_expected_result() + { + var subject = new GridFSBucketOptions(); + + subject.AssumeIndexesExist = true; + + subject.AssumeIndexesExist.Should().BeTrue(); + } } public class ImmutableGridFSBucketOptionsTests @@ -225,7 +247,7 @@ public void ChunkSizeBytes_get_should_return_expected_result() [Fact] public void constructor_with_arguments_should_initialize_instance() { - var mutable = new GridFSBucketOptions { BucketName = "bucket", ChunkSizeBytes = 123, ReadConcern = ReadConcern.Majority, ReadPreference = ReadPreference.Secondary, WriteConcern = WriteConcern.WMajority }; + var mutable = new GridFSBucketOptions { BucketName = "bucket", ChunkSizeBytes = 123, ReadConcern = ReadConcern.Majority, ReadPreference = ReadPreference.Secondary, WriteConcern = WriteConcern.WMajority, AssumeIndexesExist = true }; var result = new ImmutableGridFSBucketOptions(mutable); @@ -234,6 +256,7 @@ public void constructor_with_arguments_should_initialize_instance() result.ReadConcern.Should().Be(ReadConcern.Majority); result.ReadPreference.Should().Be(ReadPreference.Secondary); result.WriteConcern.Should().Be(WriteConcern.WMajority); + result.AssumeIndexesExist.Should().BeTrue(); } [Fact] @@ -246,6 +269,7 @@ public void constructor_with_no_arguments_should_initialize_instance_with_defaul result.ReadConcern.Should().BeNull(); result.ReadPreference.Should().BeNull(); result.WriteConcern.Should().BeNull(); + result.AssumeIndexesExist.Should().BeFalse(); } [Fact] @@ -267,6 +291,7 @@ public void Defaults_get_should_return_expected_result() result.ReadConcern.Should().BeNull(); result.ReadPreference.Should().BeNull(); result.WriteConcern.Should().BeNull(); + result.AssumeIndexesExist.Should().BeFalse(); } [Fact] @@ -298,5 +323,15 @@ public void WriteConcern_get_should_return_expected_result() result.Should().Be(WriteConcern.WMajority); } + + [Fact] + public void AssumeIndexesExist_get_should_return_expected_result() + { + var subject = new ImmutableGridFSBucketOptions(new GridFSBucketOptions { AssumeIndexesExist = true }); + + var result = subject.AssumeIndexesExist; + + result.Should().BeTrue(); + } } }