From 43ff5d88e7ae0f7e6fd3a0f1a1dd5cdf070053ca Mon Sep 17 00:00:00 2001 From: Rajesh Nishtala Date: Wed, 17 Feb 2016 09:44:16 -0800 Subject: [PATCH] HBASE-15281 Allow the FileSystem inside HFileSystem to be wrapped --- .../java/org/apache/hadoop/hbase/fs/HFileSystem.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java index fb58360..7113276 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java @@ -64,6 +64,20 @@ public class HFileSystem extends FilterFileSystem { private final FileSystem noChecksumFs; // read hfile data from storage private final boolean useHBaseChecksum; + + FileSystem maybeWrapFileSystem(FileSystem base, Configuration conf) { + try { + Class clazz = conf.getClass("hbase.fs.wrapper", null); + if (clazz != null) { + return (FileSystem) clazz.getConstructor(FileSystem.class, Configuration.class) + .newInstance(base, conf); + } + } catch (Exception e) { + LOG.error("Failed to wrap filesystem: " + e); + } + return base; + } + /** * Create a FileSystem object for HBase regionservers. * @param conf The configuration to be used for the filesystem @@ -101,11 +115,13 @@ public class HFileSystem extends FilterFileSystem { if (useHBaseChecksum && !(fs instanceof LocalFileSystem)) { conf = new Configuration(conf); conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true); - this.noChecksumFs = newInstanceFileSystem(conf); + this.noChecksumFs = maybeWrapFileSystem(newInstanceFileSystem(conf), conf); this.noChecksumFs.setVerifyChecksum(false); } else { - this.noChecksumFs = fs; + this.noChecksumFs = maybeWrapFileSystem(fs, conf); } + + this.fs = maybeWrapFileSystem(this.fs, conf); } /** -- 2.4.4