diff --git a/src/Ombi.Schedule/Jobs/Couchpotato/CouchPotatoSync.cs b/src/Ombi.Schedule/Jobs/Couchpotato/CouchPotatoSync.cs index 98a0c0910..1e0a2facb 100644 --- a/src/Ombi.Schedule/Jobs/Couchpotato/CouchPotatoSync.cs +++ b/src/Ombi.Schedule/Jobs/Couchpotato/CouchPotatoSync.cs @@ -77,12 +77,16 @@ namespace Ombi.Schedule.Jobs.Couchpotato var movies = await _api.GetMovies(settings.FullUri, settings.ApiKey, new[] {"active"}); if (movies != null) { - // Let's remove the old cached data - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM CouchPotatoCache"); - tran.Commit(); - } + // Let's remove the old cached data + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM CouchPotatoCache"); + tran.Commit(); + } + }); // Save var movieIds = new List(); @@ -102,14 +106,17 @@ namespace Ombi.Schedule.Jobs.Couchpotato _log.LogError("TMDBId is not > 0 for movie {0}", m.title); } } - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.CouchPotatoCache.AddRangeAsync(movieIds); + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.CouchPotatoCache.AddRangeAsync(movieIds); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); await _notification.Clients.Clients(NotificationHub.AdminConnectionIds) .SendAsync(NotificationHub.NotificationEvent, "Couch Potato Sync Finished"); diff --git a/src/Ombi.Schedule/Jobs/Lidarr/LidarrAlbumSync.cs b/src/Ombi.Schedule/Jobs/Lidarr/LidarrAlbumSync.cs index 9530cf5a1..0cb1c441b 100644 --- a/src/Ombi.Schedule/Jobs/Lidarr/LidarrAlbumSync.cs +++ b/src/Ombi.Schedule/Jobs/Lidarr/LidarrAlbumSync.cs @@ -51,12 +51,16 @@ namespace Ombi.Schedule.Jobs.Lidarr var albums = await _lidarrApi.GetAllAlbums(settings.ApiKey, settings.FullUri); if (albums != null && albums.Any()) { - // Let's remove the old cached data - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM LidarrAlbumCache"); - tran.Commit(); - } + // Let's remove the old cached data + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM LidarrAlbumCache"); + tran.Commit(); + } + }); var albumCache = new List(); foreach (var a in albums) @@ -76,14 +80,17 @@ namespace Ombi.Schedule.Jobs.Lidarr }); } } - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.LidarrAlbumCache.AddRangeAsync(albumCache); + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.LidarrAlbumCache.AddRangeAsync(albumCache); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); } } catch (System.Exception ex) diff --git a/src/Ombi.Schedule/Jobs/Lidarr/LidarrArtistSync.cs b/src/Ombi.Schedule/Jobs/Lidarr/LidarrArtistSync.cs index edcd6cbe6..06577beb6 100644 --- a/src/Ombi.Schedule/Jobs/Lidarr/LidarrArtistSync.cs +++ b/src/Ombi.Schedule/Jobs/Lidarr/LidarrArtistSync.cs @@ -50,12 +50,16 @@ namespace Ombi.Schedule.Jobs.Lidarr var artists = await _lidarrApi.GetArtists(settings.ApiKey, settings.FullUri); if (artists != null && artists.Any()) { - // Let's remove the old cached data - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM LidarrArtistCache"); - tran.Commit(); - } + // Let's remove the old cached data + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM LidarrArtistCache"); + tran.Commit(); + } + }); var artistCache = new List(); foreach (var a in artists) @@ -71,14 +75,17 @@ namespace Ombi.Schedule.Jobs.Lidarr }); } } - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.LidarrArtistCache.AddRangeAsync(artistCache); + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.LidarrArtistCache.AddRangeAsync(artistCache); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); } } catch (Exception ex) diff --git a/src/Ombi.Schedule/Jobs/Radarr/RadarrSync.cs b/src/Ombi.Schedule/Jobs/Radarr/RadarrSync.cs index 3657fba61..ed867fd8b 100644 --- a/src/Ombi.Schedule/Jobs/Radarr/RadarrSync.cs +++ b/src/Ombi.Schedule/Jobs/Radarr/RadarrSync.cs @@ -46,12 +46,16 @@ namespace Ombi.Schedule.Jobs.Radarr var movies = await RadarrApi.GetMovies(settings.ApiKey, settings.FullUri); if (movies != null) { - // Let's remove the old cached data - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM RadarrCache"); - tran.Commit(); - } + // Let's remove the old cached data + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM RadarrCache"); + tran.Commit(); + } + }); var movieIds = new List(); foreach (var m in movies) @@ -72,14 +76,17 @@ namespace Ombi.Schedule.Jobs.Radarr } } } - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.RadarrCache.AddRangeAsync(movieIds); + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.RadarrCache.AddRangeAsync(movieIds); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); } await OmbiQuartz.TriggerJob(nameof(IArrAvailabilityChecker), "DVR"); diff --git a/src/Ombi.Schedule/Jobs/SickRage/SickRageSync.cs b/src/Ombi.Schedule/Jobs/SickRage/SickRageSync.cs index a223a0cfa..91920dcd8 100644 --- a/src/Ombi.Schedule/Jobs/SickRage/SickRageSync.cs +++ b/src/Ombi.Schedule/Jobs/SickRage/SickRageSync.cs @@ -45,12 +45,16 @@ namespace Ombi.Schedule.Jobs.SickRage if (shows != null) { var srShows = shows.data.Values; - var ids = srShows.Select(x => x.tvdbid); - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var ids = srShows.Select(x => x.tvdbid); + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SickRageCache"); - tran.Commit(); - } + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SickRageCache"); + tran.Commit(); + } + }); var entites = ids.Select(id => new SickRageCache { TvDbId = id }).ToList(); @@ -77,13 +81,16 @@ namespace Ombi.Schedule.Jobs.SickRage } } - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.SickRageEpisodeCache.AddRangeAsync(episodesToAdd); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.SickRageEpisodeCache.AddRangeAsync(episodesToAdd); + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); } } catch (Exception e) diff --git a/src/Ombi.Schedule/Jobs/Sonarr/SonarrSync.cs b/src/Ombi.Schedule/Jobs/Sonarr/SonarrSync.cs index bf3ee8406..82c699598 100644 --- a/src/Ombi.Schedule/Jobs/Sonarr/SonarrSync.cs +++ b/src/Ombi.Schedule/Jobs/Sonarr/SonarrSync.cs @@ -48,12 +48,16 @@ namespace Ombi.Schedule.Jobs.Sonarr if (series != null) { var sonarrSeries = series as ImmutableHashSet ?? series.ToImmutableHashSet(); - var ids = sonarrSeries.Select(x => x.tvdbId); - using (var tran = await _ctx.Database.BeginTransactionAsync()) + var ids = sonarrSeries.Select(x => x.tvdbId); + var strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SonarrCache"); - tran.Commit(); - } + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SonarrCache"); + tran.Commit(); + } + }); var existingSeries = await _ctx.SonarrCache.Select(x => x.TvDbId).ToListAsync(); @@ -62,11 +66,15 @@ namespace Ombi.Schedule.Jobs.Sonarr await _ctx.SonarrCache.AddRangeAsync(entites); entites.Clear(); - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SonarrEpisodeCache"); - tran.Commit(); - } + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM SonarrEpisodeCache"); + tran.Commit(); + } + }); foreach (var s in sonarrSeries) { @@ -116,14 +124,17 @@ namespace Ombi.Schedule.Jobs.Sonarr // } //} - - using (var tran = await _ctx.Database.BeginTransactionAsync()) + strat = _ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await _ctx.SonarrEpisodeCache.AddRangeAsync(episodesToAdd); - _log.LogDebug("Commiting the transaction"); - await _ctx.SaveChangesAsync(); - tran.Commit(); - } + using (var tran = await _ctx.Database.BeginTransactionAsync()) + { + await _ctx.SonarrEpisodeCache.AddRangeAsync(episodesToAdd); + _log.LogDebug("Commiting the transaction"); + await _ctx.SaveChangesAsync(); + tran.Commit(); + } + }); } } diff --git a/src/Ombi.Store/Repository/AuditRepository.cs b/src/Ombi.Store/Repository/AuditRepository.cs index 2892e3e84..453659f85 100644 --- a/src/Ombi.Store/Repository/AuditRepository.cs +++ b/src/Ombi.Store/Repository/AuditRepository.cs @@ -24,20 +24,16 @@ namespace Ombi.Store.Repository public async Task Record(AuditType type, AuditArea area, string description, string user) { - using (var tran = await Ctx.Database.BeginTransactionAsync()) + await Ctx.Audit.AddAsync(new Audit { - await Ctx.Audit.AddAsync(new Audit - { - User = user, - AuditArea = area, - AuditType = type, - DateTime = DateTime.UtcNow, - Description = description - }); + User = user, + AuditArea = area, + AuditType = type, + DateTime = DateTime.UtcNow, + Description = description + }); - await Ctx.SaveChangesAsync(); - tran.Commit(); - } + await Ctx.SaveChangesAsync(); } } } diff --git a/src/Ombi/Program.cs b/src/Ombi/Program.cs index f8a45387e..fd349854f 100644 --- a/src/Ombi/Program.cs +++ b/src/Ombi/Program.cs @@ -45,7 +45,7 @@ namespace Ombi } }); - + Console.WriteLine(HelpOutput(result)); @@ -67,7 +67,7 @@ namespace Ombi if (migrate) { Console.WriteLine("Migrate in progress..."); - + var migrationTasks = new List(); var externalDb = provider.GetRequiredService(); var ombiDb = provider.GetRequiredService(); @@ -93,12 +93,16 @@ namespace Ombi Type = ConfigurationTypes.Url, Value = "http://*:5000" }; - using (var tran = await settingsDb.Database.BeginTransactionAsync()) + var strat = settingsDb.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - settingsDb.ApplicationConfigurations.Add(url); - await settingsDb.SaveChangesAsync(); - await tran.CommitAsync(); - } + using (var tran = await settingsDb.Database.BeginTransactionAsync()) + { + settingsDb.ApplicationConfigurations.Add(url); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); + } + }); urlValue = url.Value; } @@ -106,12 +110,15 @@ namespace Ombi if (!url.Value.Equals(host)) { url.Value = UrlArgs; - - using (var tran = await settingsDb.Database.BeginTransactionAsync()) + var strat = settingsDb.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await settingsDb.SaveChangesAsync(); - await tran.CommitAsync(); - } + using (var tran = await settingsDb.Database.BeginTransactionAsync()) + { + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); + } + }); urlValue = url.Value; } @@ -129,24 +136,30 @@ namespace Ombi Type = ConfigurationTypes.BaseUrl, Value = baseUrl }; - - using (var tran = await settingsDb.Database.BeginTransactionAsync()) + var strat = settingsDb.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - settingsDb.ApplicationConfigurations.Add(dbBaseUrl); - await settingsDb.SaveChangesAsync(); - await tran.CommitAsync(); - } + using (var tran = await settingsDb.Database.BeginTransactionAsync()) + { + settingsDb.ApplicationConfigurations.Add(dbBaseUrl); + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); + } + }); } } else if (baseUrl.HasValue() && !baseUrl.Equals(dbBaseUrl.Value)) { dbBaseUrl.Value = baseUrl; - - using (var tran = await settingsDb.Database.BeginTransactionAsync()) + var strat = settingsDb.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - await settingsDb.SaveChangesAsync(); - await tran.CommitAsync(); - } + using (var tran = await settingsDb.Database.BeginTransactionAsync()) + { + await settingsDb.SaveChangesAsync(); + await tran.CommitAsync(); + } + }); } Console.WriteLine($"We are running on {urlValue}"); @@ -164,13 +177,16 @@ namespace Ombi Type = ConfigurationTypes.SecurityToken, Value = Guid.NewGuid().ToString("N") }; - - using (var tran = await ctx.Database.BeginTransactionAsync()) + var strat = ctx.Database.CreateExecutionStrategy(); + await strat.ExecuteAsync(async () => { - ctx.ApplicationConfigurations.Add(securityToken); - await ctx.SaveChangesAsync(); - await tran.CommitAsync(); - } + using (var tran = await ctx.Database.BeginTransactionAsync()) + { + ctx.ApplicationConfigurations.Add(securityToken); + await ctx.SaveChangesAsync(); + await tran.CommitAsync(); + } + }); } instance.SecurityKey = securityToken.Value;