You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/05/02 14:47:25 UTC
[5/8] hbase-site git commit: Published site at
2e9b96e4f14c2802b59c6037cbfe4a427ec93bea.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c3fc94f0/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.BlockAdder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.BlockAdder.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.BlockAdder.html
index ad7bc92..eb6a26e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.BlockAdder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.BlockAdder.html
@@ -808,104 +808,101 @@
<span class="sourceLineNo">800</span> } else {<a name="line.800"></a>
<span class="sourceLineNo">801</span> throw e.unwrapRemoteException();<a name="line.801"></a>
<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span> } catch (NameNodeException e) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span> throw e;<a name="line.804"></a>
-<span class="sourceLineNo">805</span> } catch (IOException e) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.806"></a>
-<span class="sourceLineNo">807</span> if (retry >= createMaxRetries) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span> throw e;<a name="line.808"></a>
-<span class="sourceLineNo">809</span> }<a name="line.809"></a>
-<span class="sourceLineNo">810</span> // overwrite the old broken file.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> overwrite = true;<a name="line.811"></a>
-<span class="sourceLineNo">812</span> try {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.813"></a>
-<span class="sourceLineNo">814</span> } catch (InterruptedException ie) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span> throw new InterruptedIOException();<a name="line.815"></a>
-<span class="sourceLineNo">816</span> }<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } finally {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> if (!succ) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span> if (futureList != null) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> for (Future<Channel> f : futureList) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> f.addListener(new FutureListener<Channel>() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @Override<a name="line.823"></a>
-<span class="sourceLineNo">824</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> if (future.isSuccess()) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> future.getNow().close();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span> });<a name="line.829"></a>
-<span class="sourceLineNo">830</span> }<a name="line.830"></a>
-<span class="sourceLineNo">831</span> }<a name="line.831"></a>
-<span class="sourceLineNo">832</span> endFileLease(client, stat.getFileId());<a name="line.832"></a>
-<span class="sourceLineNo">833</span> fsUtils.recoverFileLease(dfs, new Path(src), conf, new CancelOnClose(client));<a name="line.833"></a>
-<span class="sourceLineNo">834</span> }<a name="line.834"></a>
-<span class="sourceLineNo">835</span> }<a name="line.835"></a>
-<span class="sourceLineNo">836</span> }<a name="line.836"></a>
-<span class="sourceLineNo">837</span> }<a name="line.837"></a>
-<span class="sourceLineNo">838</span><a name="line.838"></a>
-<span class="sourceLineNo">839</span> /**<a name="line.839"></a>
-<span class="sourceLineNo">840</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.840"></a>
-<span class="sourceLineNo">841</span> * inside an {@link EventLoop}.<a name="line.841"></a>
-<span class="sourceLineNo">842</span> */<a name="line.842"></a>
-<span class="sourceLineNo">843</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.843"></a>
-<span class="sourceLineNo">844</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.844"></a>
-<span class="sourceLineNo">845</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.845"></a>
-<span class="sourceLineNo">846</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span><a name="line.847"></a>
-<span class="sourceLineNo">848</span> @Override<a name="line.848"></a>
-<span class="sourceLineNo">849</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.849"></a>
-<span class="sourceLineNo">850</span> throws IOException, UnresolvedLinkException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.851"></a>
-<span class="sourceLineNo">852</span> blockSize, eventLoopGroup, channelClass);<a name="line.852"></a>
-<span class="sourceLineNo">853</span> }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span> @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.856"></a>
-<span class="sourceLineNo">857</span> throw new UnsupportedOperationException();<a name="line.857"></a>
-<span class="sourceLineNo">858</span> }<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }.resolve(dfs, f);<a name="line.859"></a>
-<span class="sourceLineNo">860</span> }<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.864"></a>
-<span class="sourceLineNo">865</span> // DFSOutputStream.newStreamForCreate.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.866"></a>
-<span class="sourceLineNo">867</span> }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> ExtendedBlock block, long fileId) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> for (int retry = 0;; retry++) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span> try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.873"></a>
-<span class="sourceLineNo">874</span> endFileLease(client, fileId);<a name="line.874"></a>
-<span class="sourceLineNo">875</span> return;<a name="line.875"></a>
-<span class="sourceLineNo">876</span> } else {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.877"></a>
-<span class="sourceLineNo">878</span> }<a name="line.878"></a>
-<span class="sourceLineNo">879</span> } catch (RemoteException e) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span> IOException ioe = e.unwrapRemoteException();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (ioe instanceof LeaseExpiredException) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.882"></a>
-<span class="sourceLineNo">883</span> return;<a name="line.883"></a>
-<span class="sourceLineNo">884</span> } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> }<a name="line.886"></a>
-<span class="sourceLineNo">887</span> } catch (Exception e) {<a name="line.887"></a>
-<span class="sourceLineNo">888</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.888"></a>
-<span class="sourceLineNo">889</span> }<a name="line.889"></a>
-<span class="sourceLineNo">890</span> sleepIgnoreInterrupt(retry);<a name="line.890"></a>
-<span class="sourceLineNo">891</span> }<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> try {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.896"></a>
-<span class="sourceLineNo">897</span> } catch (InterruptedException e) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span> }<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>}<a name="line.900"></a>
+<span class="sourceLineNo">803</span> } catch (IOException e) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.804"></a>
+<span class="sourceLineNo">805</span> if (retry >= createMaxRetries) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span> throw e;<a name="line.806"></a>
+<span class="sourceLineNo">807</span> }<a name="line.807"></a>
+<span class="sourceLineNo">808</span> // overwrite the old broken file.<a name="line.808"></a>
+<span class="sourceLineNo">809</span> overwrite = true;<a name="line.809"></a>
+<span class="sourceLineNo">810</span> try {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.811"></a>
+<span class="sourceLineNo">812</span> } catch (InterruptedException ie) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span> throw new InterruptedIOException();<a name="line.813"></a>
+<span class="sourceLineNo">814</span> }<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } finally {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> if (!succ) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span> if (futureList != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span> for (Future<Channel> f : futureList) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> f.addListener(new FutureListener<Channel>() {<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @Override<a name="line.821"></a>
+<span class="sourceLineNo">822</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> if (future.isSuccess()) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> future.getNow().close();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span> });<a name="line.827"></a>
+<span class="sourceLineNo">828</span> }<a name="line.828"></a>
+<span class="sourceLineNo">829</span> }<a name="line.829"></a>
+<span class="sourceLineNo">830</span> endFileLease(client, stat.getFileId());<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span> }<a name="line.832"></a>
+<span class="sourceLineNo">833</span> }<a name="line.833"></a>
+<span class="sourceLineNo">834</span> }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span> /**<a name="line.836"></a>
+<span class="sourceLineNo">837</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.837"></a>
+<span class="sourceLineNo">838</span> * inside an {@link EventLoop}.<a name="line.838"></a>
+<span class="sourceLineNo">839</span> */<a name="line.839"></a>
+<span class="sourceLineNo">840</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.840"></a>
+<span class="sourceLineNo">841</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.841"></a>
+<span class="sourceLineNo">842</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span> @Override<a name="line.845"></a>
+<span class="sourceLineNo">846</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.846"></a>
+<span class="sourceLineNo">847</span> throws IOException, UnresolvedLinkException {<a name="line.847"></a>
+<span class="sourceLineNo">848</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.848"></a>
+<span class="sourceLineNo">849</span> blockSize, eventLoopGroup, channelClass);<a name="line.849"></a>
+<span class="sourceLineNo">850</span> }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span> @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.853"></a>
+<span class="sourceLineNo">854</span> throw new UnsupportedOperationException();<a name="line.854"></a>
+<span class="sourceLineNo">855</span> }<a name="line.855"></a>
+<span class="sourceLineNo">856</span> }.resolve(dfs, f);<a name="line.856"></a>
+<span class="sourceLineNo">857</span> }<a name="line.857"></a>
+<span class="sourceLineNo">858</span><a name="line.858"></a>
+<span class="sourceLineNo">859</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.861"></a>
+<span class="sourceLineNo">862</span> // DFSOutputStream.newStreamForCreate.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.863"></a>
+<span class="sourceLineNo">864</span> }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.866"></a>
+<span class="sourceLineNo">867</span> ExtendedBlock block, long fileId) {<a name="line.867"></a>
+<span class="sourceLineNo">868</span> for (int retry = 0;; retry++) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span> try {<a name="line.869"></a>
+<span class="sourceLineNo">870</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span> endFileLease(client, fileId);<a name="line.871"></a>
+<span class="sourceLineNo">872</span> return;<a name="line.872"></a>
+<span class="sourceLineNo">873</span> } else {<a name="line.873"></a>
+<span class="sourceLineNo">874</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.874"></a>
+<span class="sourceLineNo">875</span> }<a name="line.875"></a>
+<span class="sourceLineNo">876</span> } catch (RemoteException e) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span> IOException ioe = e.unwrapRemoteException();<a name="line.877"></a>
+<span class="sourceLineNo">878</span> if (ioe instanceof LeaseExpiredException) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.879"></a>
+<span class="sourceLineNo">880</span> return;<a name="line.880"></a>
+<span class="sourceLineNo">881</span> } else {<a name="line.881"></a>
+<span class="sourceLineNo">882</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.882"></a>
+<span class="sourceLineNo">883</span> }<a name="line.883"></a>
+<span class="sourceLineNo">884</span> } catch (Exception e) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
+<span class="sourceLineNo">886</span> }<a name="line.886"></a>
+<span class="sourceLineNo">887</span> sleepIgnoreInterrupt(retry);<a name="line.887"></a>
+<span class="sourceLineNo">888</span> }<a name="line.888"></a>
+<span class="sourceLineNo">889</span> }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.891"></a>
+<span class="sourceLineNo">892</span> try {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.893"></a>
+<span class="sourceLineNo">894</span> } catch (InterruptedException e) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>}<a name="line.897"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c3fc94f0/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.CancelOnClose.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.CancelOnClose.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.CancelOnClose.html
index ad7bc92..eb6a26e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.CancelOnClose.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.CancelOnClose.html
@@ -808,104 +808,101 @@
<span class="sourceLineNo">800</span> } else {<a name="line.800"></a>
<span class="sourceLineNo">801</span> throw e.unwrapRemoteException();<a name="line.801"></a>
<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span> } catch (NameNodeException e) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span> throw e;<a name="line.804"></a>
-<span class="sourceLineNo">805</span> } catch (IOException e) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.806"></a>
-<span class="sourceLineNo">807</span> if (retry >= createMaxRetries) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span> throw e;<a name="line.808"></a>
-<span class="sourceLineNo">809</span> }<a name="line.809"></a>
-<span class="sourceLineNo">810</span> // overwrite the old broken file.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> overwrite = true;<a name="line.811"></a>
-<span class="sourceLineNo">812</span> try {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.813"></a>
-<span class="sourceLineNo">814</span> } catch (InterruptedException ie) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span> throw new InterruptedIOException();<a name="line.815"></a>
-<span class="sourceLineNo">816</span> }<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } finally {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> if (!succ) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span> if (futureList != null) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> for (Future<Channel> f : futureList) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> f.addListener(new FutureListener<Channel>() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @Override<a name="line.823"></a>
-<span class="sourceLineNo">824</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> if (future.isSuccess()) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> future.getNow().close();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span> });<a name="line.829"></a>
-<span class="sourceLineNo">830</span> }<a name="line.830"></a>
-<span class="sourceLineNo">831</span> }<a name="line.831"></a>
-<span class="sourceLineNo">832</span> endFileLease(client, stat.getFileId());<a name="line.832"></a>
-<span class="sourceLineNo">833</span> fsUtils.recoverFileLease(dfs, new Path(src), conf, new CancelOnClose(client));<a name="line.833"></a>
-<span class="sourceLineNo">834</span> }<a name="line.834"></a>
-<span class="sourceLineNo">835</span> }<a name="line.835"></a>
-<span class="sourceLineNo">836</span> }<a name="line.836"></a>
-<span class="sourceLineNo">837</span> }<a name="line.837"></a>
-<span class="sourceLineNo">838</span><a name="line.838"></a>
-<span class="sourceLineNo">839</span> /**<a name="line.839"></a>
-<span class="sourceLineNo">840</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.840"></a>
-<span class="sourceLineNo">841</span> * inside an {@link EventLoop}.<a name="line.841"></a>
-<span class="sourceLineNo">842</span> */<a name="line.842"></a>
-<span class="sourceLineNo">843</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.843"></a>
-<span class="sourceLineNo">844</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.844"></a>
-<span class="sourceLineNo">845</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.845"></a>
-<span class="sourceLineNo">846</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span><a name="line.847"></a>
-<span class="sourceLineNo">848</span> @Override<a name="line.848"></a>
-<span class="sourceLineNo">849</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.849"></a>
-<span class="sourceLineNo">850</span> throws IOException, UnresolvedLinkException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.851"></a>
-<span class="sourceLineNo">852</span> blockSize, eventLoopGroup, channelClass);<a name="line.852"></a>
-<span class="sourceLineNo">853</span> }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span> @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.856"></a>
-<span class="sourceLineNo">857</span> throw new UnsupportedOperationException();<a name="line.857"></a>
-<span class="sourceLineNo">858</span> }<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }.resolve(dfs, f);<a name="line.859"></a>
-<span class="sourceLineNo">860</span> }<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.864"></a>
-<span class="sourceLineNo">865</span> // DFSOutputStream.newStreamForCreate.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.866"></a>
-<span class="sourceLineNo">867</span> }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> ExtendedBlock block, long fileId) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> for (int retry = 0;; retry++) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span> try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.873"></a>
-<span class="sourceLineNo">874</span> endFileLease(client, fileId);<a name="line.874"></a>
-<span class="sourceLineNo">875</span> return;<a name="line.875"></a>
-<span class="sourceLineNo">876</span> } else {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.877"></a>
-<span class="sourceLineNo">878</span> }<a name="line.878"></a>
-<span class="sourceLineNo">879</span> } catch (RemoteException e) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span> IOException ioe = e.unwrapRemoteException();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (ioe instanceof LeaseExpiredException) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.882"></a>
-<span class="sourceLineNo">883</span> return;<a name="line.883"></a>
-<span class="sourceLineNo">884</span> } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> }<a name="line.886"></a>
-<span class="sourceLineNo">887</span> } catch (Exception e) {<a name="line.887"></a>
-<span class="sourceLineNo">888</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.888"></a>
-<span class="sourceLineNo">889</span> }<a name="line.889"></a>
-<span class="sourceLineNo">890</span> sleepIgnoreInterrupt(retry);<a name="line.890"></a>
-<span class="sourceLineNo">891</span> }<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> try {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.896"></a>
-<span class="sourceLineNo">897</span> } catch (InterruptedException e) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span> }<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>}<a name="line.900"></a>
+<span class="sourceLineNo">803</span> } catch (IOException e) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.804"></a>
+<span class="sourceLineNo">805</span> if (retry >= createMaxRetries) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span> throw e;<a name="line.806"></a>
+<span class="sourceLineNo">807</span> }<a name="line.807"></a>
+<span class="sourceLineNo">808</span> // overwrite the old broken file.<a name="line.808"></a>
+<span class="sourceLineNo">809</span> overwrite = true;<a name="line.809"></a>
+<span class="sourceLineNo">810</span> try {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.811"></a>
+<span class="sourceLineNo">812</span> } catch (InterruptedException ie) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span> throw new InterruptedIOException();<a name="line.813"></a>
+<span class="sourceLineNo">814</span> }<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } finally {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> if (!succ) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span> if (futureList != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span> for (Future<Channel> f : futureList) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> f.addListener(new FutureListener<Channel>() {<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @Override<a name="line.821"></a>
+<span class="sourceLineNo">822</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> if (future.isSuccess()) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> future.getNow().close();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span> });<a name="line.827"></a>
+<span class="sourceLineNo">828</span> }<a name="line.828"></a>
+<span class="sourceLineNo">829</span> }<a name="line.829"></a>
+<span class="sourceLineNo">830</span> endFileLease(client, stat.getFileId());<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span> }<a name="line.832"></a>
+<span class="sourceLineNo">833</span> }<a name="line.833"></a>
+<span class="sourceLineNo">834</span> }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span> /**<a name="line.836"></a>
+<span class="sourceLineNo">837</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.837"></a>
+<span class="sourceLineNo">838</span> * inside an {@link EventLoop}.<a name="line.838"></a>
+<span class="sourceLineNo">839</span> */<a name="line.839"></a>
+<span class="sourceLineNo">840</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.840"></a>
+<span class="sourceLineNo">841</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.841"></a>
+<span class="sourceLineNo">842</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span> @Override<a name="line.845"></a>
+<span class="sourceLineNo">846</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.846"></a>
+<span class="sourceLineNo">847</span> throws IOException, UnresolvedLinkException {<a name="line.847"></a>
+<span class="sourceLineNo">848</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.848"></a>
+<span class="sourceLineNo">849</span> blockSize, eventLoopGroup, channelClass);<a name="line.849"></a>
+<span class="sourceLineNo">850</span> }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span> @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.853"></a>
+<span class="sourceLineNo">854</span> throw new UnsupportedOperationException();<a name="line.854"></a>
+<span class="sourceLineNo">855</span> }<a name="line.855"></a>
+<span class="sourceLineNo">856</span> }.resolve(dfs, f);<a name="line.856"></a>
+<span class="sourceLineNo">857</span> }<a name="line.857"></a>
+<span class="sourceLineNo">858</span><a name="line.858"></a>
+<span class="sourceLineNo">859</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.861"></a>
+<span class="sourceLineNo">862</span> // DFSOutputStream.newStreamForCreate.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.863"></a>
+<span class="sourceLineNo">864</span> }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.866"></a>
+<span class="sourceLineNo">867</span> ExtendedBlock block, long fileId) {<a name="line.867"></a>
+<span class="sourceLineNo">868</span> for (int retry = 0;; retry++) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span> try {<a name="line.869"></a>
+<span class="sourceLineNo">870</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span> endFileLease(client, fileId);<a name="line.871"></a>
+<span class="sourceLineNo">872</span> return;<a name="line.872"></a>
+<span class="sourceLineNo">873</span> } else {<a name="line.873"></a>
+<span class="sourceLineNo">874</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.874"></a>
+<span class="sourceLineNo">875</span> }<a name="line.875"></a>
+<span class="sourceLineNo">876</span> } catch (RemoteException e) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span> IOException ioe = e.unwrapRemoteException();<a name="line.877"></a>
+<span class="sourceLineNo">878</span> if (ioe instanceof LeaseExpiredException) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.879"></a>
+<span class="sourceLineNo">880</span> return;<a name="line.880"></a>
+<span class="sourceLineNo">881</span> } else {<a name="line.881"></a>
+<span class="sourceLineNo">882</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.882"></a>
+<span class="sourceLineNo">883</span> }<a name="line.883"></a>
+<span class="sourceLineNo">884</span> } catch (Exception e) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
+<span class="sourceLineNo">886</span> }<a name="line.886"></a>
+<span class="sourceLineNo">887</span> sleepIgnoreInterrupt(retry);<a name="line.887"></a>
+<span class="sourceLineNo">888</span> }<a name="line.888"></a>
+<span class="sourceLineNo">889</span> }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.891"></a>
+<span class="sourceLineNo">892</span> try {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.893"></a>
+<span class="sourceLineNo">894</span> } catch (InterruptedException e) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>}<a name="line.897"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c3fc94f0/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.ChecksumCreater.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.ChecksumCreater.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.ChecksumCreater.html
index ad7bc92..eb6a26e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.ChecksumCreater.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.ChecksumCreater.html
@@ -808,104 +808,101 @@
<span class="sourceLineNo">800</span> } else {<a name="line.800"></a>
<span class="sourceLineNo">801</span> throw e.unwrapRemoteException();<a name="line.801"></a>
<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span> } catch (NameNodeException e) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span> throw e;<a name="line.804"></a>
-<span class="sourceLineNo">805</span> } catch (IOException e) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.806"></a>
-<span class="sourceLineNo">807</span> if (retry >= createMaxRetries) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span> throw e;<a name="line.808"></a>
-<span class="sourceLineNo">809</span> }<a name="line.809"></a>
-<span class="sourceLineNo">810</span> // overwrite the old broken file.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> overwrite = true;<a name="line.811"></a>
-<span class="sourceLineNo">812</span> try {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.813"></a>
-<span class="sourceLineNo">814</span> } catch (InterruptedException ie) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span> throw new InterruptedIOException();<a name="line.815"></a>
-<span class="sourceLineNo">816</span> }<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } finally {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> if (!succ) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span> if (futureList != null) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> for (Future<Channel> f : futureList) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> f.addListener(new FutureListener<Channel>() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @Override<a name="line.823"></a>
-<span class="sourceLineNo">824</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> if (future.isSuccess()) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> future.getNow().close();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span> });<a name="line.829"></a>
-<span class="sourceLineNo">830</span> }<a name="line.830"></a>
-<span class="sourceLineNo">831</span> }<a name="line.831"></a>
-<span class="sourceLineNo">832</span> endFileLease(client, stat.getFileId());<a name="line.832"></a>
-<span class="sourceLineNo">833</span> fsUtils.recoverFileLease(dfs, new Path(src), conf, new CancelOnClose(client));<a name="line.833"></a>
-<span class="sourceLineNo">834</span> }<a name="line.834"></a>
-<span class="sourceLineNo">835</span> }<a name="line.835"></a>
-<span class="sourceLineNo">836</span> }<a name="line.836"></a>
-<span class="sourceLineNo">837</span> }<a name="line.837"></a>
-<span class="sourceLineNo">838</span><a name="line.838"></a>
-<span class="sourceLineNo">839</span> /**<a name="line.839"></a>
-<span class="sourceLineNo">840</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.840"></a>
-<span class="sourceLineNo">841</span> * inside an {@link EventLoop}.<a name="line.841"></a>
-<span class="sourceLineNo">842</span> */<a name="line.842"></a>
-<span class="sourceLineNo">843</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.843"></a>
-<span class="sourceLineNo">844</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.844"></a>
-<span class="sourceLineNo">845</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.845"></a>
-<span class="sourceLineNo">846</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span><a name="line.847"></a>
-<span class="sourceLineNo">848</span> @Override<a name="line.848"></a>
-<span class="sourceLineNo">849</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.849"></a>
-<span class="sourceLineNo">850</span> throws IOException, UnresolvedLinkException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.851"></a>
-<span class="sourceLineNo">852</span> blockSize, eventLoopGroup, channelClass);<a name="line.852"></a>
-<span class="sourceLineNo">853</span> }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span> @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.856"></a>
-<span class="sourceLineNo">857</span> throw new UnsupportedOperationException();<a name="line.857"></a>
-<span class="sourceLineNo">858</span> }<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }.resolve(dfs, f);<a name="line.859"></a>
-<span class="sourceLineNo">860</span> }<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.864"></a>
-<span class="sourceLineNo">865</span> // DFSOutputStream.newStreamForCreate.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.866"></a>
-<span class="sourceLineNo">867</span> }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> ExtendedBlock block, long fileId) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> for (int retry = 0;; retry++) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span> try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.873"></a>
-<span class="sourceLineNo">874</span> endFileLease(client, fileId);<a name="line.874"></a>
-<span class="sourceLineNo">875</span> return;<a name="line.875"></a>
-<span class="sourceLineNo">876</span> } else {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.877"></a>
-<span class="sourceLineNo">878</span> }<a name="line.878"></a>
-<span class="sourceLineNo">879</span> } catch (RemoteException e) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span> IOException ioe = e.unwrapRemoteException();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (ioe instanceof LeaseExpiredException) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.882"></a>
-<span class="sourceLineNo">883</span> return;<a name="line.883"></a>
-<span class="sourceLineNo">884</span> } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> }<a name="line.886"></a>
-<span class="sourceLineNo">887</span> } catch (Exception e) {<a name="line.887"></a>
-<span class="sourceLineNo">888</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.888"></a>
-<span class="sourceLineNo">889</span> }<a name="line.889"></a>
-<span class="sourceLineNo">890</span> sleepIgnoreInterrupt(retry);<a name="line.890"></a>
-<span class="sourceLineNo">891</span> }<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> try {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.896"></a>
-<span class="sourceLineNo">897</span> } catch (InterruptedException e) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span> }<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>}<a name="line.900"></a>
+<span class="sourceLineNo">803</span> } catch (IOException e) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.804"></a>
+<span class="sourceLineNo">805</span> if (retry >= createMaxRetries) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span> throw e;<a name="line.806"></a>
+<span class="sourceLineNo">807</span> }<a name="line.807"></a>
+<span class="sourceLineNo">808</span> // overwrite the old broken file.<a name="line.808"></a>
+<span class="sourceLineNo">809</span> overwrite = true;<a name="line.809"></a>
+<span class="sourceLineNo">810</span> try {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.811"></a>
+<span class="sourceLineNo">812</span> } catch (InterruptedException ie) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span> throw new InterruptedIOException();<a name="line.813"></a>
+<span class="sourceLineNo">814</span> }<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } finally {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> if (!succ) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span> if (futureList != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span> for (Future<Channel> f : futureList) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> f.addListener(new FutureListener<Channel>() {<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @Override<a name="line.821"></a>
+<span class="sourceLineNo">822</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> if (future.isSuccess()) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> future.getNow().close();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span> });<a name="line.827"></a>
+<span class="sourceLineNo">828</span> }<a name="line.828"></a>
+<span class="sourceLineNo">829</span> }<a name="line.829"></a>
+<span class="sourceLineNo">830</span> endFileLease(client, stat.getFileId());<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span> }<a name="line.832"></a>
+<span class="sourceLineNo">833</span> }<a name="line.833"></a>
+<span class="sourceLineNo">834</span> }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span> /**<a name="line.836"></a>
+<span class="sourceLineNo">837</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.837"></a>
+<span class="sourceLineNo">838</span> * inside an {@link EventLoop}.<a name="line.838"></a>
+<span class="sourceLineNo">839</span> */<a name="line.839"></a>
+<span class="sourceLineNo">840</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.840"></a>
+<span class="sourceLineNo">841</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.841"></a>
+<span class="sourceLineNo">842</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span> @Override<a name="line.845"></a>
+<span class="sourceLineNo">846</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.846"></a>
+<span class="sourceLineNo">847</span> throws IOException, UnresolvedLinkException {<a name="line.847"></a>
+<span class="sourceLineNo">848</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.848"></a>
+<span class="sourceLineNo">849</span> blockSize, eventLoopGroup, channelClass);<a name="line.849"></a>
+<span class="sourceLineNo">850</span> }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span> @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.853"></a>
+<span class="sourceLineNo">854</span> throw new UnsupportedOperationException();<a name="line.854"></a>
+<span class="sourceLineNo">855</span> }<a name="line.855"></a>
+<span class="sourceLineNo">856</span> }.resolve(dfs, f);<a name="line.856"></a>
+<span class="sourceLineNo">857</span> }<a name="line.857"></a>
+<span class="sourceLineNo">858</span><a name="line.858"></a>
+<span class="sourceLineNo">859</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.861"></a>
+<span class="sourceLineNo">862</span> // DFSOutputStream.newStreamForCreate.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.863"></a>
+<span class="sourceLineNo">864</span> }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.866"></a>
+<span class="sourceLineNo">867</span> ExtendedBlock block, long fileId) {<a name="line.867"></a>
+<span class="sourceLineNo">868</span> for (int retry = 0;; retry++) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span> try {<a name="line.869"></a>
+<span class="sourceLineNo">870</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span> endFileLease(client, fileId);<a name="line.871"></a>
+<span class="sourceLineNo">872</span> return;<a name="line.872"></a>
+<span class="sourceLineNo">873</span> } else {<a name="line.873"></a>
+<span class="sourceLineNo">874</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.874"></a>
+<span class="sourceLineNo">875</span> }<a name="line.875"></a>
+<span class="sourceLineNo">876</span> } catch (RemoteException e) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span> IOException ioe = e.unwrapRemoteException();<a name="line.877"></a>
+<span class="sourceLineNo">878</span> if (ioe instanceof LeaseExpiredException) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.879"></a>
+<span class="sourceLineNo">880</span> return;<a name="line.880"></a>
+<span class="sourceLineNo">881</span> } else {<a name="line.881"></a>
+<span class="sourceLineNo">882</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.882"></a>
+<span class="sourceLineNo">883</span> }<a name="line.883"></a>
+<span class="sourceLineNo">884</span> } catch (Exception e) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
+<span class="sourceLineNo">886</span> }<a name="line.886"></a>
+<span class="sourceLineNo">887</span> sleepIgnoreInterrupt(retry);<a name="line.887"></a>
+<span class="sourceLineNo">888</span> }<a name="line.888"></a>
+<span class="sourceLineNo">889</span> }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.891"></a>
+<span class="sourceLineNo">892</span> try {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.893"></a>
+<span class="sourceLineNo">894</span> } catch (InterruptedException e) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>}<a name="line.897"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c3fc94f0/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.DFSClientAdaptor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.DFSClientAdaptor.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.DFSClientAdaptor.html
index ad7bc92..eb6a26e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.DFSClientAdaptor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.DFSClientAdaptor.html
@@ -808,104 +808,101 @@
<span class="sourceLineNo">800</span> } else {<a name="line.800"></a>
<span class="sourceLineNo">801</span> throw e.unwrapRemoteException();<a name="line.801"></a>
<span class="sourceLineNo">802</span> }<a name="line.802"></a>
-<span class="sourceLineNo">803</span> } catch (NameNodeException e) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span> throw e;<a name="line.804"></a>
-<span class="sourceLineNo">805</span> } catch (IOException e) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.806"></a>
-<span class="sourceLineNo">807</span> if (retry >= createMaxRetries) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span> throw e;<a name="line.808"></a>
-<span class="sourceLineNo">809</span> }<a name="line.809"></a>
-<span class="sourceLineNo">810</span> // overwrite the old broken file.<a name="line.810"></a>
-<span class="sourceLineNo">811</span> overwrite = true;<a name="line.811"></a>
-<span class="sourceLineNo">812</span> try {<a name="line.812"></a>
-<span class="sourceLineNo">813</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.813"></a>
-<span class="sourceLineNo">814</span> } catch (InterruptedException ie) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span> throw new InterruptedIOException();<a name="line.815"></a>
-<span class="sourceLineNo">816</span> }<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } finally {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> if (!succ) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span> if (futureList != null) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span> for (Future<Channel> f : futureList) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span> f.addListener(new FutureListener<Channel>() {<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @Override<a name="line.823"></a>
-<span class="sourceLineNo">824</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> if (future.isSuccess()) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> future.getNow().close();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span> });<a name="line.829"></a>
-<span class="sourceLineNo">830</span> }<a name="line.830"></a>
-<span class="sourceLineNo">831</span> }<a name="line.831"></a>
-<span class="sourceLineNo">832</span> endFileLease(client, stat.getFileId());<a name="line.832"></a>
-<span class="sourceLineNo">833</span> fsUtils.recoverFileLease(dfs, new Path(src), conf, new CancelOnClose(client));<a name="line.833"></a>
-<span class="sourceLineNo">834</span> }<a name="line.834"></a>
-<span class="sourceLineNo">835</span> }<a name="line.835"></a>
-<span class="sourceLineNo">836</span> }<a name="line.836"></a>
-<span class="sourceLineNo">837</span> }<a name="line.837"></a>
-<span class="sourceLineNo">838</span><a name="line.838"></a>
-<span class="sourceLineNo">839</span> /**<a name="line.839"></a>
-<span class="sourceLineNo">840</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.840"></a>
-<span class="sourceLineNo">841</span> * inside an {@link EventLoop}.<a name="line.841"></a>
-<span class="sourceLineNo">842</span> */<a name="line.842"></a>
-<span class="sourceLineNo">843</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.843"></a>
-<span class="sourceLineNo">844</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.844"></a>
-<span class="sourceLineNo">845</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.845"></a>
-<span class="sourceLineNo">846</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span><a name="line.847"></a>
-<span class="sourceLineNo">848</span> @Override<a name="line.848"></a>
-<span class="sourceLineNo">849</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.849"></a>
-<span class="sourceLineNo">850</span> throws IOException, UnresolvedLinkException {<a name="line.850"></a>
-<span class="sourceLineNo">851</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.851"></a>
-<span class="sourceLineNo">852</span> blockSize, eventLoopGroup, channelClass);<a name="line.852"></a>
-<span class="sourceLineNo">853</span> }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span> @Override<a name="line.855"></a>
-<span class="sourceLineNo">856</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.856"></a>
-<span class="sourceLineNo">857</span> throw new UnsupportedOperationException();<a name="line.857"></a>
-<span class="sourceLineNo">858</span> }<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }.resolve(dfs, f);<a name="line.859"></a>
-<span class="sourceLineNo">860</span> }<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.864"></a>
-<span class="sourceLineNo">865</span> // DFSOutputStream.newStreamForCreate.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.866"></a>
-<span class="sourceLineNo">867</span> }<a name="line.867"></a>
-<span class="sourceLineNo">868</span><a name="line.868"></a>
-<span class="sourceLineNo">869</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.869"></a>
-<span class="sourceLineNo">870</span> ExtendedBlock block, long fileId) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> for (int retry = 0;; retry++) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span> try {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.873"></a>
-<span class="sourceLineNo">874</span> endFileLease(client, fileId);<a name="line.874"></a>
-<span class="sourceLineNo">875</span> return;<a name="line.875"></a>
-<span class="sourceLineNo">876</span> } else {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.877"></a>
-<span class="sourceLineNo">878</span> }<a name="line.878"></a>
-<span class="sourceLineNo">879</span> } catch (RemoteException e) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span> IOException ioe = e.unwrapRemoteException();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> if (ioe instanceof LeaseExpiredException) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.882"></a>
-<span class="sourceLineNo">883</span> return;<a name="line.883"></a>
-<span class="sourceLineNo">884</span> } else {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
-<span class="sourceLineNo">886</span> }<a name="line.886"></a>
-<span class="sourceLineNo">887</span> } catch (Exception e) {<a name="line.887"></a>
-<span class="sourceLineNo">888</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.888"></a>
-<span class="sourceLineNo">889</span> }<a name="line.889"></a>
-<span class="sourceLineNo">890</span> sleepIgnoreInterrupt(retry);<a name="line.890"></a>
-<span class="sourceLineNo">891</span> }<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> try {<a name="line.895"></a>
-<span class="sourceLineNo">896</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.896"></a>
-<span class="sourceLineNo">897</span> } catch (InterruptedException e) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span> }<a name="line.898"></a>
-<span class="sourceLineNo">899</span> }<a name="line.899"></a>
-<span class="sourceLineNo">900</span>}<a name="line.900"></a>
+<span class="sourceLineNo">803</span> } catch (IOException e) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span> LOG.warn("create fan-out dfs output {} failed, retry = {}", src, retry, e);<a name="line.804"></a>
+<span class="sourceLineNo">805</span> if (retry >= createMaxRetries) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span> throw e;<a name="line.806"></a>
+<span class="sourceLineNo">807</span> }<a name="line.807"></a>
+<span class="sourceLineNo">808</span> // overwrite the old broken file.<a name="line.808"></a>
+<span class="sourceLineNo">809</span> overwrite = true;<a name="line.809"></a>
+<span class="sourceLineNo">810</span> try {<a name="line.810"></a>
+<span class="sourceLineNo">811</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.811"></a>
+<span class="sourceLineNo">812</span> } catch (InterruptedException ie) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span> throw new InterruptedIOException();<a name="line.813"></a>
+<span class="sourceLineNo">814</span> }<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } finally {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> if (!succ) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span> if (futureList != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span> for (Future<Channel> f : futureList) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span> f.addListener(new FutureListener<Channel>() {<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @Override<a name="line.821"></a>
+<span class="sourceLineNo">822</span> public void operationComplete(Future<Channel> future) throws Exception {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> if (future.isSuccess()) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> future.getNow().close();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span> });<a name="line.827"></a>
+<span class="sourceLineNo">828</span> }<a name="line.828"></a>
+<span class="sourceLineNo">829</span> }<a name="line.829"></a>
+<span class="sourceLineNo">830</span> endFileLease(client, stat.getFileId());<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span> }<a name="line.832"></a>
+<span class="sourceLineNo">833</span> }<a name="line.833"></a>
+<span class="sourceLineNo">834</span> }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span> /**<a name="line.836"></a>
+<span class="sourceLineNo">837</span> * Create a {@link FanOutOneBlockAsyncDFSOutput}. The method maybe blocked so do not call it<a name="line.837"></a>
+<span class="sourceLineNo">838</span> * inside an {@link EventLoop}.<a name="line.838"></a>
+<span class="sourceLineNo">839</span> */<a name="line.839"></a>
+<span class="sourceLineNo">840</span> public static FanOutOneBlockAsyncDFSOutput createOutput(DistributedFileSystem dfs, Path f,<a name="line.840"></a>
+<span class="sourceLineNo">841</span> boolean overwrite, boolean createParent, short replication, long blockSize,<a name="line.841"></a>
+<span class="sourceLineNo">842</span> EventLoopGroup eventLoopGroup, Class<? extends Channel> channelClass) throws IOException {<a name="line.842"></a>
+<span class="sourceLineNo">843</span> return new FileSystemLinkResolver<FanOutOneBlockAsyncDFSOutput>() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span> @Override<a name="line.845"></a>
+<span class="sourceLineNo">846</span> public FanOutOneBlockAsyncDFSOutput doCall(Path p)<a name="line.846"></a>
+<span class="sourceLineNo">847</span> throws IOException, UnresolvedLinkException {<a name="line.847"></a>
+<span class="sourceLineNo">848</span> return createOutput(dfs, p.toUri().getPath(), overwrite, createParent, replication,<a name="line.848"></a>
+<span class="sourceLineNo">849</span> blockSize, eventLoopGroup, channelClass);<a name="line.849"></a>
+<span class="sourceLineNo">850</span> }<a name="line.850"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span> @Override<a name="line.852"></a>
+<span class="sourceLineNo">853</span> public FanOutOneBlockAsyncDFSOutput next(FileSystem fs, Path p) throws IOException {<a name="line.853"></a>
+<span class="sourceLineNo">854</span> throw new UnsupportedOperationException();<a name="line.854"></a>
+<span class="sourceLineNo">855</span> }<a name="line.855"></a>
+<span class="sourceLineNo">856</span> }.resolve(dfs, f);<a name="line.856"></a>
+<span class="sourceLineNo">857</span> }<a name="line.857"></a>
+<span class="sourceLineNo">858</span><a name="line.858"></a>
+<span class="sourceLineNo">859</span> public static boolean shouldRetryCreate(RemoteException e) {<a name="line.859"></a>
+<span class="sourceLineNo">860</span> // RetryStartFileException is introduced in HDFS 2.6+, so here we can only use the class name.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> // For exceptions other than this, we just throw it out. This is same with<a name="line.861"></a>
+<span class="sourceLineNo">862</span> // DFSOutputStream.newStreamForCreate.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> return e.getClassName().endsWith("RetryStartFileException");<a name="line.863"></a>
+<span class="sourceLineNo">864</span> }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span> static void completeFile(DFSClient client, ClientProtocol namenode, String src, String clientName,<a name="line.866"></a>
+<span class="sourceLineNo">867</span> ExtendedBlock block, long fileId) {<a name="line.867"></a>
+<span class="sourceLineNo">868</span> for (int retry = 0;; retry++) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span> try {<a name="line.869"></a>
+<span class="sourceLineNo">870</span> if (namenode.complete(src, clientName, block, fileId)) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span> endFileLease(client, fileId);<a name="line.871"></a>
+<span class="sourceLineNo">872</span> return;<a name="line.872"></a>
+<span class="sourceLineNo">873</span> } else {<a name="line.873"></a>
+<span class="sourceLineNo">874</span> LOG.warn("complete file " + src + " not finished, retry = " + retry);<a name="line.874"></a>
+<span class="sourceLineNo">875</span> }<a name="line.875"></a>
+<span class="sourceLineNo">876</span> } catch (RemoteException e) {<a name="line.876"></a>
+<span class="sourceLineNo">877</span> IOException ioe = e.unwrapRemoteException();<a name="line.877"></a>
+<span class="sourceLineNo">878</span> if (ioe instanceof LeaseExpiredException) {<a name="line.878"></a>
+<span class="sourceLineNo">879</span> LOG.warn("lease for file " + src + " is expired, give up", e);<a name="line.879"></a>
+<span class="sourceLineNo">880</span> return;<a name="line.880"></a>
+<span class="sourceLineNo">881</span> } else {<a name="line.881"></a>
+<span class="sourceLineNo">882</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.882"></a>
+<span class="sourceLineNo">883</span> }<a name="line.883"></a>
+<span class="sourceLineNo">884</span> } catch (Exception e) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span> LOG.warn("complete file " + src + " failed, retry = " + retry, e);<a name="line.885"></a>
+<span class="sourceLineNo">886</span> }<a name="line.886"></a>
+<span class="sourceLineNo">887</span> sleepIgnoreInterrupt(retry);<a name="line.887"></a>
+<span class="sourceLineNo">888</span> }<a name="line.888"></a>
+<span class="sourceLineNo">889</span> }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span> static void sleepIgnoreInterrupt(int retry) {<a name="line.891"></a>
+<span class="sourceLineNo">892</span> try {<a name="line.892"></a>
+<span class="sourceLineNo">893</span> Thread.sleep(ConnectionUtils.getPauseTime(100, retry));<a name="line.893"></a>
+<span class="sourceLineNo">894</span> } catch (InterruptedException e) {<a name="line.894"></a>
+<span class="sourceLineNo">895</span> }<a name="line.895"></a>
+<span class="sourceLineNo">896</span> }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>}<a name="line.897"></a>