-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5294 from akkadotnet/dev
Akka.NET v1.4.26 Release
- Loading branch information
Showing
26 changed files
with
182 additions
and
92 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
docs/community/whats-new/akkadotnet-v1.4-upgrade-advisories.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
--- | ||
uid: akkadotnet-v14-upgrade-advisories | ||
title: Akka.NET v1.4 Upgrade Advisories | ||
--- | ||
|
||
# Akka.NET v1.4 Upgrade Advisories | ||
This document contains specific upgrade suggestions, warnings, and notices that you will want to pay attention to when upgrading between versions within the Akka.NET v1.4 roadmap. | ||
|
||
## Upgrading to Akka.NET v1.4.20 from Older Versions | ||
|
||
> [!NOTE] | ||
> This is an edge-case issue that only affects users who are sending primitive data types (i.e. `int`, `long`, `string`) directly over Akka.Remote or Akka.Persistence. | ||
Between Akka.NET v1.4.19 and [v1.4.20](https://github.com/akkadotnet/akka.net/releases/tag/1.4.20) we introduced a regression in the wire format of the "primitive" serializer in Akka.NET v1.4.20 - the serializer responsible for transmitting `int`, `long`, and `string` as stand-alone messages in Akka.Remote and Akka.Persistence. | ||
|
||
The error message would look like this in clusters that are running a combination of v1.4.20 and any previous versions of Akka.NET: | ||
|
||
> `Serializer not defined for message with serializer id [6] and manifest []. Transient association error (association remains live). Cannot find manifest class [S] for serializer with id [17].` | ||
You can see the PR that introduced this regression here: https://github.com/akkadotnet/akka.net/issues/4986 | ||
|
||
This change was originally introduced to assist with cross-platform wire compatibility between .NET Framework and .NET Core, because Microsoft changed the names of all primitive types between the two runtimes when .NET Core was originally introduced. | ||
|
||
**Workarounds**: | ||
|
||
To work around this issue, if you're affected by it (most users are not:) | ||
|
||
* Upgrade all of the nodes to v1.4.20 or later at once; | ||
* Or upgrade directly to Akka.NET v1.4.26 or later, which resolves this issue and prevents the regression from occurring. | ||
|
||
## Upgrading to Akka.NET v1.4.26 from Older Versions | ||
|
||
> [!NOTE] | ||
> This is an edge-case issue that only affects users who are sending primitive data types (i.e. `int`, `long`, `string`) directly over Akka.Remote or Akka.Persistence. | ||
In Akka.NET v1.4.26 we have introduced a new setting: | ||
|
||
``` | ||
akka.actor.serialization-settings.primitive.use-legacy-behavior = on | ||
``` | ||
|
||
This setting is set of `on` by default and it resolves the backwards compatibility issue introduced in the "primitives" serializer described in our [v1.4.20 upgrade advisory](#upgrading-to-akkanet-v1420-from-older-versions). | ||
|
||
> [!IMPORTANT] | ||
> If you have: | ||
> * Previously upgraded to Akka.NET v1.4.20+ and you have not run into any issues; | ||
> * You have not yet upgraded to Akka.NET v1.4.20+; and | ||
> * You _do not_ plan on running both .NET Framework and .NET Core in the same cluster | ||
> Then you can safely upgrade to v1.4.26 using your normal deployment process. | ||
If you are running a mixed .NET Core and .NET Framework cluster, see the process below. | ||
|
||
### Deploying v1.4.26 into Mixed .NET Core and .NET Framework Environments | ||
*However*, if you are attempting to run a mixed-mode cluster - i.e. some services running on .NET Framework and some running on .NET Core, you will eventually want to turn this setting to `off` in order to faciliate smooth operation between both platforms. | ||
|
||
#### Already Deployed v1.4.20 or Later | ||
If you've already deployed v1.4.20 and you have not had any issues with the primitives serializer, do the following: | ||
|
||
1. Before you upgrade to v1.4.26 or later set `akka.actor.serialization-settings.primitive.use-legacy-behavior = off` - so any future serialization of primitives will be handled correctly in a cross-platform way; | ||
2. Run your normal deployment process. | ||
|
||
#### Have Not Deployed v1.4.20 or Later | ||
If you have not previously deployed to v1.4.20 or later, then do the following: | ||
|
||
1. Deploy once with `akka.actor.serialization-settings.primitive.use-legacy-behavior = on` (the default); | ||
2. Once all nodes are completely upgraded to v1.4.26 and later, prepare a second deployment with `akka.actor.serialization-settings.primitive.use-legacy-behavior = off`; | ||
3. Complete the second deployment - you will be fine with all rolling upgrades moving forward. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,4 @@ | ||
- name: New in Akka.NET v1.4 | ||
href: akkadotnet-v1.4.md | ||
href: akkadotnet-v1.4.md | ||
- name: Upgrade Advisories (v1.4) | ||
href: akkadotnet-v1.4-upgrade-advisories.md |
3 changes: 0 additions & 3 deletions
3
...luster/Akka.Cluster.Sharding.Tests.MultiNode/Akka.Cluster.Sharding.Tests.MultiNode.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 0 additions & 3 deletions
3
.../cluster/Akka.DistributedData.Tests.MultiNode/Akka.DistributedData.Tests.MultiNode.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed
BIN
-663 KB
src/contrib/cluster/lib-hack/runtimes/win-x64/native/lmdbautoresize.dll
Binary file not shown.
Binary file not shown.
Binary file removed
BIN
-549 KB
src/contrib/cluster/lib-hack/runtimes/win-x86/native/lmdbautoresize.dll
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
src/core/Akka.Remote.Tests/Serialization/BugFix5279Spec.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// //----------------------------------------------------------------------- | ||
// // <copyright file="BugFix5279Spec.cs" company="Akka.NET Project"> | ||
// // Copyright (C) 2009-2021 Lightbend Inc. <http://www.lightbend.com> | ||
// // Copyright (C) 2013-2021 .NET Foundation <https://github.com/akkadotnet/akka.net> | ||
// // </copyright> | ||
// //----------------------------------------------------------------------- | ||
|
||
using Akka.Actor; | ||
using Akka.Configuration; | ||
using Akka.Remote.Serialization; | ||
using Akka.TestKit; | ||
using Akka.Util; | ||
using Xunit; | ||
using FluentAssertions; | ||
|
||
namespace Akka.Remote.Tests.Serialization | ||
{ | ||
public class BugFix5279Spec: AkkaSpec | ||
{ | ||
[Theory] | ||
[InlineData(1, "I")] | ||
[InlineData(1L, "L")] | ||
[InlineData("1", "S")] | ||
public void PrimitiveSerializer_without_useNeutralPrimitives_should_return_custom_manifest(object data, string manifest) | ||
{ | ||
var config = ConfigurationFactory.ParseString("use-legacy-behavior = off"); | ||
var serializer = new PrimitiveSerializers((ExtendedActorSystem)Sys, config); | ||
serializer.Manifest(data).Should().Be(manifest); | ||
} | ||
|
||
[Theory] | ||
[InlineData(1)] | ||
[InlineData(1L)] | ||
[InlineData("1")] | ||
public void PrimitiveSerializer_without_useNeutralPrimitives_should_return_type_manifest(object data) | ||
{ | ||
var config = ConfigurationFactory.ParseString("use-legacy-behavior = on"); | ||
var serializer = new PrimitiveSerializers((ExtendedActorSystem)Sys, config); | ||
serializer.Manifest(data).Should().Be(data.GetType().TypeQualifiedName()); | ||
} | ||
|
||
} | ||
} |
Oops, something went wrong.