All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
EricksonLopez.DistributedLock.Abstractions:IDistributedLockProvidercontract with non-blocking (TryAcquireAsync), polling with jittered exponential backoff, and blocking (AcquireAsync) overloads.IDistributedLockHandleinterface exposingHandleLostToken,ResourceId,LockId, andFencingToken.AsyncDisposableHandleAdapterproviding backward-compatible handle adaptation for genericIAsyncDisposableimplementations.- Strongly-typed
DistributedLockErrors(LockAlreadyHeld,Timeout,LockLost,Canceled) based onEricksonLopez.Result. - Declarative
[DistributedLock]attribute for integration withEricksonLopez.Mediatorpipeline behaviors. - Safe execution extensions
ExecuteWithLockAsyncandExecuteWithLockAsync<T>with automaticHandleLostTokenlinking and explicit timeout support (TimeSpan timeout).
- Relational & Cache Dialect Providers:
EricksonLopez.DistributedLock.PostgreSql: High-throughput advisory locks (pg_try_advisory_lock,pg_advisory_lock,pg_try_advisory_xact_lock), backgroundPeriodicTimerkeepalive heartbeats, and OpenTelemetry instrumentation.EricksonLopez.DistributedLock.SqlServer: Application locks viasp_getapplock/sp_releaseapplockwith full session and transaction lifecycles.EricksonLopez.DistributedLock.MySql: MySQL user-level locks viaGET_LOCKandRELEASE_LOCKwith MySqlConnector.EricksonLopez.DistributedLock.MariaDb: MariaDB user-level locks viaGET_LOCKandRELEASE_LOCKwith MySqlConnector.EricksonLopez.DistributedLock.Oracle: Oracle Database locks viaDBMS_LOCKwith Oracle.ManagedDataAccess.Core.EricksonLopez.DistributedLock.Sqlite: SQLite database-enforced concurrency locks viaMicrosoft.Data.Sqlite.EricksonLopez.DistributedLock.Redis: Redis distributed mutual exclusion via StackExchange.Redis with Lua scripts for atomic release and lease renewal.
- Showcase & Cookbook:
- Living reference sample project with 11 progressive learning levels and 12 production-ready recipes demonstrating all provider configurations, blocking overloads, and transactional extensions.
- Testing, Governance & Quality:
- 1:1 dedicated test project symmetry for each production package.
- Comprehensive architectural enforcement suite (
NetArchTest.Rules) validating Native AOT readiness, dialect decoupling, and zero obsolete APIs. - Integration test suite running against real database engines via Testcontainers.
- Native AOT smoke test executable (
AotSmokeTest) verifying trim-safety and zero dynamic reflection warnings. - Standardized technical documentation in
/docs/with normalized kebab-case naming, portable links, and ADR-008 quality thresholds. - Complete community health governance with
SUPPORT.md,CODEOWNERS, and GitHub issue/PR templates.
- Build & Packaging:
- Automated conditional Strong-Name Signing support in
Directory.Build.propswhenEricksonLopez.snkis detected. - Hardened GitHub Actions CI/CD workflows (
ci.yml,publish.yml,mutation-testing.yml,aot-smoke-test.yml) with immutable commit SHA pinning.
- Automated conditional Strong-Name Signing support in