Skip to content

Commit 793534c

Browse files
committed
Merge branch 'release/15.4' into v15/dev
# Conflicts: # version.json
2 parents 10518ed + 15a8b40 commit 793534c

File tree

4 files changed

+22
-10
lines changed

4 files changed

+22
-10
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
4646
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
4747
<PackageVersion Include="Dazinator.Extensions.FileProviders" Version="2.0.0" />
48-
<PackageVersion Include="Examine" Version="3.7.0" />
49-
<PackageVersion Include="Examine.Core" Version="3.7.0" />
48+
<PackageVersion Include="Examine" Version="3.7.1" />
49+
<PackageVersion Include="Examine.Core" Version="3.7.1" />
5050
<PackageVersion Include="HtmlAgilityPack" Version="1.11.74" />
5151
<PackageVersion Include="JsonPatch.Net" Version="3.1.1" />
5252
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
@@ -100,4 +100,4 @@
100100
<!-- Examine.Lucene brings in a vulnerable version of Lucene.Net.Replicator -->
101101
<PackageVersion Include="Lucene.Net.Replicator" Version="4.8.0-beta00017" />
102102
</ItemGroup>
103-
</Project>
103+
</Project>

src/Umbraco.Core/Cache/CacheKeys.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,6 @@ public static class CacheKeys
2222

2323
public const string PreviewPropertyCacheKeyPrefix = "Cache.Property.CacheValues[D:";
2424
public const string PropertyCacheKeyPrefix = "Cache.Property.CacheValues[P:";
25+
26+
public const string MemberUserNameCachePrefix = "uRepo_userNameKey+";
2527
}

src/Umbraco.Core/Cache/Refreshers/Implement/MemberCacheRefresher.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,22 @@ private void ClearCache(params JsonPayload[] payloads)
7171
foreach (JsonPayload p in payloads)
7272
{
7373
_idKeyMap.ClearCache(p.Id);
74-
if (memberCache.Success)
74+
if (memberCache.Success is false)
7575
{
76-
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, int>(p.Id));
77-
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(p.Username));
76+
continue;
7877
}
78+
79+
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, int>(p.Id));
80+
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(p.Username));
81+
82+
// This specific cache key was introduced to fix an issue where the member username could not be the same as the member id, because the cache keys collided.
83+
// This is done in a bit of a hacky way, because the cache key is created internally in the repository, but we need to clear it here.
84+
// Ideally, we want to use a shared way of generating the key between this and the repository.
85+
// Additionally, the RepositoryCacheKeys actually caches the string to avoid re-allocating memory; we would like to also use this in the repository
86+
// See:
87+
// https://github.com/umbraco/Umbraco-CMS/pull/17350
88+
// https://github.com/umbraco/Umbraco-CMS/pull/17815
89+
memberCache.Result?.Clear(RepositoryCacheKeys.GetKey<IMember, string>(CacheKeys.MemberUserNameCachePrefix + p.Username));
7990
}
8091
}
8192
}

src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MemberRepository.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public class MemberRepository : ContentRepositoryBase<int, IMember, MemberReposi
3939
private readonly ITagRepository _tagRepository;
4040
private bool _passwordConfigInitialized;
4141
private string? _passwordConfigJson;
42-
private const string UsernameCacheKey = "uRepo_userNameKey+";
4342

4443
public MemberRepository(
4544
IScopeAccessor scopeAccessor,
@@ -327,7 +326,7 @@ public override IEnumerable<IMember> GetPage(
327326
}
328327

329328
public IMember? GetByUsername(string? username) =>
330-
_memberByUsernameCachePolicy.GetByUserName(UsernameCacheKey, username, PerformGetByUsername, PerformGetAllByUsername);
329+
_memberByUsernameCachePolicy.GetByUserName(CacheKeys.MemberUserNameCachePrefix, username, PerformGetByUsername, PerformGetAllByUsername);
331330

332331
public int[] GetMemberIds(string[] usernames)
333332
{
@@ -609,7 +608,7 @@ protected virtual Sql<ISqlContext> GetBaseQuery(QueryType queryType, bool curren
609608

610609
protected override void PersistDeletedItem(IMember entity)
611610
{
612-
_memberByUsernameCachePolicy.DeleteByUserName(UsernameCacheKey, entity.Username);
611+
_memberByUsernameCachePolicy.DeleteByUserName(CacheKeys.MemberUserNameCachePrefix, entity.Username);
613612
base.PersistDeletedItem(entity);
614613
}
615614

@@ -943,7 +942,7 @@ protected override void PersistUpdatedItem(IMember entity)
943942

944943
OnUowRefreshedEntity(new MemberRefreshNotification(entity, new EventMessages()));
945944

946-
_memberByUsernameCachePolicy.DeleteByUserName(UsernameCacheKey, entity.Username);
945+
_memberByUsernameCachePolicy.DeleteByUserName(CacheKeys.MemberUserNameCachePrefix, entity.Username);
947946

948947
entity.ResetDirtyProperties();
949948
}

0 commit comments

Comments
 (0)