Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
6480e6e
feat: improve server performances using CosmosClient
paul-fresquet Apr 19, 2025
addfc7d
refactor: remove EntityFramework
paul-fresquet Apr 19, 2025
2a1a106
feat: improve SetLocalInventoryStatusCommandHandler
paul-fresquet Apr 19, 2025
ec7603d
test: improve tests
paul-fresquet Apr 19, 2025
0772893
feat: add ttl (3 days) for ActionsGroupDefinitionEntity
paul-fresquet Apr 19, 2025
75d312f
feat: improve error management
paul-fresquet Apr 20, 2025
9d08234
feat: limit MultiUploadZip inner files
paul-fresquet Apr 20, 2025
e6b67e6
refactor: cleanup
paul-fresquet Apr 20, 2025
6d5ebb0
feat: add parameter to indicate if synchronizationEntity must be locked
paul-fresquet Apr 20, 2025
6d770c4
feat: improve SharedActionsGroupComputer perfs
paul-fresquet Apr 20, 2025
f45e227
feat: improve synchronization entity management
paul-fresquet Apr 20, 2025
1cfb63d
feat: synchronizationLooper is launched from a task (needed to avoid …
paul-fresquet Apr 20, 2025
9ef2175
feat: avoiding redis deadlocks
paul-fresquet Apr 20, 2025
85bf05b
feat: improvements
paul-fresquet Apr 20, 2025
44f22fa
feat: improvements, synchronizationStart is now sent to the initiator…
paul-fresquet Apr 21, 2025
9167f65
feat: improve tests
paul-fresquet Apr 21, 2025
779d899
feat: improvements
paul-fresquet Apr 21, 2025
4fa3d95
feat: remove azure cosmosdb
paul-fresquet Apr 22, 2025
406d6f1
feat: restore fake redlock
paul-fresquet Apr 22, 2025
888e30a
feat: improve error handling
paul-fresquet Apr 22, 2025
dc12dce
feat: restore redlock, improve lock management
paul-fresquet Apr 22, 2025
c6594e6
fix: fix concurrency on collection
paul-fresquet Apr 22, 2025
cce84d8
feat: improve callback
paul-fresquet Apr 22, 2025
0b073e5
feat: restore HashSet in UploadIsFinished
paul-fresquet Apr 22, 2025
ba38bb0
feat: improve AtomicActionRepository
paul-fresquet Apr 23, 2025
68ddc4c
refactor: cleanup & renamings
paul-fresquet Apr 23, 2025
39a9ea6
refactor: cleanup
paul-fresquet Apr 23, 2025
dba74d5
refactor: cleanup
paul-fresquet Apr 23, 2025
a0b18f4
refactor: cleanup
paul-fresquet Apr 23, 2025
5d75d58
refactor: decommission CosmosDb, cleanup
paul-fresquet Apr 23, 2025
a75ec2a
refactor: cleanup
paul-fresquet Apr 23, 2025
9931c24
refactor: cleanup
paul-fresquet Apr 23, 2025
b1ce4e6
refactor: cleanup
paul-fresquet Apr 23, 2025
da2c1cd
refactor: cleanup
paul-fresquet Apr 23, 2025
fa92753
feat: remove TrackingActionUpdateHandlerResult
paul-fresquet Apr 23, 2025
6fda3a9
refactor: cleanup
paul-fresquet Apr 23, 2025
7c99684
refactor: remove obsolete files
paul-fresquet Apr 23, 2025
61939fd
refactor: restore SynchronizationProgressEntity
paul-fresquet Apr 23, 2025
5b85c07
fkix: fix SynchronizationService
paul-fresquet Apr 23, 2025
47d41c1
refactor: cleanup
paul-fresquet Apr 23, 2025
4e6bff1
feat: improve multizip
paul-fresquet Apr 23, 2025
5980a18
fix & tests
paul-fresquet Apr 23, 2025
13175b6
feat: improvements (jwtmiddleware)
paul-fresquet Apr 23, 2025
c2d7cfc
feat: improvements
paul-fresquet Apr 23, 2025
8a51af6
feat: improve synchronization abort
paul-fresquet Apr 23, 2025
8cba847
refactor: cleanup
paul-fresquet Apr 23, 2025
46c002a
feat: improve loggin to debug
paul-fresquet Apr 24, 2025
906196f
feat: improve concurrency
paul-fresquet Apr 24, 2025
8c62479
feat: try improve ExchangedVolume management
paul-fresquet Apr 24, 2025
4f734ba
refactor: cleanup
paul-fresquet Apr 24, 2025
9d50905
refactor: cleanup
paul-fresquet Apr 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
Key = key;

SharedFileDefinition = sharedFileDefinition;
// ZipPath = zipPath;

SharedFileDefinition.IsMultiFileZip = true;
CreationDate = DateTime.Now;
Expand All @@ -21,8 +20,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
MemoryStream = new MemoryStream();

ZipArchive = new ZipArchive(MemoryStream, ZipArchiveMode.Create, true);

// ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update);

ActionGroupsIds = new List<string>();

Expand All @@ -35,8 +32,6 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)

