This is an automated email from the ASF dual-hosted git repository.

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 38220a1bc8 [#7590] fix(dto): use instanceof TopicDTO instead of Topic 
for equals() (#7599)
38220a1bc8 is described below

commit 38220a1bc871f813ceb9cd859ef7ae817b50cee1
Author: 신동재 <tlsehd...@naver.com>
AuthorDate: Tue Jul 8 08:15:10 2025 +0900

    [#7590] fix(dto): use instanceof TopicDTO instead of Topic for equals() 
(#7599)
    
    [#7590] fix(dto): use instanceof TopicDTO instead of Topic for equals()
    
    ### What changes were proposed in this pull request?
    
    - Modify `TopicDTO.equals` method:
        - Replace `instanceof Topic` check with `instanceof TopicDTO`
        - Ensure correct type checking in the equals method
    
    ### Why are the changes needed?
    
    - The current `equals` implementation in `TopicDTO` incorrectly checks
    `instanceof Topic`.
    - This could result in comparing objects of different implementations of
    `Topic`, potentially causing a `ClassCastException` and breaking the
    equals symmetry contract.
    - This change ensures that the equals method uses `instanceof TopicDTO`
    instead, performing the type check correctly and safely.
    
    Fix: #7590
    
    ### Does this PR introduce _any_ user-facing change?
    
    No user-facing changes.
    
    ### How was this patch tested?
    
    The test code was written and used for manual verification but was not
    committed to the repository.
    
    public class TestTopicDTO {
    
      @Test
      void testShouldBeEqual_whenAllFieldsAreSame() {
    Map<String, String> props = Collections.singletonMap("key1", "value1");
    
        TopicDTO t1 =
    
    
TopicDTO.builder().withName("topicA").withComment("comment").withProperties(props).build();
    
        TopicDTO t2 =
    
    
TopicDTO.builder().withName("topicA").withComment("comment").withProperties(props).build();
    
    Assertions.assertEquals(t1, t2, "TopicDTOs with same fields should be
    equal");
      }
    
      @Test
      void testShouldNotBeEqual_whenNamesAreDifferent() {
    Map<String, String> props = Collections.singletonMap("key1", "value1");
    
        TopicDTO t1 =
    
    
TopicDTO.builder().withName("topicA").withComment("comment").withProperties(props).build();
    
        TopicDTO t2 =
    
    
TopicDTO.builder().withName("topicB").withComment("comment").withProperties(props).build();
    
    Assertions.assertNotEquals(t1, t2, "TopicDTOs with different names
    should not be equal");
      }
    }
---
 common/src/main/java/org/apache/gravitino/dto/messaging/TopicDTO.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/common/src/main/java/org/apache/gravitino/dto/messaging/TopicDTO.java 
b/common/src/main/java/org/apache/gravitino/dto/messaging/TopicDTO.java
index afbc264f9b..44ca689a3f 100644
--- a/common/src/main/java/org/apache/gravitino/dto/messaging/TopicDTO.java
+++ b/common/src/main/java/org/apache/gravitino/dto/messaging/TopicDTO.java
@@ -89,7 +89,7 @@ public class TopicDTO implements Topic {
     if (this == o) {
       return true;
     }
-    if (!(o instanceof Topic)) {
+    if (!(o instanceof TopicDTO)) {
       return false;
     }
     TopicDTO topicDTO = (TopicDTO) o;

Reply via email to