RedLock.net
RedLock.net copied to clipboard
Sporadic issue with RedLock.GetHost
Hi,
We're running into this issue every now and then on our production environment:
System.AggregateException: One or more errors occurred. (The specified endpoint is not defined (Parameter 'endpoint'))
---> System.ArgumentException: The specified endpoint is not defined (Parameter 'endpoint')
at RedLockNet.SERedis.RedLock.GetHost(IConnectionMultiplexer cache)
at RedLockNet.SERedis.RedLock.LockInstance(RedisConnection cache)
at System.Threading.Tasks.Parallel.<>c__DisplayClass32_0`2.<ForEachWorker>b__0(Int32 i)
at System.Threading.Tasks.Parallel.<>c__DisplayClass19_0`2.<ForWorker>b__1(RangeWorker& currentWorker, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Parallel.<>c__DisplayClass19_0`2.<ForWorker>b__1(RangeWorker& currentWorker, Int64 timeout, Boolean& replicationDelegateYieldedBeforeCompletion)
at System.Threading.Tasks.TaskReplicator.Replica.Execute()
--- End of inner exception stack trace ---
at System.Threading.Tasks.TaskReplicator.Run[TState](ReplicatableUserAction`1 action, ParallelOptions options, Boolean stopOnFirstFailure)
at System.Threading.Tasks.Parallel.ForWorker[TLocal,TInt](TInt fromInclusive, TInt toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Parallel.ThrowSingleCancellationExceptionOrOtherException(ICollection exceptions, CancellationToken cancelToken, Exception otherException)
at System.Threading.Tasks.Parallel.ForWorker[TLocal,TInt](TInt fromInclusive, TInt toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
at RedLockNet.SERedis.RedLock.Acquire()
at RedLockNet.SERedis.RedLock.Start()
at EverflowIdentity.Services.DistributedNewKeyLock`1.LockAsync(Int32 millisecondsTimeout) in /app/EverflowIdentity/Services/DistributedNewKeyLock.cs:line 26
It seems to happen randomly and sometimes months go by without encountering the issue.
Here is how we initialize the factory:
_multiplexer = ConnectionMultiplexer.Connect(Configuration["RedisHost"]);
var endPoints = new List<RedLockMultiplexer>
{
_multiplexer,
};
_redLockFactory = RedLockFactory.Create(endPoints);
services.AddSingleton(_redLockFactory);
The code creating the lock:
_lock = _redLockFactory.CreateLock("identity_key_lock", TimeSpan.FromMinutes(1),
TimeSpan.FromMinutes(1),
TimeSpan.FromMilliseconds(200));
if (!_lock.IsAcquired)
{
return Task.FromResult(false);
}
return Task.FromResult(true);
Any idea what could be the root cause of this sporadic issue or how to mitigate against it?