diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java index 72340eeead4f..13a93b84bd44 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java @@ -553,14 +553,23 @@ public void setComparatorClass(Class klass) { private static Class getComparatorClass(String comparatorClassName) throws IOException { Class comparatorKlass; - // for BC - if (comparatorClassName.equals("org.apache.hadoop.hbase.CellComparator")) { + // for backward compatibility + // We will force comparator class name to be "KeyValue$KVComparator" and + // "KeyValue$MetaComparator" on 2.x although we do not use them on newer 2.x versions, for + // maintaining compatibility while upgrading and downgrading between different 2.x versions. So + // here on 3.x, we still need to check these two class names although the actual classes have + // already been purged. + if ( + comparatorClassName.equals("org.apache.hadoop.hbase.KeyValue$KVComparator") + || comparatorClassName.equals("org.apache.hadoop.hbase.CellComparator") + ) { comparatorKlass = InnerStoreCellComparator.class; } else if ( - comparatorClassName.equals("org.apache.hadoop.hbase.CellComparator$MetaCellComparator") - || (comparatorClassName - .equals("org.apache.hadoop.hbase.CellComparatorImpl$MetaCellComparator")) - || (comparatorClassName.equals("org.apache.hadoop.hbase.MetaCellComparator")) + comparatorClassName.equals("org.apache.hadoop.hbase.KeyValue$MetaComparator") + || comparatorClassName.equals("org.apache.hadoop.hbase.CellComparator$MetaCellComparator") + || comparatorClassName + .equals("org.apache.hadoop.hbase.CellComparatorImpl$MetaCellComparator") + || comparatorClassName.equals("org.apache.hadoop.hbase.MetaCellComparator") ) { comparatorKlass = MetaCellComparator.class; } else if ( diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java index 5c4767b2a677..b37c2bf7e75f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/hfile/TestFixedFileTrailer.java @@ -100,8 +100,13 @@ public void setUp() throws IOException { @Test public void testCreateComparator() throws IOException { + assertEquals(InnerStoreCellComparator.class, + createComparator("org.apache.hadoop.hbase.KeyValue$KVComparator").getClass()); assertEquals(InnerStoreCellComparator.class, createComparator(CellComparator.class.getName()).getClass()); + + assertEquals(MetaCellComparator.class, + createComparator("org.apache.hadoop.hbase.KeyValue$MetaComparator").getClass()); assertEquals(MetaCellComparator.class, createComparator("org.apache.hadoop.hbase.CellComparator$MetaCellComparator").getClass()); assertEquals(MetaCellComparator.class, @@ -110,8 +115,10 @@ public void testCreateComparator() throws IOException { createComparator(MetaCellComparator.META_COMPARATOR.getClass().getName()).getClass()); assertEquals(MetaCellComparator.META_COMPARATOR.getClass(), createComparator(MetaCellComparator.META_COMPARATOR.getClass().getName()).getClass()); + assertEquals(CellComparatorImpl.COMPARATOR.getClass(), createComparator(MetaCellComparator.COMPARATOR.getClass().getName()).getClass()); + assertNull(createComparator(Bytes.BYTES_RAWCOMPARATOR.getClass().getName())); assertNull(createComparator("org.apache.hadoop.hbase.KeyValue$RawBytesComparator"));