Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
174 commits
Select commit Hold shift + click to select a range
9bfdcf2
Update to dotnet 9 and update nuget packages
Zeegaan Jun 19, 2024
f6770a9
Update umbraco code version
Zeegaan Jun 19, 2024
38a5d22
Update Directory.Build.props
Zeegaan Jun 24, 2024
07b2fd4
Include preview version in pipeline
Zeegaan Jun 24, 2024
b317b08
update template projects
Zeegaan Jun 24, 2024
53be525
update global json with specific version
Zeegaan Jun 24, 2024
9bf9e89
Update version.json to v15
Zeegaan Jun 24, 2024
749aed0
Rename TrimStart and TrimEnd to string specific
Zeegaan Jun 24, 2024
f599a17
Rename to Exact
Zeegaan Jun 25, 2024
d14e355
Update global.json
Zeegaan Jun 26, 2024
8075adb
Remove includePreviewVersion
Zeegaan Jun 26, 2024
9636433
Merge remote-tracking branch 'origin/v15/feature/update-to-dotnet-9' …
Zeegaan Jun 26, 2024
c84137e
Rename to trim exact
Zeegaan Jun 26, 2024
84c6a7c
Add new Hybridcache project
Zeegaan Jun 27, 2024
4487421
Add tests
Zeegaan Jun 27, 2024
2a7b813
Start implementing PublishedContent.cs
Zeegaan Jun 28, 2024
737348a
Implement repository for content
Zeegaan Jun 28, 2024
972f452
Refactor to use async everywhere
Zeegaan Jul 4, 2024
5770a39
Add cache refresher
Zeegaan Jul 4, 2024
9c2b836
make public as needed for serialization
Zeegaan Jul 4, 2024
437497f
Use content type cache to get content type out
Zeegaan Jul 5, 2024
1c035c0
Refactor to use ContentCacheNode model, that goes in the memory cache
Zeegaan Jul 5, 2024
661bb32
Remove content node kit as its not needed
Zeegaan Jul 5, 2024
1002a5d
Implement tests for ensuring caching
Zeegaan Jul 8, 2024
22c68ff
Implement better asserts
Zeegaan Jul 9, 2024
65e596d
Implement published property
Zeegaan Jul 9, 2024
04dbde3
Refactor to use mapping
Zeegaan Jul 9, 2024
0c7a7e2
Rename to document tests
Zeegaan Jul 9, 2024
42b427e
Update to test properties
Zeegaan Jul 9, 2024
a75c463
Create more tests
Zeegaan Jul 10, 2024
acb745a
Refactor mock tests into own file
Zeegaan Jul 10, 2024
0465971
Update property test
Zeegaan Jul 10, 2024
8233de8
Fix published version of content
Zeegaan Jul 10, 2024
f87181a
Change default cache level to elements
Zeegaan Jul 10, 2024
b82eb60
Refactor to always have draft
Zeegaan Jul 10, 2024
fa15a2e
Refactor to not use PublishedModelFactory
Zeegaan Jul 10, 2024
7149fd8
Added tests
andr317c Jul 10, 2024
a5bb8ae
Added and updated tests
andr317c Jul 10, 2024
4d10def
Fixed tests
andr317c Jul 11, 2024
5a7d435
Don't return empty object with id
Zeegaan Jul 11, 2024
4a73539
More tests
andr317c Jul 11, 2024
a7203f8
Added key
andr317c Jul 11, 2024
7c6b5e1
Another key
andr317c Jul 11, 2024
4151d9f
Refactor CacheService to be responsible for using the hybrid cache
Zeegaan Jul 12, 2024
08bdb8e
Use notification handler to remove deleted content from cache
Zeegaan Jul 12, 2024
26b209f
Add more tests for missing functions
Zeegaan Jul 12, 2024
55341f7
Implement missing methods
Zeegaan Jul 12, 2024
4750985
Remove HasContent as it pertains to routing
Zeegaan Jul 15, 2024
c3c017e
Fik up test
Zeegaan Jul 15, 2024
895e324
formatting
Zeegaan Jul 15, 2024
f9e5276
refactor variable names
Zeegaan Jul 15, 2024
4191c3a
Implement variant tests
Zeegaan Jul 15, 2024
b714596
Map all the published content properties
Zeegaan Jul 15, 2024
197c2ca
Get item out of cache first, to assert updated
Zeegaan Jul 16, 2024
dc22674
Implement member cache
Zeegaan Jul 16, 2024
0c9dad6
Add member test
Zeegaan Jul 16, 2024
4c941bb
Implement media cache
Zeegaan Jul 16, 2024
f03485a
Implement property tests for media tests
Zeegaan Jul 17, 2024
387628c
Refactor tests to use extension method
Zeegaan Jul 17, 2024
7ed8c94
Add more media tests
Zeegaan Jul 17, 2024
1dfd5a7
Refactor properties to no longer have element caching
Zeegaan Jul 18, 2024
6b2b978
Don't use property cache level
Zeegaan Jul 18, 2024
9eab933
Start implementing seeding
Zeegaan Jul 22, 2024
97c7d08
Only seed when main
Zeegaan Jul 22, 2024
33483e6
Add Immutable for performance
Zeegaan Jul 22, 2024
47b6e88
Implement permanent seeding of content
Zeegaan Jul 22, 2024
acae74c
Implement cache settings
Zeegaan Jul 22, 2024
b64ade1
Implement tests for seeding
Zeegaan Jul 22, 2024
632f0ce
Update package version
Zeegaan Jul 23, 2024
905790e
start refactoring nurepo
Zeegaan Jul 25, 2024
026b88b
Merge remote-tracking branch 'origin/v15/feature/hybrid-caching' into…
Zeegaan Jul 25, 2024
61ce2cf
Refactor so draft & published nodes are cached individually
Zeegaan Jul 25, 2024
c2b7879
Refactor RefreshContent to take node instead of IContent
Zeegaan Jul 25, 2024
ab2fce3
Refactor media to also use cache nodes
Zeegaan Jul 26, 2024
fab1df8
Remove member from repo as it isn't cached
Zeegaan Jul 26, 2024
1bb1601
Refactor media to not include preview, as media has no draft
Zeegaan Jul 26, 2024
617ebf0
create new benchmark project
Zeegaan Aug 2, 2024
56dd31c
POC Integration benchmarks with custom api controllers
Migaroez Aug 2, 2024
3b3de87
Merge branch 'v14/dev' into v15/feature/hybrid-caching
Zeegaan Aug 7, 2024
8eef9ce
Start implementing content picker tests
Zeegaan Aug 14, 2024
4807241
Implement domain cache
Zeegaan Aug 15, 2024
6788066
Rework content cache to implement interface
Zeegaan Aug 15, 2024
6b98d8f
Start implementing elements cache
Zeegaan Aug 15, 2024
f12eb47
Implement published snapshot service
Zeegaan Aug 15, 2024
8152c19
Publish snapshot tests
Zeegaan Aug 15, 2024
2bc59e3
Use snapshot for elements cache
Zeegaan Aug 19, 2024
ea93843
Create test proving we don't clear cache when updating content picker
Zeegaan Aug 19, 2024
e7c86cc
Clear entire elements cache
Zeegaan Aug 19, 2024
b3aa4d3
Remove properties from element cache, when content gets updated.
Zeegaan Aug 20, 2024
4b34ac5
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/hybrid…
Zeegaan Aug 21, 2024
69e0324
Rename methods to async
Zeegaan Aug 21, 2024
06d71b4
Refactor to use old cache interfaces instead of new ones
Zeegaan Aug 21, 2024
4b4ff31
Remove snapshot, as it is no longer needed
Zeegaan Aug 21, 2024
27b1202
Fix tests building
Zeegaan Aug 21, 2024
0fe3ed5
Refactor domaincache to not have snapshots
Zeegaan Aug 22, 2024
640b9be
Delete benchmarks
Zeegaan Aug 22, 2024
824a530
Delete benchmarks
Zeegaan Aug 22, 2024
513d08a
Merge remote-tracking branch 'origin/v15/feature/hybrid-caching' into…
Zeegaan Aug 22, 2024
dfaf285
Add HybridCacheProject to Umbraco
Zeegaan Aug 22, 2024
6630b7d
Add comment to route value transformer
Zeegaan Aug 22, 2024
89cb8ff
Implement is draft
Zeegaan Aug 22, 2024
b2bd81a
remove snapshot from property
Zeegaan Aug 22, 2024
0e9067d
V15 updated the hybrid caching integration tests to use ContentEditin…
andr317c Aug 22, 2024
5d373ce
Merge remote-tracking branch 'origin/v15/feature/hybrid-caching' into…
Zeegaan Aug 22, 2024
9e5eed3
Remove entries from cache on delete
Zeegaan Aug 22, 2024
eeb8863
Fix up seeding logic
Zeegaan Aug 22, 2024
9510e03
Don't register hybrid cache twice
Zeegaan Aug 23, 2024
0fe27e2
Change seeded entry options
Zeegaan Aug 23, 2024
2573115
Update hybrid cache package
Zeegaan Aug 23, 2024
0fbd157
Fix up published property to work with delivery api again
Zeegaan Aug 24, 2024
a2c1fc4
Fix dependency injection to work with tests
Zeegaan Aug 26, 2024
d5dd217
Fix naming
nikolajlauridsen Aug 26, 2024
182c17a
Dont make caches nullable
Zeegaan Aug 27, 2024
ceb74b7
Make content node sealed
Zeegaan Aug 27, 2024
e62f24a
Remove path and other unused from content node
Zeegaan Aug 27, 2024
81134ad
Remove hacky 2 phase ctor
Zeegaan Aug 27, 2024
3ae0595
Refactor to actually set content templates
Zeegaan Aug 27, 2024
6d4a20f
Remove umbraco context
Zeegaan Aug 27, 2024
e9e3023
Remove "HasBy" methods
Zeegaan Aug 27, 2024
cdfe257
rename property data
Zeegaan Aug 27, 2024
d370f99
Delete obsolete legacy stuff
Zeegaan Aug 27, 2024
c03dfb6
Add todo for making expiration configurable
Zeegaan Aug 27, 2024
73ace33
Add todo in UmbracoContext
Zeegaan Aug 27, 2024
d881eec
Add clarifying comment in content factory
Zeegaan Aug 27, 2024
8f275ec
Remove xml stuff from published property
Zeegaan Aug 27, 2024
32e749d
Fix according to review
Zeegaan Aug 27, 2024
6af5487
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/hybrid…
Zeegaan Aug 27, 2024
5851239
Make content type cache injectible
Zeegaan Aug 27, 2024
8f68e09
Make content type cache injectible
Zeegaan Aug 27, 2024
6e2d817
Merge branch 'v15/feature/hybrid-caching' of https://github.com/umbra…
Zeegaan Aug 27, 2024
202dee5
Rename to database cache repository
Zeegaan Aug 27, 2024
86f4be2
Rename to document cache
Zeegaan Aug 27, 2024
df9d221
Add TODO
nikolajlauridsen Aug 28, 2024
e8a2c57
Refactor to async
Zeegaan Aug 28, 2024
3705855
Merge remote-tracking branch 'origin/v15/feature/hybrid-caching' into…
Zeegaan Aug 28, 2024
ea39b43
Rename to async
Zeegaan Aug 28, 2024
065979c
Make everything async
Zeegaan Aug 28, 2024
df9f3c2
Remove duplicate line from json schema
Zeegaan Aug 28, 2024
ce732f2
Move Hybrid cache project
Zeegaan Aug 28, 2024
6a00a53
Remove leftover file
nikolajlauridsen Aug 28, 2024
1d65aeb
Refactor to use keys
Zeegaan Aug 28, 2024
184c19a
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/hybrid…
Zeegaan Aug 28, 2024
9c2350b
Refactor published content to no longer have content data, as it is o…
Zeegaan Aug 28, 2024
59f7257
Refactor to member to use proper content node ctor
Zeegaan Aug 28, 2024
9830e23
Move tests to own folder
Zeegaan Aug 28, 2024
8a675d9
Add immutable objects to property and content data for performance
Zeegaan Aug 28, 2024
63cf4fd
Make property data public
Zeegaan Aug 28, 2024
bbd7300
Fix member caching to be singleton
Zeegaan Aug 28, 2024
2cd7ad3
Obsolete GetContentType
Zeegaan Aug 28, 2024
b59e56a
Remove todo
Zeegaan Aug 28, 2024
c941b29
Fix naming
Zeegaan Aug 28, 2024
38e337a
Fix lots of exposed errors due to scope test
Zeegaan Aug 28, 2024
101e253
Add final scope tests
Zeegaan Aug 28, 2024
38d6b11
Rename to document cache service
Zeegaan Aug 29, 2024
86a5a64
Rename test files
Zeegaan Aug 30, 2024
e45fa10
Create new doc type tests
Zeegaan Aug 30, 2024
1ad0b68
Add ignore to tests
Zeegaan Aug 30, 2024
01d48bd
Merge remote-tracking branch 'origin/v15/dev' into v15/feature/hybrid…
Zeegaan Aug 30, 2024
af4f2de
Start implementing refresh for content type save
Zeegaan Aug 30, 2024
bfae478
Clear contenttype cache when contenttype is updated
nikolajlauridsen Sep 3, 2024
73d0523
Fix test
nikolajlauridsen Sep 3, 2024
f90c8f4
Use init for ContentSourceDto
nikolajlauridsen Sep 4, 2024
d925f52
Fix get by key in PublishedContentTypeCache
nikolajlauridsen Sep 4, 2024
d06de4d
Remove ContentType from PublishedContentTypeCache when contenttype is…
nikolajlauridsen Sep 4, 2024
4b5a1e6
Merge remote-tracking branch 'refs/remotes/origin/v15/dev' into v15/f…
nikolajlauridsen Sep 6, 2024
59cee80
Update to preview 7
nikolajlauridsen Sep 6, 2024
cc1f71a
Fix versions
nikolajlauridsen Sep 6, 2024
9b59fc4
Increase timeout for sqlite integration tests
nikolajlauridsen Sep 6, 2024
036ad8c
Undo timeout increase
nikolajlauridsen Sep 9, 2024
794e014
Try and undo init change to ContentSourceDto
nikolajlauridsen Sep 9, 2024
6c1cce9
That wasn't it chief
nikolajlauridsen Sep 9, 2024
682c68d
Try and make DomainAndUrlsTests non NonParallelizable
nikolajlauridsen Sep 9, 2024
0d9c9b5
Update versions
nikolajlauridsen Sep 9, 2024
b633e4e
Only run cache tests on linux for now
nikolajlauridsen Sep 9, 2024
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
42 changes: 22 additions & 20 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,29 @@
</ItemGroup>
<!-- Microsoft packages -->
<ItemGroup>
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="9.0.0-preview.5.24306.11" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="9.0.0-preview.7.24406.2" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.0-preview.5.24306.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0-preview.5.24306.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0-preview.5.24306.3" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="9.0.0-preview.7.24405.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0-preview.7.24405.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0-preview.7.24405.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6" />
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="9.0.0-preview.5.24306.11" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="9.0.0-preview.5.24306.11" />
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="9.0.0-preview.5.24306.11" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.SqlServer" Version="9.0.0-preview.7.24406.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="9.0.0-preview.7.24406.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="9.0.0-preview.7.24405.7"/>
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="9.0.0-preview.7.24406.2" />
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="9.0.0-preview.7.24406.2" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="9.0.0-preview.7.24405.7" />
<PackageVersion Include="Microsoft.Extensions.Caching.Hybrid" Version="9.0.0-preview.7.24406.2" />
</ItemGroup>
<!-- Umbraco packages -->
<ItemGroup>
Expand Down Expand Up @@ -83,7 +85,7 @@
<!-- Dazinator.Extensions.FileProviders brings in a vulnerable version of System.Net.Http -->
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<!-- Examine brings in a vulnerable version of System.Security.Cryptography.Xml -->
<PackageVersion Include="System.Security.Cryptography.Xml" Version="9.0.0-preview.5.24306.7" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="9.0.0-preview.7.24405.7" />
<!-- Both Dazinator.Extensions.FileProviders and MiniProfiler.AspNetCore.Mvc bring in a vulnerable version of System.Text.RegularExpressions -->
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
<!-- Both OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer bring in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "9.0.100-preview.5.24307.3",
"version": "9.0.100-preview.7.24407.12",
"rollForward": "latestFeature",
"allowPrerelease": true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public static IUmbracoBuilder
.AddWebServer()
.AddRecurringBackgroundJobs()
.AddNuCache()
.AddUmbracoHybridCache()
.AddDistributedCache()
.AddCoreNotifications()
.AddExamine()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Umbraco.PublishedCache.HybridCache\Umbraco.PublishedCache.HybridCache.csproj" />
<ProjectReference Include="..\Umbraco.Cms.Api.Common\Umbraco.Cms.Api.Common.csproj" />
<ProjectReference Include="..\Umbraco.Infrastructure\Umbraco.Infrastructure.csproj" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ public DomainCacheRefresher(
IPublishedSnapshotService publishedSnapshotService,
IEventAggregator eventAggregator,
ICacheRefresherNotificationFactory factory)
: base(appCaches, serializer, eventAggregator, factory) =>
: base(appCaches, serializer, eventAggregator, factory)
{
_publishedSnapshotService = publishedSnapshotService;
}

