Skip to content

Commit 6204b19

Browse files
committed
dotnet10 + KeepEachConnectionAlive fix
1 parent 7669362 commit 6204b19

23 files changed

+1224
-254
lines changed

Directory.Build.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project>
22

33
<PropertyGroup>
4-
<TargetFramework>net9.0</TargetFramework>
5-
<LangVersion>13</LangVersion>
4+
<TargetFramework>net10.0</TargetFramework>
5+
<LangVersion>14</LangVersion>
66
<EnableNETAnalyzers>true</EnableNETAnalyzers>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>
@@ -25,8 +25,8 @@
2525
<RepositoryUrl>https://github.com/managedcode/Orleans.SignalR</RepositoryUrl>
2626
<PackageProjectUrl>https://github.com/managedcode/Orleans.SignalR</PackageProjectUrl>
2727
<Product>Managed Code - Orleans SignalR</Product>
28-
<Version>9.0.0</Version>
29-
<PackageVersion>9.0.0</PackageVersion>
28+
<Version>10.0.0</Version>
29+
<PackageVersion>10.0.0</PackageVersion>
3030

3131
</PropertyGroup>
3232
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">

Directory.Packages.props

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
</PropertyGroup>
55
<ItemGroup>
66
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.39" />
7-
<PackageVersion Include="ManagedCode.Communication" Version="9.6.5" />
8-
<PackageVersion Include="ManagedCode.Communication.Orleans" Version="9.6.5" />
9-
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.10" />
10-
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.10" />
11-
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.10" />
12-
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="9.0.10" />
13-
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="9.0.10" />
14-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.10" />
15-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.10" />
16-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
7+
<PackageVersion Include="ManagedCode.Communication" Version="10.0.0" />
8+
<PackageVersion Include="ManagedCode.Communication.Orleans" Version="10.0.0" />
9+
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0" />
10+
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.0" />
11+
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.0" />
12+
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="10.0.0" />
13+
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="10.0.0" />
14+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
15+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0" />
16+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
1717
<PackageVersion Include="Microsoft.Orleans.Analyzers" Version="9.2.1" />
1818
<PackageVersion Include="Microsoft.Orleans.Client" Version="9.2.1" />
1919
<PackageVersion Include="Microsoft.Orleans.Sdk" Version="9.2.1" />
@@ -24,7 +24,7 @@
2424
<PackageVersion Include="Microsoft.Orleans.TestingHost" Version="9.2.1" />
2525
<PackageVersion Include="Shouldly" Version="4.3.0" />
2626
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
27-
<PackageVersion Include="System.IO.Hashing" Version="9.0.10" />
27+
<PackageVersion Include="System.IO.Hashing" Version="10.0.0" />
2828
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
2929
<PackageVersion Include="coverlet.msbuild" Version="6.0.4" />
3030
<PackageVersion Include="xunit" Version="2.9.3" />

ManagedCode.Orleans.SignalR.Core/Helpers/TimeIntervalHelper.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using ManagedCode.Orleans.SignalR.Core.Config;
33
using Microsoft.AspNetCore.SignalR;
44
using Microsoft.Extensions.Options;
5+
using System.Threading;
56

67
namespace ManagedCode.Orleans.SignalR.Core.Helpers;
78

@@ -62,14 +63,14 @@ public static TimeSpan GetKeepAliveInterval(IOptions<HubOptions> globalHubOption
6263
{
6364
var timeSpan = TimeSpan.FromSeconds(15);
6465

65-
if (globalHubOptions.Value.ClientTimeoutInterval.HasValue)
66+
if (globalHubOptions.Value.KeepAliveInterval.HasValue)
6667
{
67-
timeSpan = globalHubOptions.Value.ClientTimeoutInterval.Value;
68+
timeSpan = globalHubOptions.Value.KeepAliveInterval.Value;
6869
}
6970

70-
if (hubOptions.Value.ClientTimeoutInterval.HasValue)
71+
if (hubOptions.Value.KeepAliveInterval.HasValue)
7172
{
72-
timeSpan = hubOptions.Value.ClientTimeoutInterval.Value;
73+
timeSpan = hubOptions.Value.KeepAliveInterval.Value;
7374
}
7475

7576
return timeSpan;
@@ -79,4 +80,14 @@ public static TimeSpan AddExpirationIntervalBuffer(TimeSpan timeSpan)
7980
{
8081
return timeSpan * 1.2;
8182
}
83+
84+
public static TimeSpan GetObserverExpiration(IOptions<OrleansSignalROptions> orleansSignalOptions, TimeSpan baseInterval)
85+
{
86+
if (!orleansSignalOptions.Value.KeepEachConnectionAlive)
87+
{
88+
return Timeout.InfiniteTimeSpan;
89+
}
90+
91+
return AddExpirationIntervalBuffer(baseInterval);
92+
}
8293
}

ManagedCode.Orleans.SignalR.Server/SignalRConnectionHolderGrain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public SignalRConnectionHolderGrain(ILogger<SignalRConnectionHolderGrain> logger
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
36+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeSpan);
37+
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
3738
}
3839

