You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zy...@apache.org on 2018/07/10 04:38:55 UTC
[33/50] [abbrv] hbase git commit: HBASE-20839 Fallback to FSHLog if
we can not instantiated AsyncFSWAL when user does not specify AsyncFSWAL
explicitly
HBASE-20839 Fallback to FSHLog if we can not instantiated AsyncFSWAL when user does not specify AsyncFSWAL explicitly
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4366720b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4366720b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4366720b
Branch: refs/heads/HBASE-18477
Commit: 4366720bd186276322ce8b7167a790608c801d6a
Parents: 0f23784
Author: zhangduo <zh...@apache.org>
Authored: Tue Jul 3 16:50:22 2018 +0800
Committer: zhangduo <zh...@apache.org>
Committed: Wed Jul 4 10:29:24 2018 +0800
----------------------------------------------------------------------
.../hadoop/hbase/regionserver/wal/AsyncFSWAL.java | 2 +-
.../hadoop/hbase/wal/AsyncFSWALProvider.java | 17 +++++++++++++++++
.../org/apache/hadoop/hbase/wal/WALFactory.java | 14 +++++++++++++-
3 files changed, 31 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/4366720b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java
index 7f3e30b..b0c2549 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java
@@ -1,4 +1,4 @@
-/*
+/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
http://git-wip-us.apache.org/repos/asf/hbase/blob/4366720b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java
index 56edb75..062b368 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.java
@@ -21,6 +21,9 @@ import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutput;
+import org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputHelper;
+import org.apache.hadoop.hbase.io.asyncfs.FanOutOneBlockAsyncDFSOutputSaslHelper;
import org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL;
import org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter;
import org.apache.hadoop.hbase.regionserver.wal.WALUtil;
@@ -115,4 +118,18 @@ public class AsyncFSWALProvider extends AbstractFSWALProvider<AsyncFSWAL> {
throw new IOException("cannot get log writer", e);
}
}
+
+ /**
+ * Test whether we can load the helper classes for async dfs output.
+ */
+ public static boolean load() {
+ try {
+ Class.forName(FanOutOneBlockAsyncDFSOutput.class.getName());
+ Class.forName(FanOutOneBlockAsyncDFSOutputHelper.class.getName());
+ Class.forName(FanOutOneBlockAsyncDFSOutputSaslHelper.class.getName());
+ return true;
+ } catch (Throwable e) {
+ return false;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/4366720b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java
index 4f6a898..8eb1690 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java
@@ -123,7 +123,19 @@ public class WALFactory {
@VisibleForTesting
public Class<? extends WALProvider> getProviderClass(String key, String defaultValue) {
try {
- return Providers.valueOf(conf.get(key, defaultValue)).clazz;
+ Providers provider = Providers.valueOf(conf.get(key, defaultValue));
+ if (provider != Providers.defaultProvider) {
+ // User gives a wal provider explicitly, just use that one
+ return provider.clazz;
+ }
+ // AsyncFSWAL has better performance in most cases, and also uses less resources, we will try
+ // to use it if possible. But it deeply hacks into the internal of DFSClient so will be easily
+ // broken when upgrading hadoop. If it is broken, then we fall back to use FSHLog.
+ if (AsyncFSWALProvider.load()) {
+ return AsyncFSWALProvider.class;
+ } else {
+ return FSHLogProvider.class;
+ }
} catch (IllegalArgumentException exception) {
// Fall back to them specifying a class name
// Note that the passed default class shouldn't actually be used, since the above only fails