Removes IBatchedDatabaseServerMessenger, renames methods of IServerMessenger

This commit is contained in:
Shannon
2020-12-24 14:44:42 +11:00
parent e785ac28a3
commit 307ef4c1e0
13 changed files with 70 additions and 65 deletions

View File

@@ -46,7 +46,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || instances.Length == 0 || getNumericId == null) return;
_serverMessenger.PerformRefresh(
_serverMessenger.QueueRefresh(
GetRefresherById(refresherGuid),
getNumericId,
instances);
@@ -61,7 +61,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || id == default(int)) return;
_serverMessenger.PerformRefresh(
_serverMessenger.QueueRefresh(
GetRefresherById(refresherGuid),
id);
}
@@ -75,7 +75,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || id == Guid.Empty) return;
_serverMessenger.PerformRefresh(
_serverMessenger.QueueRefresh(
GetRefresherById(refresherGuid),
id);
}
@@ -86,7 +86,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || payload == null) return;
_serverMessenger.PerformRefresh(
_serverMessenger.QueueRefresh(
GetRefresherById(refresherGuid),
payload);
}
@@ -97,7 +97,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || payloads == null) return;
_serverMessenger.PerformRefresh(
_serverMessenger.QueueRefresh(
GetRefresherById(refresherGuid),
payloads.ToArray());
}
@@ -125,7 +125,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty) return;
_serverMessenger.PerformRefreshAll(
_serverMessenger.QueueRefreshAll(
GetRefresherById(refresherGuid));
}
@@ -138,7 +138,7 @@ namespace Umbraco.Web.Cache
{
if (refresherGuid == Guid.Empty || id == default(int)) return;
_serverMessenger.PerformRemove(
_serverMessenger.QueueRemove(
GetRefresherById(refresherGuid),
id);
}
@@ -155,7 +155,7 @@ namespace Umbraco.Web.Cache
/// </remarks>
public void Remove<T>(Guid refresherGuid, Func<T, int> getNumericId, params T[] instances)
{
_serverMessenger.PerformRemove(
_serverMessenger.QueueRemove(
GetRefresherById(refresherGuid),
getNumericId,
instances);

View File

@@ -1,10 +1,10 @@
using System;
using System;
using System.Collections.Generic;
namespace Umbraco.Core.Sync
{
/// <summary>
/// Holds a list of callbacks associated with implementations of <see cref="IBatchedDatabaseServerMessenger"/>.
/// Holds a list of callbacks associated with implementations of <see cref="IServerMessenger"/>.
/// </summary>
public class DatabaseServerMessengerCallbacks
{

View File

@@ -1,12 +0,0 @@
namespace Umbraco.Core.Sync
{
/// <summary>
/// An <see cref="IServerMessenger"/> implementation that works by storing messages in the database.
/// </summary>
public interface IBatchedDatabaseServerMessenger : IServerMessenger
{
// TODO: We only ever use IBatchedDatabaseServerMessenger so just combine these interfaces
void FlushBatch();
}
}

View File

@@ -14,12 +14,17 @@ namespace Umbraco.Core.Sync
/// </summary>
void Sync();
/// <summary>
/// Called to send/commit the queued messages created with the Perform methods
/// </summary>
void SendMessages();
/// <summary>
/// Notifies the distributed cache, for a specified <see cref="ICacheRefresher"/>.
/// </summary>
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="payload">The notification content.</param>
void PerformRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload);
void QueueRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload);
/// <summary>
/// Notifies the distributed cache of specified item invalidation, for a specified <see cref="ICacheRefresher"/>.
@@ -28,7 +33,7 @@ namespace Umbraco.Core.Sync
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="getNumericId">A function returning the unique identifier of items.</param>
/// <param name="instances">The invalidated items.</param>
void PerformRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances);
void QueueRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances);
/// <summary>
/// Notifies the distributed cache of specified item invalidation, for a specified <see cref="ICacheRefresher"/>.
@@ -37,7 +42,7 @@ namespace Umbraco.Core.Sync
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="getGuidId">A function returning the unique identifier of items.</param>
/// <param name="instances">The invalidated items.</param>
void PerformRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances);
void QueueRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances);
/// <summary>
/// Notifies all servers of specified items removal, for a specified <see cref="ICacheRefresher"/>.
@@ -46,33 +51,33 @@ namespace Umbraco.Core.Sync
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="getNumericId">A function returning the unique identifier of items.</param>
/// <param name="instances">The removed items.</param>
void PerformRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances);
void QueueRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances);
/// <summary>
/// Notifies all servers of specified items removal, for a specified <see cref="ICacheRefresher"/>.
/// </summary>
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="numericIds">The unique identifiers of the removed items.</param>
void PerformRemove(ICacheRefresher refresher, params int[] numericIds);
void QueueRemove(ICacheRefresher refresher, params int[] numericIds);
/// <summary>
/// Notifies all servers of specified items invalidation, for a specified <see cref="ICacheRefresher"/>.
/// </summary>
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="numericIds">The unique identifiers of the invalidated items.</param>
void PerformRefresh(ICacheRefresher refresher, params int[] numericIds);
void QueueRefresh(ICacheRefresher refresher, params int[] numericIds);
/// <summary>
/// Notifies all servers of specified items invalidation, for a specified <see cref="ICacheRefresher"/>.
/// </summary>
/// <param name="refresher">The ICacheRefresher.</param>
/// <param name="guidIds">The unique identifiers of the invalidated items.</param>
void PerformRefresh(ICacheRefresher refresher, params Guid[] guidIds);
void QueueRefresh(ICacheRefresher refresher, params Guid[] guidIds);
/// <summary>
/// Notifies all servers of a global invalidation for a specified <see cref="ICacheRefresher"/>.
/// </summary>
/// <param name="refresher">The ICacheRefresher.</param>
void PerformRefreshAll(ICacheRefresher refresher);
void QueueRefreshAll(ICacheRefresher refresher);
}
}

