Skip to content

Commit 2cd11f5

Browse files
make FutureActorRef<T> unsealed (#6322)
* make `FutureActorRef<T>` unsealed * extend FutureActorRef<T> for telemetry * added API approvals
1 parent fb507b1 commit 2cd11f5

File tree

5 files changed

+17
-15
lines changed

5 files changed

+17
-15
lines changed

RELEASE_NOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#### 1.4.48 December 29th 2022 ####
2+
*Placeholder for
3+
14
#### 1.4.47 December 9th 2022 ####
25
Akka.NET v1.4.47 is a maintenance patch for Akka.NET v1.4.46 that includes a variety of bug fixes, performance improvements, and new features.
36

src/common.props

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Copyright>Copyright © 2013-2022 Akka.NET Team</Copyright>
44
<Authors>Akka.NET Team</Authors>
5-
<VersionPrefix>1.4.46</VersionPrefix>
5+
<VersionPrefix>1.4.48</VersionPrefix>
66
<PackageIcon>akkalogo.png</PackageIcon>
77
<PackageProjectUrl>https://github.com/akkadotnet/akka.net</PackageProjectUrl>
88
<PackageLicenseUrl>https://github.com/akkadotnet/akka.net/blob/master/LICENSE</PackageLicenseUrl>
@@ -35,16 +35,7 @@
3535
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
3636
</PropertyGroup>
3737
<PropertyGroup>
38-
<PackageReleaseNotes>Akka.NET v1.4.46 is a security patch for Akka.NET v1.4.45 but also includes some other fixes.
39-
Security Advisory**: Akka.NET v1.4.45 and earlier depend on an old System.Configuration.ConfigurationManager version 4.7.0 which transitively depends on System.Common.Drawing v4.7.0. The System.Common.Drawing v4.7.0 is affected by a remote code execution vulnerability [GHSA-ghhp-997w-qr28](https://github.com/advisories/GHSA-ghhp-997w-qr28).
40-
We have separately created a security advisory for [Akka.NET Versions &lt; 1.4.46 and &lt; 1.5.0-alpha3 to track this issue](https://github.com/akkadotnet/akka.net/security/advisories/GHSA-gpv5-rp6w-58r8).
41-
Fixes and Updates**
42-
[Akka: Upgrade to Newtonsoft.Json 13.0.1 as minimum version](https://github.com/akkadotnet/akka.net/pull/6252)
43-
[Akka: Upgrade to System.Configuration.ConfigurationManager 6.0.1](https://github.com/akkadotnet/akka.net/pull/6253) - resolves security issue.
44-
[Akka.IO: Report cause for Akka/IO TCP `CommandFailed` events](https://github.com/akkadotnet/akka.net/pull/6224)
45-
[Akka.Cluster.Tools: Make sure that `DeadLetter`s published by `DistributedPubSubMediator` contain full context of topic](https://github.com/akkadotnet/akka.net/pull/6209)
46-
[Akka.Cluster.Metrics: Improve CPU/Memory metrics collection at Akka.Cluster.Metrics](https://github.com/akkadotnet/akka.net/issues/4142) - built-in metrics are now much more accurate.
47-
You can see the [full set of tracked issues for Akka.NET v1.4.46 here](https://github.com/akkadotnet/akka.net/milestone/77).</PackageReleaseNotes>
38+
<PackageReleaseNotes>Placeholder for</PackageReleaseNotes>
4839
</PropertyGroup>
4940
<!-- SourceLink support for all Akka.NET projects -->
5041
<ItemGroup>

src/core/Akka.API.Tests/CoreAPISpec.ApproveCore.verified.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -885,11 +885,12 @@ namespace Akka.Actor
885885
public Failures() { }
886886
public System.Collections.Generic.List<Akka.Actor.Failure> Entries { get; }
887887
}
888-
public sealed class FutureActorRef<T> : Akka.Actor.MinimalActorRef
888+
public class FutureActorRef<T> : Akka.Actor.MinimalActorRef
889889
{
890890
public FutureActorRef(System.Threading.Tasks.TaskCompletionSource<T> result, Akka.Actor.ActorPath path, Akka.Actor.IActorRefProvider provider) { }
891891
public override Akka.Actor.ActorPath Path { get; }
892892
public override Akka.Actor.IActorRefProvider Provider { get; }
893+
public virtual void DeliverAsk(object message, Akka.Actor.ICanTell destination) { }
893894
protected override void TellInternal(object message, Akka.Actor.IActorRef sender) { }
894895
}
895896
public class static Futures

src/core/Akka/Actor/ActorRef.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public interface IRepointableRef : IActorRefScope
6969
///
7070
/// ActorRef implementation used for one-off tasks.
7171
/// </summary>
72-
public sealed class FutureActorRef<T> : MinimalActorRef
72+
public class FutureActorRef<T> : MinimalActorRef
7373
{
7474
private readonly TaskCompletionSource<T> _result;
7575
private readonly ActorPath _path;
@@ -122,9 +122,12 @@ protected override void TellInternal(object message, IActorRef sender)
122122
handled = _result.TrySetException(f.Cause
123123
?? new TaskCanceledException("Task cancelled by actor via Failure message."));
124124
break;
125+
#pragma warning disable CS0618
126+
// for backwards compatibility
125127
case Failure f:
126128
handled = _result.TrySetException(f.Exception
127-
?? new TaskCanceledException("Task cancelled by actor via Failure message."));
129+
?? new TaskCanceledException("Task cancelled by actor via Failure message."));
130+
#pragma warning restore CS0618
128131
break;
129132
default:
130133
_ = _result.TrySetException(new ArgumentException(
@@ -136,6 +139,10 @@ protected override void TellInternal(object message, IActorRef sender)
136139
if (!handled && !_result.Task.IsCanceled)
137140
_provider.DeadLetters.Tell(message ?? default(T), this);
138141
}
142+
143+
public virtual void DeliverAsk(object message, ICanTell destination){
144+
destination.Tell(message, this);
145+
}
139146
}
140147

141148

src/core/Akka/Actor/Futures.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public static Task<T> Ask<T>(this ICanTell self, Func<IActorRef, object> message
164164
//The future actor needs to be registered in the temp container
165165
provider.RegisterTempActor(future, path);
166166
var message = messageFactory(future);
167-
self.Tell(message, future);
167+
future.DeliverAsk(message, self);
168168

169169
return result.Task;
170170
}

0 commit comments

Comments
 (0)