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