From 020cb7d31ad489335f8725c96fbf91eb01039b16 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Wed, 30 Nov 2022 18:35:56 -0600 Subject: [PATCH] V1.4 sync up (#6282) * cleaned up duplicate System.Collections.Immutable package reference (#6264) also standardized all System.* packages on a common version * converted build system to .NET 7.0 (#6263) * converted build system to .NET 7.0 * upgrade to Incrementalist.Cmd v0.8.0 * upgraded MNTR to support .NET 7.0 * fixed build system to target .NET 7.0 * upgrade to latest version of DocFx * add .NET 6 SDK back to build system * fixed HyperionConfigTests * Akka.Streams: `ReuseLatest` stage to repeatedly emit the most recent value until a newer one is pushed (#6262) * code cleanup in Akka.Streams `Attributes` * added `RepeatPrevious{T}` stage * WIP - debugging `RepeatPreviousSpecs` * fixed tests and added documentation * fixed documentation * API approvals * fixed markdown linting * removed `SwapPrevious` delegate. * renamed stage from `RepeatPrevious` to `ReuseLatest` * remove BDN results * added real UID to `ActorPathBenchmarks` (#6276) While working on https://github.com/akkadotnet/akka.net/pull/6195 I realized that none of those `ActorPath`s actually have a set UID, thus we're missing that entire facet from both the parsing and serialization benchmarks. * Enable dynamic PGO for RemotePingPong and PingPong (#6277) * eliminate `ActorPath.ToSerializationFormat` UID allocations (#6195) * eliminate `ActorPath.ToSerializationFormat` UID allocations Used some more `Span` magic to avoid additional allocations when string-ifying `ActorPath` components. * adding `SpanHacks` benchmarks * sped up `Int64SizeInCharacters` * added `TryFormat` benchmarks * fixed n+1 error in jump table * cleaned up `TryFormat` inside `SpanHacks` * fixed `SpanHacks` index calculation * removed BDN results * Update SpanHacks.cs * compilation fixes and V1.5 api approval --- .../azure-pipeline.mntr-template.yaml | 4 +- build-system/azure-pipeline.template.yaml | 6 +- build-system/pr-validation.yaml | 4 +- build.fsx | 4 +- build.ps1 | 4 +- build.sh | 2 +- .../streams/buffersandworkingwithrate.md | 29 ++++++ docs/articles/streams/builtinstages.md | 18 ++++ .../streams/pipeliningandparallelism.md | 3 +- .../Actor/ActorPathBenchmarks.cs | 12 ++- .../Utils/FastLazyBenchmarks.cs | 2 +- .../Utils/SpanHackBenchmarks.cs | 34 +++++++ src/benchmark/PingPong/PingPong.csproj | 5 + .../RemotePingPong/RemotePingPong.csproj | 5 +- src/common.props | 5 +- .../HyperionConfigTests.cs | 2 +- ...reAPISpec.ApproveCluster.Core.verified.txt | 2 +- ...APISpec.ApproveCluster.DotNet.verified.txt | 2 +- ...oreAPISpec.ApproveCluster.Net.verified.txt | 2 +- .../CoreAPISpec.ApproveCluster.verified.txt | 2 +- ...ec.ApproveClusterMetrics.Core.verified.txt | 2 +- ....ApproveClusterMetrics.DotNet.verified.txt | 2 +- ...pec.ApproveClusterMetrics.Net.verified.txt | 2 +- ...APISpec.ApproveClusterMetrics.verified.txt | 2 +- ...c.ApproveClusterSharding.Core.verified.txt | 2 +- ...ApproveClusterSharding.DotNet.verified.txt | 2 +- ...ec.ApproveClusterSharding.Net.verified.txt | 2 +- ...PISpec.ApproveClusterSharding.verified.txt | 2 +- ...Spec.ApproveClusterTools.Core.verified.txt | 2 +- ...ec.ApproveClusterTools.DotNet.verified.txt | 2 +- ...ISpec.ApproveClusterTools.Net.verified.txt | 2 +- ...reAPISpec.ApproveClusterTools.verified.txt | 2 +- ...Spec.ApproveCoordination.Core.verified.txt | 2 +- ...ec.ApproveCoordination.DotNet.verified.txt | 2 +- ...ISpec.ApproveCoordination.Net.verified.txt | 2 +- .../CoreAPISpec.ApproveCore.Core.verified.txt | 2 +- ...oreAPISpec.ApproveCore.DotNet.verified.txt | 2 +- .../CoreAPISpec.ApproveCore.Net.verified.txt | 2 +- .../CoreAPISpec.ApproveCore.verified.txt | 2 +- ...APISpec.ApproveDiscovery.Core.verified.txt | 2 +- ...ISpec.ApproveDiscovery.DotNet.verified.txt | 2 +- ...eAPISpec.ApproveDiscovery.Net.verified.txt | 2 +- ...c.ApproveDistributedData.Core.verified.txt | 2 +- ...ApproveDistributedData.DotNet.verified.txt | 2 +- ...ec.ApproveDistributedData.Net.verified.txt | 2 +- ...ISpec.ApprovePersistence.Core.verified.txt | 2 +- ...pec.ApprovePersistence.DotNet.verified.txt | 2 +- ...PISpec.ApprovePersistence.Net.verified.txt | 2 +- ....ApprovePersistenceQuery.Core.verified.txt | 2 +- ...pprovePersistenceQuery.DotNet.verified.txt | 2 +- ...c.ApprovePersistenceQuery.Net.verified.txt | 2 +- ...ISpec.ApprovePersistenceQuery.verified.txt | 2 +- ...rovePersistenceSqlCommon.Core.verified.txt | 2 +- ...vePersistenceSqlCommon.DotNet.verified.txt | 2 +- ...provePersistenceSqlCommon.Net.verified.txt | 2 +- ...ersistenceSqlCommonQuery.Core.verified.txt | 2 +- ...sistenceSqlCommonQuery.DotNet.verified.txt | 2 +- ...PersistenceSqlCommonQuery.Net.verified.txt | 2 +- ...oreAPISpec.ApproveRemote.Core.verified.txt | 2 +- ...eAPISpec.ApproveRemote.DotNet.verified.txt | 2 +- ...CoreAPISpec.ApproveRemote.Net.verified.txt | 2 +- .../CoreAPISpec.ApproveRemote.verified.txt | 2 +- ...reAPISpec.ApproveStreams.Core.verified.txt | 14 ++- ...APISpec.ApproveStreams.DotNet.verified.txt | 14 ++- ...oreAPISpec.ApproveStreams.Net.verified.txt | 14 ++- .../CoreAPISpec.ApproveStreams.verified.txt | 14 ++- .../Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs | 84 ++++++++++++++++ src/core/Akka.Streams/Attributes.cs | 8 +- src/core/Akka.Streams/Dsl/FlowOperations.cs | 39 +++++++- src/core/Akka.Streams/Dsl/ReuseLatest.cs | 96 +++++++++++++++++++ src/core/Akka.Streams/Dsl/SourceOperations.cs | 35 +++++++ src/core/Akka.Tests/Actor/ActorPathSpec.cs | 11 +++ src/core/Akka/Actor/ActorPath.cs | 52 ++++++++-- src/core/Akka/Actor/Inbox.cs | 1 - src/core/Akka/Akka.csproj | 15 +-- .../Akka/IO/Buffers/DisabledBufferPool.cs | 1 - src/core/Akka/Util/SpanHacks.cs | 96 ++++++++++++++++++- 77 files changed, 621 insertions(+), 104 deletions(-) create mode 100644 src/benchmark/Akka.Benchmarks/Utils/SpanHackBenchmarks.cs create mode 100644 src/core/Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs create mode 100644 src/core/Akka.Streams/Dsl/ReuseLatest.cs diff --git a/build-system/azure-pipeline.mntr-template.yaml b/build-system/azure-pipeline.mntr-template.yaml index 0cdf7fba242..2e41f4c2a4c 100644 --- a/build-system/azure-pipeline.mntr-template.yaml +++ b/build-system/azure-pipeline.mntr-template.yaml @@ -17,9 +17,9 @@ jobs: vmImage: ${{ parameters.vmImage }} steps: - task: UseDotNet@2 - displayName: 'Use .NET 6 SDK 6.0.100' + displayName: 'Use .NET 7 SDK 7.0.100' inputs: - version: 6.0.100 + version: 7.0.100 - task: UseDotNet@2 displayName: 'Use .NET Core Runtime 3.1.10' inputs: diff --git a/build-system/azure-pipeline.template.yaml b/build-system/azure-pipeline.template.yaml index fc9e2dc75f9..e0c2bf665e3 100644 --- a/build-system/azure-pipeline.template.yaml +++ b/build-system/azure-pipeline.template.yaml @@ -24,7 +24,11 @@ jobs: value: true steps: - task: UseDotNet@2 - displayName: 'Use .NET 6 SDK 6.0.100' + displayName: 'Use .NET 7 SDK 7.0.100' + inputs: + version: 7.0.100 + - task: UseDotNet@2 # to keep DocFx happy + displayName: "Use .NET 6 SDK 6.0.100" inputs: version: 6.0.100 - task: UseDotNet@2 diff --git a/build-system/pr-validation.yaml b/build-system/pr-validation.yaml index b2c5ae8aad4..dc71a89dd81 100644 --- a/build-system/pr-validation.yaml +++ b/build-system/pr-validation.yaml @@ -63,9 +63,9 @@ jobs: submodules: recursive # set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules persistCredentials: true - task: UseDotNet@2 - displayName: "Use .NET 6 SDK 6.0.100" + displayName: "Use .NET 7 SDK 7.0.100" inputs: - version: 6.0.100 + version: 7.0.100 - task: UseDotNet@2 displayName: "Use .NET Core Runtime 3.1.10" inputs: diff --git a/build.fsx b/build.fsx index 7b37616ba7d..a27175aed1b 100644 --- a/build.fsx +++ b/build.fsx @@ -28,7 +28,7 @@ let outputMultiNode = outputTests @@ "multinode" let outputFailedMultiNode = outputTests @@ "multinode" @@ "FAILED_SPECS_LOGS" let outputBinariesNet45 = outputBinaries @@ "net45" let outputBinariesNetStandard = outputBinaries @@ "netstandard2.0" -let outputBinariesNet = outputBinaries @@ "net6.0" +let outputBinariesNet = outputBinaries @@ "net7.0" let buildNumber = environVarOrDefault "BUILD_NUMBER" "0" let hasTeamCity = (not (buildNumber = "0")) // check if we have the TeamCity environment variable for build # set @@ -57,7 +57,7 @@ let incrementalistReport = output @@ "incrementalist.txt" // Configuration values for tests let testNetFrameworkVersion = "net471" let testNetCoreVersion = "netcoreapp3.1" -let testNetVersion = "net6.0" +let testNetVersion = "net7.0" Target "Clean" (fun _ -> ActivateFinalTarget "KillCreatedProcesses" diff --git a/build.ps1 b/build.ps1 index 99308a2529b..fa94de50ae7 100644 --- a/build.ps1 +++ b/build.ps1 @@ -33,9 +33,9 @@ $FakeVersion = "4.63.0" $NugetVersion = "5.8.0"; $NugetUrl = "https://dist.nuget.org/win-x86-commandline/v$NugetVersion/nuget.exe" $ProtobufVersion = "3.21.5" -$DocfxVersion = "2.58.9" +$DocfxVersion = "2.59.4" -$IncrementalistVersion = "0.7.0"; +$IncrementalistVersion = "0.8.0"; # Make sure tools folder exists $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent diff --git a/build.sh b/build.sh index d2c97f5da09..ee6620bbea6 100755 --- a/build.sh +++ b/build.sh @@ -18,7 +18,7 @@ DOTNET_VERSION=5.0.101 DOTNET_INSTALLER_URL=https://dot.net/v1/dotnet-install.sh DOTNET_CHANNEL=LTS PROTOBUF_VERSION=3.21.5 -INCREMENTALIST_VERSION=0.7.0 +INCREMENTALIST_VERSION=0.8.0 # Define default arguments. TARGET="Default" diff --git a/docs/articles/streams/buffersandworkingwithrate.md b/docs/articles/streams/buffersandworkingwithrate.md index eac5da8ec3f..af4086e13ef 100644 --- a/docs/articles/streams/buffersandworkingwithrate.md +++ b/docs/articles/streams/buffersandworkingwithrate.md @@ -189,3 +189,32 @@ var driftFlow = Flow.Create() ``` Note that all of the elements coming from upstream will go through expand at least once. This means that the output of this flow is going to report a drift of zero if producer is fast enough, or a larger drift otherwise. + +### Reusing Values Downstream + +When working with fan-in stages such as `Zip` where one `Source` might produce messages infrequently, it can be helpful to cache the previous value and re-use it in combination with a faster stream. + +For instance, consider the following scenario: + +* A `Source` that emits an updated `HttpClient` with new bearer-token credentials every 30 minutes and +* A `Source` that emits outbound `HttpRequestMessage`s as they come - at any given moment it can produce zero requests per second or thousands of requests per second. + +In this scenario we're going to want to combine the `Source` and `Source` together so the `HttpClient` can execute all of the `HttpRequestMessage`s - however, given that `HttpClient`s are only emitted once every 30 minutes - how can we use a stage like `Zip` to make sure that every `HttpRequestMessage` gets serviced in a timely, low-latency fashion? + +Enter the `ReuseLatest` stage - which will allow us to reuse the most recent `HttpClient` each time a new `HttpRequestMessage` arrives: + +```csharp +public static Source CreateSourceInternal(string clientId, + Func> tokenProvider, TimeSpan tokenRefreshTimeout) +{ + var source = Source.Tick(TimeSpan.Zero, TimeSpan.FromSeconds(30), clientId) + .SelectAsync(1, async c => + // refresh bearer token, create new HttpClient + CreateClient(c, (await tokenProvider().WaitAsync(tokenRefreshTimeout)))) + // reuse the previous value whenever there's downstream demand + .ReuseLatest(); + return source; +} +``` + +This type of design allows us to decouple the rate at which `HttpClient`s are produced from the rate at which `HttpRequestMessage`s are. diff --git a/docs/articles/streams/builtinstages.md b/docs/articles/streams/builtinstages.md index 1ded80edb24..844a68862c4 100644 --- a/docs/articles/streams/builtinstages.md +++ b/docs/articles/streams/builtinstages.md @@ -667,6 +667,24 @@ Skip elements as long as a predicate function return true for the element **completes** when upstream completes +### ReuseLatest + +Re-use the most recently emitted element downstream. + +> [!NOTE] +> `ReuseLatest` is typically used in combination with fan-in stages such as `Zip` - please see "[Reusing Values Downstream](xref:streams-buffers#reusing-values-downstream)" + +**emits** as long as one element has been emitted from upstream, that element will be emitted downstream +whenever the `ReuseLatest` stage is pulled. If a new value is emitted from upstream, that value will be pushed and will replace the previous value. + +**backpressures** when downstream backpressures. + +**completes** when upstream completes + +`ReuseLatest` Sample: + +[!code-csharp[ReuseLatest](../../../src/core/Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs?name=RepeatPrevious)] + ### Recover Allow sending of one last element downstream when a failure has happened upstream. diff --git a/docs/articles/streams/pipeliningandparallelism.md b/docs/articles/streams/pipeliningandparallelism.md index 62083591e6e..2333f5f8860 100644 --- a/docs/articles/streams/pipeliningandparallelism.md +++ b/docs/articles/streams/pipeliningandparallelism.md @@ -173,5 +173,4 @@ compared to the parallel pipelines. This pattern re-balances after each step, wh at the entry point of the pipeline. This only matters however if the processing time distribution has a large deviation. -[^foot-note-1]: Bartosz's reason for this seemingly suboptimal procedure is that he prefers the temperature of the second pan - to be slightly lower than the first in order to achieve a more homogeneous result. +[^foot-note-1]: Bartosz's reason for this seemingly suboptimal procedure is that he prefers the temperature of the second pan to be slightly lower than the first in order to achieve a more homogeneous result. diff --git a/src/benchmark/Akka.Benchmarks/Actor/ActorPathBenchmarks.cs b/src/benchmark/Akka.Benchmarks/Actor/ActorPathBenchmarks.cs index 10488d13664..0687074eedd 100644 --- a/src/benchmark/Akka.Benchmarks/Actor/ActorPathBenchmarks.cs +++ b/src/benchmark/Akka.Benchmarks/Actor/ActorPathBenchmarks.cs @@ -5,6 +5,7 @@ // //----------------------------------------------------------------------- +using System; using Akka.Actor; using Akka.Benchmarks.Configurations; using BenchmarkDotNet.Attributes; @@ -20,18 +21,25 @@ public class ActorPathBenchmarks private Address _sysAdr = new Address("akka.tcp", "system", "127.0.0.1", 1337); private Address _otherAdr = new Address("akka.tcp", "system", "127.0.0.1", 1338); + private string _actorPathStr; + + [Params(1, 100000, int.MaxValue)] + public int Uid { get; set; } + [GlobalSetup] public void Setup() { x = new RootActorPath(_sysAdr, "user"); y = new RootActorPath(_sysAdr, "system"); - _childPath = x / "parent" / "child"; + var parentPath = x / "parent"; + _childPath = new ChildActorPath(parentPath, "child", Uid); + _actorPathStr = _childPath.ToSerializationFormat(); } [Benchmark] public ActorPath ActorPath_Parse() { - return ActorPath.Parse("akka.tcp://system/user/parent/child"); + return ActorPath.Parse(_actorPathStr); } [Benchmark] diff --git a/src/benchmark/Akka.Benchmarks/Utils/FastLazyBenchmarks.cs b/src/benchmark/Akka.Benchmarks/Utils/FastLazyBenchmarks.cs index 6521dcf8c88..d5eae73a52e 100644 --- a/src/benchmark/Akka.Benchmarks/Utils/FastLazyBenchmarks.cs +++ b/src/benchmark/Akka.Benchmarks/Utils/FastLazyBenchmarks.cs @@ -50,7 +50,7 @@ public int FastLazy_get_value() } [Benchmark] - public int FastLazy_satefull_get_value() + public int FastLazy_stateful_get_value() { return fastLazyWithInit.Value; } diff --git a/src/benchmark/Akka.Benchmarks/Utils/SpanHackBenchmarks.cs b/src/benchmark/Akka.Benchmarks/Utils/SpanHackBenchmarks.cs new file mode 100644 index 00000000000..fcd83ce3391 --- /dev/null +++ b/src/benchmark/Akka.Benchmarks/Utils/SpanHackBenchmarks.cs @@ -0,0 +1,34 @@ +// //----------------------------------------------------------------------- +// +// Copyright (C) 2009-2022 Lightbend Inc. +// Copyright (C) 2013-2022 .NET Foundation +// +//----------------------------------------------------------------------- + +using System; +using Akka.Benchmarks.Configurations; +using Akka.Util; +using BenchmarkDotNet.Attributes; + +namespace Akka.Benchmarks.Utils +{ + [Config(typeof(MicroBenchmarkConfig))] + public class SpanHackBenchmarks + { + [Params(0, 1, -1, 1000, int.MaxValue, long.MaxValue)] + public long Formatted { get; set; } + + [Benchmark] + public int Int64CharCountBenchmark() + { + return SpanHacks.Int64SizeInCharacters(Formatted); + } + + [Benchmark] + public int TryFormatBenchmark() + { + Span buffer = stackalloc char[22]; + return SpanHacks.TryFormat(Formatted, 0, ref buffer); + } + } +} \ No newline at end of file diff --git a/src/benchmark/PingPong/PingPong.csproj b/src/benchmark/PingPong/PingPong.csproj index 941904b85dc..5336b9d78b5 100644 --- a/src/benchmark/PingPong/PingPong.csproj +++ b/src/benchmark/PingPong/PingPong.csproj @@ -10,6 +10,11 @@ + + true + true + + diff --git a/src/benchmark/RemotePingPong/RemotePingPong.csproj b/src/benchmark/RemotePingPong/RemotePingPong.csproj index 2b7d818c19f..2e8e73ff7f7 100644 --- a/src/benchmark/RemotePingPong/RemotePingPong.csproj +++ b/src/benchmark/RemotePingPong/RemotePingPong.csproj @@ -10,12 +10,9 @@ Exe - - x64 - - true + true diff --git a/src/common.props b/src/common.props index 4b8a08f7469..4963c9414f2 100644 --- a/src/common.props +++ b/src/common.props @@ -19,7 +19,7 @@ 3.21.9 0.13.2 netcoreapp3.1 - net6.0 + net7.0 net471 netstandard2.0 net6.0 @@ -29,6 +29,7 @@ 2.0.3 6.0.1 1.1.1 + 5.0.0 akka;actors;actor model;Akka;concurrency @@ -73,4 +74,4 @@ Other Features and Improvements** - + \ No newline at end of file diff --git a/src/contrib/serializers/Akka.Serialization.Hyperion.Tests/HyperionConfigTests.cs b/src/contrib/serializers/Akka.Serialization.Hyperion.Tests/HyperionConfigTests.cs index 5b46f736cbc..1b46d2ee1a4 100644 --- a/src/contrib/serializers/Akka.Serialization.Hyperion.Tests/HyperionConfigTests.cs +++ b/src/contrib/serializers/Akka.Serialization.Hyperion.Tests/HyperionConfigTests.cs @@ -210,7 +210,7 @@ public void Hyperion_serializer_should_read_cross_platform_package_name_override #elif NETCOREAPP3_1 Assert.Equal("dff", @override("def")); Assert.Equal("efg", @override("efg")); -#elif NET6_0 +#elif NET7_0 Assert.Equal("gii", @override("ghi")); Assert.Equal("hij", @override("hij")); #else diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Core.verified.txt index b12b0568fb1..14305144b19 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Core.verified.txt @@ -15,7 +15,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Management.Cluster.Http")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("0e3e691b-0c31-4718-9b1a-d749b93208c9")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster { public sealed class AutoDowning : Akka.Cluster.IDowningProvider diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.DotNet.verified.txt index d9030477ef3..6bb9cea6257 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.DotNet.verified.txt @@ -15,7 +15,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Management.Cluster.Http")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("0e3e691b-0c31-4718-9b1a-d749b93208c9")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Cluster { public sealed class AutoDowning : Akka.Cluster.IDowningProvider diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Net.verified.txt index b12b0568fb1..14305144b19 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.Net.verified.txt @@ -15,7 +15,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Management.Cluster.Http")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("0e3e691b-0c31-4718-9b1a-d749b93208c9")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster { public sealed class AutoDowning : Akka.Cluster.IDowningProvider diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.verified.txt index da4d3dae1d1..e35802866da 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCluster.verified.txt @@ -14,7 +14,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Management.Cluster.Http")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("0e3e691b-0c31-4718-9b1a-d749b93208c9")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster { public sealed class AutoDowning : Akka.Cluster.IDowningProvider diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Core.verified.txt index 4fab075a254..6a97e34c58c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Core.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Metrics { public sealed class AdaptiveLoadBalancingGroup : Akka.Routing.Group diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.DotNet.verified.txt index 1e64b6d87d5..f462246ed53 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.DotNet.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Cluster.Metrics { public sealed class AdaptiveLoadBalancingGroup : Akka.Routing.Group diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Net.verified.txt index 4fab075a254..6a97e34c58c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.Net.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Metrics { public sealed class AdaptiveLoadBalancingGroup : Akka.Routing.Group diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.verified.txt index 4fab075a254..6a97e34c58c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterMetrics.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Metrics { public sealed class AdaptiveLoadBalancingGroup : Akka.Routing.Group diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Core.verified.txt index 04292d46f46..bdf8aff5b8f 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Core.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Sharding.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("a05c31e8-0246-46a1-b3bc-4d6fe7a9aa49")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Sharding { public class ClusterSharding : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.DotNet.verified.txt index 8a6e528bb46..9174e64d059 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.DotNet.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Sharding.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("a05c31e8-0246-46a1-b3bc-4d6fe7a9aa49")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Cluster.Sharding { public class ClusterSharding : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Net.verified.txt index 04292d46f46..bdf8aff5b8f 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.Net.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Sharding.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("a05c31e8-0246-46a1-b3bc-4d6fe7a9aa49")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Sharding { public class ClusterSharding : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.verified.txt index be20a8b1f40..22c12566961 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterSharding.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Sharding.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("a05c31e8-0246-46a1-b3bc-4d6fe7a9aa49")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Sharding { public class ClusterSharding : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Core.verified.txt index 0657621c73f..79081047d16 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Core.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Tools.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("5cf8a8be-b634-473f-bb01-eba878746bd4")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Tools.Client { public sealed class ClusterClient : Akka.Actor.ActorBase diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.DotNet.verified.txt index f377d456db0..86e52dd3576 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.DotNet.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Tools.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("5cf8a8be-b634-473f-bb01-eba878746bd4")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Cluster.Tools.Client { public sealed class ClusterClient : Akka.Actor.ActorBase diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Net.verified.txt index 0657621c73f..79081047d16 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.Net.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Tools.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("5cf8a8be-b634-473f-bb01-eba878746bd4")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Tools.Client { public sealed class ClusterClient : Akka.Actor.ActorBase diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.verified.txt index 3b2fd70c621..254cc277e36 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveClusterTools.verified.txt @@ -3,7 +3,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Cluster.Tools.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("5cf8a8be-b634-473f-bb01-eba878746bd4")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Cluster.Tools.Client { public sealed class ClusterClient : Akka.Actor.ActorBase diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Core.verified.txt index 1414adb9dde..8fb2e32a70c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Core.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Coordination { public abstract class Lease diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.DotNet.verified.txt index 14f0f03e672..285f2ce7c7b 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.DotNet.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Coordination { public abstract class Lease diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Net.verified.txt index 1414adb9dde..8fb2e32a70c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCoordination.Net.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Coordination { public abstract class Lease diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt index 530758be5cc..ec3e7061dad 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Core.verified.txt @@ -23,7 +23,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("1a5cab08-b032-49ca-8db3-9428c5a9db14")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Actor { public abstract class ActorBase : Akka.Actor.IInternalActor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt index ee04f487595..dc68c7dff95 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.DotNet.verified.txt @@ -23,7 +23,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("1a5cab08-b032-49ca-8db3-9428c5a9db14")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Actor { public abstract class ActorBase : Akka.Actor.IInternalActor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt index 530758be5cc..ec3e7061dad 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.Net.verified.txt @@ -23,7 +23,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("1a5cab08-b032-49ca-8db3-9428c5a9db14")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Actor { public abstract class ActorBase : Akka.Actor.IInternalActor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt index c04f2b3a683..102fa9edc78 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveCore.verified.txt @@ -23,7 +23,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("1a5cab08-b032-49ca-8db3-9428c5a9db14")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Actor { public abstract class ActorBase : Akka.Actor.IInternalActor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Core.verified.txt index 4c03bbf9e14..2811d821db1 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Core.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Discovery.Aggregate { [Akka.Annotations.InternalApiAttribute()] diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.DotNet.verified.txt index e95c3a9ba80..db85958f822 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.DotNet.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Discovery.Aggregate { [Akka.Annotations.InternalApiAttribute()] diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Net.verified.txt index 4c03bbf9e14..2811d821db1 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDiscovery.Net.verified.txt @@ -1,5 +1,5 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Discovery.Aggregate { [Akka.Annotations.InternalApiAttribute()] diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt index 0b592f46e45..e91e879ea35 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Core.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.DistributedData.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("f22db348-9ab3-4c6a-b1e8-9b835308d367")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.DistributedData { public sealed class Changed : Akka.DistributedData.IReplicatorMessage, System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt index b49021b5298..331a7677475 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.DotNet.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.DistributedData.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("f22db348-9ab3-4c6a-b1e8-9b835308d367")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.DistributedData { public sealed class Changed : Akka.DistributedData.IReplicatorMessage, System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt index 0b592f46e45..e91e879ea35 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveDistributedData.Net.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.DistributedData.Tests.MultiNode")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("f22db348-9ab3-4c6a-b1e8-9b835308d367")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.DistributedData { public sealed class Changed : Akka.DistributedData.IReplicatorMessage, System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Core.verified.txt index 44dce9a7cb9..05759e954d8 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Core.verified.txt @@ -4,7 +4,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Persistence.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e3bcba88-003c-4cda-8a60-f0c2553fe3c8")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence { public sealed class AsyncHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.DotNet.verified.txt index 17a4a765cf9..f09ed14fb62 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.DotNet.verified.txt @@ -4,7 +4,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Persistence.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e3bcba88-003c-4cda-8a60-f0c2553fe3c8")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Persistence { public sealed class AsyncHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Net.verified.txt index 44dce9a7cb9..05759e954d8 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistence.Net.verified.txt @@ -4,7 +4,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Persistence.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e3bcba88-003c-4cda-8a60-f0c2553fe3c8")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence { public sealed class AsyncHandlerInvocation : Akka.Persistence.IPendingHandlerInvocation diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Core.verified.txt index 3dcab8d069f..d95c2cfff3a 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Core.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("92ab2788-e008-40d0-8b54-0c95b3cf3404")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Query { public sealed class EventEnvelope : System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.DotNet.verified.txt index 6216b35fdca..6d9073534c6 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.DotNet.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("92ab2788-e008-40d0-8b54-0c95b3cf3404")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Persistence.Query { public sealed class EventEnvelope : System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Net.verified.txt index 3dcab8d069f..d95c2cfff3a 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.Net.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("92ab2788-e008-40d0-8b54-0c95b3cf3404")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Query { public sealed class EventEnvelope : System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.verified.txt index 3b5866285b5..463a9160031 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceQuery.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("92ab2788-e008-40d0-8b54-0c95b3cf3404")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Query { public sealed class EventEnvelope : System.IEquatable diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Core.verified.txt index e316f34a30c..f3dfaddb419 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Core.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e438d2c3-1075-4b01-bb84-e9efd3a36691")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Sql.Common.Journal { public abstract class AbstractQueryExecutor : Akka.Persistence.Sql.Common.Journal.IJournalQueryExecutor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.DotNet.verified.txt index c7d621c0fe4..e5374efd1a8 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.DotNet.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e438d2c3-1075-4b01-bb84-e9efd3a36691")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Persistence.Sql.Common.Journal { public abstract class AbstractQueryExecutor : Akka.Persistence.Sql.Common.Journal.IJournalQueryExecutor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Net.verified.txt index e316f34a30c..f3dfaddb419 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommon.Net.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("e438d2c3-1075-4b01-bb84-e9efd3a36691")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Sql.Common.Journal { public abstract class AbstractQueryExecutor : Akka.Persistence.Sql.Common.Journal.IJournalQueryExecutor diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Core.verified.txt index ccee7262218..57f95967345 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Core.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("3cbd3880-0655-44cc-ad81-77e8cadfcc3e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Query.Sql { public class SqlReadJournal : Akka.Persistence.Query.IAllEventsQuery, Akka.Persistence.Query.ICurrentAllEventsQuery, Akka.Persistence.Query.ICurrentEventsByPersistenceIdQuery, Akka.Persistence.Query.ICurrentEventsByTagQuery, Akka.Persistence.Query.ICurrentPersistenceIdsQuery, Akka.Persistence.Query.IEventsByPersistenceIdQuery, Akka.Persistence.Query.IEventsByTagQuery, Akka.Persistence.Query.IPersistenceIdsQuery, Akka.Persistence.Query.IReadJournal diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.DotNet.verified.txt index f41008d0a8c..1fe7c027d08 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.DotNet.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("3cbd3880-0655-44cc-ad81-77e8cadfcc3e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Persistence.Query.Sql { public class SqlReadJournal : Akka.Persistence.Query.IAllEventsQuery, Akka.Persistence.Query.ICurrentAllEventsQuery, Akka.Persistence.Query.ICurrentEventsByPersistenceIdQuery, Akka.Persistence.Query.ICurrentEventsByTagQuery, Akka.Persistence.Query.ICurrentPersistenceIdsQuery, Akka.Persistence.Query.IEventsByPersistenceIdQuery, Akka.Persistence.Query.IEventsByTagQuery, Akka.Persistence.Query.IPersistenceIdsQuery, Akka.Persistence.Query.IReadJournal diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Net.verified.txt index ccee7262218..57f95967345 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApprovePersistenceSqlCommonQuery.Net.verified.txt @@ -1,7 +1,7 @@ [assembly: System.Reflection.AssemblyMetadataAttribute("RepositoryUrl", "https://github.com/akkadotnet/akka.net")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("3cbd3880-0655-44cc-ad81-77e8cadfcc3e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Persistence.Query.Sql { public class SqlReadJournal : Akka.Persistence.Query.IAllEventsQuery, Akka.Persistence.Query.ICurrentAllEventsQuery, Akka.Persistence.Query.ICurrentEventsByPersistenceIdQuery, Akka.Persistence.Query.ICurrentEventsByTagQuery, Akka.Persistence.Query.ICurrentPersistenceIdsQuery, Akka.Persistence.Query.IEventsByPersistenceIdQuery, Akka.Persistence.Query.IEventsByTagQuery, Akka.Persistence.Query.IPersistenceIdsQuery, Akka.Persistence.Query.IReadJournal diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Core.verified.txt index 1cfd6878f06..0740529d2e6 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Core.verified.txt @@ -14,7 +14,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Remote.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("78986bdb-73f7-4532-8e03-1c9ccbe8148e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Remote { public class AddressUid : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.DotNet.verified.txt index 706e8e1e2ba..1e7f660239c 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.DotNet.verified.txt @@ -14,7 +14,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Remote.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("78986bdb-73f7-4532-8e03-1c9ccbe8148e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Remote { public class AddressUid : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Net.verified.txt index 1cfd6878f06..0740529d2e6 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.Net.verified.txt @@ -14,7 +14,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Remote.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("78986bdb-73f7-4532-8e03-1c9ccbe8148e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Remote { public class AddressUid : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.verified.txt index ae91c0d0c22..ec9efa7343f 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveRemote.verified.txt @@ -14,7 +14,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Remote.Tests.Performance")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("78986bdb-73f7-4532-8e03-1c9ccbe8148e")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Remote { public class AddressUid : Akka.Actor.IExtension diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Core.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Core.verified.txt index f36ecf50a1d..96691adb052 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Core.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Core.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Streams.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("123b83e9-21f8-49a8-888a-3b1212ff21dc")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Streams { public sealed class AbruptStageTerminationException : System.Exception @@ -1406,6 +1406,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Flow RecoverWith(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Flow RecoverWithRetries(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow, System.Action onItemChanged) { } public static Akka.Streams.Dsl.Flow Scan(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Flow ScanAsync(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Flow Select(this Akka.Streams.Dsl.Flow flow, System.Func mapper) { } @@ -1867,6 +1869,14 @@ namespace Akka.Streams.Dsl [Akka.Annotations.ApiMayChangeAttribute()] public static Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> Create(Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> flow, System.Func>> retryWith) { } } + public sealed class ReuseLatest : Akka.Streams.Stage.GraphStage> + { + public ReuseLatest() { } + public ReuseLatest(System.Action onItemChanged) { } + public override Akka.Streams.FlowShape Shape { get; } + protected override Akka.Streams.Stage.GraphStageLogic CreateLogic(Akka.Streams.Attributes inheritedAttributes) { } + public override string ToString() { } + } public class static ReverseOps { public static Akka.Streams.Dsl.GraphDsl.Builder From(this Akka.Streams.Dsl.GraphDsl.ReverseOps ops, Akka.Streams.Outlet outlet) @@ -2086,6 +2096,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Source RecoverWith(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Source RecoverWithRetries(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source, System.Action onItemUpdated) { } public static Akka.Streams.Dsl.Source Scan(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Source ScanAsync(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Source Select(this Akka.Streams.Dsl.Source flow, System.Func mapper) { } diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.DotNet.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.DotNet.verified.txt index 50ede569a35..6f67a52a798 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.DotNet.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.DotNet.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Streams.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("123b83e9-21f8-49a8-888a-3b1212ff21dc")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName=".NET 6.0")] namespace Akka.Streams { public sealed class AbruptStageTerminationException : System.Exception @@ -1406,6 +1406,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Flow RecoverWith(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Flow RecoverWithRetries(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow, System.Action onItemChanged) { } public static Akka.Streams.Dsl.Flow Scan(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Flow ScanAsync(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Flow Select(this Akka.Streams.Dsl.Flow flow, System.Func mapper) { } @@ -1867,6 +1869,14 @@ namespace Akka.Streams.Dsl [Akka.Annotations.ApiMayChangeAttribute()] public static Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> Create(Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> flow, System.Func>> retryWith) { } } + public sealed class ReuseLatest : Akka.Streams.Stage.GraphStage> + { + public ReuseLatest() { } + public ReuseLatest(System.Action onItemChanged) { } + public override Akka.Streams.FlowShape Shape { get; } + protected override Akka.Streams.Stage.GraphStageLogic CreateLogic(Akka.Streams.Attributes inheritedAttributes) { } + public override string ToString() { } + } public class static ReverseOps { public static Akka.Streams.Dsl.GraphDsl.Builder From(this Akka.Streams.Dsl.GraphDsl.ReverseOps ops, Akka.Streams.Outlet outlet) @@ -2086,6 +2096,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Source RecoverWith(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Source RecoverWithRetries(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source, System.Action onItemUpdated) { } public static Akka.Streams.Dsl.Source Scan(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Source ScanAsync(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Source Select(this Akka.Streams.Dsl.Source flow, System.Func mapper) { } diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Net.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Net.verified.txt index f36ecf50a1d..96691adb052 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Net.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.Net.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Streams.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("123b83e9-21f8-49a8-888a-3b1212ff21dc")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Streams { public sealed class AbruptStageTerminationException : System.Exception @@ -1406,6 +1406,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Flow RecoverWith(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Flow RecoverWithRetries(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow, System.Action onItemChanged) { } public static Akka.Streams.Dsl.Flow Scan(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Flow ScanAsync(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Flow Select(this Akka.Streams.Dsl.Flow flow, System.Func mapper) { } @@ -1867,6 +1869,14 @@ namespace Akka.Streams.Dsl [Akka.Annotations.ApiMayChangeAttribute()] public static Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> Create(Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> flow, System.Func>> retryWith) { } } + public sealed class ReuseLatest : Akka.Streams.Stage.GraphStage> + { + public ReuseLatest() { } + public ReuseLatest(System.Action onItemChanged) { } + public override Akka.Streams.FlowShape Shape { get; } + protected override Akka.Streams.Stage.GraphStageLogic CreateLogic(Akka.Streams.Attributes inheritedAttributes) { } + public override string ToString() { } + } public class static ReverseOps { public static Akka.Streams.Dsl.GraphDsl.Builder From(this Akka.Streams.Dsl.GraphDsl.ReverseOps ops, Akka.Streams.Outlet outlet) @@ -2086,6 +2096,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Source RecoverWith(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Source RecoverWithRetries(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source, System.Action onItemUpdated) { } public static Akka.Streams.Dsl.Source Scan(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Source ScanAsync(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Source Select(this Akka.Streams.Dsl.Source flow, System.Func mapper) { } diff --git a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.verified.txt b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.verified.txt index f5ea9a0ead2..c0dff0361c4 100644 --- a/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.verified.txt +++ b/src/core/Akka.API.Tests/verify/CoreAPISpec.ApproveStreams.verified.txt @@ -6,7 +6,7 @@ [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Akka.Streams.Tests")] [assembly: System.Runtime.InteropServices.ComVisibleAttribute(false)] [assembly: System.Runtime.InteropServices.GuidAttribute("123b83e9-21f8-49a8-888a-3b1212ff21dc")] -[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFrameworkAttribute(".NETStandard,Version=v2.0", FrameworkDisplayName=".NET Standard 2.0")] namespace Akka.Streams { public sealed class AbruptStageTerminationException : System.Exception @@ -1383,6 +1383,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Flow RecoverWith(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Flow RecoverWithRetries(this Akka.Streams.Dsl.Flow flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow) { } + public static Akka.Streams.Dsl.Flow RepeatPrevious(this Akka.Streams.Dsl.Flow flow, System.Action onItemChanged) { } public static Akka.Streams.Dsl.Flow Scan(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Flow ScanAsync(this Akka.Streams.Dsl.Flow flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Flow Select(this Akka.Streams.Dsl.Flow flow, System.Func mapper) { } @@ -1845,6 +1847,14 @@ namespace Akka.Streams.Dsl [Akka.Annotations.ApiMayChangeAttribute()] public static Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> Create(Akka.Streams.IGraph, System.ValueTuple, TState>>, TMat> flow, System.Func>> retryWith) { } } + public sealed class ReuseLatest : Akka.Streams.Stage.GraphStage> + { + public ReuseLatest() { } + public ReuseLatest(System.Action onItemChanged) { } + public override Akka.Streams.FlowShape Shape { get; } + protected override Akka.Streams.Stage.GraphStageLogic CreateLogic(Akka.Streams.Attributes inheritedAttributes) { } + public override string ToString() { } + } public class static ReverseOps { public static Akka.Streams.Dsl.GraphDsl.Builder From(this Akka.Streams.Dsl.GraphDsl.ReverseOps ops, Akka.Streams.Outlet outlet) @@ -2058,6 +2068,8 @@ namespace Akka.Streams.Dsl [System.ObsoleteAttribute("Use RecoverWithRetries instead. [1.1.2]")] public static Akka.Streams.Dsl.Source RecoverWith(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc) { } public static Akka.Streams.Dsl.Source RecoverWithRetries(this Akka.Streams.Dsl.Source flow, System.Func, TMat>> partialFunc, int attempts) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source) { } + public static Akka.Streams.Dsl.Source RepeatPrevious(this Akka.Streams.Dsl.Source source, System.Action onItemUpdated) { } public static Akka.Streams.Dsl.Source Scan(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func scan) { } public static Akka.Streams.Dsl.Source ScanAsync(this Akka.Streams.Dsl.Source flow, TOut2 zero, System.Func> scan) { } public static Akka.Streams.Dsl.Source Select(this Akka.Streams.Dsl.Source flow, System.Func mapper) { } diff --git a/src/core/Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs b/src/core/Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs new file mode 100644 index 00000000000..fa496ac671b --- /dev/null +++ b/src/core/Akka.Streams.Tests/Dsl/ReuseLatestSpec.cs @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2013-2022 .NET Foundation +// +//----------------------------------------------------------------------- + +using System; +using System.Linq; +using System.Threading.Tasks; +using Akka.Configuration; +using Akka.Streams.Dsl; +using Akka.TestKit; +using FluentAssertions; +using Xunit; +using Xunit.Abstractions; + +namespace Akka.Streams.Tests.Dsl +{ + public class ReuseLatestSpec : AkkaSpec + { + private ActorMaterializer Materializer { get; } + + public ReuseLatestSpec(ITestOutputHelper testOutputHelper) : base(Config.Empty, output: testOutputHelper) + { + var settings = ActorMaterializerSettings.Create(Sys); + Materializer = ActorMaterializer.Create(Sys, settings); + } + + [Fact] + public async Task RepeatPrevious_should_immediately_terminate_with_Empty_source() + { + var source = Source.Empty(); + var result = await source.RepeatPrevious().RunWith(Sink.Seq(), Materializer); + result.Should().BeEmpty(); + } + + [Fact] + public async Task RepeatPrevious_should_complete_when_upstream_completes() + { + var source = Source.Single(1).RepeatPrevious(); + var result = await source.RunWith(Sink.Seq(), Materializer); + + // as a side-effect of RepeatPrevious' buffering process, there's going to be an extra element in the result + result.Should().BeEquivalentTo(1, 1); + } + + [Fact] + public async Task RepeatPrevious_should_fail_when_upstream_fails() + { + Func Exec() => async () => + { + var source = Source.From(Enumerable.Range(0,9)).Where(i => + { + if (i % 5 == 0) + { + throw new ApplicationException("failed"); + } + + return true; + }).RepeatPrevious(); + var result = await source.RunWith(Sink.Seq(), Materializer); + }; + + await Exec().Should().ThrowAsync(); + } + + [Fact] + public async Task RepeatPrevious_should_repeat_when_no_newValues_available() + { + // + var (queue, source) = Source.Queue(10, OverflowStrategy.Backpressure).PreMaterialize(Materializer); + + // populate 1 into queue + await queue.OfferAsync(1); + + // take 4 items from the queue + var result = await source.RepeatPrevious().Take(4).RunWith(Sink.Seq(), Materializer); + + // the most recent queue item will be repeated 3 times, plus the original element + result.Should().BeEquivalentTo(1,1,1,1); + // + } + } +} \ No newline at end of file diff --git a/src/core/Akka.Streams/Attributes.cs b/src/core/Akka.Streams/Attributes.cs index 137e80ed83f..d7bcc432527 100644 --- a/src/core/Akka.Streams/Attributes.cs +++ b/src/core/Akka.Streams/Attributes.cs @@ -301,7 +301,7 @@ public Attributes(params IAttribute[] attributes) /// INTERNAL API /// internal bool IsAsync - => _attributes.Count() > 0 && + => _attributes.Length > 0 && _attributes.Any( attr => attr is AsyncBoundary || attr is ActorAttributes.Dispatcher); @@ -489,9 +489,7 @@ public static Attributes CreateLogLevels(LogLevel onElement = LogLevel.DebugLeve /// TBD public static string ExtractName(IModule module, string defaultIfNotFound) { - var copy = module as CopiedModule; - - return copy != null + return module is CopiedModule copy ? copy.Attributes.And(copy.CopyOf.Attributes).GetNameOrDefault(defaultIfNotFound) : module.Attributes.GetNameOrDefault(defaultIfNotFound); } @@ -531,7 +529,7 @@ public bool Equals(Dispatcher other) return true; return Equals(Name, other.Name); } - public override bool Equals(object obj) => obj is Dispatcher && Equals((Dispatcher)obj); + public override bool Equals(object obj) => obj is Dispatcher dispatcher && Equals(dispatcher); public override int GetHashCode() => Name?.GetHashCode() ?? 0; public override string ToString() => $"Dispatcher({Name})"; } diff --git a/src/core/Akka.Streams/Dsl/FlowOperations.cs b/src/core/Akka.Streams/Dsl/FlowOperations.cs index 66e29aa546a..e061a9f404c 100644 --- a/src/core/Akka.Streams/Dsl/FlowOperations.cs +++ b/src/core/Akka.Streams/Dsl/FlowOperations.cs @@ -22,7 +22,7 @@ namespace Akka.Streams.Dsl { /// - /// TBD + /// The set of DSL methods for composing stages together. /// public static class FlowOperations { @@ -2461,5 +2461,42 @@ public static FlowWithContext AsFlowWithContex return FlowWithContext.From(flowWithTuples); } + + /// + /// Repeats the previous element from upstream until it's replaced by a new value. + /// + /// The previous Flow stage in this stream. + /// The input type. + /// The output type. + /// The materialization type. + /// + /// This is designed to allow fan-in stages where output from one of the sources is intermittent / infrequent + /// and users just want the previous value to be reused. + /// + public static Flow RepeatPrevious(this Flow flow) + { + return flow.Via(new ReuseLatest()); + } + + /// + /// Repeats the previous element from upstream until it's replaced by a new value. + /// + /// The previous Flow stage in this stream. + /// A function that allows the stage to perform clean-up operations when the previously repeated + /// value is being replaced. + /// + /// This is used for things like calling on the previous value. + /// + /// The input type. + /// The output type. + /// The materialization type. + /// + /// This is designed to allow fan-in stages where output from one of the sources is intermittent / infrequent + /// and users just want the previous value to be reused. + /// + public static Flow RepeatPrevious(this Flow flow, Action onItemChanged) + { + return flow.Via(new ReuseLatest(onItemChanged)); + } } } diff --git a/src/core/Akka.Streams/Dsl/ReuseLatest.cs b/src/core/Akka.Streams/Dsl/ReuseLatest.cs new file mode 100644 index 00000000000..46434faeb75 --- /dev/null +++ b/src/core/Akka.Streams/Dsl/ReuseLatest.cs @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------- +// +// Copyright (C) 2013-2022 .NET Foundation +// +//----------------------------------------------------------------------- + +using System; +using Akka.Streams.Stage; +using Akka.Util; + +namespace Akka.Streams.Dsl +{ + /// + /// Reuses the latest element from upstream until it's replaced by a new value. + /// + /// This is designed to allow fan-in stages where output from one of the sources is intermittent / infrequent + /// and users just want the previous value to be reused. + /// + /// The output type. + public sealed class ReuseLatest : GraphStage> + { + private readonly Inlet _in = new Inlet("RepeatPrevious.in"); + private readonly Outlet _out = new Outlet("RepeatPrevious.out"); + + public override FlowShape Shape => new FlowShape(_in, _out); + private readonly Action _onItemChanged; + + /// + /// Do nothing by default + /// + private static readonly Action DefaultSwap = (oldValue, newValue) => { }; + + public ReuseLatest() : this(DefaultSwap) + { + } + + public ReuseLatest(Action onItemChanged) + { + _onItemChanged = onItemChanged; + } + + protected override GraphStageLogic CreateLogic(Attributes inheritedAttributes) => + new Logic(this, _onItemChanged); + + private sealed class Logic : InAndOutGraphStageLogic + { + private readonly ReuseLatest _stage; + private Option _last; + private readonly Action _onItemChanged; + + public Logic(ReuseLatest stage, Action onItemChanged) : base(stage.Shape) + { + _stage = stage; + _onItemChanged = onItemChanged; + + SetHandler(_stage._in, this); + SetHandler(_stage._out, this); + } + + public override void OnPush() + { + var next = Grab(_stage._in); + if (_last.HasValue) + _onItemChanged(_last.Value, next); + _last = next; + + if (IsAvailable(_stage._out)) + { + Push(_stage._out, _last.Value); + } + } + + public override void OnPull() + { + if (_last.HasValue) + { + if (!HasBeenPulled(_stage._in)) + { + Pull(_stage._in); + } + + Push(_stage._out, _last.Value); + } + else + { + Pull(_stage._in); + } + } + } + + public override string ToString() + { + return "RepeatPrevious"; + } + } +} \ No newline at end of file diff --git a/src/core/Akka.Streams/Dsl/SourceOperations.cs b/src/core/Akka.Streams/Dsl/SourceOperations.cs index 55668a2e6ed..54c96d68185 100644 --- a/src/core/Akka.Streams/Dsl/SourceOperations.cs +++ b/src/core/Akka.Streams/Dsl/SourceOperations.cs @@ -2341,5 +2341,40 @@ public static SourceWithContext AsSourceWithContext public static Source Watch(this Source flow, IActorRef actorRef) => (Source)InternalFlowOperations.Watch(flow, actorRef); + + /// + /// Repeats the previous element from upstream until it's replaced by a new value. + /// + /// The previous stage in this stream. + /// The source's output type. + /// The materialization type. + /// + /// This is designed to allow fan-in stages where output from one of the sources is intermittent / infrequent + /// and users just want the previous value to be reused. + /// + public static Source RepeatPrevious(this Source source) + { + return source.Via(new ReuseLatest()); + } + + /// + /// Repeats the previous element from upstream until it's replaced by a new value. + /// + /// The previous stage in this stream. + /// A function that allows the stage to perform clean-up operations when the previously repeated + /// value is being changed. + /// + /// This is used for things like calling on the previous value. + /// + /// The source's output type. + /// The materialization type. + /// + /// This is designed to allow fan-in stages where output from one of the sources is intermittent / infrequent + /// and users just want the previous value to be reused. + /// + public static Source RepeatPrevious(this Source source, Action onItemUpdated) + { + return source.Via(new ReuseLatest(onItemUpdated)); + } } } diff --git a/src/core/Akka.Tests/Actor/ActorPathSpec.cs b/src/core/Akka.Tests/Actor/ActorPathSpec.cs index edc83d3166a..c1232a55183 100644 --- a/src/core/Akka.Tests/Actor/ActorPathSpec.cs +++ b/src/core/Akka.Tests/Actor/ActorPathSpec.cs @@ -22,6 +22,17 @@ public void SupportsParsingItsStringRep() var path = new RootActorPath(new Address("akka.tcp", "mysys")) / "user"; ActorPathParse(path.ToString()).ShouldBe(path); } + + [Theory] + [InlineData(1)] + [InlineData(100)] + [InlineData(int.MaxValue)] + public void SupportsParsingItsStringRepWithUid(int uid) + { + var path = new RootActorPath(new Address("akka.tcp", "mysys", "localhost", 9110)) / "user"; + var pathWithUid = path.WithUid(uid); + ActorPathParse(pathWithUid.ToSerializationFormat()).ShouldBe(pathWithUid); + } private ActorPath ActorPathParse(string path) { diff --git a/src/core/Akka/Actor/ActorPath.cs b/src/core/Akka/Actor/ActorPath.cs index f785e9bc1a9..1ed7d727e63 100644 --- a/src/core/Akka/Actor/ActorPath.cs +++ b/src/core/Akka/Actor/ActorPath.cs @@ -557,8 +557,15 @@ public static bool TryParseParts(ReadOnlySpan path, out ReadOnlySpan /// /// the address or empty /// System.String. - private string Join(ReadOnlySpan prefix) + private string Join(ReadOnlySpan prefix, long? uid = null) { + void AppendUidSpan(ref Span writeable, int startPos, int sizeHint) + { + if (uid == null) return; + writeable[startPos] = '#'; + SpanHacks.TryFormat(uid.Value, startPos+1, ref writeable, sizeHint); + } + if (_depth == 0) { Span buffer = prefix.Length < 1024 ? stackalloc char[prefix.Length + 1] : new char[prefix.Length + 1]; @@ -576,17 +583,28 @@ private string Join(ReadOnlySpan prefix) totalLength += p._name.Length + 1; p = p._parent; } + + // UID calculation + var uidSizeHint = 0; + if (uid != null) + { + // 1 extra character for the '#' + uidSizeHint = SpanHacks.Int64SizeInCharacters(uid.Value) + 1; + totalLength += uidSizeHint; + } // Concatenate segments (in reverse order) into buffer with '/' prefixes Span buffer = totalLength < 1024 ? stackalloc char[totalLength] : new char[totalLength]; prefix.CopyTo(buffer); - var offset = buffer.Length; - ReadOnlySpan name; + var offset = buffer.Length - uidSizeHint; + // append UID span first + AppendUidSpan(ref buffer, offset, uidSizeHint-1); // -1 for the '#' + p = this; while (p._depth > 0) { - name = p._name.AsSpan(); + var name = p._name.AsSpan(); offset -= name.Length + 1; buffer[offset] = '/'; name.CopyTo(buffer.Slice(offset + 1, name.Length)); @@ -676,7 +694,12 @@ public override bool Equals(object obj) /// System.String. public string ToStringWithAddress() { - return ToStringWithAddress(_address); + return ToStringWithAddress(_address, false); + } + + private string ToStringWithAddress(bool includeUid) + { + return ToStringWithAddress(_address, includeUid); } /// @@ -685,7 +708,7 @@ public string ToStringWithAddress() /// TBD public string ToSerializationFormat() { - return AppendUidFragment(ToStringWithAddress()); + return ToStringWithAddress(true); } /// @@ -700,8 +723,7 @@ public string ToSerializationFormatWithAddress(Address address) // we never change address for IgnoreActorRef return ToString(); } - var withAddress = ToStringWithAddress(address); - var result = AppendUidFragment(withAddress); + var result = ToStringWithAddress(address, true); return result; } @@ -718,16 +740,26 @@ private string AppendUidFragment(string withAddress) /// The address. /// System.String. public string ToStringWithAddress(Address address) + { + return ToStringWithAddress(address, false); + } + + private string ToStringWithAddress(Address address, bool includeUid) { if (IgnoreActorRef.IsIgnoreRefPath(this)) { // we never change address for IgnoreActorRef return ToString(); } + + long? uid = null; + if (includeUid && _uid != ActorCell.UndefinedUid) + uid = _uid; + if (_address.Host != null && _address.Port.HasValue) - return Join(_address.ToString().AsSpan()); + return Join(_address.ToString().AsSpan(), uid); - return Join(address.ToString().AsSpan()); + return Join(address.ToString().AsSpan(), uid); } /// diff --git a/src/core/Akka/Actor/Inbox.cs b/src/core/Akka/Actor/Inbox.cs index b4896e1519c..16b1a502ef2 100644 --- a/src/core/Akka/Actor/Inbox.cs +++ b/src/core/Akka/Actor/Inbox.cs @@ -12,7 +12,6 @@ using System.Threading.Tasks; using Akka.Actor.Internal; using Akka.Configuration; -using Akka.Configuration; namespace Akka.Actor { diff --git a/src/core/Akka/Akka.csproj b/src/core/Akka/Akka.csproj index 277b898ec04..543cac02033 100644 --- a/src/core/Akka/Akka.csproj +++ b/src/core/Akka/Akka.csproj @@ -7,7 +7,7 @@ Canonical actor model implementation for .NET with local + distributed actors in C# and F#. $(AkkaPackageTags) true - 8.0 + 9 @@ -17,21 +17,12 @@ - - - - + + $(ConfigurationManagerVersion) - - - - - - 4.7.0 - diff --git a/src/core/Akka/IO/Buffers/DisabledBufferPool.cs b/src/core/Akka/IO/Buffers/DisabledBufferPool.cs index 92214ee404a..1b2a8154c32 100644 --- a/src/core/Akka/IO/Buffers/DisabledBufferPool.cs +++ b/src/core/Akka/IO/Buffers/DisabledBufferPool.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using Akka.Actor; using Akka.Configuration; -using Akka.Configuration; namespace Akka.IO.Buffers { diff --git a/src/core/Akka/Util/SpanHacks.cs b/src/core/Akka/Util/SpanHacks.cs index 637bb6069b5..fbb190069c4 100644 --- a/src/core/Akka/Util/SpanHacks.cs +++ b/src/core/Akka/Util/SpanHacks.cs @@ -6,9 +6,7 @@ //----------------------------------------------------------------------- using System; -using System.Collections.Generic; using System.Globalization; -using System.Text; namespace Akka.Util { @@ -43,6 +41,100 @@ public static int Parse(ReadOnlySpan str) #endif throw new FormatException($"[{str.ToString()}] is now a valid numeric format"); } + + private const char Negative = '-'; + private static readonly char[] Numbers = { '0','1','2','3','4','5','6','7','8','9' }; + + /// + /// Can replace with int64.TryFormat in later versions of .NET. + /// + /// The integer we want to format into a string. + /// Starting position in the destination span we're going to write from + /// The span we're going to write our characters into. + /// Optional size hint, in order to avoid recalculating it. + /// + public static int TryFormat(long i, int startPos, ref Span span, int sizeHint = 0) + { + var index = 0; + if (i is < 10 and >= 0) + { + span[startPos] = (char)(i+'0'); + return 1; + } + + var negative = 0; + if (i < 0) + { + negative = 1; + i = Math.Abs(i); + } + + var targetLength = sizeHint > 0 ? sizeHint : PositiveInt64SizeInCharacters(i, negative); + + while (i > 0) + { + i = Math.DivRem(i, 10, out var rem); + span[startPos + targetLength - index++ - 1] = (char)(rem+'0'); + } + + if(negative == 1){ + span[0] = Negative; + index++; + } + + return index; + } + + /// + /// How many characters do we need to represent this int as a string? + /// + /// The int. + /// Character length. + public static int Int64SizeInCharacters(long i) + { + // account for negative characters + var padding = 0; + if (i < 0) + { + i *= -1; + padding = 1; + } + + return PositiveInt64SizeInCharacters(i, padding); + } + + public static int PositiveInt64SizeInCharacters(long i, int padding) + { + switch (i) + { + case 0: + return 1; + case < 10: + return 1 + padding; + case < 100: + return 2 + padding; + case < 1000: + return 3 + padding; + case < 10000: + return 4 + padding; + case < 100000: + return 5 + padding; + case < 1_000_000: + return 6 + padding; + case < 10_000_000: + return 7 + padding; + case < 100_000_000: + return 8 + padding; + case < 1_000_000_000: + return 9 + padding; + case < 10_000_000_000: + return 10 + padding; + case < 100_000_000_000: + return 11 + padding; + default: + return (int)Math.Log10(i) + 1 + padding; + } + } /// /// Parses an integer from a string.