merlimat closed pull request #1982: Issue 1918: Improve message id comparison
URL: https://github.com/apache/incubator-pulsar/pull/1982
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/BatchMessageIdImpl.java
 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/BatchMessageIdImpl.java
index d87a6ab91b..78109c490c 100644
--- 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/BatchMessageIdImpl.java
+++ 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/BatchMessageIdImpl.java
@@ -72,6 +72,8 @@ public int compareTo(MessageId o) {
             } else {
                 return res;
             }
+        } else if (o instanceof TopicMessageIdImpl) {
+            return compareTo(((TopicMessageIdImpl) o).getInnerMessageId());
         } else {
             throw new IllegalArgumentException(
                     "expected BatchMessageIdImpl object. Got instance of " + 
o.getClass().getName());
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageIdImpl.java 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageIdImpl.java
index 4810f0c921..41cc9c9d50 100644
--- 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageIdImpl.java
+++ 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/MessageIdImpl.java
@@ -73,6 +73,9 @@ public boolean equals(Object obj) {
         if (obj instanceof MessageIdImpl) {
             MessageIdImpl other = (MessageIdImpl) obj;
             return ledgerId == other.ledgerId && entryId == other.entryId && 
partitionIndex == other.partitionIndex;
+        } else if (obj instanceof BatchMessageIdImpl){
+            BatchMessageIdImpl other = (BatchMessageIdImpl) obj;
+            return other.equals(this);
         }
         return false;
     }
@@ -148,16 +151,18 @@ public static MessageId fromByteArray(byte[] data) throws 
IOException {
 
     @Override
     public int compareTo(MessageId o) {
-        if (!(o instanceof MessageIdImpl)) {
+        if (o instanceof MessageIdImpl) {
+            MessageIdImpl other = (MessageIdImpl) o;
+            return ComparisonChain.start()
+                .compare(this.ledgerId, other.ledgerId)
+                .compare(this.entryId, other.entryId)
+                .compare(this.getPartitionIndex(), other.getPartitionIndex())
+                .result();
+        } else if (o instanceof TopicMessageIdImpl) {
+            return compareTo(((TopicMessageIdImpl) o).getInnerMessageId());
+        } else {
             throw new IllegalArgumentException(
                 "expected MessageIdImpl object. Got instance of " + 
o.getClass().getName());
         }
-
-        MessageIdImpl other = (MessageIdImpl) o;
-        return ComparisonChain.start()
-            .compare(this.ledgerId, other.ledgerId)
-            .compare(this.entryId, other.entryId)
-            .compare(this.getPartitionIndex(), other.getPartitionIndex())
-            .result();
     }
 }
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/TopicMessageIdImpl.java
 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/TopicMessageIdImpl.java
index c7cc4536ad..071b804ffb 100644
--- 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/TopicMessageIdImpl.java
+++ 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/TopicMessageIdImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.pulsar.client.impl;
 
+import java.util.Objects;
 import org.apache.pulsar.client.api.MessageId;
 
 public class TopicMessageIdImpl implements MessageId {
@@ -42,6 +43,16 @@ public MessageId getInnerMessageId() {
         return messageId.toByteArray();
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof TopicMessageIdImpl)) {
+            return false;
+        }
+        TopicMessageIdImpl other = (TopicMessageIdImpl) obj;
+        return Objects.equals(topicName, other.topicName)
+            && Objects.equals(messageId, other.messageId);
+    }
+
     @Override
     public int compareTo(MessageId o) {
         return messageId.compareTo(o);
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java
 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java
index 690fc897c0..78af44efba 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java
+++ 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/MessageIdCompareToTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.pulsar.client.impl;
 
+import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
 import org.testng.annotations.Test;
@@ -117,4 +118,45 @@ public void testCompareDifferentType() {
         assertTrue(batchMessageId3.compareTo(messageIdImpl) == 0, "Expected to 
be equal");
     }
 
+    @Test
+    public void testMessageIdImplCompareToTopicMessageId() {
+        MessageIdImpl messageIdImpl = new MessageIdImpl(123L, 345L, 567);
+        TopicMessageIdImpl topicMessageId1 = new TopicMessageIdImpl(
+            "test-topic",
+            new BatchMessageIdImpl(123L, 345L, 566, 789));
+        TopicMessageIdImpl topicMessageId2 = new TopicMessageIdImpl(
+            "test-topic",
+            new BatchMessageIdImpl(123L, 345L, 567, 789));
+        TopicMessageIdImpl topicMessageId3 = new TopicMessageIdImpl(
+            "test-topic",
+            new BatchMessageIdImpl(messageIdImpl));
+        assertTrue(messageIdImpl.compareTo(topicMessageId1) > 0, "Expected to 
be greater than");
+        assertTrue(messageIdImpl.compareTo(topicMessageId2) == 0, "Expected to 
be equal");
+        assertTrue(messageIdImpl.compareTo(topicMessageId3) == 0, "Expected to 
be equal");
+        assertTrue(topicMessageId1.compareTo(messageIdImpl) < 0, "Expected to 
be less than");
+        assertTrue(topicMessageId2.compareTo(messageIdImpl) > 0, "Expected to 
be greater than");
+        assertTrue(topicMessageId3.compareTo(messageIdImpl) == 0, "Expected to 
be equal");
+    }
+
+    @Test
+    public void testBatchMessageIdImplCompareToTopicMessageId() {
+        BatchMessageIdImpl messageIdImpl1 = new BatchMessageIdImpl(123L, 345L, 
567, 789);
+        BatchMessageIdImpl messageIdImpl2 = new BatchMessageIdImpl(123L, 345L, 
567, 0);
+        BatchMessageIdImpl messageIdImpl3 = new BatchMessageIdImpl(123L, 345L, 
567, -1);
+        TopicMessageIdImpl topicMessageId1 = new TopicMessageIdImpl(
+            "test-topic",
+            new MessageIdImpl(123L, 345L, 566));
+        TopicMessageIdImpl topicMessageId2 = new TopicMessageIdImpl(
+            "test-topic",
+            new MessageIdImpl(123L, 345L, 567));
+        assertTrue(messageIdImpl1.compareTo(topicMessageId1) > 0, "Expected to 
be greater than");
+        assertTrue(messageIdImpl1.compareTo(topicMessageId2) > 0, "Expected to 
be greater than");
+        assertTrue(messageIdImpl2.compareTo(topicMessageId2) > 0, "Expected to 
be greater than");
+        assertTrue(messageIdImpl3.compareTo(topicMessageId2) == 0, "Expected 
to be equal");
+        assertTrue(topicMessageId1.compareTo(messageIdImpl1) < 0, "Expected to 
be less than");
+        assertTrue(topicMessageId2.compareTo(messageIdImpl1) == 0, "Expected 
to be equal");
+        assertTrue(topicMessageId2.compareTo(messageIdImpl2) == 0, "Expected 
to be equal");
+        assertTrue(topicMessageId2.compareTo(messageIdImpl2) == 0, "Expected 
to be equal");
+    }
+
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to