Skip to content

Commit d6e5953

Browse files
Subscription error handling
1 parent cece029 commit d6e5953

File tree

3 files changed

+27
-18
lines changed

3 files changed

+27
-18
lines changed

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Execution/Nodes/OperationExecutionNode.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ private async Task<ExecutionNodeResult> ExecuteInternalAsync(
209209
Stopwatch.GetElapsedTime(start));
210210
}
211211

212-
// TODO: Error handling
213212
internal async Task<SubscriptionResult> SubscribeAsync(
214213
OperationPlanContext context,
215214
CancellationToken cancellationToken = default)
@@ -224,20 +223,26 @@ internal async Task<SubscriptionResult> SubscribeAsync(
224223
};
225224

226225
var client = context.GetClient(SchemaName, Operation.Operation);
227-
var response = await client.ExecuteAsync(context, request, cancellationToken);
228226

229-
if (!response.IsSuccessful)
227+
try
230228
{
231-
return SubscriptionResult.Failed();
229+
var response = await client.ExecuteAsync(context, request, cancellationToken);
230+
231+
var stream = new SubscriptionEnumerable(
232+
context,
233+
this,
234+
response,
235+
response.ReadAsResultStreamAsync(cancellationToken),
236+
context.GetDiagnosticEvents());
237+
238+
return SubscriptionResult.Success(stream);
232239
}
240+
catch (Exception exception)
241+
{
242+
AddErrors(context, exception, variables, ResponseNames);
233243

234-
var stream = new SubscriptionEnumerable(
235-
context,
236-
this,
237-
response,
238-
response.ReadAsResultStreamAsync(cancellationToken),
239-
context.GetDiagnosticEvents());
240-
return SubscriptionResult.Success(stream);
244+
return SubscriptionResult.Failed();
245+
}
241246
}
242247

243248
internal void AddDependency(ExecutionNode node)
@@ -505,7 +510,7 @@ public async ValueTask<bool> MoveNextAsync()
505510
_context.AddPartialResults(_node.Source, _resultBuffer, _node.ResponseNames);
506511
}
507512
}
508-
catch (Exception ex)
513+
catch (Exception exception)
509514
{
510515
// ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract
511516
_resultBuffer[0]?.Dispose();
@@ -516,7 +521,12 @@ public async ValueTask<bool> MoveNextAsync()
516521
scope ?? Disposable.Empty,
517522
start ?? Stopwatch.GetTimestamp(),
518523
Stopwatch.GetTimestamp(),
519-
Exception: ex);
524+
Exception: exception);
525+
526+
var error = ErrorBuilder.FromException(exception).Build();
527+
528+
_context.AddErrors(error, _node.ResponseNames, Path.Root);
529+
520530
return true;
521531
}
522532

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Execution/Results/FetchResultStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public void AddErrors(IError error, ReadOnlySpan<string> responseNames, params R
175175
continue;
176176
}
177177

178-
_valueCompletion.BuildResult(objectResult, responseNames, error, path);
178+
_valueCompletion.BuildErrorResult(objectResult, responseNames, error, path);
179179

180180
path = ref Unsafe.Add(ref path, 1)!;
181181
}

src/HotChocolate/Fusion-vnext/src/Fusion.Execution/Execution/Results/ValueCompletion.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Text.Json;
33
using HotChocolate.Fusion.Execution.Clients;
44
using HotChocolate.Fusion.Execution.Nodes;
5-
using HotChocolate.Language;
65
using HotChocolate.Types;
76

87
namespace HotChocolate.Fusion.Execution;
@@ -47,10 +46,10 @@ public void BuildResult(
4746
{
4847
var error = errorTrie?.FindFirstError() ??
4948
ErrorBuilder.New()
50-
.SetMessage("Unexpected execution error") // TODO: Better message
49+
.SetMessage("Unexpected Execution Error")
5150
.Build();
5251

53-
BuildResult(objectResult, responseNames, error, objectResult.Path);
52+
BuildErrorResult(objectResult, responseNames, error, objectResult.Path);
5453

5554
return;
5655
}
@@ -80,7 +79,7 @@ public void BuildResult(
8079
}
8180
}
8281

83-
public void BuildResult(
82+
public void BuildErrorResult(
8483
ObjectResult objectResult,
8584
ReadOnlySpan<string> responseNames,
8685
IError error,

0 commit comments

Comments
 (0)