Skip to content

Commit 6f6f057

Browse files
authored
Refactored mongo index initializer (#1604)
* refactored mongo initializer * Update IStorageInitializer.MongoDB.cs using default index naming
1 parent 83b4217 commit 6f6f057

File tree

1 file changed

+33
-25
lines changed

1 file changed

+33
-25
lines changed

src/DotNetCore.CAP.MongoDB/IStorageInitializer.MongoDB.cs

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ await database.CreateCollectionAsync(options.LockCollection, cancellationToken:
6868
.ConfigureAwait(false);
6969

7070
await Task.WhenAll(
71-
TryCreateIndexesAsync<ReceivedMessage>(options.ReceivedCollection),
72-
TryCreateIndexesAsync<PublishedMessage>(options.PublishedCollection)).ConfigureAwait(false);
71+
CreateReceivedMessageIndexesAsync(),
72+
CreatePublishedMessageIndexesAsync()).ConfigureAwait(false);
7373

7474
if (_capOptions.Value.UseStorageLock)
7575
{
@@ -88,33 +88,41 @@ await database.GetCollection<Lock>(options.LockCollection)
8888

8989
_logger.LogDebug("Ensuring all create database tables script are applied.");
9090

91-
92-
async Task TryCreateIndexesAsync<T>(string collectionName)
91+
async Task CreateReceivedMessageIndexesAsync()
9392
{
94-
var indexNames = new[] { "Name", "Added", "ExpiresAt", "StatusName", "Retries", "Version" };
95-
var col = database.GetCollection<T>(collectionName);
96-
using (var cursor = await col.Indexes.ListAsync(cancellationToken).ConfigureAwait(false))
93+
IndexKeysDefinitionBuilder<ReceivedMessage> builder = Builders<ReceivedMessage>.IndexKeys;
94+
var col = database.GetCollection<ReceivedMessage>(options.ReceivedCollection);
95+
96+
CreateIndexModel<ReceivedMessage>[] indexes =
9797
{
98-
var existingIndexes = await cursor.ToListAsync(cancellationToken).ConfigureAwait(false);
99-
var existingIndexNames = existingIndexes.Select(o => o["name"].AsString).ToArray();
100-
indexNames = indexNames.Except(existingIndexNames).ToArray();
101-
}
98+
new(builder.Ascending(x => x.Name)),
99+
new(builder.Ascending(x => x.Added)),
100+
new(builder.Ascending(x => x.ExpiresAt)),
101+
new(builder.Ascending(x => x.StatusName)),
102+
new(builder.Ascending(x => x.Retries)),
103+
new(builder.Ascending(x => x.Version))
104+
};
105+
106+
await col.Indexes.CreateManyAsync(indexes, cancellationToken);
107+
}
102108

103-
if (indexNames.Any() == false)
104-
return;
109+
async Task CreatePublishedMessageIndexesAsync()
110+
{
111+
IndexKeysDefinitionBuilder<PublishedMessage> builder = Builders<PublishedMessage>.IndexKeys;
112+
var col = database.GetCollection<PublishedMessage>(options.PublishedCollection);
105113

106-
var indexes = indexNames.Select(indexName =>
114+
CreateIndexModel<PublishedMessage>[] indexes =
107115
{
108-
var indexOptions = new CreateIndexOptions
109-
{
110-
Name = indexName,
111-
Background = true
112-
};
113-
var indexBuilder = Builders<T>.IndexKeys;
114-
return new CreateIndexModel<T>(indexBuilder.Ascending(indexName), indexOptions);
115-
}).ToArray();
116-
117-
await col.Indexes.CreateManyAsync(indexes, cancellationToken).ConfigureAwait(false);
116+
new(builder.Ascending(x => x.Name)),
117+
new(builder.Ascending(x => x.Added)),
118+
new(builder.Ascending(x => x.ExpiresAt)),
119+
new(builder.Ascending(x => x.StatusName)),
120+
new(builder.Ascending(x => x.Retries)),
121+
new(builder.Ascending(x => x.Version)),
122+
new(builder.Ascending(x => x.StatusName).Ascending(x => x.ExpiresAt))
123+
};
124+
125+
await col.Indexes.CreateManyAsync(indexes, cancellationToken);
118126
}
119127
}
120-
}
128+
}

0 commit comments

Comments
 (0)