From 3d7343e1c1c7c8e859929954fea99f3ed5151819 Mon Sep 17 00:00:00 2001
From: Reuben Bond <203839+ReubenBond@users.noreply.github.com>
Date: Tue, 21 May 2024 16:54:26 -0700
Subject: [PATCH] Improve `ActivationData` shutdown process (#9018)
* Fix termination condition in ActivationMigrationManager.AcceptMigratingGrains
* Improve ActivationData shutdown process
* Use file-scoped namespaces in ActivationData
---
.../Core/DeactivationReason.cs | 11 +
src/Orleans.Runtime/Catalog/ActivationData.cs | 2994 ++++++++---------
.../Catalog/ActivationState.cs | 6 +-
src/Orleans.Runtime/Catalog/Catalog.cs | 12 -
4 files changed, 1508 insertions(+), 1515 deletions(-)
diff --git a/src/Orleans.Core.Abstractions/Core/DeactivationReason.cs b/src/Orleans.Core.Abstractions/Core/DeactivationReason.cs
index a9839fd033..55d01b878a 100644
--- a/src/Orleans.Core.Abstractions/Core/DeactivationReason.cs
+++ b/src/Orleans.Core.Abstractions/Core/DeactivationReason.cs
@@ -56,5 +56,16 @@ public DeactivationReason(DeactivationReasonCode code, Exception exception, stri
/// Gets the exception which resulted in deactivation.
///
public Exception Exception { get; }
+
+ ///
+ public override string ToString()
+ {
+ if (Exception is not null)
+ {
+ return $"{ReasonCode}: {Description}. Exception: {Exception}";
+ }
+
+ return $"{ReasonCode}: {Description}";
+ }
}
}
diff --git a/src/Orleans.Runtime/Catalog/ActivationData.cs b/src/Orleans.Runtime/Catalog/ActivationData.cs
index 595af00e55..575abffa60 100644
--- a/src/Orleans.Runtime/Catalog/ActivationData.cs
+++ b/src/Orleans.Runtime/Catalog/ActivationData.cs
@@ -18,2054 +18,2048 @@
using Orleans.Serialization.Session;
using Orleans.Serialization.TypeSystem;
-namespace Orleans.Runtime
+namespace Orleans.Runtime;
+
+///
+/// Maintains additional per-activation state that is required for Orleans internal operations.
+/// MUST lock this object for any concurrent access
+/// Consider: compartmentalize by usage, e.g., using separate interfaces for data for catalog, etc.
+///
+internal sealed class ActivationData : IGrainContext, ICollectibleGrainContext, IGrainExtensionBinder, IActivationWorkingSetMember, IGrainTimerRegistry, IGrainManagementExtension, ICallChainReentrantGrainContext, IAsyncDisposable
{
- ///
- /// Maintains additional per-activation state that is required for Orleans internal operations.
- /// MUST lock this object for any concurrent access
- /// Consider: compartmentalize by usage, e.g., using separate interfaces for data for catalog, etc.
- ///
- internal sealed class ActivationData : IGrainContext, ICollectibleGrainContext, IGrainExtensionBinder, IActivationWorkingSetMember, IGrainTimerRegistry, IGrainManagementExtension, ICallChainReentrantGrainContext, IAsyncDisposable
- {
- private const string GrainAddressMigrationContextKey = "sys.addr";
- private readonly GrainTypeSharedContext _shared;
- private readonly IServiceScope _serviceScope;
- private readonly WorkItemGroup _workItemGroup;
- private readonly List<(Message Message, CoarseStopwatch QueuedTime)> _waitingRequests = new();
- private readonly Dictionary _runningRequests = new();
- private readonly SingleWaiterAutoResetEvent _workSignal = new() { RunContinuationsAsynchronously = true };
- private GrainLifecycle _lifecycle;
- private List