Skip to content

Commit

Permalink
implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
KSemenenko committed Nov 18, 2024
1 parent 02c29a9 commit 645d270
Show file tree
Hide file tree
Showing 25 changed files with 353 additions and 433 deletions.
9 changes: 6 additions & 3 deletions ManagedCode.Orleans.Graph.Tests/Cluster/Grains/GrainA.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@ public async Task<int> MethodA1(int input)

public async Task<int> MethodB1(int input)
{
return await GrainFactory.GetGrain<IGrainB>(this.GetPrimaryKeyString()).MethodB1(input);
return await GrainFactory.GetGrain<IGrainB>(this.GetPrimaryKeyString())
.MethodB1(input);
}

public async Task<int> MethodB2(int input)
{
return await GrainFactory.GetGrain<IGrainB>(this.GetPrimaryKeyString()).MethodC2(input);
return await GrainFactory.GetGrain<IGrainB>(this.GetPrimaryKeyString())
.MethodC2(input);
}

public async Task<int> MethodC1(int input)
{
return await GrainFactory.GetGrain<IGrainC>(this.GetPrimaryKeyString()).MethodC1(input);
return await GrainFactory.GetGrain<IGrainC>(this.GetPrimaryKeyString())
.MethodC1(input);
}
}
3 changes: 2 additions & 1 deletion ManagedCode.Orleans.Graph.Tests/Cluster/Grains/GrainB.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public async Task<int> MethodB1(int input)

public async Task<int> MethodC2(int input)
{
return await GrainFactory.GetGrain<IGrainC>(this.GetPrimaryKeyString()).MethodA2(input);
return await GrainFactory.GetGrain<IGrainC>(this.GetPrimaryKeyString())
.MethodA2(input);
}
}
4 changes: 2 additions & 2 deletions ManagedCode.Orleans.Graph.Tests/Cluster/Grains/GrainC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public async Task<int> MethodC1(int input)

public async Task<int> MethodA2(int input)
{
return await GrainFactory.GetGrain<IGrainA>(this.GetPrimaryKeyString()).MethodA1(input);
return await GrainFactory.GetGrain<IGrainA>(this.GetPrimaryKeyString())
.MethodA1(input);
}

}
3 changes: 2 additions & 1 deletion ManagedCode.Orleans.Graph.Tests/Cluster/Grains/GrainD.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public async Task<int> MethodD1(int input)

public async Task<int> MethodE2(int input)
{
return await GrainFactory.GetGrain<IGrainE>(this.GetPrimaryKeyString()).MethodE1(input);
return await GrainFactory.GetGrain<IGrainE>(this.GetPrimaryKeyString())
.MethodE1(input);
}
}
3 changes: 2 additions & 1 deletion ManagedCode.Orleans.Graph.Tests/Cluster/Grains/GrainE.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public async Task<int> MethodE1(int input)

