You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2015/05/02 03:43:48 UTC
[1/4] hbase git commit: HBASE-12413 Mismatch in the equals and
hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Repository: hbase
Updated Branches:
refs/heads/0.98 4a0516deb -> 38288ebca
refs/heads/branch-1 30d1fe219 -> 9a4ea44d1
refs/heads/branch-1.0 de5b226b0 -> fdfebefa5
refs/heads/branch-1.1 7cc85d367 -> 9acaba276
HBASE-12413 Mismatch in the equals and hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Conflicts:
hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/38288ebc
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/38288ebc
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/38288ebc
Branch: refs/heads/0.98
Commit: 38288ebcac2db06d3241ffa7bbb6c5c8e1b0a23f
Parents: 4a0516d
Author: tedyu <yu...@gmail.com>
Authored: Fri May 1 18:31:14 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri May 1 18:31:14 2015 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/CellComparator.java | 22 ++++++++++++++++++--
.../java/org/apache/hadoop/hbase/KeyValue.java | 11 ++++------
.../org/apache/hadoop/hbase/TestKeyValue.java | 20 ++++++++++++++++++
3 files changed, 44 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/38288ebc/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
index 992079d..245b181 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
@@ -140,13 +140,32 @@ public class CellComparator implements Comparator<Cell>, Serializable{
/**
* Returns a hash code that is always the same for two Cells having a matching equals(..) result.
- * Currently does not guard against nulls, but it could if necessary.
*/
public static int hashCode(Cell cell){
if (cell == null) {// return 0 for empty Cell
return 0;
}
+ int hash = calculateHashForKeyValue(cell);
+ hash = 31 * hash + (int)cell.getMvccVersion();
+ return hash;
+ }
+
+ /**
+ * Returns a hash code that is always the same for two Cells having a matching
+ * equals(..) result. Note : Ignore mvcc while calculating the hashcode
+ *
+ * @param cell
+ * @return hashCode
+ */
+ public static int hashCodeIgnoreMvcc(Cell cell) {
+ if (cell == null) {// return 0 for empty Cell
+ return 0;
+ }
+ int hash = calculateHashForKeyValue(cell);
+ return hash;
+ }
+ private static int calculateHashForKeyValue(Cell cell) {
//pre-calculate the 3 hashes made of byte ranges
int rowHash = Bytes.hashCode(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
int familyHash =
@@ -159,7 +178,6 @@ public class CellComparator implements Comparator<Cell>, Serializable{
hash = 31 * hash + qualifierHash;
hash = 31 * hash + (int)cell.getTimestamp();
hash = 31 * hash + cell.getTypeByte();
- hash = 31 * hash + (int)cell.getMvccVersion();
return hash;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/38288ebc/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
index 924da95..66f18d0 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
@@ -1053,15 +1053,12 @@ public class KeyValue implements Cell, HeapSize, Cloneable {
return CellComparator.equals(this, (Cell)other);
}
+ /**
+ * In line with {@link #equals(Object)}, only uses the key portion, not the value.
+ */
@Override
public int hashCode() {
- byte[] b = getBuffer();
- int start = getOffset(), end = getOffset() + getLength();
- int h = b[start++];
- for (int i = start; i < end; i++) {
- h = (h * 13) ^ b[i];
- }
- return h;
+ return CellComparator.hashCodeIgnoreMvcc(this);
}
//---------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/38288ebc/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
index 45c2b39..e6d000c 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
@@ -35,6 +35,8 @@ import org.apache.hadoop.hbase.KeyValue.MetaComparator;
import org.apache.hadoop.hbase.KeyValue.Type;
import org.apache.hadoop.hbase.util.Bytes;
+import static org.junit.Assert.assertNotEquals;
+
public class TestKeyValue extends TestCase {
private final Log LOG = LogFactory.getLog(this.getClass().getName());
@@ -614,4 +616,22 @@ public class TestKeyValue extends TestCase {
b = new KeyValue(Bytes.toBytes("table,111,222,bbb"), now);
assertTrue(c.compare(a, b) < 0);
}
+
+ public void testEqualsAndHashCode() throws Exception {
+ KeyValue kvA1 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("1"));
+ KeyValue kvA2 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("2"));
+ // We set a different sequence id on kvA2 to demonstrate that the equals and hashCode also
+ // don't take this into account.
+ kvA2.setMvccVersion(2);
+ KeyValue kvB = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualB"), Bytes.toBytes("1"));
+
+ assertEquals(kvA1, kvA2);
+ assertNotEquals(kvA1, kvB);
+ assertEquals(kvA1.hashCode(), kvA2.hashCode());
+ assertNotEquals(kvA1.hashCode(), kvB.hashCode());
+
+ }
}
[3/4] hbase git commit: HBASE-12413 Mismatch in the equals and
hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Posted by ap...@apache.org.
HBASE-12413 Mismatch in the equals and hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Conflicts:
hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9acaba27
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9acaba27
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9acaba27
Branch: refs/heads/branch-1.1
Commit: 9acaba276e482448c1869d3fd5c04872dc8b17f2
Parents: 7cc85d3
Author: tedyu <yu...@gmail.com>
Authored: Fri May 1 18:31:18 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri May 1 18:31:18 2015 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/CellComparator.java | 6 ++----
.../java/org/apache/hadoop/hbase/KeyValue.java | 11 ++++-------
.../org/apache/hadoop/hbase/TestKeyValue.java | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9acaba27/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
index 46c0eaf..2c1cc09 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
@@ -244,7 +244,6 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching equals(..) result.
- * Currently does not guard against nulls, but it could if necessary.
*/
public static int hashCode(Cell cell){
if (cell == null) {// return 0 for empty Cell
@@ -258,9 +257,8 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching
- * equals(..) result. Currently does not guard against nulls, but it could if
- * necessary. Note : Ignore mvcc while calculating the hashcode
- *
+ * equals(..) result. Note : Ignore mvcc while calculating the hashcode
+ *
* @param cell
* @return hashCode
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/9acaba27/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
index 48daa83..1275952 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
@@ -1123,15 +1123,12 @@ public class KeyValue implements Cell, HeapSize, Cloneable, SettableSequenceId,
return CellComparator.equals(this, (Cell)other);
}
+ /**
+ * In line with {@link #equals(Object)}, only uses the key portion, not the value.
+ */
@Override
public int hashCode() {
- byte[] b = getBuffer();
- int start = getOffset(), end = getOffset() + getLength();
- int h = b[start++];
- for (int i = start; i < end; i++) {
- h = (h * 13) ^ b[i];
- }
- return h;
+ return CellComparator.hashCodeIgnoreMvcc(this);
}
//---------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9acaba27/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
index b41f692..c6a31b5 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
@@ -39,6 +39,8 @@ import org.apache.hadoop.hbase.KeyValue.MetaComparator;
import org.apache.hadoop.hbase.KeyValue.Type;
import org.apache.hadoop.hbase.util.Bytes;
+import static org.junit.Assert.assertNotEquals;
+
public class TestKeyValue extends TestCase {
private final Log LOG = LogFactory.getLog(this.getClass().getName());
@@ -829,4 +831,22 @@ public class TestKeyValue extends TestCase {
return this.kv.getTagsArray();
}
}
+
+ public void testEqualsAndHashCode() throws Exception {
+ KeyValue kvA1 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("1"));
+ KeyValue kvA2 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("2"));
+ // We set a different sequence id on kvA2 to demonstrate that the equals and hashCode also
+ // don't take this into account.
+ kvA2.setSequenceId(2);
+ KeyValue kvB = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualB"), Bytes.toBytes("1"));
+
+ assertEquals(kvA1, kvA2);
+ assertNotEquals(kvA1, kvB);
+ assertEquals(kvA1.hashCode(), kvA2.hashCode());
+ assertNotEquals(kvA1.hashCode(), kvB.hashCode());
+ }
+
}
[4/4] hbase git commit: HBASE-12413 Mismatch in the equals and
hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Posted by ap...@apache.org.
HBASE-12413 Mismatch in the equals and hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Conflicts:
hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/fdfebefa
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/fdfebefa
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/fdfebefa
Branch: refs/heads/branch-1.0
Commit: fdfebefa5f74707e3b58dc5a68f0b56689d7a510
Parents: de5b226
Author: tedyu <yu...@gmail.com>
Authored: Fri May 1 18:31:19 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri May 1 18:31:19 2015 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/CellComparator.java | 6 ++----
.../java/org/apache/hadoop/hbase/KeyValue.java | 11 ++++-------
.../org/apache/hadoop/hbase/TestKeyValue.java | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/fdfebefa/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
index 46c0eaf..2c1cc09 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
@@ -244,7 +244,6 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching equals(..) result.
- * Currently does not guard against nulls, but it could if necessary.
*/
public static int hashCode(Cell cell){
if (cell == null) {// return 0 for empty Cell
@@ -258,9 +257,8 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching
- * equals(..) result. Currently does not guard against nulls, but it could if
- * necessary. Note : Ignore mvcc while calculating the hashcode
- *
+ * equals(..) result. Note : Ignore mvcc while calculating the hashcode
+ *
* @param cell
* @return hashCode
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/fdfebefa/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
index fb4ec2c..77b72bf 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
@@ -1122,15 +1122,12 @@ public class KeyValue implements Cell, HeapSize, Cloneable, SettableSequenceId,
return CellComparator.equals(this, (Cell)other);
}
+ /**
+ * In line with {@link #equals(Object)}, only uses the key portion, not the value.
+ */
@Override
public int hashCode() {
- byte[] b = getBuffer();
- int start = getOffset(), end = getOffset() + getLength();
- int h = b[start++];
- for (int i = start; i < end; i++) {
- h = (h * 13) ^ b[i];
- }
- return h;
+ return CellComparator.hashCodeIgnoreMvcc(this);
}
//---------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/fdfebefa/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
index b41f692..c6a31b5 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
@@ -39,6 +39,8 @@ import org.apache.hadoop.hbase.KeyValue.MetaComparator;
import org.apache.hadoop.hbase.KeyValue.Type;
import org.apache.hadoop.hbase.util.Bytes;
+import static org.junit.Assert.assertNotEquals;
+
public class TestKeyValue extends TestCase {
private final Log LOG = LogFactory.getLog(this.getClass().getName());
@@ -829,4 +831,22 @@ public class TestKeyValue extends TestCase {
return this.kv.getTagsArray();
}
}
+
+ public void testEqualsAndHashCode() throws Exception {
+ KeyValue kvA1 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("1"));
+ KeyValue kvA2 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("2"));
+ // We set a different sequence id on kvA2 to demonstrate that the equals and hashCode also
+ // don't take this into account.
+ kvA2.setSequenceId(2);
+ KeyValue kvB = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualB"), Bytes.toBytes("1"));
+
+ assertEquals(kvA1, kvA2);
+ assertNotEquals(kvA1, kvB);
+ assertEquals(kvA1.hashCode(), kvA2.hashCode());
+ assertNotEquals(kvA1.hashCode(), kvB.hashCode());
+ }
+
}
[2/4] hbase git commit: HBASE-12413 Mismatch in the equals and
hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Posted by ap...@apache.org.
HBASE-12413 Mismatch in the equals and hashcode methods of KeyValue (Jingcheng Du and Gariel Reid)
Conflicts:
hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9a4ea44d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9a4ea44d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9a4ea44d
Branch: refs/heads/branch-1
Commit: 9a4ea44d1ee46f6d0883dd10f173810bc6685c7d
Parents: 30d1fe2
Author: tedyu <yu...@gmail.com>
Authored: Fri May 1 18:31:16 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri May 1 18:31:16 2015 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/CellComparator.java | 6 ++----
.../java/org/apache/hadoop/hbase/KeyValue.java | 11 ++++-------
.../org/apache/hadoop/hbase/TestKeyValue.java | 20 ++++++++++++++++++++
3 files changed, 26 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9a4ea44d/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
index 46c0eaf..2c1cc09 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellComparator.java
@@ -244,7 +244,6 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching equals(..) result.
- * Currently does not guard against nulls, but it could if necessary.
*/
public static int hashCode(Cell cell){
if (cell == null) {// return 0 for empty Cell
@@ -258,9 +257,8 @@ public class CellComparator implements Comparator<Cell>, Serializable {
/**
* Returns a hash code that is always the same for two Cells having a matching
- * equals(..) result. Currently does not guard against nulls, but it could if
- * necessary. Note : Ignore mvcc while calculating the hashcode
- *
+ * equals(..) result. Note : Ignore mvcc while calculating the hashcode
+ *
* @param cell
* @return hashCode
*/
http://git-wip-us.apache.org/repos/asf/hbase/blob/9a4ea44d/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
index de66b89..bae5fb4 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java
@@ -1123,15 +1123,12 @@ public class KeyValue implements Cell, HeapSize, Cloneable, SettableSequenceId,
return CellComparator.equals(this, (Cell)other);
}
+ /**
+ * In line with {@link #equals(Object)}, only uses the key portion, not the value.
+ */
@Override
public int hashCode() {
- byte[] b = getBuffer();
- int start = getOffset(), end = getOffset() + getLength();
- int h = b[start++];
- for (int i = start; i < end; i++) {
- h = (h * 13) ^ b[i];
- }
- return h;
+ return CellComparator.hashCodeIgnoreMvcc(this);
}
//---------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/9a4ea44d/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
index cd1a774..3baf729 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
@@ -39,6 +39,8 @@ import org.apache.hadoop.hbase.KeyValue.MetaComparator;
import org.apache.hadoop.hbase.KeyValue.Type;
import org.apache.hadoop.hbase.util.Bytes;
+import static org.junit.Assert.assertNotEquals;
+
public class TestKeyValue extends TestCase {
private static final Log LOG = LogFactory.getLog(TestKeyValue.class);
@@ -829,4 +831,22 @@ public class TestKeyValue extends TestCase {
return this.kv.getTagsArray();
}
}
+
+ public void testEqualsAndHashCode() throws Exception {
+ KeyValue kvA1 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("1"));
+ KeyValue kvA2 = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualA"), Bytes.toBytes("2"));
+ // We set a different sequence id on kvA2 to demonstrate that the equals and hashCode also
+ // don't take this into account.
+ kvA2.setSequenceId(2);
+ KeyValue kvB = new KeyValue(Bytes.toBytes("key"), Bytes.toBytes("cf"),
+ Bytes.toBytes("qualB"), Bytes.toBytes("1"));
+
+ assertEquals(kvA1, kvA2);
+ assertNotEquals(kvA1, kvB);
+ assertEquals(kvA1.hashCode(), kvA2.hashCode());
+ assertNotEquals(kvA1.hashCode(), kvB.hashCode());
+ }
+
}