#region Json

Expand Down
1 change: 1 addition & 0 deletions src/Umbraco.Core/Constants-Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public static class Configuration
public const string ConfigDataTypes = ConfigPrefix + "DataTypes";
public const string ConfigPackageManifests = ConfigPrefix + "PackageManifests";
public const string ConfigWebhook = ConfigPrefix + "Webhook";
public const string ConfigCache = ConfigPrefix + "Cache";

public static class NamedOptions
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Configuration.Models.Validation;
using Umbraco.Extensions;
using Umbraco.Cms.Core.Models;

namespace Umbraco.Cms.Core.DependencyInjection;

Expand Down Expand Up @@ -85,7 +85,8 @@ public static IUmbracoBuilder AddConfiguration(this IUmbracoBuilder builder)
.AddUmbracoOptions<ContentDashboardSettings>()
.AddUmbracoOptions<HelpPageSettings>()
.AddUmbracoOptions<DataTypesSettings>()
.AddUmbracoOptions<WebhookSettings>();
.AddUmbracoOptions<WebhookSettings>()
.AddUmbracoOptions<CacheSettings>();

// Configure connection string and ensure it's updated when the configuration changes
builder.Services.AddSingleton<IConfigureOptions<ConnectionStrings>, ConfigureConnectionStrings>();
Expand Down
13 changes: 13 additions & 0 deletions src/Umbraco.Core/Models/CacheSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Umbraco.Cms.Core.Configuration.Models;

