Skip to content

Commit c9d01ea

Browse files
authored
Merge branch 'main' into mst/relative-cursors
2 parents 5c50ef9 + 9c34a27 commit c9d01ea

File tree

106 files changed

+4134
-572
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+4134
-572
lines changed

dictionary.txt

+5-3
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ Giroux
5757
GraphiQL
5858
graphqlconfig
5959
graphqlrc
60+
graphqls
6061
graphyne
6162
greendonut
6263
Hasura
@@ -76,6 +77,7 @@ LICEN*
7677
Linq
7778
Marek
7879
matchesBrics
80+
MediatR
7981
Memberwise
8082
mercurius
8183
mergeable
@@ -109,6 +111,7 @@ oneof
109111
OpenIddict
110112
opensgid
111113
OPTOUT
114+
overfetching
112115
OWIN
113116
pageable
114117
Partitioner
@@ -117,6 +120,7 @@ PKCE
117120
pkey
118121
Postgraphile
119122
preconfigured
123+
preparables
120124
PRIMEM
121125
PROJCS
122126
protobuf
@@ -156,6 +160,7 @@ streamable
156160
Structs
157161
subgraphs
158162
sublicensable
163+
subselections
159164
supergraph
160165
Swashbuckle
161166
SYSLIB
@@ -178,6 +183,3 @@ websockets
178183
Wilhuff
179184
Wunder
180185
xunit
181-
preparables
182-
MediatR
183-
overfetching

src/All.slnx

+1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
<Project Path="HotChocolate/Data/test/Data.Filters.InMemory.Tests/HotChocolate.Data.Filters.InMemory.Tests.csproj" />
151151
<Project Path="HotChocolate/Data/test/Data.Filters.SqlServer.Tests/HotChocolate.Data.Filters.SqlServer.Tests.csproj" />
152152
<Project Path="HotChocolate/Data/test/Data.Filters.Tests/HotChocolate.Data.Filters.Tests.csproj" />
153+
<Project Path="HotChocolate/Data/test/Data.NodaTime.Tests/HotChocolate.Data.NodaTime.Tests.csproj" />
153154
<Project Path="HotChocolate/Data/test/Data.PostgreSQL.Tests/HotChocolate.Data.PostgreSQL.Tests.csproj" />
154155
<Project Path="HotChocolate/Data/test/Data.Projections.SqlServer.Tests/HotChocolate.Data.Projections.SqlServer.Tests.csproj" />
155156
<Project Path="HotChocolate/Data/test/Data.Projections.Tests/HotChocolate.Data.Projections.Tests.csproj" />

src/Directory.Packages.props

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<PackageVersion Include="Moq" Version="4.20.70" />
3838
<PackageVersion Include="NetTopologySuite" Version="2.0.0" />
3939
<PackageVersion Include="Newtonsoft.Json" Version="13.0.2" />
40-
<PackageVersion Include="NodaTime" Version="3.0.0" />
40+
<PackageVersion Include="NodaTime" Version="3.2.1" />
4141
<PackageVersion Include="Npgsql" Version="8.0.4" />
4242
<PackageVersion Include="Opa.Native" Version="0.41.0" />
4343
<PackageVersion Include="OpenTelemetry.Api" Version="1.1.0" />
@@ -90,6 +90,7 @@
9090
<PackageVersion Include="Microsoft.Net.Http.Headers" Version="9.0.2" />
9191
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.3" />
9292
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="9.0.3" />
93+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="9.0.3" />
9394
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="9.0.2" />
9495
<PackageVersion Include="System.IO.Packaging" Version="9.0.2" />
9596
<PackageVersion Include="System.IO.Pipelines" Version="9.0.2" />
@@ -115,6 +116,7 @@
115116
<PackageVersion Include="Microsoft.Net.Http.Headers" Version="8.0.4" />
116117
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.8" />
117118
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="8.0.8" />
119+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="8.0.8" />
118120
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="8.0.0" />
119121
<PackageVersion Include="System.IO.Packaging" Version="8.0.1" />
120122
<PackageVersion Include="System.IO.Pipelines" Version="8.0.0" />

src/HotChocolate/AspNetCore/src/AspNetCore/Extensions/HotChocolateAspNetCoreServiceCollectionExtensions.Warmup.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static IRequestExecutorBuilder InitializeOnStartup(
3434
throw new ArgumentNullException(nameof(builder));
3535
}
3636