public async Task<int> MethodD2(int input)
{
return await GrainFactory.GetGrain<IGrainD>(this.GetPrimaryKeyString()).MethodD1(input);
return await GrainFactory.GetGrain<IGrainD>(this.GetPrimaryKeyString())
.MethodD1(input);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ namespace ManagedCode.Orleans.Graph.Tests.Cluster.Grains.Interfaces;
public interface IGrainA : IGrainWithStringKey
{
Task<int> MethodA1(int input);

Task<int> MethodB1(int input);
Task<int> MethodB2(int input);

Task<int> MethodC1(int input);
}
23 changes: 11 additions & 12 deletions ManagedCode.Orleans.Graph.Tests/Cluster/TestSiloConfigurations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@ public class TestSiloConfigurations : ISiloConfigurator
{
public void Configure(ISiloBuilder siloBuilder)
{
siloBuilder.AddOrleansGraph()
.CreateGraph(graph => graph
.AddAllowedTransition<IGrainA, IGrainB>()
.AddAllowedTransition<IGrainA, IGrainC>()

// .AddAllowedTransition<IGrainB, IGrainC>()
//
// .AddAllowedTransition<IGrainC, IGrainA>()
//
// .AddAllowedTransition<IGrainD, IGrainE>()
// .AddAllowedTransition<IGrainE, IGrainD>()
);
siloBuilder.AddOrleansGraph()
.CreateGraph(graph => graph.AddAllowedTransition<IGrainA>()
.AddAllowedTransition<IGrainA, IGrainB>()
.AddAllowedTransition<IGrainA, IGrainC>()

// .AddAllowedTransition<IGrainB, IGrainC>()
//
// .AddAllowedTransition<IGrainC, IGrainA>()
//
// .AddAllowedTransition<IGrainD, IGrainE>()
// .AddAllowedTransition<IGrainE, IGrainD>()
);
}
}
12 changes: 4 additions & 8 deletions ManagedCode.Orleans.Graph.Tests/GraphTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public GraphTests(TestClusterApplication testApp, ITestOutputHelper outputHelper
_testApp = testApp;
_outputHelper = outputHelper;
}

[Fact]
public async Task GrainA_B1Test()
{
Expand All @@ -33,28 +33,24 @@ await _testApp.Cluster
.Client
.GetGrain<IGrainA>("1")
.MethodA1(1);

await _testApp.Cluster
.Client
.GetGrain<IGrainA>("1")
.MethodB1(1);

await _testApp.Cluster
.Client
.GetGrain<IGrainA>("1")
.MethodC1(1);

}

[Fact]
public async Task TestGrainTests()
{
await _testApp.Cluster
.Client
.GetGrain<IGrainA>("1")
.MethodB2(1);



}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.2" />
<PackageReference Include="FluentAssertions" Version="6.12.2"/>
<PackageReference Include="ManagedCode.TimeSeries" Version="0.0.18"/>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1"/>
<PackageReference Include="Microsoft.Orleans.Analyzers" Version="8.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Orleans.Serialization" Version="8.2.0" />
<PackageReference Include="Microsoft.Orleans.TestingHost" Version="8.2.0" />
<PackageReference Include="Microsoft.Orleans.Serialization" Version="8.2.0"/>
<PackageReference Include="Microsoft.Orleans.TestingHost" Version="8.2.0"/>
<PackageReference Include="System.Linq.Async" Version="6.0.1"/>
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit" Version="2.9.2"/>
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
Expand All @@ -38,14 +38,14 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.10" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageReference Include="Microsoft.Orleans.Sdk" Version="8.2.0" />
<PackageReference Include="Microsoft.Orleans.Serialization.SystemTextJson" Version="8.2.0" />
<PackageReference Include="Microsoft.Orleans.Serialization.TestKit" Version="8.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10"/>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.10"/>
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.10"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1"/>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2"/>
<PackageReference Include="Microsoft.Orleans.Sdk" Version="8.2.0"/>
<PackageReference Include="Microsoft.Orleans.Serialization.SystemTextJson" Version="8.2.0"/>
<PackageReference Include="Microsoft.Orleans.Serialization.TestKit" Version="8.2.0"/>
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System;
using ManagedCode.Orleans.Graph.Filters;
using ManagedCode.Orleans.Graph.Models;
using Microsoft.Extensions.DependencyInjection;
using Orleans.Hosting;

namespace ManagedCode.Orleans.Graph.Extensions;

public static class OrleansCleintGraphExtensions
{
public static IClientBuilder AddOrleansGraph(this IClientBuilder builder)
{
return builder.AddOrleansGraph(_ => { });
}


public static IClientBuilder AddOrleansGraph(this IClientBuilder builder, Action<GraphCallFilterConfig> config)
{
var graphCallFilterConfig = new GraphCallFilterConfig();
config.Invoke(graphCallFilterConfig);
builder.Services.AddSingleton(graphCallFilterConfig);

builder.AddOutgoingGrainCallFilter<GraphOutgoingGrainCallFilter>();
return builder;
}

public static IClientBuilder CreateGraph(this IClientBuilder builder, Action<GrainGraphManager> graph)
{
var grainGraph = new GrainGraphManager();
graph(grainGraph);
builder.ConfigureServices(services => services.AddSingleton(grainGraph));
return builder;
}
}
27 changes: 0 additions & 27 deletions ManagedCode.Orleans.Graph/Extensions/OrleansGraphExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,31 +32,4 @@ public static ISiloBuilder CreateGraph(this ISiloBuilder builder, Action<GrainGr
builder.ConfigureServices(services => services.AddSingleton(grainGraph));
return builder;
}
}

