Browse Source

Orleans namings removed.

Detach EventActor states.
pull/195/head
Sebastian Stehle 8 years ago
parent
commit
3810ed169f
  1. 4
      src/Squidex.Domain.Apps.Read/State/AppProvider.cs
  2. 4
      src/Squidex.Domain.Apps.Read/State/AppStateEventConsumer.cs
  3. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs
  4. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState.cs
  5. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Apps.cs
  6. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Rules.cs
  7. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Schemas.cs
  8. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs
  9. 2
      src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrainState.cs
  10. 2
      src/Squidex.Domain.Apps.Read/State/Grains/JsonAppEntity.cs
  11. 2
      src/Squidex.Domain.Apps.Read/State/Grains/JsonEntity.cs
  12. 2
      src/Squidex.Domain.Apps.Read/State/Grains/JsonRuleEntity.cs
  13. 2
      src/Squidex.Domain.Apps.Read/State/Grains/JsonSchemaEntity.cs
  14. 2
      src/Squidex.Infrastructure/CQRS/Events/Actors/EventConsumerActorManager.cs
  15. 2
      src/Squidex.Infrastructure/States/IStateFactory.cs
  16. 12
      src/Squidex.Infrastructure/States/StateFactory.cs
  17. 3
      src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs
  18. 8
      src/Squidex/Areas/Portal/Startup.cs
  19. 2
      src/Squidex/Config/Constants.cs
  20. 4
      src/Squidex/Config/Domain/ReadServices.cs
  21. 2
      tests/Benchmarks/Tests/ReadSchemaState.cs
  22. 4
      tests/Benchmarks/Tests/TestData/MyAppState.cs
  23. 4
      tests/Squidex.Infrastructure.Tests/CQRS/Events/Actors/EventConsumerManagerTests.cs
  24. 30
      tests/Squidex.Infrastructure.Tests/States/StatesTests.cs

4
src/Squidex.Domain.Apps.Read/State/AppProvider.cs