3940
public Task AddConnection(string connectionId, ISignalRObserver observer)

ManagedCode.Orleans.SignalR.Server/SignalRConnectionPartitionGrain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public SignalRConnectionPartitionGrain(ILogger<SignalRConnectionPartitionGrain>
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
36+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeSpan);
37+
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
3738

3839
_stateStorage.State ??= new ConnectionState();
3940
}

ManagedCode.Orleans.SignalR.Server/SignalRGroupGrain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public SignalRGroupGrain(ILogger<SignalRGroupGrain> logger, IOptions<OrleansSign
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
36+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeSpan);
37+
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
3738
}
3839

3940
public async Task SendToGroup(HubMessage message)

ManagedCode.Orleans.SignalR.Server/SignalRGroupPartitionGrain.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public SignalRGroupPartitionGrain(
3939
_state.State ??= new GroupPartitionState();
4040

4141
var timeout = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
42-
var expiration = TimeIntervalHelper.AddExpirationIntervalBuffer(timeout);
42+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeout);
4343
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
4444
}
4545

ManagedCode.Orleans.SignalR.Server/SignalRInvocationGrain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public SignalRInvocationGrain(ILogger<SignalRInvocationGrain> logger,
3333
_stateStorage = stateStorage;
3434

3535
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
36-
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
36+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeSpan);
37+
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
3738
}
3839

3940
public async Task TryCompleteResult(string connectionId, HubMessage message)

ManagedCode.Orleans.SignalR.Server/SignalRUserGrain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public SignalRUserGrain(ILogger<SignalRUserGrain> logger,
4040
_messagesStorage = messagesStorage;
4141

4242
var timeSpan = TimeIntervalHelper.GetClientTimeoutInterval(orleansSignalOptions, hubOptions);
43-
_observerManager = new ObserverManager<ISignalRObserver>(TimeIntervalHelper.AddExpirationIntervalBuffer(timeSpan), _logger);
43+
var expiration = TimeIntervalHelper.GetObserverExpiration(orleansSignalOptions, timeSpan);
44+
_observerManager = new ObserverManager<ISignalRObserver>(expiration, _logger);
4445
}
4546

4647
public Task AddConnection(string connectionId, ISignalRObserver observer)

ManagedCode.Orleans.SignalR.Tests/Cluster/ClusterFixtures.cs

Lines changed: 130 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,73 @@ public sealed class SmokeCluster : ICollectionFixture<SmokeClusterFixture>
4040
{
4141
}
4242

