Skip to content

Commit 54016f7

Browse files
committed
Fixed Identifier Concurrency Test
1 parent 25bf2bf commit 54016f7

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/CodeBeam.UltimateAuth.Core/Abstractions/Stores/InMemoryVersionedStore.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public Task<bool> ExistsAsync(TKey key, CancellationToken ct = default)
3333
return Task.FromResult(_store.ContainsKey(key));
3434
}
3535

36-
public Task AddAsync(TEntity entity, CancellationToken ct = default)
36+
public virtual Task AddAsync(TEntity entity, CancellationToken ct = default)
3737
{
3838
ct.ThrowIfCancellationRequested();
3939

@@ -48,7 +48,7 @@ public Task AddAsync(TEntity entity, CancellationToken ct = default)
4848
return Task.CompletedTask;
4949
}
5050

51-
public Task SaveAsync(TEntity entity, long expectedVersion, CancellationToken ct = default)
51+
public virtual Task SaveAsync(TEntity entity, long expectedVersion, CancellationToken ct = default)
5252
{
5353
ct.ThrowIfCancellationRequested();
5454

src/users/CodeBeam.UltimateAuth.Users.InMemory/Stores/InMemoryUserIdentifierStore.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace CodeBeam.UltimateAuth.Users.InMemory;
1111
public sealed class InMemoryUserIdentifierStore : InMemoryVersionedStore<UserIdentifier, Guid>, IUserIdentifierStore
1212
{
1313
protected override Guid GetKey(UserIdentifier entity) => entity.Id;
14+
private readonly object _primaryLock = new();
1415

1516
public Task<IdentifierExistenceResult> ExistsAsync(IdentifierExistenceQuery query, CancellationToken ct = default)
1617
{
@@ -100,6 +101,14 @@ protected override void BeforeAdd(UserIdentifier entity)
100101
}
101102
}
102103

104+
public override Task AddAsync(UserIdentifier entity, CancellationToken ct = default)
105+
{
106+
lock (_primaryLock)
107+
{
108+
return base.AddAsync(entity, ct);
109+
}
110+
}
111+
103112
protected override void BeforeSave(UserIdentifier entity, UserIdentifier current, long expectedVersion)
104113
{
105114
if (!entity.IsPrimary)
@@ -117,6 +126,14 @@ protected override void BeforeSave(UserIdentifier entity, UserIdentifier current
117126
}
118127
}
119128

129+
public override Task SaveAsync(UserIdentifier entity, long expectedVersion, CancellationToken ct = default)
130+
{
131+
lock (_primaryLock)
132+
{
133+
return base.SaveAsync(entity, expectedVersion, ct);
134+
}
135+
}
136+
120137
public Task<PagedResult<UserIdentifier>> QueryAsync(TenantKey tenant, UserIdentifierQuery query, CancellationToken ct = default)
121138
{
122139
ct.ThrowIfCancellationRequested();

0 commit comments

Comments
 (0)