37-
builder.Services.AddHostedService<ExecutorWarmupService>();
37+
builder.Services.AddHostedService<RequestExecutorWarmupService>();
3838
builder.Services.AddSingleton(new WarmupSchemaTask(builder.Name, keepWarm, warmup));
3939
return builder;
4040
}

src/HotChocolate/AspNetCore/src/AspNetCore/Warmup/ExecutorWarmupService.cs

-96
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Microsoft.Extensions.Hosting;
2+
3+
namespace HotChocolate.AspNetCore.Warmup;
4+
5+
internal sealed class RequestExecutorWarmupService(
6+
IRequestExecutorWarmup executorWarmup)
7+
: IHostedService
8+
{
9+
public async Task StartAsync(CancellationToken cancellationToken)
10+
=> await executorWarmup.WarmupAsync(cancellationToken).ConfigureAwait(false);
11+
12+
public Task StopAsync(CancellationToken cancellationToken)
13+
=> Task.CompletedTask;
14+
}

src/HotChocolate/AspNetCore/src/AspNetCore/Warmup/WarmupSchemaTask.cs

-25
This file was deleted.

src/HotChocolate/AspNetCore/test/AspNetCore.Tests/EvictSchemaTests.cs

+25-6
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
using HotChocolate.AspNetCore.Tests.Utilities;
2+
using HotChocolate.Execution;
3+
using Microsoft.Extensions.DependencyInjection;
24

35
namespace HotChocolate.AspNetCore;
46

