From 6f6f0578ea5cbf5170d5d915fca0543e43690910 Mon Sep 17 00:00:00 2001 From: Dmytro Rakhmanov Date: Wed, 30 Oct 2024 02:12:23 +0100 Subject: [PATCH] Refactored mongo index initializer (#1604) * refactored mongo initializer * Update IStorageInitializer.MongoDB.cs using default index naming --- .../IStorageInitializer.MongoDB.cs | 58 +++++++++++-------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/DotNetCore.CAP.MongoDB/IStorageInitializer.MongoDB.cs b/src/DotNetCore.CAP.MongoDB/IStorageInitializer.MongoDB.cs index cff7cf87b..1311e45d4 100644 --- a/src/DotNetCore.CAP.MongoDB/IStorageInitializer.MongoDB.cs +++ b/src/DotNetCore.CAP.MongoDB/IStorageInitializer.MongoDB.cs @@ -68,8 +68,8 @@ await database.CreateCollectionAsync(options.LockCollection, cancellationToken: .ConfigureAwait(false); await Task.WhenAll( - TryCreateIndexesAsync(options.ReceivedCollection), - TryCreateIndexesAsync(options.PublishedCollection)).ConfigureAwait(false); + CreateReceivedMessageIndexesAsync(), + CreatePublishedMessageIndexesAsync()).ConfigureAwait(false); if (_capOptions.Value.UseStorageLock) { @@ -88,33 +88,41 @@ await database.GetCollection(options.LockCollection) _logger.LogDebug("Ensuring all create database tables script are applied."); - - async Task TryCreateIndexesAsync(string collectionName) + async Task CreateReceivedMessageIndexesAsync() { - var indexNames = new[] { "Name", "Added", "ExpiresAt", "StatusName", "Retries", "Version" }; - var col = database.GetCollection(collectionName); - using (var cursor = await col.Indexes.ListAsync(cancellationToken).ConfigureAwait(false)) + IndexKeysDefinitionBuilder builder = Builders.IndexKeys; + var col = database.GetCollection(options.ReceivedCollection); + + CreateIndexModel[] indexes = { - var existingIndexes = await cursor.ToListAsync(cancellationToken).ConfigureAwait(false); - var existingIndexNames = existingIndexes.Select(o => o["name"].AsString).ToArray(); - indexNames = indexNames.Except(existingIndexNames).ToArray(); - } + new(builder.Ascending(x => x.Name)), + new(builder.Ascending(x => x.Added)), + new(builder.Ascending(x => x.ExpiresAt)), + new(builder.Ascending(x => x.StatusName)), + new(builder.Ascending(x => x.Retries)), + new(builder.Ascending(x => x.Version)) + }; + + await col.Indexes.CreateManyAsync(indexes, cancellationToken); + } - if (indexNames.Any() == false) - return; + async Task CreatePublishedMessageIndexesAsync() + { + IndexKeysDefinitionBuilder builder = Builders.IndexKeys; + var col = database.GetCollection(options.PublishedCollection); - var indexes = indexNames.Select(indexName => + CreateIndexModel[] indexes = { - var indexOptions = new CreateIndexOptions - { - Name = indexName, - Background = true - }; - var indexBuilder = Builders.IndexKeys; - return new CreateIndexModel(indexBuilder.Ascending(indexName), indexOptions); - }).ToArray(); - - await col.Indexes.CreateManyAsync(indexes, cancellationToken).ConfigureAwait(false); + new(builder.Ascending(x => x.Name)), + new(builder.Ascending(x => x.Added)), + new(builder.Ascending(x => x.ExpiresAt)), + new(builder.Ascending(x => x.StatusName)), + new(builder.Ascending(x => x.Retries)), + new(builder.Ascending(x => x.Version)), + new(builder.Ascending(x => x.StatusName).Ascending(x => x.ExpiresAt)) + }; + + await col.Indexes.CreateManyAsync(indexes, cancellationToken); } } -} \ No newline at end of file +}