< Summary

Information
Class: GistBackend.Handlers.MariaDbHandler.DatabaseRetryExtensions
Assembly: GistBackend
File(s): /home/runner/work/the-gist-of-it-sec/the-gist-of-it-sec/backend/GistBackend/Handlers/MariaDbHandler/DatabaseRetryExtensions.cs
Line coverage
66%
Covered lines: 8
Uncovered lines: 4
Coverable lines: 12
Total lines: 29
Line coverage: 66.6%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
WithDeadlockRetry()100%11100%
WithDeadlockRetry()100%210%
CreateDeadlockRetryPolicy(...)0%2275%

File(s)

/home/runner/work/the-gist-of-it-sec/the-gist-of-it-sec/backend/GistBackend/Handlers/MariaDbHandler/DatabaseRetryExtensions.cs

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using MySqlConnector;
 3using Polly;
 4using static GistBackend.Utils.LogEvents;
 5
 6namespace GistBackend.Handlers.MariaDbHandler;
 7
 8public static class DatabaseRetryExtensions
 9{
 10    public static async Task<T> WithDeadlockRetry<T>(this Task<T> task, ILogger? logger = null)
 11    {
 110412        return await CreateDeadlockRetryPolicy(logger).ExecuteAsync(() => task);
 54913    }
 14
 15    public static async Task WithDeadlockRetry(this Task task, ILogger? logger = null)
 16    {
 017        await CreateDeadlockRetryPolicy(logger).ExecuteAsync(() => task);
 018    }
 19
 20    private static Polly.Retry.AsyncRetryPolicy CreateDeadlockRetryPolicy(ILogger? logger) =>
 55221        Policy
 322            .Handle<MySqlException>(ex => ex.Number == 1213) // 1213 is deadlock error code
 55223            .WaitAndRetryAsync(
 55224                5,
 025                attempt => TimeSpan.FromMilliseconds(100 * Math.Pow(2, attempt-1)),
 55226                (_, _, attempt, _) =>
 027                    logger?.LogWarning(DatabaseOperationRetry, "Deadlock detected, retry attempt {Attempt}/5", attempt)
 55228            );
 29}