You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jm...@apache.org on 2012/09/04 20:26:28 UTC
svn commit: r1380790 -
/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java
Author: jmhsieh
Date: Tue Sep 4 18:26:28 2012
New Revision: 1380790
URL: http://svn.apache.org/viewvc?rev=1380790&view=rev
Log:
HBASE-6691 HFile quarantine fails with missing files in hadoop 2.0
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java?rev=1380790&r1=1380789&r2=1380790&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java Tue Sep 4 18:26:28 2012
@@ -23,9 +23,11 @@ package org.apache.hadoop.hbase.fs;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
+import java.lang.reflect.UndeclaredThrowableException;
import java.net.URI;
import org.apache.commons.logging.Log;
@@ -258,14 +260,32 @@ public class HFileSystem extends FilterF
new InvocationHandler() {
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
- Object res = method.invoke(cp, args);
- if (res != null && args.length == 3 && "getBlockLocations".equals(method.getName())
- && res instanceof LocatedBlocks
- && args[0] instanceof String
- && args[0] != null) {
- lrb.reorderBlocks(conf, (LocatedBlocks) res, (String) args[0]);
+ try {
+ Object res = method.invoke(cp, args);
+ if (res != null && args.length == 3 && "getBlockLocations".equals(method.getName())
+ && res instanceof LocatedBlocks
+ && args[0] instanceof String
+ && args[0] != null) {
+ lrb.reorderBlocks(conf, (LocatedBlocks) res, (String) args[0]);
+ }
+ return res;
+ } catch (InvocationTargetException ite) {
+ // We will have this for all the exception, checked on not, sent
+ // by any layer, including the functional exception
+ Throwable cause = ite.getCause();
+ if (cause == null){
+ throw new RuntimeException(
+ "Proxy invocation failed and getCause is null", ite);
+ }
+ if (cause instanceof UndeclaredThrowableException) {
+ Throwable causeCause = cause.getCause();
+ if (causeCause == null) {
+ throw new RuntimeException("UndeclaredThrowableException had null cause!");
+ }
+ cause = cause.getCause();
+ }
+ throw cause;
}
- return res;
}
});
}