From 98e564d6a298aea5b7e0310290d49da7aa10c3f1 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Thu, 26 Aug 2021 10:32:39 -0500 Subject: [PATCH 1/6] experimenting with RemoteActorRefProvider address resolution performance --- src/core/Akka.Remote/RemoteActorRefProvider.cs | 2 +- src/core/Akka/Actor/Address.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/Akka.Remote/RemoteActorRefProvider.cs b/src/core/Akka.Remote/RemoteActorRefProvider.cs index 2ad062aef56..1dab65aa7c8 100644 --- a/src/core/Akka.Remote/RemoteActorRefProvider.cs +++ b/src/core/Akka.Remote/RemoteActorRefProvider.cs @@ -435,7 +435,7 @@ public Deploy LookUpRemotes(IEnumerable p) public bool HasAddress(Address address) { - return address == _local.RootPath.Address || address == RootPath.Address || Transport.Addresses.Any(a => a == address); + return address.Equals(_local.RootPath.Address) || address.Equals(RootPath.Address) || Transport.Addresses.Any(a => a.Equals(address)); } /// diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index 8ff18069456..f471467950d 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -154,7 +154,7 @@ public bool Equals(Address other) } /// - public override bool Equals(object obj) => obj is Address && Equals((Address)obj); + public override bool Equals(object obj) => obj is Address address && Equals(address); /// public override int GetHashCode() From 3e35d6e87e3f8e0b46d5bf94e6782b75319797b4 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Tue, 31 Aug 2021 15:57:37 -0500 Subject: [PATCH 2/6] implemented suggestions --- src/core/Akka.Remote/RemoteActorRefProvider.cs | 2 +- src/core/Akka/Actor/Address.cs | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/Akka.Remote/RemoteActorRefProvider.cs b/src/core/Akka.Remote/RemoteActorRefProvider.cs index 1dab65aa7c8..46c73fab43c 100644 --- a/src/core/Akka.Remote/RemoteActorRefProvider.cs +++ b/src/core/Akka.Remote/RemoteActorRefProvider.cs @@ -435,7 +435,7 @@ public Deploy LookUpRemotes(IEnumerable p) public bool HasAddress(Address address) { - return address.Equals(_local.RootPath.Address) || address.Equals(RootPath.Address) || Transport.Addresses.Any(a => a.Equals(address)); + return address.Equals(_local.RootPath.Address) || address.Equals(RootPath.Address) || Transport.Addresses.Contains(address); } /// diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index f471467950d..be098787c1a 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -245,7 +245,8 @@ public Address WithPort(int? port = null) /// true if both addresses are equal; otherwise false public static bool operator ==(Address left, Address right) { - return Equals(left, right); + Debug.Assert(!ReferenceEquals(left, null)); + return left.Equals(right); } /// @@ -256,7 +257,8 @@ public Address WithPort(int? port = null) /// true if both addresses are not equal; otherwise false public static bool operator !=(Address left, Address right) { - return !Equals(left, right); + Debug.Assert(!ReferenceEquals(left, null)); + return !left.Equals(right); } /// From 8176e609eec2d3e20590c7d282dc7bf3f4e1c2a6 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Tue, 31 Aug 2021 17:07:33 -0500 Subject: [PATCH 3/6] fixed `Address.==` and `Address.!=` --- src/core/Akka/Actor/Address.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index be098787c1a..c680c6d23ea 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -10,6 +10,7 @@ using System.Diagnostics; using System.Linq; using System.Text; +using System.Xml.Xsl; using Akka.Util; namespace Akka.Actor @@ -245,8 +246,8 @@ public Address WithPort(int? port = null) /// true if both addresses are equal; otherwise false public static bool operator ==(Address left, Address right) { - Debug.Assert(!ReferenceEquals(left, null)); - return left.Equals(right); + return ReferenceEquals(left, right) + ||(left?.Equals(right) ?? false); // left is null, right is not } /// @@ -257,8 +258,8 @@ public Address WithPort(int? port = null) /// true if both addresses are not equal; otherwise false public static bool operator !=(Address left, Address right) { - Debug.Assert(!ReferenceEquals(left, null)); - return !left.Equals(right); + return !ReferenceEquals(left, right) && + (left?.Equals(right) ?? true); } /// From 58019a33f78cdc109dfc625c3be62cc49a02e23b Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Wed, 1 Sep 2021 09:01:10 -0500 Subject: [PATCH 4/6] fixed operators and generic equals --- src/core/Akka/Actor/Address.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index c680c6d23ea..5185d312c9e 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -155,7 +155,7 @@ public bool Equals(Address other) } /// - public override bool Equals(object obj) => obj is Address address && Equals(address); + public override bool Equals(object obj) => Equals(obj as Address); /// public override int GetHashCode() @@ -246,8 +246,7 @@ public Address WithPort(int? port = null) /// true if both addresses are equal; otherwise false public static bool operator ==(Address left, Address right) { - return ReferenceEquals(left, right) - ||(left?.Equals(right) ?? false); // left is null, right is not + return EqualityComparer
.Default.Equals(left, right); } /// @@ -258,8 +257,7 @@ public Address WithPort(int? port = null) /// true if both addresses are not equal; otherwise false public static bool operator !=(Address left, Address right) { - return !ReferenceEquals(left, right) && - (left?.Equals(right) ?? true); + return !(left == right); } /// From 8d9dc399f220964dafefb503c36ac1734fb47036 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Fri, 3 Sep 2021 10:43:02 -0500 Subject: [PATCH 5/6] cleaned up `Address.==` --- src/core/Akka/Actor/Address.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index 5185d312c9e..2e39d00e2c1 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -246,7 +246,10 @@ public Address WithPort(int? port = null) /// true if both addresses are equal; otherwise false public static bool operator ==(Address left, Address right) { - return EqualityComparer
.Default.Equals(left, right); + if (left != null) { + return left.Equals(right); + } + return right == null; } /// From 054e451b4ed138f4828ea3aaa4f1ded0f9d47d00 Mon Sep 17 00:00:00 2001 From: Aaron Stannard Date: Fri, 3 Sep 2021 11:45:45 -0500 Subject: [PATCH 6/6] fixed `Address.==` --- src/core/Akka/Actor/Address.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/core/Akka/Actor/Address.cs b/src/core/Akka/Actor/Address.cs index 2e39d00e2c1..81398855cc6 100644 --- a/src/core/Akka/Actor/Address.cs +++ b/src/core/Akka/Actor/Address.cs @@ -246,10 +246,7 @@ public Address WithPort(int? port = null) /// true if both addresses are equal; otherwise false public static bool operator ==(Address left, Address right) { - if (left != null) { - return left.Equals(right); - } - return right == null; + return left?.Equals(right) ?? ReferenceEquals(right, null); } ///