You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2018/01/02 02:01:13 UTC

[19/51] [abbrv] hbase git commit: HBASE-19428 Deprecate the compareTo(Row)

HBASE-19428 Deprecate the compareTo(Row)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e23f7afe
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e23f7afe
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e23f7afe

Branch: refs/heads/HBASE-19397
Commit: e23f7afe5791c248f1ccdf031788ffc6df2c263b
Parents: 8d0da1a
Author: Chia-Ping Tsai <ch...@gmail.com>
Authored: Fri Dec 29 20:03:39 2017 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Fri Dec 29 20:03:39 2017 +0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/Delete.java  |  2 +-
 .../org/apache/hadoop/hbase/client/Get.java     |  3 +-
 .../apache/hadoop/hbase/client/Increment.java   | 18 ++--
 .../apache/hadoop/hbase/client/Mutation.java    |  5 ++
 .../org/apache/hadoop/hbase/client/Put.java     |  2 +-
 .../client/RegionCoprocessorServiceExec.java    |  3 +-
 .../org/apache/hadoop/hbase/client/Row.java     | 10 +++
 .../hadoop/hbase/client/RowMutations.java       | 17 +++-
 .../hadoop/hbase/client/TestRowComparator.java  | 94 ++++++++++++++++++++
 .../hbase/regionserver/RSRpcServices.java       |  5 +-
 10 files changed, 143 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java
index 33389cf..7c32a68 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Delete.java
@@ -65,7 +65,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  * timestamp.  The constructor timestamp is not referenced.
  */
 @InterfaceAudience.Public