public static class OrleansCleintGraphExtensions
{
public static IClientBuilder AddOrleansGraph(this IClientBuilder builder)
{
return builder.AddOrleansGraph(_ => { });
}


public static IClientBuilder AddOrleansGraph(this IClientBuilder builder, Action<GraphCallFilterConfig> config)
{
var graphCallFilterConfig = new GraphCallFilterConfig();
config.Invoke(graphCallFilterConfig);
builder.Services.AddSingleton(graphCallFilterConfig);

builder.AddOutgoingGrainCallFilter<GraphOutgoingGrainCallFilter>();
return builder;
}

public static IClientBuilder CreateGraph(this IClientBuilder builder, Action<GrainGraphManager> graph)
{
var grainGraph = new GrainGraphManager();
graph(grainGraph);
builder.ConfigureServices(services => services.AddSingleton(grainGraph));
return builder;
}
}
61 changes: 34 additions & 27 deletions ManagedCode.Orleans.Graph/Extensions/RequestContextHelper.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Linq;
using ManagedCode.Orleans.Graph.Interfaces;
using ManagedCode.Orleans.Graph.Models;
using Orleans;
using Orleans.Runtime;
Expand All @@ -7,48 +7,55 @@ namespace ManagedCode.Orleans.Graph.Extensions;

public static class RequestContextHelper
{
public static void TrackIncomingCall(this IIncomingGrainCallContext context)
public static bool TrackIncomingCall(this IIncomingGrainCallContext context)
{
CallHistory call = context.GetCallHistory();
call.Push( new InCall($"{context.Request.GetInterfaceName()}.{context.Request.GetMethod().Name}"));
var call = context.GetCallHistory();
//var caller = context.TargetContext!.GrainInstance!.GetType().Name;
call.Push(new InCall(context.InterfaceName, context.MethodName));
context.SetCallHistory(call);
return true;
}
public static void TrackIncomingCall(this IIncomingGrainCallContext context, GraphCallFilterConfig graphCallFilterConfig)

public static bool TrackOutgoingCall(this IOutgoingGrainCallContext context)
{
if(!graphCallFilterConfig.TrackOrleansCalls && context.Request.GetType().Namespace!.Contains("Orleans"))
return;

context.TrackIncomingCall();
var caller = context.SourceId is null
? Constants.ClientCallerId
: context.SourceContext!.GrainInstance!.GetType()
.Name;
var call = context.GetCallHistory();
call.Push(new OutCall(caller, context.InterfaceName, context.MethodName));
context.SetCallHistory(call);
return true;
}
public static void TrackOutgoingCall(this IOutgoingGrainCallContext context, GraphCallFilterConfig graphCallFilterConfig)

public static bool TrackIncomingCall(this IIncomingGrainCallContext context, GraphCallFilterConfig graphCallFilterConfig)
{
if(!graphCallFilterConfig.TrackOrleansCalls && context.InterfaceName.Contains("Orleans"))
return;
context.TrackOutgoingCall();
if (!graphCallFilterConfig.TrackOrleansCalls && context.ImplementationMethod.Module.Name.StartsWith("Orleans."))
return false;

return context.TrackIncomingCall();
}
public static void TrackOutgoingCall(this IOutgoingGrainCallContext context)

public static bool TrackOutgoingCall(this IOutgoingGrainCallContext context, GraphCallFilterConfig graphCallFilterConfig)
{
CallHistory call = context.GetCallHistory();
call.Push( new OutCall(context.SourceContext?.GrainInstance?.GetType().Name ?? Interfaces.Constants.ClientCallerId, $"{context.Request.GetInterfaceName()}.{context.Request.GetMethod().Name}"));
context.SetCallHistory(call);
if (!graphCallFilterConfig.TrackOrleansCalls && context.InterfaceMethod.Module.Name.StartsWith("Orleans."))
return false;

return context.TrackOutgoingCall();
}

public static CallHistory GetCallHistory(this IGrainCallContext context)
{
return RequestContext.Get(Interfaces.Constants.RequestContextKey) as CallHistory ?? new CallHistory();
return RequestContext.Get(Constants.RequestContextKey) as CallHistory ?? new CallHistory();
}

public static bool IsCallHistoryExist(this IGrainCallContext context)
{
return RequestContext.Get(Interfaces.Constants.RequestContextKey) is CallHistory;
return RequestContext.Get(Constants.RequestContextKey) is CallHistory;
}

public static void SetCallHistory(this IGrainCallContext context, CallHistory callHistory)
{
RequestContext.Set(Interfaces.Constants.RequestContextKey, callHistory);
RequestContext.Set(Constants.RequestContextKey, callHistory);
}
}
Loading

0 comments on commit 645d270

Please sign in to comment.