diff --git a/Raven.Migrations/MigrationOptions.cs b/Raven.Migrations/MigrationOptions.cs
index 8876aa8..073e197 100644
--- a/Raven.Migrations/MigrationOptions.cs
+++ b/Raven.Migrations/MigrationOptions.cs
@@ -46,5 +46,26 @@ public MigrationOptions(IMigrationResolver migrationResolver)
/// If is enabled, any attempt to run migrations during this time will fail.
///
public TimeSpan SimultaneousMigrationTimeout { get; set; }
+
+ ///
+ /// What to do when migration lock cannot be obtained. Default behavior is to skip running migrations.
+ ///
+ public SimultaneousMigrationBehavior SimultaneousMigrationBehavior { get; set; } = SimultaneousMigrationBehavior.Skip;
+ }
+
+ ///
+ /// Behavior options when attempt to run simultaneous migrations.
+ ///
+ public enum SimultaneousMigrationBehavior
+ {
+ ///
+ /// Skip migration and log warning-
+ ///
+ Skip,
+
+ ///
+ /// Throw an exception and effectively cancel the migration attempt.
+ ///
+ Error
}
}
\ No newline at end of file
diff --git a/Raven.Migrations/MigrationRunner.cs b/Raven.Migrations/MigrationRunner.cs
index ba2a280..1248624 100644
--- a/Raven.Migrations/MigrationRunner.cs
+++ b/Raven.Migrations/MigrationRunner.cs
@@ -38,7 +38,14 @@ public virtual void Run()
}
if (!canRunMigrations)
{
- logger.LogWarning("Skipping migrations because migrations are already running.");
+ if (options.SimultaneousMigrationBehavior == SimultaneousMigrationBehavior.Skip)
+ {
+ logger.LogWarning("Skipping migrations because migrations are already running.");
+ }
+ else if (options.SimultaneousMigrationBehavior == SimultaneousMigrationBehavior.Error)
+ {
+ throw new InvalidOperationException("Could not get exclusive lock to run migration");
+ }
}
else
{