diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index dfff5b008..16b3e465b 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -23,7 +23,6 @@ using Orchard.Recipes.Models; using Orchard.Recipes.Services; using Orchard.Security; using Orchard.Settings; -using Orchard.Tasks.Locking.Services; using Orchard.Utility.Extensions; namespace Orchard.Setup.Services { @@ -155,10 +154,6 @@ namespace Orchard.Setup.Services { schemaBuilder.AlterTable("Orchard_Framework_DataMigrationRecord", table => table.AddUniqueConstraint("UC_DMR_DataMigrationClass_Version", "DataMigrationClass", "Version")); - // Create the distributed lock record schema. - var distributedLockSchemaBuilder = new DistributedLockSchemaBuilder(_shellSettings, schemaBuilder); - distributedLockSchemaBuilder.CreateSchema(); - var dataMigrationManager = environment.Resolve(); dataMigrationManager.Update("Settings"); diff --git a/src/Orchard/Data/Migration/AutomaticDataMigrations.cs b/src/Orchard/Data/Migration/AutomaticDataMigrations.cs index 088903a06..ba6462cd1 100644 --- a/src/Orchard/Data/Migration/AutomaticDataMigrations.cs +++ b/src/Orchard/Data/Migration/AutomaticDataMigrations.cs @@ -18,18 +18,21 @@ namespace Orchard.Data.Migration { private readonly IDistributedLockService _distributedLockService; private readonly IDataMigrationInterpreter _dataMigrationInterpreter; private readonly ShellSettings _shellSettings; + private readonly ITransactionManager _transactionManager; public AutomaticDataMigrations( IDataMigrationManager dataMigrationManager, IDataMigrationInterpreter dataMigrationInterpreter, IFeatureManager featureManager, IDistributedLockService distributedLockService, + ITransactionManager transactionManager, ShellSettings shellSettings) { _dataMigrationManager = dataMigrationManager; _featureManager = featureManager; _distributedLockService = distributedLockService; _shellSettings = shellSettings; + _transactionManager = transactionManager; _dataMigrationInterpreter = dataMigrationInterpreter; Logger = NullLogger.Instance; @@ -77,7 +80,8 @@ namespace Orchard.Data.Migration { // Ensure the distributed lock record schema exists. var schemaBuilder = new SchemaBuilder(_dataMigrationInterpreter); var distributedLockSchemaBuilder = new DistributedLockSchemaBuilder(_shellSettings, schemaBuilder); - distributedLockSchemaBuilder.EnsureSchema(); + if (distributedLockSchemaBuilder.EnsureSchema()) + _transactionManager.RequireNew(); } } } diff --git a/src/Orchard/Tasks/Locking/Services/DistributedLockSchemaBuilder.cs b/src/Orchard/Tasks/Locking/Services/DistributedLockSchemaBuilder.cs index 8a577d8a1..2f22f1220 100644 --- a/src/Orchard/Tasks/Locking/Services/DistributedLockSchemaBuilder.cs +++ b/src/Orchard/Tasks/Locking/Services/DistributedLockSchemaBuilder.cs @@ -13,11 +13,12 @@ namespace Orchard.Tasks.Locking.Services { _schemaBuilder = schemaBuilder; } - public void EnsureSchema() { + public bool EnsureSchema() { if (SchemaExists()) - return; + return false; CreateSchema(); + return true; } public void CreateSchema() { diff --git a/src/Orchard/Tasks/Locking/Services/DistributedLockService.cs b/src/Orchard/Tasks/Locking/Services/DistributedLockService.cs index 34ab4332f..05c87b41f 100644 --- a/src/Orchard/Tasks/Locking/Services/DistributedLockService.cs +++ b/src/Orchard/Tasks/Locking/Services/DistributedLockService.cs @@ -110,7 +110,7 @@ namespace Orchard.Tasks.Locking.Services { ); }); - return result; + return result; } private DistributedLock AcquireLockInternal(string name, TimeSpan? maxValidFor) {