You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by md...@apache.org on 2014/04/11 18:37:11 UTC

[2/3] git commit: ACCUMULO-2660 handle invocation ex in dfslogger

ACCUMULO-2660 handle invocation ex in dfslogger


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/18fa298e
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/18fa298e
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/18fa298e

Branch: refs/heads/master
Commit: 18fa298e30907f12a47266886292904127b7838b
Parents: b2008ca
Author: Mike Drob <md...@cloudera.com>
Authored: Fri Apr 11 11:37:41 2014 -0400
Committer: Mike Drob <md...@cloudera.com>
Committed: Fri Apr 11 12:36:20 2014 -0400

----------------------------------------------------------------------
 .../apache/accumulo/tserver/log/DfsLogger.java  | 22 +++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/18fa298e/server/tserver/src/main/java/org/apache/accumulo/tserver/log/DfsLogger.java
----------------------------------------------------------------------
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/DfsLogger.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/DfsLogger.java
index 55df118..c960bd6 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/DfsLogger.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/DfsLogger.java
@@ -26,6 +26,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.channels.ClosedChannelException;
 import java.util.ArrayList;
@@ -456,9 +457,24 @@ public class DfsLogger {
     try {
       write(key, EMPTY);
       sync.invoke(logFile);
-    } catch (Exception ex) {
-      log.error(ex);
-      throw new IOException(ex);
+    } catch (IllegalArgumentException e) {
+      log.error("Signature of sync method changed. Accumulo is likely incompatible with this version of Hadoop.");
+      throw new RuntimeException(e);
+    } catch (IllegalAccessException e) {
+      log.error("Could not invoke sync method due to permission error.");
+      throw new RuntimeException(e);
+    } catch (InvocationTargetException e) {
+      Throwable cause = e.getCause();
+      if (cause instanceof IOException) {
+        throw (IOException) cause;
+      } else if (cause instanceof RuntimeException) {
+        throw (RuntimeException) cause;
+      } else if (cause instanceof Error) {
+        throw (Error) cause;
+      } else {
+        // Cause is null, or some other checked exception that was added later.
+        throw new RuntimeException(e);
+      }
     }
   }