You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by gu...@apache.org on 2015/02/18 01:19:22 UTC
kafka git commit: KAFKA-1805;
ProducerRecord should implement equals and hashCode; reviewed by Guozhang Wang
Repository: kafka
Updated Branches:
refs/heads/trunk eab4f4c9f -> 5b949c7b1
KAFKA-1805; ProducerRecord should implement equals and hashCode; reviewed by Guozhang Wang
Project: http://git-wip-us.apache.org/repos/asf/kafka/repo
Commit: http://git-wip-us.apache.org/repos/asf/kafka/commit/5b949c7b
Tree: http://git-wip-us.apache.org/repos/asf/kafka/tree/5b949c7b
Diff: http://git-wip-us.apache.org/repos/asf/kafka/diff/5b949c7b
Branch: refs/heads/trunk
Commit: 5b949c7b1ad5ab3f71cae6024eea10b59a7ad9b6
Parents: eab4f4c
Author: Parth Brahmbhatt <pb...@hortonworks.com>
Authored: Tue Feb 17 16:18:35 2015 -0800
Committer: Guozhang Wang <wa...@gmail.com>
Committed: Tue Feb 17 16:18:35 2015 -0800
----------------------------------------------------------------------
.../kafka/clients/producer/ProducerRecord.java | 24 +++++++++
.../clients/producer/ProducerRecordTest.java | 52 ++++++++++++++++++++
2 files changed, 76 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kafka/blob/5b949c7b/clients/src/main/java/org/apache/kafka/clients/producer/ProducerRecord.java
----------------------------------------------------------------------
diff --git a/clients/src/main/java/org/apache/kafka/clients/producer/ProducerRecord.java b/clients/src/main/java/org/apache/kafka/clients/producer/ProducerRecord.java
index 065d4e6..4990692 100644
--- a/clients/src/main/java/org/apache/kafka/clients/producer/ProducerRecord.java
+++ b/clients/src/main/java/org/apache/kafka/clients/producer/ProducerRecord.java
@@ -99,4 +99,28 @@ public final class ProducerRecord<K, V> {
String value = this.value == null ? "null" : this.value.toString();
return "ProducerRecord(topic=" + topic + ", partition=" + partition + ", key=" + key + ", value=" + value;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ProducerRecord)) return false;
+
+ ProducerRecord that = (ProducerRecord) o;
+
+ if (key != null ? !key.equals(that.key) : that.key != null) return false;
+ if (partition != null ? !partition.equals(that.partition) : that.partition != null) return false;
+ if (topic != null ? !topic.equals(that.topic) : that.topic != null) return false;
+ if (value != null ? !value.equals(that.value) : that.value != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = topic != null ? topic.hashCode() : 0;
+ result = 31 * result + (partition != null ? partition.hashCode() : 0);
+ result = 31 * result + (key != null ? key.hashCode() : 0);
+ result = 31 * result + (value != null ? value.hashCode() : 0);
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/kafka/blob/5b949c7b/clients/src/test/java/org/apache/kafka/clients/producer/ProducerRecordTest.java
----------------------------------------------------------------------
diff --git a/clients/src/test/java/org/apache/kafka/clients/producer/ProducerRecordTest.java b/clients/src/test/java/org/apache/kafka/clients/producer/ProducerRecordTest.java
new file mode 100644
index 0000000..7bb181e
--- /dev/null
+++ b/clients/src/test/java/org/apache/kafka/clients/producer/ProducerRecordTest.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.kafka.clients.producer;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+public class ProducerRecordTest {
+
+ @Test
+ public void testEqualsAndHashCode() {
+ ProducerRecord<String, Integer> producerRecord = new ProducerRecord<String, Integer>("test", 1 , "key", 1);
+ assertEquals(producerRecord, producerRecord);
+ assertEquals(producerRecord.hashCode(), producerRecord.hashCode());
+
+ ProducerRecord<String, Integer> equalRecord = new ProducerRecord<String, Integer>("test", 1 , "key", 1);
+ assertEquals(producerRecord, equalRecord);
+ assertEquals(producerRecord.hashCode(), equalRecord.hashCode());
+
+ ProducerRecord<String, Integer> topicMisMatch = new ProducerRecord<String, Integer>("test-1", 1 , "key", 1);
+ assertFalse(producerRecord.equals(topicMisMatch));
+
+ ProducerRecord<String, Integer> partitionMismatch = new ProducerRecord<String, Integer>("test", 2 , "key", 1);
+ assertFalse(producerRecord.equals(partitionMismatch));
+
+ ProducerRecord<String, Integer> keyMisMatch = new ProducerRecord<String, Integer>("test", 1 , "key-1", 1);
+ assertFalse(producerRecord.equals(keyMisMatch));
+
+ ProducerRecord<String, Integer> valueMisMatch = new ProducerRecord<String, Integer>("test", 1 , "key", 2);
+ assertFalse(producerRecord.equals(valueMisMatch));
+
+ ProducerRecord<String, Integer> nullFieldsRecord = new ProducerRecord<String, Integer>("topic", null, null, null);
+ assertEquals(nullFieldsRecord, nullFieldsRecord);
+ assertEquals(nullFieldsRecord.hashCode(), nullFieldsRecord.hashCode());
+ }
+}