Repository: hbase Updated Branches: refs/heads/branch-1 1e3bce943 -> cfc22ec1e
HBASE-16189 [Rolling Upgrade] 2.0 hfiles cannot be opened by 1.x servers (Ram) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/cfc22ec1 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/cfc22ec1 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/cfc22ec1 Branch: refs/heads/branch-1 Commit: cfc22ec1ecf5ccaba882c78daf46960f0b5c2510 Parents: 1e3bce9 Author: Ramkrishna <ramkrishna.s.vasude...@intel.com> Authored: Mon Jul 18 10:16:23 2016 +0530 Committer: Ramkrishna <ramkrishna.s.vasude...@intel.com> Committed: Mon Jul 18 10:16:23 2016 +0530 ---------------------------------------------------------------------- .../apache/hadoop/hbase/io/hfile/FixedFileTrailer.java | 9 ++++++++- .../apache/hadoop/hbase/util/CompoundBloomFilter.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/cfc22ec1/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.java ---------------------------------------------------------------------- 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 6735036..f6ae291 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 @@ -570,10 +570,17 @@ public class FixedFileTrailer { comparatorClassName = KeyValue.META_COMPARATOR.getClass().getName(); } else if (comparatorClassName.equals(KeyValue.RAW_COMPARATOR.getLegacyKeyComparatorName())) { comparatorClassName = KeyValue.RAW_COMPARATOR.getClass().getName(); + } else if (comparatorClassName.equals("org.apache.hadoop.hbase.CellComparator")) { + // 2.0 based comparators found in class name. Convert it to corresponding Comparators in 1.x + // branch. Refer to HBASE-16189 + comparatorClassName = KeyValue.COMPARATOR.getClass().getName(); + } else if ((comparatorClassName + .equals("org.apache.hadoop.hbase.CellComparator$MetaCellComparator"))) { + // Refer to HBASE-16189. Fallback to 1.x comparators + comparatorClassName = KeyValue.META_COMPARATOR.getClass().getName(); } // if the name wasn't one of the legacy names, maybe its a legit new kind of comparator. - return (Class<? extends KVComparator>) Class.forName(comparatorClassName); } catch (ClassNotFoundException ex) { http://git-wip-us.apache.org/repos/asf/hbase/blob/cfc22ec1/hbase-server/src/main/java/org/apache/hadoop/hbase/util/CompoundBloomFilter.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/CompoundBloomFilter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/CompoundBloomFilter.java index beda805..23f1c1a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/CompoundBloomFilter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/CompoundBloomFilter.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import org.apache.hadoop.hbase.classification.InterfaceAudience; +import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValue.KVComparator; import org.apache.hadoop.hbase.io.hfile.BlockType; import org.apache.hadoop.hbase.io.hfile.FixedFileTrailer; @@ -70,8 +71,15 @@ public class CompoundBloomFilter extends CompoundBloomFilterBase totalKeyCount = meta.readLong(); totalMaxKeys = meta.readLong(); numChunks = meta.readInt(); - comparator = FixedFileTrailer.createComparator( - Bytes.toString(Bytes.readByteArray(meta))); + byte[] comparatorClassName = Bytes.readByteArray(meta); + if (comparatorClassName.length != 0) { + comparator = FixedFileTrailer.createComparator(Bytes.toString(comparatorClassName)); + } else { + // Fallback. In 2.0 we will not write the RAW_COMPARATOR name. So when reading back such meta + // data. Refer to HBASE-16189 + // we set the comparator to RAW_COMPARATOR + comparator = KeyValue.RAW_COMPARATOR; + } hash = Hash.getInstance(hashType); if (hash == null) {