View File

@@ -21,7 +21,7 @@ namespace Umbraco.Web
/// <remarks>
/// This binds to appropriate umbraco events in order to trigger the Boot(), Sync() & FlushBatch() calls
/// </remarks>
public class BatchedDatabaseServerMessenger : DatabaseServerMessenger, IBatchedDatabaseServerMessenger
public class BatchedDatabaseServerMessenger : DatabaseServerMessenger
{
private readonly IRequestCache _requestCache;
private readonly IRequestAccessor _requestAccessor;
@@ -58,7 +58,7 @@ namespace Umbraco.Web
BatchMessage(refresher, messageType, idsA, arrayType, json);
}
public void FlushBatch()
public override void SendMessages()
{
var batch = GetBatch(false);
if (batch == null) return;
@@ -66,13 +66,14 @@ namespace Umbraco.Web
var instructions = batch.SelectMany(x => x.Instructions).ToArray();
batch.Clear();
//Write the instructions but only create JSON blobs with a max instruction count equal to MaxProcessingInstructionCount
// Write the instructions but only create JSON blobs with a max instruction count equal to MaxProcessingInstructionCount
using (var scope = ScopeProvider.CreateScope())
{
foreach (var instructionsBatch in instructions.InGroupsOf(GlobalSettings.DatabaseServerMessenger.MaxProcessingInstructionCount))
{
WriteInstructions(scope, instructionsBatch);
}
scope.Complete();
}

View File

@@ -15,7 +15,7 @@ namespace Umbraco.Infrastructure.Cache
/// </summary>
public sealed class DatabaseServerMessengerNotificationHandler : INotificationHandler<UmbracoApplicationStarting>
{
private readonly IBatchedDatabaseServerMessenger _messenger;
private readonly IServerMessenger _messenger;
private readonly IRequestAccessor _requestAccessor;
private readonly IUmbracoDatabaseFactory _databaseFactory;
private readonly IDistributedCacheBinder _distributedCacheBinder;
@@ -35,7 +35,7 @@ namespace Umbraco.Infrastructure.Cache
_databaseFactory = databaseFactory;
_distributedCacheBinder = distributedCacheBinder;
_logger = logger;
_messenger = serverMessenger as IBatchedDatabaseServerMessenger;
_messenger = serverMessenger;
}
/// <inheritdoc/>
@@ -88,6 +88,6 @@ namespace Umbraco.Infrastructure.Cache
/// <summary>
/// Clear the batch on end request
/// </summary>
private void EndRequest(object sender, UmbracoRequestEventArgs e) => _messenger?.FlushBatch();
private void EndRequest(object sender, UmbracoRequestEventArgs e) => _messenger?.SendMessages();
}
}

