Skip to content

Commit 07c1367

Browse files
authored
Create one session per migration for applying migrations (#19)
1 parent cba2b67 commit 07c1367

1 file changed

Lines changed: 16 additions & 17 deletions

File tree

src/Core/Migrations/MongoVaultMigrationManager.cs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,18 @@ public async Task<MigrateResult> MigrateAsync(SemVersion? version = null, Cancel
6767
}
6868

6969
var mongoClient = _database.Client;
70-
71-
using var session = await mongoClient.StartSessionAsync(cancellationToken: cancellationToken);
72-
73-
session.StartTransaction();
7470

75-
try
71+
foreach (var migration in migrations)
7672
{
77-
foreach (var migration in migrations)
73+
using var session = await mongoClient.StartSessionAsync(cancellationToken: cancellationToken);
74+
session.StartTransaction();
75+
76+
try
7877
{
7978
if (runUp)
8079
{
8180
await migration.Up(_database, session, cancellationToken);
82-
81+
8382
await _collection.InsertOneAsync(session, new MigrationDocument
8483
{
8584
Id = ObjectId.GenerateNewId(),
@@ -92,19 +91,19 @@ public async Task<MigrateResult> MigrateAsync(SemVersion? version = null, Cancel
9291
else
9392
{
9493
await migration.Down(_database, session, cancellationToken);
95-
96-
await _collection.DeleteOneAsync(session,
97-
x => x.Version == migration.Version,
94+
95+
await _collection.DeleteOneAsync(session,
96+
x => x.Version == migration.Version,
9897
cancellationToken: cancellationToken);
9998
}
99+
100+
await session.CommitTransactionAsync(cancellationToken);
101+
}
102+
catch (Exception ex)
103+
{
104+
await session.AbortTransactionAsync(cancellationToken);
105+
return MigrateResult.Failed(migration.Version, ex);
100106
}
101-
102-
await session.CommitTransactionAsync(cancellationToken);
103-
}
104-
catch (Exception ex)
105-
{
106-
await session.AbortTransactionAsync(cancellationToken);
107-
return MigrateResult.Failed(migrations[^1].Version, ex);
108107
}
109108

110109
return MigrateResult.Succeeded(migrations[^1].Version, migrations);

0 commit comments

Comments
 (0)