5-
public class EvictSchemaTests : ServerTestBase
7+
public class EvictSchemaTests(TestServerFactory serverFactory) : ServerTestBase(serverFactory)
68
{
7-
public EvictSchemaTests(TestServerFactory serverFactory)
8-
: base(serverFactory)
9-
{
10-
}
11-
129
[Fact]
1310
public async Task Evict_Default_Schema()
1411
{
1512
// arrange
13+
var newExecutorCreatedResetEvent = new AutoResetEvent(false);
1614
var server = CreateStarWarsServer();
1715

1816
var time1 = await server.GetAsync(
1917
new ClientQueryRequest { Query = "{ time }", });
2018

19+
var resolver = server.Services.GetRequiredService<IRequestExecutorResolver>();
20+
resolver.Events.Subscribe(new RequestExecutorEventObserver(@event =>
21+
{
22+
if (@event.Type == RequestExecutorEventType.Created)
23+
{
24+
newExecutorCreatedResetEvent.Set();
25+
}
26+
}));
27+
2128
// act
2229
await server.GetAsync(
2330
new ClientQueryRequest { Query = "{ evict }", });
31+
newExecutorCreatedResetEvent.WaitOne(5000);
2432

2533
// assert
2634
var time2 = await server.GetAsync(
@@ -32,16 +40,27 @@ await server.GetAsync(
3240
public async Task Evict_Named_Schema()
3341
{
3442
// arrange
43+
var newExecutorCreatedResetEvent = new AutoResetEvent(false);
3544
var server = CreateStarWarsServer();
3645

3746
var time1 = await server.GetAsync(
3847
new ClientQueryRequest { Query = "{ time }", },
3948
"/evict");
4049

50+
var resolver = server.Services.GetRequiredService<IRequestExecutorResolver>();
51+
resolver.Events.Subscribe(new RequestExecutorEventObserver(@event =>
52+
{
53+
if (@event.Type == RequestExecutorEventType.Created)
54+
{
55+
newExecutorCreatedResetEvent.Set();
56+
}
57+
}));
58+
4159
// act
4260
await server.GetAsync(
4361
new ClientQueryRequest { Query = "{ evict }", },
4462
"/evict");
63+
newExecutorCreatedResetEvent.WaitOne(5000);
4564

4665
// assert
4766
var time2 = await server.GetAsync(

src/HotChocolate/Core/src/Execution/AutoUpdateRequestExecutorProxy.cs

+1-23
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ private AutoUpdateRequestExecutorProxy(
2121
_executorProxy = requestExecutorProxy;
2222
_executor = initialExecutor;
2323

24-
_executorProxy.ExecutorEvicted += (_, _) => BeginUpdateExecutor();
25-
26-
BeginUpdateExecutor();
24+
_executorProxy.ExecutorUpdated += (_, args) => _executor = args.Executor;
2725
}
2826

2927
/// <summary>
@@ -144,26 +142,6 @@ public Task<IResponseStream> ExecuteBatchAsync(
144142
CancellationToken cancellationToken = default)
145143
=> _executor.ExecuteBatchAsync(requestBatch, cancellationToken);
146144

147-
private void BeginUpdateExecutor()
148-
=> UpdateExecutorAsync().FireAndForget();
149-
150-
private async ValueTask UpdateExecutorAsync()
151-
{
152-
await _semaphore.WaitAsync().ConfigureAwait(false);
153-
154-
try
155-
{
156-
var executor = await _executorProxy
157-
.GetRequestExecutorAsync(CancellationToken.None)
158-
.ConfigureAwait(false);
159-
_executor = executor;
160-
}
161-
finally
162-
{
163-
_semaphore.Release();
164-
}
165-
}
166-
167145
/// <inheritdoc cref="IDisposable" />
168146
public void Dispose()
169147
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace HotChocolate.Execution.Caching;
2+
3+
internal sealed class PreparedOperationCacheOptions
4+
{
5+
public int Capacity { get; set; } = 100;
6+
}

src/HotChocolate/Core/src/Execution/DependencyInjection/InternalServiceCollectionExtensions.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,8 @@ internal static IServiceCollection TryAddRequestExecutorResolver(
154154
this IServiceCollection services)
155155
{
156156
services.TryAddSingleton<RequestExecutorResolver>();
157-
services.TryAddSingleton<IRequestExecutorResolver>(
158-
sp => sp.GetRequiredService<RequestExecutorResolver>());
159-
services.TryAddSingleton<IInternalRequestExecutorResolver>(
160-
sp => sp.GetRequiredService<RequestExecutorResolver>());
157+
services.TryAddSingleton<IRequestExecutorResolver>(sp => sp.GetRequiredService<RequestExecutorResolver>());
158+
services.TryAddSingleton<IRequestExecutorWarmup>(sp => sp.GetRequiredService<RequestExecutorResolver>());
161159
return services;
162160
}
163161

@@ -166,8 +164,8 @@ internal static IServiceCollection TryAddDefaultCaches(
166164
{
167165
services.TryAddSingleton<IDocumentCache>(
168166
_ => new DefaultDocumentCache());
169-
services.TryAddSingleton<IPreparedOperationCache>(
170-
_ => new DefaultPreparedOperationCache());
167+
services.TryAddSingleton<PreparedOperationCacheOptions>(
168+
_ => new PreparedOperationCacheOptions { Capacity = 100 });
171169
return services;
172170
}
173171

src/HotChocolate/Core/src/Execution/DependencyInjection/RequestExecutorServiceCollectionExtensions.cs

+3-14
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,6 @@ private static IRequestExecutorBuilder CreateBuilder(
163163

164164
builder.Services.AddValidation(schemaName);
165165

166-
builder.Configure(
167-
(sp, e) =>
168-
{
169-
e.OnRequestExecutorEvictedHooks.Add(
170-
// when ever we evict this schema we will clear the caches.
171-
new OnRequestExecutorEvictedAction(
172-
_ => sp.GetRequiredService<IPreparedOperationCache>().Clear()));
173-
});
174-
175166
builder.TryAddNoOpTransactionScopeHandler();
176167
builder.TryAddTypeInterceptor<DataLoaderRootFieldTypeInterceptor>();
177168
builder.TryAddTypeInterceptor<RequirementsTypeInterceptor>();
@@ -193,11 +184,9 @@ public static IServiceCollection AddOperationCache(
193184
this IServiceCollection services,
194185
int capacity = 100)
195186
{
196-
services.RemoveAll<IPreparedOperationCache>();
197-
198-
services.AddSingleton<IPreparedOperationCache>(
199-
_ => new DefaultPreparedOperationCache(capacity));
200-
187+
services.RemoveAll<PreparedOperationCacheOptions>();
188+
services.AddSingleton<PreparedOperationCacheOptions>(
189+
_ => new PreparedOperationCacheOptions{ Capacity = capacity });
201190
return services;
202191
}
203192

0 commit comments

Comments
 (0)