From c60991574ba67464a7b7058c6a5d3d634ca88ef3 Mon Sep 17 00:00:00 2001 From: mattisonchao Date: Thu, 20 Nov 2025 10:03:43 +0800 Subject: [PATCH 1/4] feat: support equalsAndHashcode for BookieServerInfo Signed-off-by: mattisonchao --- .../discover/BookieServiceInfo.java | 28 +++++++++++++++++ .../discover/BookieServiceInfoTest.java | 30 +++++++++++++++---- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java index 8b23a70143b..d094a55596c 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; /** @@ -150,6 +151,20 @@ public void setExtensions(List extensions) { this.extensions = extensions; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Endpoint)) return false; + Endpoint endpoint = (Endpoint) o; + return port == endpoint.port && Objects.equals(id, endpoint.id) && Objects.equals(host, endpoint.host) && Objects.equals(protocol, endpoint.protocol) && Objects.equals(auth, endpoint.auth) && Objects.equals(extensions, endpoint.extensions); + } + + @Override + public int hashCode() { + return Objects.hash(id, port, host, protocol, auth, extensions); + } + @Override public String toString() { return "EndpointInfo{" + "id=" + id + ", port=" + port + ", host=" + host + ", protocol=" + protocol + ", " @@ -158,6 +173,19 @@ public String toString() { } + @Override + public boolean equals(Object o) { + if (o == this) return true; + if (!(o instanceof BookieServiceInfo)) return false; + final BookieServiceInfo that = (BookieServiceInfo) o; + return Objects.equals(properties, that.properties) && Objects.equals(endpoints, that.endpoints); + } + + @Override + public int hashCode() { + return Objects.hash(properties, endpoints); + } + @Override public String toString() { return "BookieServiceInfo{" + "properties=" + properties + ", endpoints=" + endpoints + '}'; diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java index 4173d630002..8de9eb6a73e 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java @@ -22,13 +22,15 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.apache.bookkeeper.discover.BookieServiceInfo.Endpoint; import org.apache.bookkeeper.net.BookieId; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.junit.Assert; import org.junit.Test; /** @@ -90,4 +92,22 @@ private void assertBookieServiceInfoEquals(BookieServiceInfo expected, BookieSer assertEquals(expected.getProperties(), provided.getProperties()); } + @Test + public void testComparableBookieServerInfo() throws Exception { + final BookieServiceInfo.Endpoint endpoint = new BookieServiceInfo.Endpoint( + "http", 8080, "host1", "HTTP", + Lists.newArrayList("auth1"), Lists.newArrayList("ext1") + ); + final Map properties1 = Maps.newHashMap(); + properties1.put("key", "value"); + final BookieServiceInfo info = new BookieServiceInfo( + properties1, + Lists.newArrayList(endpoint) + ); + final ObjectMapper objectMapper = new ObjectMapper(); + final String bData = objectMapper.writeValueAsString(info); + final BookieServiceInfo another = objectMapper.readValue(bData, BookieServiceInfo.class); + Assert.assertEquals(info, another); + } + } From cbe436bf3e8820c9528e84737a11841d014528c2 Mon Sep 17 00:00:00 2001 From: mattisonchao Date: Thu, 20 Nov 2025 10:11:24 +0800 Subject: [PATCH 2/4] change order --- .../java/org/apache/bookkeeper/discover/BookieServiceInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java index d094a55596c..f5bc9c8fbd4 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java @@ -175,7 +175,7 @@ public String toString() { @Override public boolean equals(Object o) { - if (o == this) return true; + if (this == o) return true; if (!(o instanceof BookieServiceInfo)) return false; final BookieServiceInfo that = (BookieServiceInfo) o; return Objects.equals(properties, that.properties) && Objects.equals(endpoints, that.endpoints); From cfb2888ab23f1575e52cc7463bf6756f5ad72212 Mon Sep 17 00:00:00 2001 From: mattisonchao Date: Thu, 20 Nov 2025 10:14:56 +0800 Subject: [PATCH 3/4] fix checkstyle --- .../apache/bookkeeper/discover/BookieServiceInfoTest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java index 8de9eb6a73e..719e02143ab 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java @@ -22,14 +22,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -import java.util.*; - +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.bookkeeper.discover.BookieServiceInfo.Endpoint; import org.apache.bookkeeper.net.BookieId; -import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Assert; import org.junit.Test; From d2d86649353a38119889153fb5e6f27aeb3a3f73 Mon Sep 17 00:00:00 2001 From: mattisonchao Date: Thu, 20 Nov 2025 10:37:16 +0800 Subject: [PATCH 4/4] fix checkstyle --- .../discover/BookieServiceInfo.java | 22 ++++++++++++++----- .../discover/BookieServiceInfoTest.java | 6 ++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java index f5bc9c8fbd4..c465938311f 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/BookieServiceInfo.java @@ -154,10 +154,16 @@ public void setExtensions(List extensions) { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Endpoint)) return false; - Endpoint endpoint = (Endpoint) o; - return port == endpoint.port && Objects.equals(id, endpoint.id) && Objects.equals(host, endpoint.host) && Objects.equals(protocol, endpoint.protocol) && Objects.equals(auth, endpoint.auth) && Objects.equals(extensions, endpoint.extensions); + if (this == o) { + return true; + } + if (!(o instanceof Endpoint)) { + return false; + } + final Endpoint endpoint = (Endpoint) o; + return port == endpoint.port && Objects.equals(id, endpoint.id) && Objects.equals(host, endpoint.host) + && Objects.equals(protocol, endpoint.protocol) && Objects.equals(auth, endpoint.auth) + && Objects.equals(extensions, endpoint.extensions); } @Override @@ -175,8 +181,12 @@ public String toString() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof BookieServiceInfo)) return false; + if (this == o) { + return true; + } + if (!(o instanceof BookieServiceInfo)) { + return false; + } final BookieServiceInfo that = (BookieServiceInfo) o; return Objects.equals(properties, that.properties) && Objects.equals(endpoints, that.endpoints); } diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java index 719e02143ab..3bbda71c510 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/discover/BookieServiceInfoTest.java @@ -22,14 +22,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import org.apache.bookkeeper.discover.BookieServiceInfo.Endpoint; import org.apache.bookkeeper.net.BookieId; import org.junit.Assert;