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 {