View File

@@ -123,9 +123,9 @@ namespace Umbraco.Infrastructure.HostedServices
finally
{
// If running on a temp context, we have to flush the messenger
if (contextReference.IsRoot && _serverMessenger is IBatchedDatabaseServerMessenger m)
if (contextReference.IsRoot)
{
m.FlushBatch();
_serverMessenger.SendMessages();
}
}
}

View File

@@ -55,7 +55,7 @@ namespace Umbraco.Core.Sync
#region IServerMessenger
public void PerformRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
public void QueueRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
if (payload == null) throw new ArgumentNullException(nameof(payload));
@@ -72,7 +72,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RefreshByJson, json: jsonPayload);
}
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -83,7 +83,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RefreshByInstance, getId, instances);
}
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances)
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -94,7 +94,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RefreshByInstance, getId, instances);
}
public void PerformRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
public void QueueRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -105,7 +105,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RemoveByInstance, getId, instances);
}
public void PerformRemove(ICacheRefresher refresher, params int[] numericIds)
public void QueueRemove(ICacheRefresher refresher, params int[] numericIds)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -114,7 +114,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RemoveById, numericIds.Cast<object>());
}
public void PerformRefresh(ICacheRefresher refresher, params int[] numericIds)
public void QueueRefresh(ICacheRefresher refresher, params int[] numericIds)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -123,7 +123,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RefreshById, numericIds.Cast<object>());
}
public void PerformRefresh(ICacheRefresher refresher, params Guid[] guidIds)
public void QueueRefresh(ICacheRefresher refresher, params Guid[] guidIds)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -132,7 +132,7 @@ namespace Umbraco.Core.Sync
Deliver(refresher, MessageType.RefreshById, guidIds.Cast<object>());
}
public void PerformRefreshAll(ICacheRefresher refresher)
public void QueueRefreshAll(ICacheRefresher refresher)
{
if (refresher == null) throw new ArgumentNullException(nameof(refresher));
@@ -346,8 +346,6 @@ namespace Umbraco.Core.Sync
DeliverRemote(refresher, messageType, idsA);
}
public abstract void Sync();
//protected virtual void Deliver(ICacheRefresher refresher, object payload)
//{
// if (servers == null) throw new ArgumentNullException("servers");
@@ -367,5 +365,8 @@ namespace Umbraco.Core.Sync
//}
#endregion
public abstract void Sync();
public abstract void SendMessages();
}
}

View File

@@ -114,47 +114,49 @@ namespace Umbraco.Tests.Integration.Testing
public NoopServerMessenger()
{ }
public void PerformRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
public void QueueRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
{
}
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
{
}
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances)
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances)
{
}
public void PerformRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
public void QueueRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances)
{
}
public void PerformRemove(ICacheRefresher refresher, params int[] numericIds)
public void QueueRemove(ICacheRefresher refresher, params int[] numericIds)
{
}
public void PerformRefresh(ICacheRefresher refresher, params int[] numericIds)
public void QueueRefresh(ICacheRefresher refresher, params int[] numericIds)
{
}
public void PerformRefresh(ICacheRefresher refresher, params Guid[] guidIds)
public void QueueRefresh(ICacheRefresher refresher, params Guid[] guidIds)
{
}
public void PerformRefreshAll(ICacheRefresher refresher)
public void QueueRefreshAll(ICacheRefresher refresher)
{
}
public void Sync() { }
public void SendMessages() { }
}
}

