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;
               }
             });
   }