Skip to content

Commit dc12dce

Browse files
committed
feat: restore redlock, improve lock management
1 parent 888e30a commit dc12dce

4 files changed

Lines changed: 32 additions & 32 deletions

File tree

src/ByteSync.ServerCommon/Interfaces/Repositories/ICacheRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ Task<UpdateEntityResult<T>> Update(CacheKey cacheKey, Func<T, bool> updateHandle
1717

1818
Task Delete(CacheKey cacheKey, ITransaction? transaction = null);
1919

20-
Task<IRedLock> AcquireLockAsync(CacheKey cacheKey);
20+
// Task<IRedLock> AcquireLockAsync(CacheKey cacheKey);
2121
}

src/ByteSync.ServerCommon/Repositories/CacheRepository.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ public async Task Delete(CacheKey cacheKey, ITransaction? transaction = null)
120120
await database.KeyDeleteAsync(cacheKey.Value);
121121
}
122122

123-
public async Task<IRedLock> AcquireLockAsync(CacheKey cacheKey)
124-
{
125-
return await _redisInfrastructureService.AcquireLockAsync(cacheKey);
126-
}
123+
// public async Task<IRedLock> AcquireLockAsync(CacheKey cacheKey)
124+
// {
125+
// return await _redisInfrastructureService.AcquireLockAsync(cacheKey);
126+
// }
127127

128128
private async Task<UpdateEntityResult<T>> SaveInternal(CacheKey cacheKey, T element, IDatabaseAsync database)
129129
{

src/ByteSync.ServerCommon/Repositories/TrackingActionRepository.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
6161
// CacheKey? synchronizationCacheKey = null;
6262
// IRedLock? synchronizationLock = null;
6363

64-
var locks = new ConcurrentBag<IAsyncDisposable>(); // Thread-safe
64+
// var locks = new ConcurrentBag<IAsyncDisposable>(); // Thread-safe
6565
var trackingActionEntities = new ConcurrentBag<TrackingActionEntity>();
6666
var updateHandlerResults = new ConcurrentBag<TrackingActionUpdateHandlerResult>();
6767
// bool areAllUpdated = true;
@@ -74,8 +74,8 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
7474
// }
7575

7676
var synchronizationCacheKey = _redisInfrastructureService.ComputeCacheKey(EntityType.Synchronization, sessionId);
77-
var synchronizationLock = await _redisInfrastructureService.AcquireLockAsync(synchronizationCacheKey);
78-
locks.Add(synchronizationLock);
77+
await using var synchronizationLock = await _redisInfrastructureService.AcquireLockAsync(synchronizationCacheKey);
78+
// locks.Add(synchronizationLock);
7979

8080
var synchronizationEntity = await _synchronizationRepository.Get(sessionId);
8181
if (synchronizationEntity == null)
@@ -148,10 +148,10 @@ await _synchronizationCacheRepository.AddOrUpdate(synchronizationCacheKey, synEn
148148
await transaction.ExecuteAsync();
149149
}
150150

151-
foreach (var redisLock in locks)
152-
{
153-
await redisLock.DisposeAsync();
154-
}
151+
// foreach (var redisLock in locks)
152+
// {
153+
// await redisLock.DisposeAsync();
154+
// }
155155

156156
return new TrackingActionResult(areAllUpdated, trackingActionEntities.ToList(), synchronizationEntity);
157157
}

src/ByteSync.ServerCommon/Services/RedisInfrastructureService.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -80,29 +80,29 @@ public async Task<IRedLock> AcquireLockAsync(EntityType entityType, string entit
8080

8181
public async Task<IRedLock> AcquireLockAsync(CacheKey cacheKey)
8282
{
83-
// var redisLock = await _redLockFactory.CreateLockAsync(cacheKey.Value, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(2));
84-
//
85-
// if (redisLock.IsAcquired)
86-
// {
87-
// return redisLock;
88-
// }
89-
// else
90-
// {
91-
// throw new AcquireRedisLockException(cacheKey.Value, redisLock);
92-
// }
83+
var redisLock = await _redLockFactory.CreateLockAsync(cacheKey.Value, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(2));
9384

94-
var myLock = new MyLock
85+
if (redisLock.IsAcquired)
9586
{
96-
Resource = cacheKey.Value,
97-
LockId = Guid.NewGuid().ToString(),
98-
IsAcquired = true,
99-
Status = RedLockStatus.Acquired,
100-
InstanceSummary = new RedLockInstanceSummary(),
101-
ExtendCount = 0
102-
};
103-
104-
return myLock;
87+
return redisLock;
88+
}
89+
else
90+
{
91+
throw new AcquireRedisLockException(cacheKey.Value, redisLock);
92+
}
10593

94+
// var myLock = new MyLock
95+
// {
96+
// Resource = cacheKey.Value,
97+
// LockId = Guid.NewGuid().ToString(),
98+
// IsAcquired = true,
99+
// Status = RedLockStatus.Acquired,
100+
// InstanceSummary = new RedLockInstanceSummary(),
101+
// ExtendCount = 0
102+
// };
103+
//
104+
// return myLock;
105+
//
106106

107107
}
108108

0 commit comments

Comments
 (0)