Skip to content

Commit 9b16f21

Browse files
committed
Minor feedback
1 parent 0c9a687 commit 9b16f21

File tree

1 file changed

+15
-29
lines changed

1 file changed

+15
-29
lines changed

src/Orleans.Runtime/Placement/PlacementService.cs

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Diagnostics;
34
using System.Linq;
45
using System.Runtime.CompilerServices;
56
using System.Runtime.InteropServices;
@@ -246,7 +247,7 @@ private class PlacementWorker
246247
#pragma warning restore IDE0052 // Remove unread private members
247248
private readonly object _lockObj = new();
248249
private readonly PlacementService _placementService;
249-
private List<(Message Message, TaskCompletionSource<bool> Completion)> _messages = new();
250+
private List<(Message Message, TaskCompletionSource Completion)> _messages = new();
250251

251252
public PlacementWorker(PlacementService placementService)
252253
{
@@ -259,7 +260,7 @@ public PlacementWorker(PlacementService placementService)
259260

260261
public Task AddressMessage(Message message)
261262
{
262-
var completion = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);
263+
var completion = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
263264

264265
lock (_lockObj)
265266
{
@@ -271,7 +272,7 @@ public Task AddressMessage(Message message)
271272
return completion.Task;
272273
}
273274

274-
private List<(Message Message, TaskCompletionSource<bool> Completion)> GetMessages()
275+
private List<(Message Message, TaskCompletionSource Completion)> GetMessages()
275276
{
276277
lock (_lockObj)
277278
{
@@ -347,47 +348,32 @@ private void AddressWaitingMessages(GrainPlacementWorkItem completedWorkItem)
347348
var resultTask = completedWorkItem.Result;
348349
var messages = completedWorkItem.Messages;
349350

350-
if (resultTask.IsCompletedSuccessfully)
351+
try
351352
{
353+
var siloAddress = resultTask.Result;
352354
foreach (var message in messages)
353355
{
354-
var siloAddress = resultTask.Result;
355356
_placementService.SetMessageTargetPlacement(message.Message, siloAddress);
356-
message.Completion.TrySetResult(true);
357+
message.Completion.TrySetResult();
357358
}
358359
}
359-
else if (resultTask.IsCanceled)
360+
catch (Exception exception)
360361
{
361-
foreach (var message in messages)
362+
var originalException = exception switch
362363
{
363-
message.Completion.TrySetCanceled();
364-
}
365-
}
366-
else if (resultTask.IsFaulted)
367-
{
364+
AggregateException ae when ae.InnerExceptions.Count == 1 => ae.InnerException,
365+
_ => exception,
366+
};
367+
368368
foreach (var message in messages)
369369
{
370-
message.Completion.TrySetException(OriginalException(resultTask.Exception));
370+
message.Completion.TrySetException(originalException);
371371
}
372372
}
373373

374374
messages.Clear();
375375
}
376376

377-
private static Exception OriginalException(AggregateException exception)
378-
{
379-
if (exception is null)
380-
{
381-
// Due to race conditions, it is possible to observe IsFaulted = true, but still Exception = null.
382-
// This is because the state transition to Faulted might have occurred just after the Exception
383-
// property check, but before the internal exception was retrieved.
384-
385-
return new Exception("Task faulted without an exception.");
386-
}
387-
388-
return exception.InnerExceptions.Count == 1 ? exception.InnerException : exception;
389-
}
390-
391377
private async Task<SiloAddress> GetOrPlaceActivationAsync(Message firstMessage)
392378
{
393379
await Task.Yield();
@@ -421,7 +407,7 @@ private async Task<SiloAddress> GetOrPlaceActivationAsync(Message firstMessage)
421407

422408
private class GrainPlacementWorkItem
423409
{
424-
public List<(Message Message, TaskCompletionSource<bool> Completion)> Messages { get; } = new();
410+
public List<(Message Message, TaskCompletionSource Completion)> Messages { get; } = new();
425411

426412
public Task<SiloAddress> Result { get; set; }
427413
}

0 commit comments

Comments
 (0)