namespace Umbraco.Cms.Core.Models;

[UmbracoOptions(Constants.Configuration.ConfigCache)]
public class CacheSettings
{
/// <summary>
/// Gets or sets a value for the collection of content type ids to always have in the cache.
/// </summary>
public List<Guid> ContentTypeKeys { get; set; } =
new();
}
22 changes: 22 additions & 0 deletions src/Umbraco.Core/Models/PublishedContent/IPublishedMember.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
namespace Umbraco.Cms.Core.Models.PublishedContent;

public interface IPublishedMember : IPublishedContent
{
public string Email { get; }

public string UserName { get; }

public string? Comments { get; }

public bool IsApproved { get; }

public bool IsLockedOut { get; }

public DateTime? LastLockoutDate { get; }

public DateTime CreationDate { get; }

public DateTime? LastLoginDate { get; }

public DateTime? LastPasswordChangedDate { get; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public interface IPublishedMemberCache
/// </summary>
/// <param name="member"></param>
/// <returns></returns>
IPublishedContent? Get(IMember member);
IPublishedMember? Get(IMember member);

/// <summary>
/// Gets a content type identified by its unique identifier.
Expand All @@ -26,4 +26,12 @@ public interface IPublishedMemberCache
/// <returns>The content type, or null.</returns>
/// <remarks>The alias is case-insensitive.</remarks>
IPublishedContentType GetContentType(string alias);

/// <summary>
/// Get an <see cref="IPublishedContent" /> from an <see cref="IMember" />
/// </summary>
/// <param name="key">The key of the member to fetch</param>
/// <param name="preview">Will fetch draft if this is set to true</param>
/// <returns></returns>
Task<IPublishedMember?> GetAsync(IMember member);
}
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ private void InitializeLocked()

var deliveryApiPropertyValueConverter = _converter as IDeliveryApiPropertyValueConverter;

_cacheLevel = _converter?.GetPropertyCacheLevel(this) ?? PropertyCacheLevel.Snapshot;
_cacheLevel = _converter?.GetPropertyCacheLevel(this) ?? PropertyCacheLevel.Elements;
_deliveryApiCacheLevel = deliveryApiPropertyValueConverter?.GetDeliveryApiPropertyCacheLevel(this) ?? _cacheLevel;
_deliveryApiCacheLevelForExpansion = deliveryApiPropertyValueConverter?.GetDeliveryApiPropertyCacheLevelForExpansion(this) ?? _cacheLevel;
_modelClrType = _converter?.GetPropertyValueType(this) ?? typeof(object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public IEnumerable<UmbracoEntityReference> GetReferences(object? value)
// starting in v14 the passed in value is always a guid, we store it as a document Udi string. Else it's an invalid value
public override object? FromEditor(ContentPropertyData editorValue, object? currentValue) =>
editorValue.Value is not null
&& Guid.TryParse(editorValue.Value as string, out Guid guidValue)
&& Guid.TryParse(editorValue.Value.ToString(), out Guid guidValue)
? GuidUdi.Create(Constants.UdiEntityType.Document, guidValue).ToString()
: null;

Expand Down
1 change: 1 addition & 0 deletions src/Umbraco.Core/PropertyEditors/PropertyCacheLevel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public enum PropertyCacheLevel
/// In most cases, a snapshot is created per request, and therefore this is
/// equivalent to cache the value for the duration of the request.
/// </remarks>
[Obsolete("Caching no longer supports snapshotting")]
Snapshot = 3,

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ public class ContentPickerValueConverter : PropertyValueConverterBase, IDelivery
Constants.Conventions.Content.Redirect.ToLower(CultureInfo.InvariantCulture),
};

private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IPublishedContentCache _publishedContentCache;
private readonly IApiContentBuilder _apiContentBuilder;

public ContentPickerValueConverter(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IPublishedContentCache publishedContentCache,
IApiContentBuilder apiContentBuilder)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_publishedContentCache = publishedContentCache;
_apiContentBuilder = apiContentBuilder;
}