View File

@@ -328,6 +328,8 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Scoping
: base(false)
{ }
public override void SendMessages() { }
public override void Sync() { }
protected override void DeliverRemote(ICacheRefresher refresher, MessageType messageType, IEnumerable<object> ids = null, string json = null)

View File

@@ -2166,6 +2166,8 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Services
public LocalServerMessenger() : base(false)
{ }
public override void SendMessages() { }
public override void Sync() { }
protected override void DeliverRemote(ICacheRefresher refresher, MessageType messageType, IEnumerable<object> ids = null, string json = null)

View File

@@ -134,30 +134,32 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Core.Cache.DistributedCache
public List<string> PayloadsRefreshed { get; } = new List<string>();
public int CountOfFullRefreshes { get; private set; } = 0;
public void PerformRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
public void QueueRefresh<TPayload>(ICacheRefresher refresher, TPayload[] payload)
{
// doing nothing
}
public void PerformRefresh(ICacheRefresher refresher, string jsonPayload) => PayloadsRefreshed.Add(jsonPayload);
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances) => IntIdsRefreshed.AddRange(instances.Select(getNumericId));
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances) => IntIdsRefreshed.AddRange(instances.Select(getNumericId));
public void PerformRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances) => GuidIdsRefreshed.AddRange(instances.Select(getGuidId));
public void QueueRefresh<T>(ICacheRefresher refresher, Func<T, Guid> getGuidId, params T[] instances) => GuidIdsRefreshed.AddRange(instances.Select(getGuidId));
public void PerformRemove(ICacheRefresher refresher, string jsonPayload) => PayloadsRemoved.Add(jsonPayload);
public void PerformRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances) => IntIdsRemoved.AddRange(instances.Select(getNumericId));
public void QueueRemove<T>(ICacheRefresher refresher, Func<T, int> getNumericId, params T[] instances) => IntIdsRemoved.AddRange(instances.Select(getNumericId));
public void PerformRemove(ICacheRefresher refresher, params int[] numericIds) => IntIdsRemoved.AddRange(numericIds);
public void QueueRemove(ICacheRefresher refresher, params int[] numericIds) => IntIdsRemoved.AddRange(numericIds);
public void PerformRefresh(ICacheRefresher refresher, params int[] numericIds) => IntIdsRefreshed.AddRange(numericIds);
public void QueueRefresh(ICacheRefresher refresher, params int[] numericIds) => IntIdsRefreshed.AddRange(numericIds);
public void PerformRefresh(ICacheRefresher refresher, params Guid[] guidIds) => GuidIdsRefreshed.AddRange(guidIds);
public void QueueRefresh(ICacheRefresher refresher, params Guid[] guidIds) => GuidIdsRefreshed.AddRange(guidIds);
public void PerformRefreshAll(ICacheRefresher refresher) => CountOfFullRefreshes++;
public void QueueRefreshAll(ICacheRefresher refresher) => CountOfFullRefreshes++;
public void Sync() { }
public void SendMessages() { }
}
internal class TestServerRegistrar : IServerRegistrar

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Xml;
using Microsoft.Extensions.DependencyInjection;
@@ -300,6 +300,8 @@ namespace Umbraco.Tests.Scoping
: base(false)
{ }
public override void SendMessages() { }
public override void Sync() { }
protected override void DeliverRemote(ICacheRefresher refresher, MessageType messageType, IEnumerable<object> ids = null, string json = null)