From 0389c17513450b821bbe6c37e5eab789eb41c915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 18 Aug 2022 08:02:07 +0300 Subject: [PATCH] Retry on failure in SaveStaticPermissionsToDatabase --- ...olo.Abp.PermissionManagement.Domain.csproj | 4 ++ .../AbpPermissionManagementDomainModule.cs | 45 ++++++++++++------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj index d9cc5a058f..39ec0e9763 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.csproj @@ -23,4 +23,8 @@ + + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs index f18781e36a..ac0ddd8b1c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/AbpPermissionManagementDomainModule.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Polly; using Volo.Abp.Authorization; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; @@ -35,28 +36,40 @@ public class AbpPermissionManagementDomainModule : AbpModule private static void SaveStaticPermissionsToDatabase(ApplicationInitializationContext context) { + var rootServiceProvider = context.ServiceProvider.GetRequiredService(); + Task.Run(async () => { - using var scope = context - .ServiceProvider - .GetRequiredService() - .CreateScope(); + using var scope = rootServiceProvider.CreateScope(); try { - await scope - .ServiceProvider - .GetRequiredService() - .SaveAsync(); - } - catch (Exception ex) - { - //TODO: We should retry until it's successful! - - scope.ServiceProvider - .GetService>() - .LogException(ex); + await Policy + .Handle() + .WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt) * 10)) + .ExecuteAsync(async () => + { + try + { + // ReSharper disable once AccessToDisposedClosure + await scope + .ServiceProvider + .GetRequiredService() + .SaveAsync(); + } + catch (Exception ex) + { + // ReSharper disable once AccessToDisposedClosure + scope.ServiceProvider + .GetService>()? + .LogException(ex); + + throw; // Polly will catch it + } + }); } + // ReSharper disable once EmptyGeneralCatchClause (No need to log since it is logged above) + catch { } }); } } \ No newline at end of file