diff --git a/README.md b/README.md index f2c511f..73aa04a 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,9 @@ Setup steps for working with the repository locally are documented [here](docs/D ## Release notes +- 2.8.4 + - Use `set_config` instead of `SET LOCAL` to avoid Postgres warnings ([#294⁠](https://github.com/madelson/DistributedLock/pull/294), DistributedLock.Postgres 1.3.2). Thanks [behruzsaifov](https://github.com/behruzsaifov) for implementing! + - Patch MySqlConnector ([#296](https://github.com/madelson/DistributedLock/issues/296), DistributedLock.MySql 1.0.3) - 2.8.3 - Bump MongoDB.Driver to avoid pulling in vulnerable packages ([#281](https://github.com/madelson/DistributedLock/pull/281), DistributedLock.MongoDB 1.0.2). Thanks [@Thynix](https://github.com/Thynix) for implementing! - 2.8.2 diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index f598ff8..54ed681 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -9,7 +9,7 @@ - + diff --git a/src/DistributedLock.MySql/DistributedLock.MySql.csproj b/src/DistributedLock.MySql/DistributedLock.MySql.csproj index ba277a4..31ca6ee 100644 --- a/src/DistributedLock.MySql/DistributedLock.MySql.csproj +++ b/src/DistributedLock.MySql/DistributedLock.MySql.csproj @@ -11,7 +11,7 @@ - 1.0.2 + 1.0.3 1.0.0.0 Michael Adelson Provides a distributed lock implementation based on MySql diff --git a/src/DistributedLock.MySql/packages.lock.json b/src/DistributedLock.MySql/packages.lock.json index 35bb9a6..afaad7a 100644 --- a/src/DistributedLock.MySql/packages.lock.json +++ b/src/DistributedLock.MySql/packages.lock.json @@ -25,21 +25,33 @@ }, "MySqlConnector": { "type": "Direct", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", "System.Threading.Tasks.Extensions": "4.5.4" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "System.Buffers": "4.5.1", + "System.Diagnostics.DiagnosticSource": "8.0.1", "System.Memory": "4.5.5" } }, @@ -55,8 +67,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "7.0.2", - "contentHash": "hYr3I9N9811e0Bjf2WNwAGGyTuAFbbTgX1RPLt/3Wbm68x3IGcX5Cl75CMmgT6WlNwLQ2tCCWfqYPpypjaf2xA==", + "resolved": "8.0.1", + "contentHash": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", "dependencies": { "System.Memory": "4.5.5", "System.Runtime.CompilerServices.Unsafe": "6.0.0" @@ -79,15 +91,15 @@ }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + "resolved": "6.1.2", + "contentHash": "2hBr6zdbIBTDE3EhK7NSVNdX58uTK6iHW/P/Axmm9sl1xoGSLqDvMtpecn226TNwHByFokYwJmt/aQQNlO5CRw==" }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "4.5.3" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "distributedlock.core": { @@ -133,13 +145,14 @@ }, "MySqlConnector": { "type": "Direct", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "NETStandard.Library": { @@ -159,12 +172,23 @@ "System.IO.Hashing": "10.0.5" } }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "8.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "System.Buffers": "4.5.1", + "System.Diagnostics.DiagnosticSource": "8.0.1", "System.Memory": "4.5.5" } }, @@ -185,8 +209,8 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "7.0.2", - "contentHash": "hYr3I9N9811e0Bjf2WNwAGGyTuAFbbTgX1RPLt/3Wbm68x3IGcX5Cl75CMmgT6WlNwLQ2tCCWfqYPpypjaf2xA==", + "resolved": "8.0.1", + "contentHash": "vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", "dependencies": { "System.Memory": "4.5.5", "System.Runtime.CompilerServices.Unsafe": "6.0.0" @@ -223,10 +247,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "4.5.3" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "distributedlock.core": { @@ -265,12 +289,13 @@ }, "MySqlConnector": { "type": "Direct", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1" } }, "Microsoft.Build.Tasks.Git": { @@ -281,12 +306,19 @@ "System.IO.Hashing": "10.0.5" } }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "7.0.1", - "contentHash": "pkeBFx0vqMW/A3aUVHh7MPu3WkBhaVlezhSZeb1c9XD0vUReYH1TLFSy5MxJgZfmz5LZzYoErMorlYZiwpOoNA==", + "resolved": "8.0.2", + "contentHash": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", "System.Buffers": "4.5.1", + "System.Diagnostics.DiagnosticSource": "8.0.1", "System.Memory": "4.5.5" } }, diff --git a/src/DistributedLock.Postgres/DistributedLock.Postgres.csproj b/src/DistributedLock.Postgres/DistributedLock.Postgres.csproj index 1100aee..c4756c1 100644 --- a/src/DistributedLock.Postgres/DistributedLock.Postgres.csproj +++ b/src/DistributedLock.Postgres/DistributedLock.Postgres.csproj @@ -11,7 +11,7 @@ - 1.3.1 + 1.3.2 1.0.0.0 Michael Adelson Provides a distributed lock implementation based on Postgresql diff --git a/src/DistributedLock.Postgres/PostgresAdvisoryLock.cs b/src/DistributedLock.Postgres/PostgresAdvisoryLock.cs index c5093bf..6146310 100644 --- a/src/DistributedLock.Postgres/PostgresAdvisoryLock.cs +++ b/src/DistributedLock.Postgres/PostgresAdvisoryLock.cs @@ -54,8 +54,8 @@ private PostgresAdvisoryLock(bool isShared) // the transaction or the save point are rolled back. var capturedTimeoutSettings = await CaptureTimeoutSettingsIfNeededAsync(connection, cancellationToken).ConfigureAwait(false); - // Our acquire command will use SET LOCAL to set up statement timeouts. This lasts until the end - // of the current transaction instead of just the current batch if we're in a transaction. To make sure + // Our acquire command will use set_config(..., is_local: true), which behaves like SET LOCAL, to set up statement timeouts. + // This lasts until the end of the current transaction instead of just the current batch if we're in a transaction. To make sure // we don't leak those settings, in the case of a transaction, we first set up a save point which we can // later roll back (only in cases where we don't acquire a transaction scoped lock - taking the settings changes with it but NOT the lock). // Because we can't confidently roll back a save point without knowing that it has been set up, we start the save point in its own @@ -176,10 +176,13 @@ private DatabaseCommand CreateAcquireCommand(DatabaseConnection connection, Post var commandText = new StringBuilder(); // We set the statement_timeout to 0 (inf) because we want everything to be driven by the lock_timeout. - commandText.AppendLine("SET LOCAL statement_timeout = 0;"); // We set the lock timeout to our timeout, with the exception that if our timeout is zero we set it to inf because // we'll be using the pg_try_advisory_lock function which doesn't block in that case. - commandText.AppendLine($"SET LOCAL lock_timeout = {(timeout.IsZero || timeout.IsInfinite ? 0 : timeout.InMilliseconds)};"); + // We use set_config(..., is_local: true) rather than SET LOCAL: it behaves the same (see PostgresBehaviorTest), but SET LOCAL + // logs "SET LOCAL can only be used in transaction blocks" when we're not in a transaction. See https://github.com/madelson/DistributedLock/issues/90 + // The calls are wrapped in a DO block so that they don't return a result set, since we read the result of this command with ExecuteScalar. + var lockTimeout = timeout.IsZero || timeout.IsInfinite ? 0 : timeout.InMilliseconds; + commandText.AppendLine($"DO $$BEGIN PERFORM pg_catalog.set_config('statement_timeout', '0', true); PERFORM pg_catalog.set_config('lock_timeout', '{lockTimeout}', true); END$$;"); commandText.Append("SELECT "); var isTry = timeout.IsZero; diff --git a/src/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs b/src/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs index 77d791a..a404bbf 100644 --- a/src/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs +++ b/src/DistributedLock.Tests/AbstractTestCases/DistributedLockCoreTestCases.cs @@ -115,7 +115,7 @@ public async Task TestTimeouts() await using (await this._lockProvider.CreateLock(lockName).AcquireAsync()) { var timeout = TimeSpan.FromSeconds(.2); - var waitTime = TimeSpan.FromSeconds(.5); + var waitTime = timeout + TimeSpan.FromSeconds(2); var syncAcquireTask = Task.Run(() => @lock.Acquire(timeout)); (await syncAcquireTask.ContinueWith(_ => { }).TryWaitAsync(waitTime)).ShouldEqual(true, "sync acquire " + this.GetType().Name); diff --git a/src/DistributedLock.Tests/Tests/Postgres/PostgresBehaviorTest.cs b/src/DistributedLock.Tests/Tests/Postgres/PostgresBehaviorTest.cs index 74ff8e6..ad6d450 100644 --- a/src/DistributedLock.Tests/Tests/Postgres/PostgresBehaviorTest.cs +++ b/src/DistributedLock.Tests/Tests/Postgres/PostgresBehaviorTest.cs @@ -48,6 +48,43 @@ public async Task TestPostgresCommandAutomaticallyParticipatesInTransaction() (await commandInTransaction.ExecuteScalarAsync()).ShouldEqual("2020ms"); } + /// + /// Demonstrates that outside of a transaction set_config(..., is_local: true) behaves like SET LOCAL: the setting applies + /// to the rest of the multi-statement command and does not leak into later commands (unlike SET). This is why we + /// can use set_config instead of SET LOCAL when acquiring locks. Unlike SET LOCAL, set_config does not log + /// "SET LOCAL can only be used in transaction blocks" (see https://github.com/madelson/DistributedLock/issues/90). + /// + [TestCase(false)] + [TestCase(true)] + public async Task TestSetConfigIsLocalBehavesLikeSetLocalOutsideOfTransaction(bool useSetConfig) + { + using var connection = new NpgsqlConnection(TestingPostgresDb.DefaultConnectionString); + await connection.OpenAsync(); + List notices = []; + connection.Notice += (_, e) => notices.Add(e.Notice.MessageText); + + // set_config is wrapped in a DO block so that it does not return a result set, like SET LOCAL + string SetLockTimeout(int milliseconds) => useSetConfig + ? $"DO $$BEGIN PERFORM pg_catalog.set_config('lock_timeout', '{milliseconds}', true); END$$;" + : $"SET LOCAL lock_timeout = {milliseconds};"; + + (await ExecuteAsync($"{SetLockTimeout(12345)} CREATE TEMPORARY TABLE temp_table_{useSetConfig} (id INT); SHOW lock_timeout;")).ShouldEqual("12345ms"); + (await ExecuteAsync("SHOW lock_timeout;")).ShouldEqual("0"); + (await ExecuteAsync($"{SetLockTimeout(456)} SELECT 'x'")).ShouldEqual("x"); + (await ExecuteAsync("SHOW lock_timeout")).ShouldEqual("0"); + + const string SetLocalWarning = "SET LOCAL can only be used in transaction blocks"; + if (useSetConfig) { Assert.That(notices, Has.None.Contains(SetLocalWarning)); } + else { Assert.That(notices, Has.Some.Contains(SetLocalWarning)); } + + async Task ExecuteAsync(string sql) + { + using var command = connection.CreateCommand(); + command.CommandText = sql; + return (string?)await command.ExecuteScalarAsync(); + } + } + [Test] public Task TestTransactionCancellationRecovery() => this.TestTransactionCancellationOrTimeoutRecovery(useTimeout: false); diff --git a/src/DistributedLock.Tests/Tests/Postgres/PostgresDistributedLockTest.cs b/src/DistributedLock.Tests/Tests/Postgres/PostgresDistributedLockTest.cs index e8802b8..90cc55d 100644 --- a/src/DistributedLock.Tests/Tests/Postgres/PostgresDistributedLockTest.cs +++ b/src/DistributedLock.Tests/Tests/Postgres/PostgresDistributedLockTest.cs @@ -117,6 +117,22 @@ public async Task TestWorksWithAmbientTransaction( (await GetTimeoutAsync("statement_timeout", connectionCommand)).ShouldEqual("0"); } + // Reproduces https://github.com/madelson/DistributedLock/issues/289 + [Test] + public async Task TestLockAcquisitionDoesNotEmitNotices() + { + using var connection = new NpgsqlConnection(TestingPostgresDb.DefaultConnectionString); + List notices = []; + connection.Notice += (_, e) => notices.Add(e.Notice.MessageText); + + await connection.OpenAsync(); + + var @lock = new PostgresDistributedLock(new PostgresAdvisoryLockKey(TestHelper.UniqueName, allowHashing: true), connection); + await (await @lock.AcquireAsync()).DisposeAsync(); + + Assert.IsEmpty(notices); + } + private static Task GetTimeoutAsync(string timeoutName, NpgsqlCommand command) { command.CommandText = $"SHOW {timeoutName}"; diff --git a/src/DistributedLock.Tests/packages.lock.json b/src/DistributedLock.Tests/packages.lock.json index fffd48a..794444b 100644 --- a/src/DistributedLock.Tests/packages.lock.json +++ b/src/DistributedLock.Tests/packages.lock.json @@ -530,10 +530,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "I5G6Y8jb0xRtGUC9Lahy7FUvlYlnGMMkbuKAQBy8Jb7Y6Yn8OlBEiUOY0PqZ0hy6Ua8poVA1ui1tAIiXNxGdsg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.1.0" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "System.ValueTuple": { @@ -555,10 +555,10 @@ "dependencies": { "DistributedLock.Azure": "[1.0.2, )", "DistributedLock.FileSystem": "[1.0.3, )", - "DistributedLock.MongoDB": "[1.0.1, )", - "DistributedLock.MySql": "[1.0.2, )", + "DistributedLock.MongoDB": "[1.0.2, )", + "DistributedLock.MySql": "[1.0.3, )", "DistributedLock.Oracle": "[1.0.5, )", - "DistributedLock.Postgres": "[1.3.1, )", + "DistributedLock.Postgres": "[1.3.2, )", "DistributedLock.Redis": "[1.1.1, )", "DistributedLock.SqlServer": "[1.0.7, )", "DistributedLock.WaitHandles": "[1.0.1, )", @@ -597,7 +597,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -694,13 +694,14 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "Npgsql": { @@ -1236,10 +1237,10 @@ "dependencies": { "DistributedLock.Azure": "[1.0.2, )", "DistributedLock.FileSystem": "[1.0.3, )", - "DistributedLock.MongoDB": "[1.0.1, )", - "DistributedLock.MySql": "[1.0.2, )", + "DistributedLock.MongoDB": "[1.0.2, )", + "DistributedLock.MySql": "[1.0.3, )", "DistributedLock.Oracle": "[1.0.5, )", - "DistributedLock.Postgres": "[1.3.1, )", + "DistributedLock.Postgres": "[1.3.2, )", "DistributedLock.Redis": "[1.1.1, )", "DistributedLock.SqlServer": "[1.0.7, )", "DistributedLock.WaitHandles": "[1.0.1, )", @@ -1273,7 +1274,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -1365,11 +1366,12 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } }, "Npgsql": { diff --git a/src/DistributedLock/DistributedLock.csproj b/src/DistributedLock/DistributedLock.csproj index 48d488d..599d41e 100644 --- a/src/DistributedLock/DistributedLock.csproj +++ b/src/DistributedLock/DistributedLock.csproj @@ -10,7 +10,7 @@ - 2.8.3 + 2.8.4 2.0.0.0 Michael Adelson Provides easy-to-use mutexes, reader-writer locks, and semaphores that can synchronize across processes and machines. This is an umbrella package that brings in the entire family of DistributedLock.* packages (e. g. DistributedLock.SqlServer) as references. Those packages can also be installed individually. diff --git a/src/DistributedLock/packages.lock.json b/src/DistributedLock/packages.lock.json index 0913e31..d7c3c95 100644 --- a/src/DistributedLock/packages.lock.json +++ b/src/DistributedLock/packages.lock.json @@ -397,10 +397,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "I5G6Y8jb0xRtGUC9Lahy7FUvlYlnGMMkbuKAQBy8Jb7Y6Yn8OlBEiUOY0PqZ0hy6Ua8poVA1ui1tAIiXNxGdsg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.1.0" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "distributedlock.azure": { @@ -427,7 +427,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.postgres": { @@ -508,13 +508,14 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "Npgsql": { @@ -1059,10 +1060,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "I5G6Y8jb0xRtGUC9Lahy7FUvlYlnGMMkbuKAQBy8Jb7Y6Yn8OlBEiUOY0PqZ0hy6Ua8poVA1ui1tAIiXNxGdsg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.1.0" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "System.ValueTuple": { @@ -1111,7 +1112,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -1208,13 +1209,14 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "Npgsql": { @@ -1706,10 +1708,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "I5G6Y8jb0xRtGUC9Lahy7FUvlYlnGMMkbuKAQBy8Jb7Y6Yn8OlBEiUOY0PqZ0hy6Ua8poVA1ui1tAIiXNxGdsg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.1.0" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "System.ValueTuple": { @@ -1740,7 +1742,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.postgres": { @@ -1820,13 +1822,14 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "Npgsql": { @@ -2384,7 +2387,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -2478,12 +2481,13 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1" } }, "Npgsql": { diff --git a/src/DistributedLockTaker/packages.lock.json b/src/DistributedLockTaker/packages.lock.json index 98f233a..7c5f37a 100644 --- a/src/DistributedLockTaker/packages.lock.json +++ b/src/DistributedLockTaker/packages.lock.json @@ -471,10 +471,10 @@ }, "System.Threading.Tasks.Extensions": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "I5G6Y8jb0xRtGUC9Lahy7FUvlYlnGMMkbuKAQBy8Jb7Y6Yn8OlBEiUOY0PqZ0hy6Ua8poVA1ui1tAIiXNxGdsg==", + "resolved": "4.6.3", + "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==", "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "6.1.0" + "System.Runtime.CompilerServices.Unsafe": "6.1.2" } }, "System.ValueTuple": { @@ -496,10 +496,10 @@ "dependencies": { "DistributedLock.Azure": "[1.0.2, )", "DistributedLock.FileSystem": "[1.0.3, )", - "DistributedLock.MongoDB": "[1.0.1, )", - "DistributedLock.MySql": "[1.0.2, )", + "DistributedLock.MongoDB": "[1.0.2, )", + "DistributedLock.MySql": "[1.0.3, )", "DistributedLock.Oracle": "[1.0.5, )", - "DistributedLock.Postgres": "[1.3.1, )", + "DistributedLock.Postgres": "[1.3.2, )", "DistributedLock.Redis": "[1.1.1, )", "DistributedLock.SqlServer": "[1.0.7, )", "DistributedLock.WaitHandles": "[1.0.1, )", @@ -538,7 +538,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -635,13 +635,14 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1", - "System.Diagnostics.DiagnosticSource": "7.0.2", - "System.Threading.Tasks.Extensions": "4.5.4" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Threading.Tasks.Extensions": "4.6.3" } }, "Npgsql": { @@ -1157,10 +1158,10 @@ "dependencies": { "DistributedLock.Azure": "[1.0.2, )", "DistributedLock.FileSystem": "[1.0.3, )", - "DistributedLock.MongoDB": "[1.0.1, )", - "DistributedLock.MySql": "[1.0.2, )", + "DistributedLock.MongoDB": "[1.0.2, )", + "DistributedLock.MySql": "[1.0.3, )", "DistributedLock.Oracle": "[1.0.5, )", - "DistributedLock.Postgres": "[1.3.1, )", + "DistributedLock.Postgres": "[1.3.2, )", "DistributedLock.Redis": "[1.1.1, )", "DistributedLock.SqlServer": "[1.0.7, )", "DistributedLock.WaitHandles": "[1.0.1, )", @@ -1194,7 +1195,7 @@ "type": "Project", "dependencies": { "DistributedLock.Core": "[1.0.9, )", - "MySqlConnector": "[2.3.5, )" + "MySqlConnector": "[2.6.2, )" } }, "distributedlock.oracle": { @@ -1286,11 +1287,12 @@ }, "MySqlConnector": { "type": "CentralTransitive", - "requested": "[2.3.5, )", - "resolved": "2.3.5", - "contentHash": "AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==", + "requested": "[2.6.2, )", + "resolved": "2.6.2", + "contentHash": "dlTc/tsBa42szdvpj4nrHvQVUb0gsMwR9HT6J0Zz2OSqfP0CdYlGw+qQPqCpbnO97idfvclSjKYtM6y5QaBQaQ==", "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "7.0.1" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" } }, "Npgsql": {