Repository: hbase Updated Branches: refs/heads/master a73f4d84a -> 4cedd9914
HBASE-20289 Fix comparator for NormalizationPlan Signed-off-by: tedyu <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4cedd991 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4cedd991 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4cedd991 Branch: refs/heads/master Commit: 4cedd9914b92f01cec0bd9a504c4f9b2f355cd76 Parents: a73f4d8 Author: Yuki Tawara <[email protected]> Authored: Tue Mar 27 01:22:53 2018 +0900 Committer: tedyu <[email protected]> Committed: Mon Mar 26 14:30:25 2018 -0700 ---------------------------------------------------------------------- .../normalizer/SimpleRegionNormalizer.java | 25 +++++++++++++------- .../normalizer/TestSimpleRegionNormalizer.java | 17 +++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/4cedd991/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java index 7e1dd4d..ea2187b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java @@ -90,20 +90,27 @@ public class SimpleRegionNormalizer implements RegionNormalizer { return skippedCount[type.ordinal()]; } - // Comparator that gives higher priority to region Split plan - private Comparator<NormalizationPlan> planComparator = - new Comparator<NormalizationPlan>() { + /** + * Comparator class that gives higher priority to region Split plan. + */ + static class PlanComparator implements Comparator<NormalizationPlan> { @Override - public int compare(NormalizationPlan plan, NormalizationPlan plan2) { - if (plan instanceof SplitNormalizationPlan) { + public int compare(NormalizationPlan plan1, NormalizationPlan plan2) { + boolean plan1IsSplit = plan1 instanceof SplitNormalizationPlan; + boolean plan2IsSplit = plan2 instanceof SplitNormalizationPlan; + if (plan1IsSplit && plan2IsSplit) { + return 0; + } else if (plan1IsSplit) { return -1; - } - if (plan2 instanceof SplitNormalizationPlan) { + } else if (plan2IsSplit) { return 1; + } else { + return 0; } - return 0; } - }; + } + + private Comparator<NormalizationPlan> planComparator = new PlanComparator(); /** * Computes next most "urgent" normalization action on the table. http://git-wip-us.apache.org/repos/asf/hbase/blob/4cedd991/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java index bcc89b8..34489ad 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.when; import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -81,6 +82,22 @@ public class TestSimpleRegionNormalizer { } @Test + public void testPlanComparator() { + Comparator<NormalizationPlan> comparator = new SimpleRegionNormalizer.PlanComparator(); + NormalizationPlan splitPlan1 = new SplitNormalizationPlan(null, null); + NormalizationPlan splitPlan2 = new SplitNormalizationPlan(null, null); + NormalizationPlan mergePlan1 = new MergeNormalizationPlan(null, null); + NormalizationPlan mergePlan2 = new MergeNormalizationPlan(null, null); + + assertTrue(comparator.compare(splitPlan1, splitPlan2) == 0); + assertTrue(comparator.compare(splitPlan2, splitPlan1) == 0); + assertTrue(comparator.compare(mergePlan1, mergePlan2) == 0); + assertTrue(comparator.compare(mergePlan2, mergePlan1) == 0); + assertTrue(comparator.compare(splitPlan1, mergePlan1) < 0); + assertTrue(comparator.compare(mergePlan1, splitPlan1) > 0); + } + + @Test public void testNoNormalizationForMetaTable() throws HBaseIOException { TableName testTable = TableName.META_TABLE_NAME; List<RegionInfo> RegionInfo = new ArrayList<>();
