HBASE-6691 HFile quarantine fails with missing files in hadoop 2.0
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1380790 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9783392fab
commit
d97362910c
|
@ -23,9 +23,11 @@ package org.apache.hadoop.hbase.fs;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationHandler;
|
import java.lang.reflect.InvocationHandler;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
|
import java.lang.reflect.UndeclaredThrowableException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -258,14 +260,32 @@ public class HFileSystem extends FilterFileSystem {
|
||||||
new InvocationHandler() {
|
new InvocationHandler() {
|
||||||
public Object invoke(Object proxy, Method method,
|
public Object invoke(Object proxy, Method method,
|
||||||
Object[] args) throws Throwable {
|
Object[] args) throws Throwable {
|
||||||
Object res = method.invoke(cp, args);
|
try {
|
||||||
if (res != null && args.length == 3 && "getBlockLocations".equals(method.getName())
|
Object res = method.invoke(cp, args);
|
||||||
&& res instanceof LocatedBlocks
|
if (res != null && args.length == 3 && "getBlockLocations".equals(method.getName())
|
||||||
&& args[0] instanceof String
|
&& res instanceof LocatedBlocks
|
||||||
&& args[0] != null) {
|
&& args[0] instanceof String
|
||||||
lrb.reorderBlocks(conf, (LocatedBlocks) res, (String) args[0]);
|
&& 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;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue