Explorar el Código

HDFS-13511. Provide specialized exception when block length cannot be obtained. Contributed by Gabor Bota.

(cherry picked from commit 774c1f199e11d886d0c0a1069325f0284da35deb)
(cherry picked from commit 3b646a98365f0e7fb0690df63b1da6f7270c6e71)
(cherry picked from commit d675a955e244ae60139742bce806c0411d78576d)
Xiao Chen hace 7 años
padre
commit
51782c4657

+ 55 - 0
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/CannotObtainBlockLengthException.java

@@ -0,0 +1,55 @@
+/**
+ * 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
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.hdfs;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.hdfs.protocol.LocatedBlock;
+
+import java.io.IOException;
+
+/**
+ * This exception is thrown when the length of a LocatedBlock instance
+ * can not be obtained.
+ */
+@InterfaceAudience.Public
+@InterfaceStability.Unstable
+public class CannotObtainBlockLengthException extends IOException {
+  private static final long serialVersionUID = 1L;
+
+  public CannotObtainBlockLengthException() {
+    super();
+  }
+
+  public CannotObtainBlockLengthException(String message){
+    super(message);
+  }
+
+  /**
+   * Constructs an {@code CannotObtainBlockLengthException} with the
+   * specified LocatedBlock that failed to obtain block length.
+   *
+   * @param locatedBlock
+   *        The LocatedBlock instance which block length can not be obtained
+   */
+  public CannotObtainBlockLengthException(LocatedBlock locatedBlock) {
+    super("Cannot obtain block length for " + locatedBlock);
+  }
+
+}

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java

@@ -451,7 +451,7 @@ public class DFSInputStream extends FSInputStream
       return 0;
     }
 
-    throw new IOException("Cannot obtain block length for " + locatedblock);
+    throw new CannotObtainBlockLengthException(locatedblock);
   }
 
   public long getFileLength() {