From 7e1a05c200cd7c0908b55af73e6f46e0174c20b4 Mon Sep 17 00:00:00 2001 From: Zhihong Yu Date: Mon, 21 Jan 2013 15:59:06 +0000 Subject: [PATCH] HBASE-6907 KeyValue equals and compareTo methods should match (Ted Yu) git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1436434 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/hadoop/hbase/KeyValue.java | 5 +--- .../apache/hadoop/hbase/KeyValueTestUtil.java | 24 +++++++++++++++++-- .../hbase/regionserver/TestColumnSeeking.java | 5 ++-- .../hbase/regionserver/TestHRegion.java | 15 ++++++------ .../regionserver/TestMultiColumnScanner.java | 6 ++--- 5 files changed, 37 insertions(+), 18 deletions(-) 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 6ebff51cc54..04bacb4e486 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 @@ -842,16 +842,13 @@ public class KeyValue implements Cell, HeapSize { /** * Needed doing 'contains' on List. Only compares the key portion, not the value. - * - * For temporary backwards compatibility with the original KeyValue.equals method, we ignore the - * mvccVersion. */ @Override public boolean equals(Object other) { if (!(other instanceof Cell)) { return false; } - return CellComparator.equalsIgnoreMvccVersion(this, (Cell)other); + return CellComparator.equals(this, (Cell)other); } @Override diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueTestUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueTestUtil.java index 1beeb4a82ce..c2052b00a1a 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueTestUtil.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueTestUtil.java @@ -23,10 +23,10 @@ import java.util.Collection; import java.util.List; import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.IterableUtils; import org.apache.hadoop.hbase.util.Strings; +import org.apache.hbase.cell.CellComparator; import com.google.common.collect.Lists; @@ -61,7 +61,6 @@ public class KeyValueTestUtil { ); } - public static ByteBuffer toByteBufferAndRewind(final Iterable kvs, boolean includeMemstoreTS) { int totalBytes = KeyValueTool.totalLengthWithMvccVersion(kvs, includeMemstoreTS); @@ -73,6 +72,27 @@ public class KeyValueTestUtil { return bb; } + /** + * Checks whether KeyValues from kvCollection2 are contained in kvCollection1. + * + * The comparison is made without distinguishing MVCC version of the KeyValues + * + * @param kvCollection1 + * @param kvCollection2 + * @return true if KeyValues from kvCollection2 are contained in kvCollection1 + */ + public static boolean containsIgnoreMvccVersion(Collection kvCollection1, + Collection kvCollection2) { + for (KeyValue kv1 : kvCollection1) { + boolean found = false; + for (KeyValue kv2 : kvCollection2) { + if (CellComparator.equalsIgnoreMvccVersion(kv1, kv2)) found = true; + } + if (!found) return false; + } + return true; + } + public static List rewindThenToList(final ByteBuffer bb, final boolean includesMemstoreTS) { bb.rewind(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java index b507f841463..db1f7aa28c0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java @@ -35,6 +35,7 @@ import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hbase.cell.CellComparator; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -149,7 +150,7 @@ public class TestColumnSeeking { while (scanner.next(results)) ; assertEquals(kvSet.size(), results.size()); - assertTrue(results.containsAll(kvSet)); + assertTrue(KeyValueTestUtil.containsIgnoreMvccVersion(results, kvSet)); } } finally { HRegion.closeHRegion(region); @@ -260,7 +261,7 @@ public class TestColumnSeeking { while (scanner.next(results)) ; assertEquals(kvSet.size(), results.size()); - assertTrue(results.containsAll(kvSet)); + assertTrue(KeyValueTestUtil.containsIgnoreMvccVersion(results, kvSet)); } HRegion.closeHRegion(region); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java index 9cbedae21f7..32e1a011528 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHRegion.java @@ -90,6 +90,7 @@ import org.apache.hadoop.hbase.util.IncrementingEnvironmentEdge; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.PairOfSameType; import org.apache.hadoop.hbase.util.Threads; +import org.apache.hbase.cell.CellComparator; import org.junit.Assert; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -1910,8 +1911,8 @@ public class TestHRegion extends HBaseTestCase { res = new ArrayList(); is.next(res); - for(int i=0; i(); is.next(res); for(int i=0; i