43-
public sealed class LoadClusterFixture : ClusterFixtureBase
43+
public sealed class KeepAliveClusterFixture : ClusterFixtureBase
44+
{
45+
public KeepAliveClusterFixture()
46+
: base(builder =>
47+
{
48+
builder.Options.InitialSilosCount = 2;
49+
})
50+
{
51+
}
52+
}
53+
54+
[CollectionDefinition(nameof(KeepAliveCluster))]
55+
public sealed class KeepAliveCluster : ICollectionFixture<KeepAliveClusterFixture>
56+
{
57+
}
58+
59+
public sealed class KeepAliveDisabledClusterFixture : ClusterFixtureBase
60+
{
61+
public KeepAliveDisabledClusterFixture()
62+
: base(builder =>
63+
{
64+
builder.Options.InitialSilosCount = 2;
65+
})
66+
{
67+
}
68+
}
69+
70+
[CollectionDefinition(nameof(KeepAliveDisabledCluster))]
71+
public sealed class KeepAliveDisabledCluster : ICollectionFixture<KeepAliveDisabledClusterFixture>
72+
{
73+
}
74+
75+
public sealed class LongIdleClientClusterFixture : ClusterFixtureBase
76+
{
77+
public LongIdleClientClusterFixture()
78+
: base(builder =>
79+
{
80+
builder.Options.InitialSilosCount = 2;
81+
builder.AddSiloBuilderConfigurator<LongIdleSiloConfigurator>();
82+
})
83+
{
84+
}
85+
}
86+
87+
[CollectionDefinition(nameof(LongIdleClientCluster))]
88+
public sealed class LongIdleClientCluster : ICollectionFixture<LongIdleClientClusterFixture>
89+
{
90+
}
91+
92+
public sealed class LongIdleServerClusterFixture : ClusterFixtureBase
93+
{
94+
public LongIdleServerClusterFixture()
95+
: base(builder =>
96+
{
97+
builder.Options.InitialSilosCount = 2;
98+
builder.AddSiloBuilderConfigurator<LongIdleSiloConfigurator>();
99+
})
100+
{
101+
}
102+
}
103+
104+
[CollectionDefinition(nameof(LongIdleServerCluster))]
105+
public sealed class LongIdleServerCluster : ICollectionFixture<LongIdleServerClusterFixture>
106+
{
107+
}
108+
109+
public class LoadClusterFixture : ClusterFixtureBase
44110
{
45111
public LoadClusterFixture()
46112
: base(builder =>
@@ -55,3 +121,66 @@ public LoadClusterFixture()
55121
public sealed class LoadCluster : ICollectionFixture<LoadClusterFixture>
56122
{
57123
}
124+
125+
public sealed class LoadClusterDeviceFixture : LoadClusterFixture
126+
{
127+
}
128+
129+
[CollectionDefinition(nameof(LoadClusterDevice))]
130+
public sealed class LoadClusterDevice : ICollectionFixture<LoadClusterDeviceFixture>
131+
{
132+
}
133+
134+
public sealed class LoadClusterBroadcastFixture : LoadClusterFixture
135+
{
136+
}
137+
138+
[CollectionDefinition(nameof(LoadClusterBroadcast))]
139+
public sealed class LoadClusterBroadcast : ICollectionFixture<LoadClusterBroadcastFixture>
140+
{
141+
}
142+
143+
public sealed class LoadClusterGroupFixture : LoadClusterFixture
144+
{
145+
}
146+
147+
[CollectionDefinition(nameof(LoadClusterGroup))]
148+
public sealed class LoadClusterGroup : ICollectionFixture<LoadClusterGroupFixture>
149+
{
150+
}
151+
152+
public sealed class LoadClusterStreamingFixture : LoadClusterFixture
153+
{
154+
}
155+
156+
[CollectionDefinition(nameof(LoadClusterStreaming))]
157+
public sealed class LoadClusterStreaming : ICollectionFixture<LoadClusterStreamingFixture>
158+
{
159+
}
160+
161+
public sealed class LoadClusterInvocationFixture : LoadClusterFixture
162+
{
163+
}
164+
165+
[CollectionDefinition(nameof(LoadClusterInvocation))]
166+
public sealed class LoadClusterInvocation : ICollectionFixture<LoadClusterInvocationFixture>
167+
{
168+
}
169+
170+
public sealed class LoadClusterCascadeFixture : LoadClusterFixture
171+
{
172+
}
173+
174+
[CollectionDefinition(nameof(LoadClusterCascade))]
175+
public sealed class LoadClusterCascade : ICollectionFixture<LoadClusterCascadeFixture>
176+
{
177+
}
178+
179+
public sealed class LoadClusterActivationFixture : LoadClusterFixture
180+
{
181+
}
182+
183+
[CollectionDefinition(nameof(LoadClusterActivation))]
184+
public sealed class LoadClusterActivation : ICollectionFixture<LoadClusterActivationFixture>
185+
{
186+
}

0 commit comments

Comments
 (0)