Skip to content

Commit 85bf05b

Browse files
committed
feat: improvements
1 parent 9ef2175 commit 85bf05b

6 files changed

Lines changed: 37 additions & 21 deletions

File tree

src/ByteSync.Client/Business/Synchronizations/MultiUploadZip.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
5454
public bool CanAdd(FileInfo fileInfo, string actionsGroupId)
5555
{
5656
return
57-
ActionGroupsIds.Count < 200 &&
57+
ActionGroupsIds.Count < 50 &&
5858
ActionsGroupIdsConcatenationLength + actionsGroupId.Length + 5 < 25000 &&
5959
Size + fileInfo.Length < 8 * SizeConstants.ONE_MEGA_BYTES;
6060
}

src/ByteSync.Client/Services/Communications/PushReceivers/FileTransferPushReceiver.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ private async void OnUploadFinished(FileTransferPush fileTransferPush)
8181

8282
try
8383
{
84-
_logger.LogInformation("OnUploadFinished: {SharedFileType}", fileTransferPush.SharedFileDefinition.SharedFileType);
84+
_logger.LogInformation("OnUploadFinished: {SharedFileId} ({SharedFileType})",
85+
fileTransferPush.SharedFileDefinition.Id,
86+
fileTransferPush.SharedFileDefinition.SharedFileType);
8587

8688
if (_sessionService.CurrentSession?.SessionId == fileTransferPush.SessionId)
8789
{

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public interface ICacheRepository<T> where T : class
1313
Task<UpdateEntityResult<T>> Update(CacheKey cacheKey, Func<T, bool> updateHandler, bool throwIfNotExists, ITransaction? transaction = null,
1414
IRedLock? redisLock = null);
1515

16-
Task<UpdateEntityResult<T>> AddOrUpdate(CacheKey cacheKey, Func<T?, T?> handler, ITransaction? transaction = null);
16+
Task<UpdateEntityResult<T>> AddOrUpdate(CacheKey cacheKey, Func<T?, T?> handler, ITransaction? transaction = null, IRedLock? redisLock = null);
1717

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

src/ByteSync.ServerCommon/Repositories/CacheRepository.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,31 @@ public async Task<UpdateEntityResult<T>> Update(CacheKey cacheKey, Func<T, bool>
8787
}
8888
}
8989

90-
public async Task<UpdateEntityResult<T>> AddOrUpdate(CacheKey cacheKey, Func<T?, T?> handler, ITransaction? transaction = null)
90+
public async Task<UpdateEntityResult<T>> AddOrUpdate(CacheKey cacheKey, Func<T?, T?> handler, ITransaction? transaction = null, IRedLock? redisLock = null)
9191
{
9292
IDatabaseAsync database = _redisInfrastructureService.GetDatabase(transaction);
93+
bool shouldDispose = redisLock == null;
94+
redisLock ??= await _redisInfrastructureService.AcquireLockAsync(cacheKey);
9395

94-
await using var redisLock = await _redisInfrastructureService.AcquireLockAsync(cacheKey);
95-
96-
var cachedElement = await Get(cacheKey);
97-
var createdOrUpdatedElement = handler.Invoke(cachedElement);
96+
try
97+
{
98+
var cachedElement = await Get(cacheKey);
99+
var createdOrUpdatedElement = handler.Invoke(cachedElement);
98100

99-
if (createdOrUpdatedElement == null)
101+
if (createdOrUpdatedElement == null)
102+
{
103+
return new UpdateEntityResult<T>(cachedElement, UpdateEntityStatus.NoOperation);
104+
}
105+
106+
return await SaveInternal(cacheKey, createdOrUpdatedElement, database);
107+
}
108+
finally
100109
{
101-
return new UpdateEntityResult<T>(cachedElement, UpdateEntityStatus.NoOperation);
110+
if (shouldDispose)
111+
{
112+
await redisLock.DisposeAsync();
113+
}
102114
}
103-
104-
return await SaveInternal(cacheKey, createdOrUpdatedElement, database);
105115
}
106116

107117
public async Task Delete(CacheKey cacheKey, ITransaction? transaction = null)

src/ByteSync.ServerCommon/Repositories/TrackingActionRepository.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
6262

6363
var locks = new ConcurrentBag<IAsyncDisposable>(); // Thread-safe
6464
var trackingActionEntities = new ConcurrentBag<TrackingActionEntity>();
65-
var updateHandlerResults = new List<TrackingActionUpdateHandlerResult>();
65+
var updateHandlerResults = new ConcurrentBag<TrackingActionUpdateHandlerResult>();
6666
// bool areAllUpdated = true;
6767

6868
// if (updateSynchronization)
@@ -71,6 +71,10 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
7171
// synchronizationLock = await _redisInfrastructureService.AcquireLockAsync(synchronizationCacheKey);
7272
// locks.Add(synchronizationLock);
7373
// }
74+
75+
var synchronizationCacheKey = _redisInfrastructureService.ComputeCacheKey(EntityType.Synchronization, sessionId);
76+
var synchronizationLock = await _redisInfrastructureService.AcquireLockAsync(synchronizationCacheKey);
77+
locks.Add(synchronizationLock);
7478

7579
var synchronizationEntity = await _synchronizationRepository.Get(sessionId);
7680
if (synchronizationEntity == null)
@@ -89,15 +93,15 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
8993
try
9094
{
9195
var cacheKey = _redisInfrastructureService.ComputeCacheKey(EntityType, $"{sessionId}_{actionsGroupId}");
92-
var actionsGroupIdLock = await _redisInfrastructureService.AcquireLockAsync(cacheKey);
93-
locks.Add(actionsGroupIdLock);
96+
// var actionsGroupIdLock = await _redisInfrastructureService.AcquireLockAsync(cacheKey);
97+
// locks.Add(actionsGroupIdLock);
9498

95-
var trackingActionEntity = await DoGetOrBuild(sessionId, actionsGroupId, cacheKey, actionsGroupIdLock);
99+
var trackingActionEntity = await DoGetOrBuild(sessionId, actionsGroupId, cacheKey, synchronizationLock);
96100
var updateHandlerResult = updateHandler.Invoke(trackingActionEntity, synchronizationEntity);
97101

98102
if (updateHandlerResult.IsSuccess)
99103
{
100-
await Save(cacheKey, trackingActionEntity, transaction, actionsGroupIdLock);
104+
await Save(cacheKey, trackingActionEntity, transaction, synchronizationLock);
101105
trackingActionEntities.Add(trackingActionEntity);
102106
updateHandlerResults.Add(updateHandlerResult);
103107
}
@@ -123,7 +127,7 @@ public async Task<TrackingActionResult> AddOrUpdate(string sessionId, List<strin
123127
{
124128
if (updateHandlerResults.Any(uhr => uhr.IsAChange))
125129
{
126-
var synchronizationCacheKey = _redisInfrastructureService.ComputeCacheKey(EntityType.Synchronization, sessionId);
130+
// var synchronizationCacheKey = _redisInfrastructureService.ComputeCacheKey(EntityType.Synchronization, sessionId);
127131
await _synchronizationCacheRepository.AddOrUpdate(synchronizationCacheKey, synEnt =>
128132
{
129133
foreach (var updateHandlerResult in updateHandlerResults)
@@ -135,7 +139,7 @@ await _synchronizationCacheRepository.AddOrUpdate(synchronizationCacheKey, synEn
135139
}
136140

137141
return synEnt;
138-
}, transaction);
142+
}, transaction, synchronizationLock);
139143

140144
// await _synchronizationCacheRepository.Save(synchronizationCacheKey!, synchronizationEntity, transaction, synchronizationLock);
141145
}

src/ByteSync.ServerCommon/Services/RedisInfrastructureService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public RedisInfrastructureService(IOptions<RedisSettings> redisSettings, ICacheK
3535
_connectionMultiplexer,
3636
};
3737

38-
RedLockRetryConfiguration redLockRetryConfiguration = new RedLockRetryConfiguration(5, 500);
38+
RedLockRetryConfiguration redLockRetryConfiguration = new RedLockRetryConfiguration(10, 1000);
3939
_redLockFactory = RedLockFactory.Create(multiplexers, redLockRetryConfiguration, loggerFactory);
4040
}
4141

@@ -80,7 +80,7 @@ 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(30), TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(1));
83+
var redisLock = await _redLockFactory.CreateLockAsync(cacheKey.Value, TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(2));
8484

8585
if (redisLock.IsAcquired)
8686
{

0 commit comments

Comments
 (0)