Expand Down Expand Up @@ -105,10 +105,9 @@ public override PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType
PropertiesToExclude.Contains(propertyType.Alias.ToLower(CultureInfo.InvariantCulture))) == false)
{
IPublishedContent? content;
IPublishedSnapshot publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();
if (inter is int id)
{
content = publishedSnapshot.Content?.GetById(id);
content = _publishedContentCache.GetById(id);
if (content != null)
{
return content;
Expand All @@ -121,7 +120,7 @@ public override PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType
return null;
}

content = publishedSnapshot.Content?.GetById(udi.Guid);
content = _publishedContentCache.GetById(udi.Guid);
if (content != null && content.ContentType.ItemType == PublishedItemType.Content)
{
return content;
Expand Down
37 changes: 37 additions & 0 deletions src/Umbraco.Core/PublishedCache/ICacheManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using Umbraco.Cms.Core.Cache;

namespace Umbraco.Cms.Core.PublishedCache;

public interface ICacheManager
{
/// <summary>
/// Gets the <see cref="IPublishedContentCache" />.
/// </summary>
IPublishedContentCache Content { get; }

/// <summary>
/// Gets the <see cref="IPublishedMediaCache" />.
/// </summary>
IPublishedMediaCache Media { get; }

/// <summary>
/// Gets the <see cref="IPublishedMemberCache" />.
/// </summary>
IPublishedMemberCache Members { get; }

/// <summary>
/// Gets the <see cref="IDomainCache" />.
/// </summary>
IDomainCache Domains { get; }

/// <summary>
/// Gets the elements-level cache.
/// </summary>
/// <remarks>
/// <para>
/// The elements-level cache is shared by all snapshots relying on the same elements,
/// ie all snapshots built on top of unchanging content / media / etc.
/// </para>
/// </remarks>
IAppCache ElementsCache { get; }
}
31 changes: 31 additions & 0 deletions src/Umbraco.Core/PublishedCache/IDomainCacheService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Routing;

namespace Umbraco.Cms.Core.PublishedCache;

public interface IDomainCacheService
{
/// <summary>
/// Gets all <see cref="Domain" /> in the current domain cache, including any domains that may be referenced by
/// documents that are no longer published.
/// </summary>
/// <param name="includeWildcards"></param>
/// <returns></returns>
IEnumerable<Domain> GetAll(bool includeWildcards);

/// <summary>
/// Gets all assigned <see cref="Domain" /> for specified document, even if it is not published.
/// </summary>
/// <param name="documentId">The document identifier.</param>
/// <param name="includeWildcards">A value indicating whether to consider wildcard domains.</param>
IEnumerable<Domain> GetAssigned(int documentId, bool includeWildcards = false);

/// <summary>
/// Determines whether a document has domains.
/// </summary>
/// <param name="documentId">The document identifier.</param>
/// <param name="includeWildcards">A value indicating whether to consider wildcard domains.</param>
bool HasAssigned(int documentId, bool includeWildcards = false);

void Refresh(DomainCacheRefresher.JsonPayload[] payloads);
}
Loading