You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2017/12/19 02:32:34 UTC
hbase git commit: HBASE-19532 AssignProcedure#COMPARATOR may produce
incorrect sort order
Repository: hbase
Updated Branches:
refs/heads/master 74beb5a3b -> 7a7e55b60
HBASE-19532 AssignProcedure#COMPARATOR may produce incorrect sort order
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7a7e55b6
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7a7e55b6
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7a7e55b6
Branch: refs/heads/master
Commit: 7a7e55b601578f18b4eab0faaae060330c707b44
Parents: 74beb5a
Author: tedyu <yu...@gmail.com>
Authored: Mon Dec 18 18:32:24 2017 -0800
Committer: tedyu <yu...@gmail.com>
Committed: Mon Dec 18 18:32:24 2017 -0800
----------------------------------------------------------------------
.../master/assignment/AssignProcedure.java | 4 +-
.../master/snapshot/TestAssignProcedure.java | 39 +++++++++++++++-----
2 files changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a7e55b6/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
index 5555062..770d8a4 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java
@@ -379,7 +379,7 @@ public class AssignProcedure extends RegionTransitionProcedure {
return RegionInfo.COMPARATOR.compare(left.getRegionInfo(), right.getRegionInfo());
}
return -1;
- } else if (left.getRegionInfo().isMetaRegion()) {
+ } else if (right.getRegionInfo().isMetaRegion()) {
return +1;
}
if (left.getRegionInfo().getTable().isSystemTable()) {
@@ -387,7 +387,7 @@ public class AssignProcedure extends RegionTransitionProcedure {
return RegionInfo.COMPARATOR.compare(left.getRegionInfo(), right.getRegionInfo());
}
return -1;
- } else if (left.getRegionInfo().getTable().isSystemTable()) {
+ } else if (right.getRegionInfo().getTable().isSystemTable()) {
return +1;
}
return RegionInfo.COMPARATOR.compare(left.getRegionInfo(), right.getRegionInfo());
http://git-wip-us.apache.org/repos/asf/hbase/blob/7a7e55b6/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java
index ccf88de..1f93ff1 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestAssignProcedure.java
@@ -19,8 +19,11 @@
package org.apache.hadoop.hbase.master.snapshot;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.CategoryBasedTimeout;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfo;
@@ -40,6 +43,7 @@ import static junit.framework.TestCase.assertTrue;
@Category({RegionServerTests.class, SmallTests.class})
public class TestAssignProcedure {
+ private static final Log LOG = LogFactory.getLog(TestAssignProcedure.class);
@Rule public TestName name = new TestName();
@Rule public final TestRule timeout = CategoryBasedTimeout.builder().
withTimeout(this.getClass()).
@@ -64,11 +68,17 @@ public class TestAssignProcedure {
@Test
public void testComparatorWithMetas() {
List<AssignProcedure> procedures = new ArrayList<AssignProcedure>();
+ RegionInfo user3 = RegionInfoBuilder.newBuilder(TableName.valueOf("user3")).build();
+ procedures.add(new AssignProcedure(user3));
+ RegionInfo system = RegionInfoBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME).build();
+ procedures.add(new AssignProcedure(system));
RegionInfo user1 = RegionInfoBuilder.newBuilder(TableName.valueOf("user_space1")).build();
+ RegionInfo user2 = RegionInfoBuilder.newBuilder(TableName.valueOf("user_space2")).build();
procedures.add(new AssignProcedure(user1));
RegionInfo meta2 = RegionInfoBuilder.newBuilder(TableName.META_TABLE_NAME).
setStartKey(Bytes.toBytes("002")).build();
procedures.add(new AssignProcedure(meta2));
+ procedures.add(new AssignProcedure(user2));
RegionInfo meta1 = RegionInfoBuilder.newBuilder(TableName.META_TABLE_NAME).
setStartKey(Bytes.toBytes("001")).build();
procedures.add(new AssignProcedure(meta1));
@@ -76,15 +86,24 @@ public class TestAssignProcedure {
RegionInfo meta0 = RegionInfoBuilder.newBuilder(TableName.META_TABLE_NAME).
setStartKey(Bytes.toBytes("000")).build();
procedures.add(new AssignProcedure(meta0));
- RegionInfo user2 = RegionInfoBuilder.newBuilder(TableName.valueOf("user_space2")).build();
- procedures.add(new AssignProcedure(user2));
- RegionInfo system = RegionInfoBuilder.newBuilder(TableName.NAMESPACE_TABLE_NAME).build();
- procedures.add(new AssignProcedure(system));
- procedures.sort(AssignProcedure.COMPARATOR);
- assertTrue(procedures.get(0).getRegionInfo().equals(RegionInfoBuilder.FIRST_META_REGIONINFO));
- assertTrue(procedures.get(1).getRegionInfo().equals(meta0));
- assertTrue(procedures.get(2).getRegionInfo().equals(meta1));
- assertTrue(procedures.get(3).getRegionInfo().equals(meta2));
- assertTrue(procedures.get(4).getRegionInfo().getTable().equals(TableName.NAMESPACE_TABLE_NAME));
+ for (int i = 0; i < 10; i++) {
+ Collections.shuffle(procedures);
+ procedures.sort(AssignProcedure.COMPARATOR);
+ try {
+ assertTrue(procedures.get(0).getRegionInfo().equals(RegionInfoBuilder.FIRST_META_REGIONINFO));
+ assertTrue(procedures.get(1).getRegionInfo().equals(meta0));
+ assertTrue(procedures.get(2).getRegionInfo().equals(meta1));
+ assertTrue(procedures.get(3).getRegionInfo().equals(meta2));
+ assertTrue(procedures.get(4).getRegionInfo().getTable().equals(TableName.NAMESPACE_TABLE_NAME));
+ assertTrue(procedures.get(5).getRegionInfo().equals(user1));
+ assertTrue(procedures.get(6).getRegionInfo().equals(user2));
+ assertTrue(procedures.get(7).getRegionInfo().equals(user3));
+ } catch (Throwable t) {
+ for (AssignProcedure proc : procedures) {
+ LOG.debug(proc);
+ }
+ throw t;
+ }
+ }
}
}