Skip to content

Commit c6594e6

Browse files
committed
fix: fix concurrency on collection
1 parent dc12dce commit c6594e6

4 files changed

Lines changed: 13 additions & 9 deletions

File tree

src/ByteSync.ServerCommon/Interfaces/Services/ISynchronizationProgressService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface ISynchronizationProgressService
1616

1717
Task<Synchronization> MapToSynchronization(SynchronizationEntity synchronizationEntity);
1818

19-
Task UploadIsFinished(SharedFileDefinition sharedFileDefinition, int totalParts, HashSet<string> targetInstanceIds);
19+
Task UploadIsFinished(SharedFileDefinition sharedFileDefinition, int totalParts, ICollection<string> targetInstanceIds);
2020

2121
Task FilePartIsUploaded(SharedFileDefinition sharedFileDefinition, int partNumber, HashSet<string> targetInstanceIds);
2222
}

src/ByteSync.ServerCommon/Services/SynchronizationProgressService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public async Task InformSynchronizationStarted(SynchronizationEntity synchroniza
5151
await _invokeClientsService.SessionGroup(synchronization.SessionId).SynchronizationStarted(synchronization);
5252
}
5353

54-
public async Task UploadIsFinished(SharedFileDefinition sharedFileDefinition, int totalParts, HashSet<string> targetInstanceIds)
54+
public async Task UploadIsFinished(SharedFileDefinition sharedFileDefinition, int totalParts, ICollection<string> targetInstanceIds)
5555
{
5656
await _sharedFilesService.AssertUploadIsFinished(sharedFileDefinition, totalParts, targetInstanceIds);
5757

src/ByteSync.ServerCommon/Services/SynchronizationService.cs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using ByteSync.Common.Business.Actions;
1+
using System.Collections.Concurrent;
2+
using ByteSync.Common.Business.Actions;
23
using ByteSync.Common.Business.SharedFiles;
34
using ByteSync.Common.Business.Synchronizations;
45
using ByteSync.Common.Helpers;
@@ -77,7 +78,7 @@ public async Task OnUploadIsFinishedAsync(SharedFileDefinition sharedFileDefinit
7778
{
7879
var actionsGroupsIds = sharedFileDefinition.ActionsGroupIds;
7980

80-
HashSet<string> targetInstanceIds = new HashSet<string>();
81+
ConcurrentBag<string> targetInstanceIds = new ConcurrentBag<string>();
8182

8283
var result = await _trackingActionRepository.AddOrUpdate(sharedFileDefinition.SessionId, actionsGroupsIds!, (trackingAction, synchronization) =>
8384
{
@@ -87,15 +88,18 @@ public async Task OnUploadIsFinishedAsync(SharedFileDefinition sharedFileDefinit
8788
}
8889

8990
trackingAction.IsSourceSuccess = true;
90-
91-
targetInstanceIds.AddAll(trackingAction.TargetClientInstanceIds);
91+
92+
foreach (var targetClientInstanceId in trackingAction.TargetClientInstanceIds)
93+
{
94+
targetInstanceIds.Add(targetClientInstanceId);
95+
}
9296

9397
return new TrackingActionUpdateHandlerResult(true);
9498
});
9599

96100
if (result.IsSuccess)
97101
{
98-
await _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, totalParts, targetInstanceIds);
102+
await _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, totalParts, targetInstanceIds.ToList());
99103
}
100104
}
101105

tests/ByteSync.ServerCommon.Tests/Services/SynchronizationServiceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public async Task OnUploadIsFinishedAsync_WhenCheckSynchronizationSuccess_RunsNo
176176
A.CallTo(() => _synchronizationStatusCheckerService.CheckSynchronizationCanBeUpdated(synchronizationEntity))
177177
.Returns(true);
178178

179-
A.CallTo(() => _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, 1, A<HashSet<string>>.That.Contains("targetClientInstanceId")))
179+
A.CallTo(() => _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, 1, A<ICollection<string>>.That.Contains("targetClientInstanceId")))
180180
.Returns(Task.CompletedTask);
181181

182182
// Act
@@ -187,7 +187,7 @@ public async Task OnUploadIsFinishedAsync_WhenCheckSynchronizationSuccess_RunsNo
187187
.MustHaveHappenedOnceExactly();
188188
A.CallTo(() => _synchronizationStatusCheckerService.CheckSynchronizationCanBeUpdated(synchronizationEntity))
189189
.MustHaveHappenedOnceExactly();
190-
A.CallTo(() => _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, 1, A<HashSet<string>>.That.Contains("targetClientInstanceId")))
190+
A.CallTo(() => _synchronizationProgressService.UploadIsFinished(sharedFileDefinition, 1, A<ICollection<string>>.That.Contains("targetClientInstanceId")))
191191
.MustHaveHappenedOnceExactly();
192192
}
193193

0 commit comments

Comments
 (0)