public SharedFileDefinition SharedFileDefinition { get; }

// public string ZipPath { get; }

public MemoryStream MemoryStream { get; }

public ZipArchive ZipArchive { get; }
Expand All @@ -54,7 +49,7 @@ public MultiUploadZip(string key, SharedFileDefinition sharedFileDefinition)
public bool CanAdd(FileInfo fileInfo, string actionsGroupId)
{
return
ActionGroupsIds.Count < 1500 &&
ActionGroupsIds.Count < 100 &&
ActionsGroupIdsConcatenationLength + actionsGroupId.Length + 5 < 25000 &&
Size + fileInfo.Length < 8 * SizeConstants.ONE_MEGA_BYTES;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ public class GenericTypesModule : Module
protected override void Load(ContainerBuilder builder)
{
builder.RegisterGeneric(typeof(SessionInvalidationCachePolicy<,>))
.As(typeof(ISessionInvalidationSourceCachePolicy<,>))
.As(typeof(ISessionInvalidationCachePolicy<,>))
.InstancePerDependency();

builder.RegisterGeneric(typeof(PropertyIndexer<,>))
.As(typeof(IPropertyIndexer<,>))
.InstancePerDependency();

builder.RegisterType<ConfigurationReader<ApplicationSettings>>().As<IConfigurationReader<ApplicationSettings>>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace ByteSync.Interfaces.Controls.Communications.Http;

public interface ISynchronizationApiClient
{
public Task<Synchronization> StartSynchronization(SynchronizationStartRequest synchronizationStartRequest);
public Task StartSynchronization(SynchronizationStartRequest synchronizationStartRequest);

public Task AssertLocalCopyIsDone(string sessionId, List<string> actionsGroupIds);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace ByteSync.Interfaces.Controls.Synchronizations;

public interface ISynchronizationLooper
public interface ISynchronizationLooper : IAsyncDisposable
{
// Task InitializeData();

Task CloudSessionSynchronizationLoop();
}
12 changes: 12 additions & 0 deletions src/ByteSync.Client/Interfaces/Repositories/IPropertyIndexer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using DynamicData;

namespace ByteSync.Interfaces.Repositories;

public interface IPropertyIndexer<TObject, in TIndex>
where TObject : notnull
where TIndex : notnull
{
void Initialize(SourceCache<TObject, string> sourceCache, Func<TObject, TIndex> indexSelector);

List<TObject> GetByIndex(TIndex index);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace ByteSync.Interfaces.Repositories;

public interface ISessionInvalidationSourceCachePolicy<TObject, TKey> : IDisposable where TKey : notnull
public interface ISessionInvalidationCachePolicy<TObject, TKey> : IDisposable
where TKey : notnull
where TObject : notnull
{
void Initialize(SourceCache<TObject, TKey> sourceCache, bool b, bool b1);
}
23 changes: 12 additions & 11 deletions src/ByteSync.Client/Repositories/AtomicActionRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@ namespace ByteSync.Repositories;

public class AtomicActionRepository : BaseSourceCacheRepository<AtomicAction, string>, IAtomicActionRepository
{
private readonly ISessionInvalidationSourceCachePolicy<AtomicAction, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<AtomicAction, string> _sessionInvalidationCachePolicy;
private readonly IPropertyIndexer<AtomicAction, ComparisonItem> _propertyIndexer;

public AtomicActionRepository(ISessionInvalidationSourceCachePolicy<AtomicAction, string> sessionInvalidationSourceCachePolicy)
public AtomicActionRepository(ISessionInvalidationCachePolicy<AtomicAction, string> sessionInvalidationCachePolicy,
IPropertyIndexer<AtomicAction, ComparisonItem> propertyIndexer)
{
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);

_propertyIndexer = propertyIndexer;
_propertyIndexer.Initialize(SourceCache, atomicAction => atomicAction.ComparisonItem!);
}

protected override string KeySelector(AtomicAction atomicAction) => atomicAction.AtomicActionId;

public List<AtomicAction> GetAtomicActions(ComparisonItem comparisonItem)
{
var result = SourceCache.Items
.Where(atomicAction => Equals(atomicAction.ComparisonItem, comparisonItem))
.ToList();

return result;
return _propertyIndexer.GetByIndex(comparisonItem);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace ByteSync.Repositories;

public abstract class BaseSourceCacheRepository<TObject, TKey> : IBaseSourceCacheRepository<TObject, TKey>
where TKey : notnull
where TKey : notnull where TObject : notnull
{
protected BaseSourceCacheRepository()
{
Expand Down
8 changes: 4 additions & 4 deletions src/ByteSync.Client/Repositories/InventoryFileRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ namespace ByteSync.Repositories;

public class InventoryFileRepository : BaseSourceCacheRepository<InventoryFile, string>, IInventoryFileRepository
{
private readonly ISessionInvalidationSourceCachePolicy<InventoryFile, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<InventoryFile, string> _sessionInvalidationCachePolicy;

public InventoryFileRepository(ISessionInvalidationSourceCachePolicy<InventoryFile, string> sessionInvalidationSourceCachePolicy)
public InventoryFileRepository(ISessionInvalidationCachePolicy<InventoryFile, string> sessionInvalidationCachePolicy)
{
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
}

protected override string KeySelector(InventoryFile inventoryFile) => inventoryFile.FullName;
Expand Down
8 changes: 4 additions & 4 deletions src/ByteSync.Client/Repositories/PathItemRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ namespace ByteSync.Repositories;

public class PathItemRepository : BaseSourceCacheRepository<PathItem, string>, IPathItemRepository
{
private readonly ISessionInvalidationSourceCachePolicy<PathItem, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<PathItem, string> _sessionInvalidationCachePolicy;

public PathItemRepository(IEnvironmentService environmentService, ISessionInvalidationSourceCachePolicy<PathItem, string> sessionInvalidationSourceCachePolicy)
public PathItemRepository(IEnvironmentService environmentService, ISessionInvalidationCachePolicy<PathItem, string> sessionInvalidationCachePolicy)
{
CurrentMemberPathItems = SourceCache
.Connect()
.Filter(pathItem => Equals(pathItem.ClientInstanceId, environmentService.ClientInstanceId!))
.AsObservableCache();

_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, false);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, false);
}

protected override string KeySelector(PathItem pathItem) => pathItem.Key;
Expand Down
80 changes: 80 additions & 0 deletions src/ByteSync.Client/Repositories/PropertyIndexer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using ByteSync.Interfaces.Repositories;
using DynamicData;

namespace ByteSync.Repositories;

public class PropertyIndexer<TObject, TIndex> : IPropertyIndexer<TObject, TIndex>
where TObject : notnull
where TIndex : notnull
{
private Func<TObject, TIndex> _indexSelector;
private readonly Dictionary<TIndex, List<TObject>> _cache = new();

public void Initialize(SourceCache<TObject, string> sourceCache, Func<TObject, TIndex> indexSelector)
{
_indexSelector = indexSelector;

// Initializing the cache with existing objects
foreach (var obj in sourceCache.Items)
{
Update(obj);
}

// Synchronization with SourceCache
sourceCache.Connect()
.Subscribe(changes =>
{
foreach (var change in changes)
{
switch (change.Reason)
{
case ChangeReason.Add:
case ChangeReason.Update:
Update(change.Current);
break;
case ChangeReason.Remove:
Remove(change.Current);
break;
}
}
});
}

public void Update(TObject obj)
{
var index = _indexSelector(obj);

if (!_cache.TryGetValue(index, out var objects))
{
objects = new List<TObject>();
_cache[index] = objects;
}

var existingObject = objects.FirstOrDefault(o => o.Equals(obj));
if (existingObject != null)
{
objects.Remove(existingObject);
}

objects.Add(obj);
}

public void Remove(TObject obj)
{
var index = _indexSelector(obj);

if (_cache.TryGetValue(index, out var objects))
{
objects.RemoveAll(o => o.Equals(obj));
if (objects.Count == 0)
{
_cache.Remove(index);
}
}
}

public List<TObject> GetByIndex(TIndex index)
{
return _cache.TryGetValue(index, out var objects) ? objects : new List<TObject>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

namespace ByteSync.Repositories;

public class SessionInvalidationCachePolicy<TObject, TKey> : ISessionInvalidationSourceCachePolicy<TObject, TKey> where TKey : notnull
public class SessionInvalidationCachePolicy<TObject, TKey> : ISessionInvalidationCachePolicy<TObject, TKey>
where TKey : notnull
where TObject : notnull
{
private readonly ISessionService _sessionService;
private IDisposable? _sessionSubscription;
Expand Down
8 changes: 4 additions & 4 deletions src/ByteSync.Client/Repositories/SessionMemberRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ public class SessionMemberRepository : BaseSourceCacheRepository<SessionMemberIn
private readonly IConnectionService _connectionService;
private readonly ReadOnlyObservableCollection<SessionMemberInfo> _sortedSessionMembersList;
private readonly ReadOnlyObservableCollection<SessionMemberInfo> _sortedOtherSessionMembersList;
private readonly ISessionInvalidationSourceCachePolicy<SessionMemberInfo, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<SessionMemberInfo, string> _sessionInvalidationCachePolicy;

public SessionMemberRepository(IConnectionService connectionService,
ISessionInvalidationSourceCachePolicy<SessionMemberInfo, string> sessionInvalidationSourceCachePolicy)
ISessionInvalidationCachePolicy<SessionMemberInfo, string> sessionInvalidationCachePolicy)
{
_connectionService = connectionService;

Expand All @@ -34,8 +34,8 @@ public SessionMemberRepository(IConnectionService connectionService,
IsCurrentUserFirstSessionMemberObservable
.Subscribe(value => IsCurrentUserFirstSessionMemberCurrentValue = value);

_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, false);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, false);
}

protected override string KeySelector(SessionMemberInfo sessionMemberInfo) => sessionMemberInfo.ClientInstanceId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ namespace ByteSync.Repositories;

public class SharedActionsGroupRepository : BaseSourceCacheRepository<SharedActionsGroup, string>, ISharedActionsGroupRepository
{
private readonly ISessionInvalidationSourceCachePolicy<SharedActionsGroup, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<SharedActionsGroup, string> _sessionInvalidationCachePolicy;

public SharedActionsGroupRepository(ISessionInvalidationSourceCachePolicy<SharedActionsGroup, string> sessionInvalidationSourceCachePolicy)
public SharedActionsGroupRepository(ISessionInvalidationCachePolicy<SharedActionsGroup, string> sessionInvalidationCachePolicy)
{
OrganizedSharedActionsGroups = new List<SharedActionsGroup>();

_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
}

protected override string KeySelector(SharedActionsGroup sharedAtomicAction) => sharedAtomicAction.ActionsGroupId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ namespace ByteSync.Repositories;

public class SharedAtomicActionRepository : BaseSourceCacheRepository<SharedAtomicAction, string>, ISharedAtomicActionRepository
{
private readonly ISessionInvalidationSourceCachePolicy<SharedAtomicAction, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<SharedAtomicAction, string> _sessionInvalidationCachePolicy;

public SharedAtomicActionRepository(ISessionInvalidationSourceCachePolicy<SharedAtomicAction, string> sessionInvalidationSourceCachePolicy)
public SharedAtomicActionRepository(ISessionInvalidationCachePolicy<SharedAtomicAction, string> sessionInvalidationCachePolicy)
{
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
}

protected override string KeySelector(SharedAtomicAction sharedAtomicAction) => sharedAtomicAction.AtomicActionId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ namespace ByteSync.Repositories;

public class SynchronizationRuleRepository : BaseSourceCacheRepository<SynchronizationRule, string>, ISynchronizationRuleRepository
{
private readonly ISessionInvalidationSourceCachePolicy<SynchronizationRule, string> _sessionInvalidationSourceCachePolicy;
private readonly ISessionInvalidationCachePolicy<SynchronizationRule, string> _sessionInvalidationCachePolicy;

public SynchronizationRuleRepository(ISessionInvalidationSourceCachePolicy<SynchronizationRule, string> sessionInvalidationSourceCachePolicy)
public SynchronizationRuleRepository(ISessionInvalidationCachePolicy<SynchronizationRule, string> sessionInvalidationCachePolicy)
{
_sessionInvalidationSourceCachePolicy = sessionInvalidationSourceCachePolicy;
_sessionInvalidationSourceCachePolicy.Initialize(SourceCache, true, true);
_sessionInvalidationCachePolicy = sessionInvalidationCachePolicy;
_sessionInvalidationCachePolicy.Initialize(SourceCache, true, true);
}

protected override string KeySelector(SynchronizationRule synchronizationRule) => synchronizationRule.SynchronizationRuleId;
Expand Down
Loading