Skip to content

Commit 9ff5185

Browse files
fix: mark timed out migrations as failed
1 parent eadaa45 commit 9ff5185

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/Rapidata.MongoDB.Migrations/Services/MigrationService.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ public async Task ExecuteMigration(string databaseName, IMigration migration, Ca
6868

6969
var client = _mongoClientProvider.GetClient();
7070
var database = client.GetDatabase(databaseName);
71+
72+
// Merge cancellation token with timeout from config
73+
if (_config.MigrationTimeout is TimeSpan timeout)
74+
{
75+
var newCancellationTokenSource = new CancellationTokenSource(timeout);
76+
cancellationToken = CancellationTokenSource
77+
.CreateLinkedTokenSource(cancellationToken, newCancellationTokenSource.Token)
78+
.Token;
79+
}
7180

7281
await migration.Migrate(database, cancellationToken)
7382
.ConfigureAwait(false);

tests/Rapidata.MongoDB.Migrations.Tests.Integration/Core/MigrationEngineTests.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,4 +339,24 @@ public async Task Migrate_WhenMigrationWithSameVersionButDifferentDateAlreadyApp
339339
var count = await DefaultCollection.CountDocumentsAsync(FilterDefinition<Migration>.Empty);
340340
count.Should().Be(2);
341341
}
342+
343+
[Test]
344+
public async Task Migrate_WhenMigrationRunsIntoTimeout_MarksMigrationAsFailed()
345+
{
346+
// Arrange
347+
var migration = new MigrationMockBuilder()
348+
.WithAction(async (_, cancellationToken) =>
349+
{
350+
await Task.Delay(1000, cancellationToken);
351+
})
352+
.Build();
353+
Setup(configure: builder => builder.WithMigrationTimeout(TimeSpan.FromMilliseconds(200)), migration.Object);
354+
355+
// Act
356+
await Subject.Migrate(CancellationToken.None);
357+
358+
// Assert
359+
var appliedMigration = await DefaultCollection.Find(FilterDefinition<Migration>.Empty).FirstAsync();
360+
appliedMigration.State.Should().Be(MigrationState.Failed);
361+
}
342362
}

0 commit comments

Comments
 (0)