@ -13,11 +13,11 @@ using System.Threading.Tasks;
using Squidex.Domain.Apps.Read.Apps; using Squidex.Domain.Apps.Read.Apps;
using Squidex.Domain.Apps.Read.Rules; using Squidex.Domain.Apps.Read.Rules;
using Squidex.Domain.Apps.Read.Schemas; using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Domain.Apps.Read.State.Orleans.Grains; using Squidex.Domain.Apps.Read.State.Grains;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
namespace Squidex.Domain.Apps.Read.State.Orleans namespace Squidex.Domain.Apps.Read.State
{ {
public sealed class AppProvider : IAppProvider public sealed class AppProvider : IAppProvider
{ {

4
src/Squidex.Domain.Apps.Read/State/AppStateEventConsumer.cs

@ -9,13 +9,13 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Squidex.Domain.Apps.Events; using Squidex.Domain.Apps.Events;
using Squidex.Domain.Apps.Events.Apps; using Squidex.Domain.Apps.Events.Apps;
using Squidex.Domain.Apps.Read.State.Orleans.Grains; using Squidex.Domain.Apps.Read.State.Grains;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.Events;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Read.State.Orleans namespace Squidex.Domain.Apps.Read.State
{ {
public sealed class AppStateEventConsumer : IEventConsumer public sealed class AppStateEventConsumer : IEventConsumer
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs

@ -19,7 +19,7 @@ using Squidex.Infrastructure.CQRS.Events;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public class AppStateGrain : StatefulObject<AppStateGrainState> public class AppStateGrain : StatefulObject<AppStateGrainState>
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState.cs

@ -17,7 +17,7 @@ using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.Events;
using Squidex.Infrastructure.Dispatching; using Squidex.Infrastructure.Dispatching;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed partial class AppStateGrainState public sealed partial class AppStateGrainState
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Apps.cs

@ -15,7 +15,7 @@ using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.Events;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed partial class AppStateGrainState public sealed partial class AppStateGrainState
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Rules.cs

@ -11,7 +11,7 @@ using Squidex.Domain.Apps.Events.Rules;
using Squidex.Domain.Apps.Events.Rules.Utils; using Squidex.Domain.Apps.Events.Rules.Utils;
using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.Events;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed partial class AppStateGrainState public sealed partial class AppStateGrainState
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrainState_Schemas.cs

@ -16,7 +16,7 @@ using Squidex.Infrastructure.Reflection;
#pragma warning disable CS0612 // Type or member is obsolete #pragma warning disable CS0612 // Type or member is obsolete
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed partial class AppStateGrainState public sealed partial class AppStateGrainState
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs

@ -12,7 +12,7 @@ using System.Threading.Tasks;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.Tasks;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed class AppUserGrain : StatefulObject<AppUserGrainState> public sealed class AppUserGrain : StatefulObject<AppUserGrainState>
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrainState.cs

@ -9,7 +9,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed class AppUserGrainState public sealed class AppUserGrainState
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/JsonAppEntity.cs

@ -10,7 +10,7 @@ using Newtonsoft.Json;
using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.Apps;
using Squidex.Domain.Apps.Read.Apps; using Squidex.Domain.Apps.Read.Apps;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed class JsonAppEntity : JsonEntity<JsonAppEntity>, IAppEntity public sealed class JsonAppEntity : JsonEntity<JsonAppEntity>, IAppEntity
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/JsonEntity.cs

@ -11,7 +11,7 @@ using Newtonsoft.Json;
using NodaTime; using NodaTime;
using Squidex.Infrastructure; using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public abstract class JsonEntity<T> : Cloneable<T>, IUpdateableEntityWithVersion where T : Cloneable public abstract class JsonEntity<T> : Cloneable<T>, IUpdateableEntityWithVersion where T : Cloneable
{ {

2
src/Squidex.Domain.Apps.Read/State/Grains/JsonRuleEntity.cs

@ -12,7 +12,7 @@ using Squidex.Domain.Apps.Core.Rules;
using Squidex.Domain.Apps.Read.Rules; using Squidex.Domain.Apps.Read.Rules;
using Squidex.Infrastructure; using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed class JsonRuleEntity : public sealed class JsonRuleEntity :
JsonEntity<JsonRuleEntity>, JsonEntity<JsonRuleEntity>,

2
src/Squidex.Domain.Apps.Read/State/Grains/JsonSchemaEntity.cs

@ -12,7 +12,7 @@ using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Domain.Apps.Read.Schemas; using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains namespace Squidex.Domain.Apps.Read.State.Grains
{ {
public sealed class JsonSchemaEntity : public sealed class JsonSchemaEntity :
JsonEntity<JsonSchemaEntity>, JsonEntity<JsonSchemaEntity>,

2
src/Squidex.Infrastructure/CQRS/Events/Actors/EventConsumerActorManager.cs

@ -39,7 +39,7 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
foreach (var consumer in consumers) foreach (var consumer in consumers)
{ {
var actor = factory.GetAsync<EventConsumerActor, EventConsumerState>(consumer.Name).Result; var actor = factory.GetDetachedAsync<EventConsumerActor, EventConsumerState>(consumer.Name).Result;
actors[consumer.Name] = actor; actors[consumer.Name] = actor;
actor.Activate(consumer); actor.Activate(consumer);

2
src/Squidex.Infrastructure/States/IStateFactory.cs

@ -13,5 +13,7 @@ namespace Squidex.Infrastructure.States
public interface IStateFactory public interface IStateFactory
{ {
Task<T> GetAsync<T, TState>(string key) where T : StatefulObject<TState>; Task<T> GetAsync<T, TState>(string key) where T : StatefulObject<TState>;
Task<T> GetDetachedAsync<T, TState>(string key) where T : StatefulObject<TState>;
} }
} }

12
src/Squidex.Infrastructure/States/StateFactory.cs

@ -50,6 +50,18 @@ namespace Squidex.Infrastructure.States
}); });
} }
public async Task<T> GetDetachedAsync<T, TState>(string key) where T : StatefulObject<TState>
{
Guard.NotNull(key, nameof(key));
var stateHolder = new StateHolder<TState>(key, () => { }, store);
var state = (T)services.GetService(typeof(T));
await state.ActivateAsync(stateHolder);
return state;
}
public Task<T> GetAsync<T, TState>(string key) where T : StatefulObject<TState> public Task<T> GetAsync<T, TState>(string key) where T : StatefulObject<TState>
{ {
Guard.NotNull(key, nameof(key)); Guard.NotNull(key, nameof(key));

3
src/Squidex/Areas/IdentityServer/Config/LazyClientStore.cs

@ -131,8 +131,7 @@ namespace Squidex.Areas.IdentityServer.Config
ClientSecrets = new List<Secret> { new Secret(Constants.InternalClientSecret) }, ClientSecrets = new List<Secret> { new Secret(Constants.InternalClientSecret) },
RedirectUris = new List<string> RedirectUris = new List<string>
{ {
urlsOptions.BuildUrl($"{Constants.PortalPrefix}/signin-oidc", false), urlsOptions.BuildUrl($"{Constants.PortalPrefix}/signin-oidc", false)
urlsOptions.BuildUrl($"{Constants.OrleansPrefix}/signin-oidc", false)
}, },
AccessTokenLifetime = (int)TimeSpan.FromDays(30).TotalSeconds, AccessTokenLifetime = (int)TimeSpan.FromDays(30).TotalSeconds,
AllowedGrantTypes = GrantTypes.ImplicitAndClientCredentials, AllowedGrantTypes = GrantTypes.ImplicitAndClientCredentials,

8
src/Squidex/Areas/Portal/Startup.cs

@ -16,11 +16,11 @@ namespace Squidex.Areas.Portal
{ {
public static void ConfigurePortal(this IApplicationBuilder app) public static void ConfigurePortal(this IApplicationBuilder app)
{ {
app.Map(Constants.PortalPrefix, orleansApp => app.Map(Constants.PortalPrefix, portalApp =>
{ {
orleansApp.UseAuthentication(); portalApp.UseAuthentication();
orleansApp.UseMiddleware<PortalDashboardAuthenticationMiddleware>(); portalApp.UseMiddleware<PortalDashboardAuthenticationMiddleware>();
orleansApp.UseMiddleware<PortalRedirectMiddleware>(); portalApp.UseMiddleware<PortalRedirectMiddleware>();
}); });
} }
} }

2
src/Squidex/Config/Constants.cs

@ -20,8 +20,6 @@ namespace Squidex.Config
public static readonly string PortalPrefix = "/portal"; public static readonly string PortalPrefix = "/portal";
public static readonly string OrleansPrefix = "/orleans";
public static readonly string RoleScope = "role"; public static readonly string RoleScope = "role";
public static readonly string ProfileScope = "squidex-profile"; public static readonly string ProfileScope = "squidex-profile";

4
src/Squidex/Config/Domain/ReadServices.cs

@ -24,8 +24,8 @@ using Squidex.Domain.Apps.Read.Contents.GraphQL;
using Squidex.Domain.Apps.Read.History; using Squidex.Domain.Apps.Read.History;
using Squidex.Domain.Apps.Read.Rules; using Squidex.Domain.Apps.Read.Rules;
using Squidex.Domain.Apps.Read.Schemas; using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Domain.Apps.Read.State.Orleans; using Squidex.Domain.Apps.Read.State;
using Squidex.Domain.Apps.Read.State.Orleans.Grains; using Squidex.Domain.Apps.Read.State.Grains;
using Squidex.Domain.Users; using Squidex.Domain.Users;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Assets;

2
tests/Benchmarks/Tests/ReadSchemaState.cs

@ -16,7 +16,7 @@ using Squidex.Domain.Apps.Core.Rules;
using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Core.Rules.Triggers;
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Domain.Apps.Read.State.Orleans.Grains; using Squidex.Domain.Apps.Read.State.Grains;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;

4
tests/Benchmarks/Tests/TestData/MyAppState.cs

@ -1,12 +1,12 @@
// ========================================================================== // ==========================================================================
// ReadSchemaState.cs // MyAppState.cs
// Squidex Headless CMS // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Squidex.Domain.Apps.Read.State.Orleans.Grains; using Squidex.Domain.Apps.Read.State.Grains;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
namespace Benchmarks.Tests.TestData namespace Benchmarks.Tests.TestData

4
tests/Squidex.Infrastructure.Tests/CQRS/Events/Actors/EventConsumerManagerTests.cs

@ -33,8 +33,8 @@ namespace Squidex.Infrastructure.CQRS.Events.Actors
A.CallTo(() => consumer1.Name).Returns(consumerName1); A.CallTo(() => consumer1.Name).Returns(consumerName1);
A.CallTo(() => consumer2.Name).Returns(consumerName2); A.CallTo(() => consumer2.Name).Returns(consumerName2);
A.CallTo(() => factory.GetAsync<EventConsumerActor, EventConsumerState>(consumerName1)).Returns(actor1); A.CallTo(() => factory.GetDetachedAsync<EventConsumerActor, EventConsumerState>(consumerName1)).Returns(actor1);
A.CallTo(() => factory.GetAsync<EventConsumerActor, EventConsumerState>(consumerName2)).Returns(actor2); A.CallTo(() => factory.GetDetachedAsync<EventConsumerActor, EventConsumerState>(consumerName2)).Returns(actor2);
sut = new EventConsumerActorManager(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory); sut = new EventConsumerActorManager(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory);
} }

30
tests/Squidex.Infrastructure.Tests/States/StatesTests.cs

@ -125,6 +125,16 @@ namespace Squidex.Infrastructure.States
Assert.True(actual.IsDisposed); Assert.True(actual.IsDisposed);
} }
[Fact]
public async Task Should_not_dispose_detached_when_message_sent()
{
var actual = await sut.GetDetachedAsync<MyStatefulObject, int>(key);
await InvalidateCacheAsync();
Assert.False(actual.IsDisposed);
}
[Fact] [Fact]
public async Task Should_dispose_states_if_exired() public async Task Should_dispose_states_if_exired()
{ {
@ -135,6 +145,16 @@ namespace Squidex.Infrastructure.States
Assert.True(actual.IsDisposed); Assert.True(actual.IsDisposed);
} }
[Fact]
public async Task Should_not_dispose_detached_states_if_exired()
{
var actual = await sut.GetDetachedAsync<MyStatefulObject, int>(key);
await RemoveFromCacheAsync();
Assert.False(actual.IsDisposed);
}
[Fact] [Fact]
public async Task Should_dispose_states_if_disposed() public async Task Should_dispose_states_if_disposed()
{ {
@ -145,6 +165,16 @@ namespace Squidex.Infrastructure.States
Assert.True(actual.IsDisposed); Assert.True(actual.IsDisposed);
} }
[Fact]
public async Task Should_not_dispose_detached_states_if_disposed()
{
var actual = await sut.GetDetachedAsync<MyStatefulObject, int>(key);
sut.Dispose();
Assert.False(actual.IsDisposed);
}
private async Task RemoveFromCacheAsync() private async Task RemoveFromCacheAsync()
{ {
cache.Remove(key); cache.Remove(key);

Loading…
Cancel
Save