< Summary

Information
Class: OzonOrdersWeb.Observability.SafeDistributedLockWrapper
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Observability/SafeDistributedLockWrapper.cs
Line coverage
100%
Covered lines: 16
Uncovered lines: 0
Coverable lines: 16
Total lines: 44
Line coverage: 100%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%22100%
get_Inner()100%11100%
Dispose()100%44100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Observability/SafeDistributedLockWrapper.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using Serilog;
 4
 5namespace OzonOrdersWeb.Observability;
 6
 7/// <summary>
 8/// Обёртка над IDisposable для блокировок Hangfire (напр. MySqlDistributedLock),
 9/// предотвращающая выбрасывание исключений при вызове Dispose() на закрытом соединении.
 10/// </summary>
 11public sealed class SafeDistributedLockWrapper : IDisposable
 12{
 13    private readonly IDisposable _inner;
 14    private readonly Serilog.ILogger? _logger;
 15    private int _disposed;
 16
 417    public SafeDistributedLockWrapper(IDisposable inner, Serilog.ILogger? logger = null)
 18    {
 419        _inner = inner ?? throw new ArgumentNullException(nameof(inner));
 420        _logger = logger;
 421    }
 22
 123    public IDisposable Inner => _inner;
 24
 25    public void Dispose()
 26    {
 427        if (Interlocked.Exchange(ref _disposed, 1) != 0)
 28        {
 229            return;
 30        }
 31
 32        try
 33        {
 234            _inner.Dispose();
 135        }
 136        catch (Exception ex)
 37        {
 138            var log = _logger ?? Log.Logger;
 139            log.ForContext("EventCategory", "jobs")
 140               .ForContext("EventKind", "HangfireLockRelease")
 141               .Warning(ex, "Ошибка при освобождении распределённой блокировки Hangfire (соединение могло быть закрыто с
 142        }
 243    }
 44}