From 65101beaf668697300b2a3bd691679e67dec3a73 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 8 Jul 2020 13:00:30 +1000 Subject: [PATCH] transactions for sqlmaindom --- src/Umbraco.Core/Runtime/SqlMainDomLock.cs | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Core/Runtime/SqlMainDomLock.cs b/src/Umbraco.Core/Runtime/SqlMainDomLock.cs index 8e2e688d66..049a7a9400 100644 --- a/src/Umbraco.Core/Runtime/SqlMainDomLock.cs +++ b/src/Umbraco.Core/Runtime/SqlMainDomLock.cs @@ -103,6 +103,10 @@ namespace Umbraco.Core.Runtime _hasError = true; return false; } + finally + { + transaction.Complete(); + } return await WaitForExistingAsync(tempId, millisecondsTimeout); @@ -237,8 +241,7 @@ namespace Umbraco.Core.Runtime // so now we update the row with our appdomain id InsertLockRecord(_lockId, db); - _logger.Debug("Acquired with ID {LockId}", _lockId); - transaction.Complete(); + _logger.Debug("Acquired with ID {LockId}", _lockId); return true; } else if (mainDomRows.Count == 1 && !mainDomRows[0].Value.StartsWith(tempId)) @@ -264,6 +267,10 @@ namespace Umbraco.Core.Runtime _hasError = true; return false; } + finally + { + transaction.Complete(); + } } if (watch.ElapsedMilliseconds >= millisecondsTimeout) @@ -286,9 +293,6 @@ namespace Umbraco.Core.Runtime // so now we update the row with our appdomain id InsertLockRecord(_lockId, db); _logger.Debug("Acquired with ID {LockId}", _lockId); - - transaction.Complete(); - return true; } catch (Exception ex) @@ -304,6 +308,10 @@ namespace Umbraco.Core.Runtime _hasError = true; return false; } + finally + { + transaction.Complete(); + } } } }, _cancellationTokenSource.Token); @@ -362,8 +370,6 @@ namespace Umbraco.Core.Runtime try { - db.BeginTransaction(IsolationLevel.ReadCommitted); - // get a write lock _sqlServerSyntax.WriteLock(db, Constants.Locks.MainDom); @@ -376,12 +382,12 @@ namespace Umbraco.Core.Runtime if (_mainDomChanging) { _logger.Debug("Releasing MainDom, updating row, new application is booting."); - db.Execute($"UPDATE umbracoKeyValue SET [value] = [value] + '{UpdatedSuffix}' WHERE [key] = @key", new { key = MainDomKey }); + var count = db.Execute($"UPDATE umbracoKeyValue SET [value] = [value] + '{UpdatedSuffix}' WHERE [key] = @key", new { key = MainDomKey }); } else { _logger.Debug("Releasing MainDom, deleting row, application is shutting down."); - db.Execute("DELETE FROM umbracoKeyValue WHERE [key] = @key", new { key = MainDomKey }); + var count = db.Execute("DELETE FROM umbracoKeyValue WHERE [key] = @key", new { key = MainDomKey }); } } catch (Exception ex)