Skip to content

Commit 5ec0075

Browse files
author
Luis Fernando Bertucci
committed
Merge branch 'master' into MySqlProviderDbContextMissing
2 parents cd04e21 + a68b86d commit 5ec0075

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/providers/WorkflowCore.Providers.Redis/ServiceCollectionExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public static WorkflowOptions UseRedisQueues(this WorkflowOptions options, strin
1313
return options;
1414
}
1515

16-
public static WorkflowOptions UseRedisLocking(this WorkflowOptions options, string connectionString)
16+
public static WorkflowOptions UseRedisLocking(this WorkflowOptions options, string connectionString, string prefix = null)
1717
{
18-
options.UseDistributedLockManager(sp => new RedisLockProvider(connectionString, sp.GetService<ILoggerFactory>()));
18+
options.UseDistributedLockManager(sp => new RedisLockProvider(connectionString, prefix, sp.GetService<ILoggerFactory>()));
1919
return options;
2020
}
2121

src/providers/WorkflowCore.Providers.Redis/Services/RedisLockProvider.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ namespace WorkflowCore.Providers.Redis.Services
1414
public class RedisLockProvider : IDistributedLockProvider
1515
{
1616
private readonly ILogger _logger;
17-
private readonly string _connectionString;
17+
private readonly string _connectionString;
18+
private readonly string _prefix;
1819
private IConnectionMultiplexer _multiplexer;
1920
private RedLockFactory _redlockFactory;
2021
private readonly TimeSpan _lockTimeout = TimeSpan.FromMinutes(1);
2122
private readonly List<IRedLock> ManagedLocks = new List<IRedLock>();
2223

23-
public RedisLockProvider(string connectionString, ILoggerFactory logFactory)
24+
public RedisLockProvider(string connectionString, string prefix, ILoggerFactory logFactory)
2425
{
2526
_connectionString = connectionString;
27+
_prefix = prefix;
2628
_logger = logFactory.CreateLogger(GetType());
2729
}
2830

@@ -31,7 +33,7 @@ public async Task<bool> AcquireLock(string Id, CancellationToken cancellationTok
3133
if (_redlockFactory == null)
3234
throw new InvalidOperationException();
3335

34-
var redLock = await _redlockFactory.CreateLockAsync(Id, _lockTimeout);
36+
var redLock = await _redlockFactory.CreateLockAsync(GetResource(Id), _lockTimeout);
3537

3638
if (redLock.IsAcquired)
3739
{
@@ -50,11 +52,13 @@ public Task ReleaseLock(string Id)
5052
if (_redlockFactory == null)
5153
throw new InvalidOperationException();
5254

55+
var resource = GetResource(Id);
56+
5357
lock (ManagedLocks)
5458
{
5559
foreach (var redLock in ManagedLocks)
5660
{
57-
if (redLock.Resource == Id)
61+
if (redLock.Resource == resource)
5862
{
5963
redLock.Dispose();
6064
ManagedLocks.Remove(redLock);
@@ -77,7 +81,15 @@ public async Task Stop()
7781
_redlockFactory?.Dispose();
7882
await _multiplexer.CloseAsync();
7983
_multiplexer = null;
80-
84+
85+
}
86+
87+
private string GetResource(string key)
88+
{
89+
if (string.IsNullOrEmpty(_prefix))
90+
return key;
91+
92+
return $"{_prefix}:{key}";
8193
}
8294
}
8395
}

0 commit comments

Comments
 (0)