-public class Delete extends Mutation implements Comparable<Row> {
+public class Delete extends Mutation {
   /**
    * Create a Delete operation for the specified row.
    * <p>

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
index 80b8a22..9ed3b38 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Get.java
@@ -64,8 +64,7 @@ import org.apache.hadoop.hbase.util.Bytes;
  * To add a filter, call {@link #setFilter(Filter) setFilter}.
  */
 @InterfaceAudience.Public
-public class Get extends Query
-  implements Row, Comparable<Row> {
+public class Get extends Query implements Row {
   private static final Logger LOG = LoggerFactory.getLogger(Get.class);
 
   private byte [] row = null;

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java
index 5ab5b85..76208d6 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Increment.java
@@ -46,7 +46,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  * {@link #addColumn(byte[], byte[], long)} method.
  */
 @InterfaceAudience.Public
-public class Increment extends Mutation implements Comparable<Row> {
+public class Increment extends Mutation {
   private static final int HEAP_OVERHEAD = ClassSize.REFERENCE + ClassSize.TIMERANGE;
   private TimeRange tr = new TimeRange();
 
@@ -262,12 +262,11 @@ public class Increment extends Mutation implements Comparable<Row> {
     return sb.toString();
   }
 
-  @Override
-  public int compareTo(Row i) {
-    // TODO: This is wrong.  Can't have two the same just because on same row.
-    return Bytes.compareTo(this.getRow(), i.getRow());
-  }
-
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             No replacement.
+   */
+  @Deprecated
   @Override
   public int hashCode() {
     // TODO: This is wrong.  Can't have two gets the same just because on same row.  But it
@@ -275,6 +274,11 @@ public class Increment extends Mutation implements Comparable<Row> {
     return Bytes.hashCode(this.getRow());
   }
 
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             Use {@link Row#COMPARATOR} instead
+   */
+  @Deprecated
   @Override
   public boolean equals(Object obj) {
     // TODO: This is wrong.  Can't have two the same just because on same row.

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java
index b7c1769..1569d26 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java
@@ -331,6 +331,11 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C
     return this.row;
   }
 
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             Use {@link Row#COMPARATOR} instead
+   */
+  @Deprecated
   @Override
   public int compareTo(final Row d) {
     return Bytes.compareTo(this.getRow(), d.getRow());

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java
index b817d70..db8eec5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Put.java
@@ -44,7 +44,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  * setting the timestamp.
  */
 @InterfaceAudience.Public
-public class Put extends Mutation implements HeapSize, Comparable<Row> {
+public class Put extends Mutation implements HeapSize {
   /**
    * Create a Put operation for the specified row.
    * @param row row key

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.java
index 4a6ee14..68a6927 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.java
@@ -98,8 +98,7 @@ public class RegionCoprocessorServiceExec implements Row {
     if (obj == null || getClass() != obj.getClass()) {
       return false;
     }
-    Row other = (Row) obj;
-    return compareTo(other) == 0;
+    return compareTo((RegionCoprocessorServiceExec) obj) == 0;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Row.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Row.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Row.java
index 6565674..3152f9e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Row.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Row.java
@@ -18,6 +18,8 @@
  */
 package org.apache.hadoop.hbase.client;
 
+import java.util.Comparator;
+import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.yetus.audience.InterfaceAudience;
 
 /**
@@ -25,8 +27,16 @@ import org.apache.yetus.audience.InterfaceAudience;
  */
 @InterfaceAudience.Public
 public interface Row extends Comparable<Row> {
+  Comparator<Row> COMPARATOR = (v1, v2) -> Bytes.compareTo(v1.getRow(), v2.getRow());
   /**
    * @return The row.
    */
   byte [] getRow();
+
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             Use {@link Row#COMPARATOR} instead
+   */
+  @Deprecated
+  int compareTo(Row var1);
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RowMutations.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RowMutations.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RowMutations.java
index 7320c33..4ff9eb1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RowMutations.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RowMutations.java
@@ -32,7 +32,7 @@ import org.apache.hadoop.hbase.util.Bytes;
  *
  * The mutations are performed in the order in which they
  * were added.
- * 
+ *
  * <p>We compare and equate mutations based off their row so be careful putting RowMutations
  * into Sets or using them as keys in Maps.
  */
@@ -87,11 +87,21 @@ public class RowMutations implements Row {
     mutations.add(m);
   }
 
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             Use {@link Row#COMPARATOR} instead
+   */
+  @Deprecated
   @Override
   public int compareTo(Row i) {
     return Bytes.compareTo(this.getRow(), i.getRow());
   }
 
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             No replacement
+   */
+  @Deprecated
   @Override
   public boolean equals(Object obj) {
     if (obj == this) return true;
@@ -102,6 +112,11 @@ public class RowMutations implements Row {
     return false;
   }
 
+  /**
+   * @deprecated As of release 2.0.0, this will be removed in HBase 3.0.0.
+   *             No replacement
+   */
+  @Deprecated
   @Override
   public int hashCode(){
     return Arrays.hashCode(row);

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestRowComparator.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestRowComparator.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestRowComparator.java
new file mode 100644
index 0000000..72c1b3e
--- /dev/null
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestRowComparator.java
@@ -0,0 +1,94 @@
+/**
+ * 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.hadoop.hbase.client;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import org.apache.hadoop.hbase.testclassification.ClientTests;
+import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({ClientTests.class, SmallTests.class})
+public class TestRowComparator {
+  private static final List<byte[]> DEFAULT_ROWS = IntStream.range(1, 9)
+    .mapToObj(String::valueOf).map(Bytes::toBytes).collect(Collectors.toList());
+
+  @Test
+  public void testPut() {
+    test(row -> new Put(row));
+  }
+
+  @Test
+  public void testDelete() {
+    test(row -> new Delete(row));
+  }
+
+  @Test
+  public void testAppend() {
+    test(row -> new Append(row));
+  }
+
+  @Test
+  public void testIncrement() {
+    test(row -> new Increment(row));
+  }
+
+  @Test
+  public void testGet() {
+    test(row -> new Get(row));
+  }
+
+  private static <T extends Row> void test(Function<byte[], T> f) {
+    List<T> rows = new ArrayList<T>(DEFAULT_ROWS.stream()
+      .map(f).collect(Collectors.toList()));
+    do {
+      Collections.shuffle(rows);
+    } while (needShuffle(rows));
+    Collections.sort(rows, Row.COMPARATOR);
+    assertSort(rows);
+  }
+
+  private static boolean needShuffle(List<? extends Row> rows) {
+    assertFalse(rows.isEmpty());
+    assertEquals(DEFAULT_ROWS.size(), rows.size());
+    for (int i = 0; i != DEFAULT_ROWS.size(); ++i) {
+      if (!Bytes.equals(DEFAULT_ROWS.get(i), rows.get(i).getRow())) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  private static void assertSort(List<? extends Row> rows) {
+    assertFalse(rows.isEmpty());
+    assertEquals(DEFAULT_ROWS.size(), rows.size());
+    for (int i = 0; i != DEFAULT_ROWS.size(); ++i) {
+      assertTrue(Bytes.equals(DEFAULT_ROWS.get(i), rows.get(i).getRow()));
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/e23f7afe/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
index 01e1fd5..b6c0ebe 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
@@ -76,6 +76,7 @@ import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
 import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.Row;
 import org.apache.hadoop.hbase.client.RowMutations;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.TableDescriptor;
@@ -969,7 +970,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
       // Sort to improve lock efficiency for non-atomic batch of operations. If atomic (mostly
       // called from mutateRows()), order is preserved as its expected from the client
       if (!atomic) {
-        Arrays.sort(mArray);
+        Arrays.sort(mArray, (v1, v2) -> Row.COMPARATOR.compare(v1, v2));
       }
 
       OperationStatus[] codes = region.batchMutate(mArray, atomic, HConstants.NO_NONCE,
@@ -2091,7 +2092,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
         if(edits!=null && !edits.isEmpty()) {
           // HBASE-17924
           // sort to improve lock efficiency
-          Collections.sort(edits);
+          Collections.sort(edits, (v1, v2) -> Row.COMPARATOR.compare(v1.mutation, v2.mutation));
           long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?
             entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();
           OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);