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:
[email protected]
With regards,
Apache Git Services