You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2012/09/27 23:07:52 UTC

svn commit: r1391221 - in /hbase/branches/0.89-fb/src/main: java/org/apache/hadoop/hbase/ java/org/apache/hadoop/hbase/regionserver/ java/org/apache/hadoop/hbase/thrift/ java/org/apache/hadoop/hbase/thrift/generated/ resources/org/apache/hadoop/hbase/t...

Author: mbautin
Date: Thu Sep 27 21:07:52 2012
New Revision: 1391221

URL: http://svn.apache.org/viewvc?rev=1391221&view=rev
Log:
[jira] [HBASE-6882] [89-fb] Thrift IOError should include exception class

Author: mbautin

Summary: Return exception class as part of IOError thrown from the Thrift proxy or the embedded Thrift server in the regionserver.

Test Plan:
Unit tests
Test through C++ HBase client

Reviewers: liyintang, kranganathan, aaiyer, chip

Reviewed By: liyintang

Differential Revision: https://reviews.facebook.net/D5679

Modified:
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/RegionException.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
    hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
    hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/RegionException.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/RegionException.java?rev=1391221&r1=1391220&r2=1391221&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/RegionException.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/RegionException.java Thu Sep 27 21:07:52 2012
@@ -38,11 +38,12 @@ public class RegionException extends IOE
    * @param s message
    */
   public RegionException(String s) {
-    super(s, 0);
+    this(s, 0);
   }
 
   public RegionException(String s, long waitMillis) {
-    super(s, waitMillis);
+    super(s, waitMillis, "");
+    exceptionClass = getClass().getName();
   }
 
 }

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java?rev=1391221&r1=1391220&r2=1391221&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionThriftServer.java Thu Sep 27 21:07:52 2012
@@ -131,13 +131,13 @@ public class HRegionThriftServer extends
                                        qualifier, amount, true);
       } catch (NotServingRegionException e) {
         if (!redirect) {
-          throw new IOError(e.getMessage(), 0);
+          throw new IOError(e.getMessage(), 0, e.getClass().getName());
         }
         LOG.info("ThriftServer redirecting atomicIncrement");
         return super.atomicIncrement(tableName, row, family,
                                      qualifier, amount);
       } catch (IOException e) {
-        throw new IOError(e.getMessage(), 0);
+        throw new IOError(e.getMessage(), 0, e.getClass().getName());
       }
     }
 

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java?rev=1391221&r1=1391220&r2=1391221&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/ThriftServerRunner.java Thu Sep 27 21:07:52 2012
@@ -887,7 +887,7 @@ public class ThriftServerRunner implemen
       }
       try {
         if (!getHBaseAdmin().tableExists(tableNameBytes)) {
-          throw new IOError("table does not exist", 0);
+          throw new IOError("table does not exist", 0, "");
         }
         getHBaseAdmin().deleteTable(tableNameBytes);
       } catch (IOException e) {
@@ -1433,7 +1433,7 @@ public class ThriftServerRunner implemen
 
         processMultiPut(tableName, regionName, puts);
       } catch (IOException e) {
-        throw new IOError(e.getMessage(), 0);
+        throw new IOError(e.getMessage(), 0, e.getClass().getName());
       }
     }
 
@@ -1518,7 +1518,7 @@ public class ThriftServerRunner implemen
     if (e instanceof IOError) {
       return (IOError) e;
     }
-    return new IOError(e.getMessage(), 0);
+    return new IOError(e.getMessage(), 0, e.getClass().getName());
   }
 
   private static byte[] getQualifier(byte[][] familyAndQualifier) {

Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java?rev=1391221&r1=1391220&r2=1391221&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java Thu Sep 27 21:07:52 2012
@@ -37,6 +37,7 @@ public class IOError extends java.io.IOE
 
   private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1);
   private static final org.apache.thrift.protocol.TField BACKOFF_TIME_MILLIS_FIELD_DESC = new org.apache.thrift.protocol.TField("backoffTimeMillis", org.apache.thrift.protocol.TType.I64, (short)2);
+  private static final org.apache.thrift.protocol.TField EXCEPTION_CLASS_FIELD_DESC = new org.apache.thrift.protocol.TField("exceptionClass", org.apache.thrift.protocol.TType.STRING, (short)3);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -46,11 +47,13 @@ public class IOError extends java.io.IOE
 
   public String message; // required
   public long backoffTimeMillis; // required
+  public String exceptionClass; // required
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
     MESSAGE((short)1, "message"),
-    BACKOFF_TIME_MILLIS((short)2, "backoffTimeMillis");
+    BACKOFF_TIME_MILLIS((short)2, "backoffTimeMillis"),
+    EXCEPTION_CLASS((short)3, "exceptionClass");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -69,6 +72,8 @@ public class IOError extends java.io.IOE
           return MESSAGE;
         case 2: // BACKOFF_TIME_MILLIS
           return BACKOFF_TIME_MILLIS;
+        case 3: // EXCEPTION_CLASS
+          return EXCEPTION_CLASS;
         default:
           return null;
       }
@@ -118,6 +123,8 @@ public class IOError extends java.io.IOE
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.BACKOFF_TIME_MILLIS, new org.apache.thrift.meta_data.FieldMetaData("backoffTimeMillis", org.apache.thrift.TFieldRequirementType.DEFAULT, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.EXCEPTION_CLASS, new org.apache.thrift.meta_data.FieldMetaData("exceptionClass", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(IOError.class, metaDataMap);
   }
@@ -127,12 +134,14 @@ public class IOError extends java.io.IOE
 
   public IOError(
     String message,
-    long backoffTimeMillis)
+    long backoffTimeMillis,
+    String exceptionClass)
   {
     this();
     this.message = message;
     this.backoffTimeMillis = backoffTimeMillis;
     setBackoffTimeMillisIsSet(true);
+    this.exceptionClass = exceptionClass;
   }
 
   /**
@@ -145,6 +154,9 @@ public class IOError extends java.io.IOE
       this.message = other.message;
     }
     this.backoffTimeMillis = other.backoffTimeMillis;
+    if (other.isSetExceptionClass()) {
+      this.exceptionClass = other.exceptionClass;
+    }
   }
 
   public IOError deepCopy() {
@@ -156,6 +168,7 @@ public class IOError extends java.io.IOE
     this.message = null;
     setBackoffTimeMillisIsSet(false);
     this.backoffTimeMillis = 0;
+    this.exceptionClass = null;
   }
 
   public String getMessage() {
@@ -205,6 +218,30 @@ public class IOError extends java.io.IOE
     __isset_bit_vector.set(__BACKOFFTIMEMILLIS_ISSET_ID, value);
   }
 
+  public String getExceptionClass() {
+    return this.exceptionClass;
+  }
+
+  public IOError setExceptionClass(String exceptionClass) {
+    this.exceptionClass = exceptionClass;
+    return this;
+  }
+
+  public void unsetExceptionClass() {
+    this.exceptionClass = null;
+  }
+
+  /** Returns true if field exceptionClass is set (has been assigned a value) and false otherwise */
+  public boolean isSetExceptionClass() {
+    return this.exceptionClass != null;
+  }
+
+  public void setExceptionClassIsSet(boolean value) {
+    if (!value) {
+      this.exceptionClass = null;
+    }
+  }
+
   public void setFieldValue(_Fields field, Object value) {
     switch (field) {
     case MESSAGE:
@@ -223,6 +260,14 @@ public class IOError extends java.io.IOE
       }
       break;
 
+    case EXCEPTION_CLASS:
+      if (value == null) {
+        unsetExceptionClass();
+      } else {
+        setExceptionClass((String)value);
+      }
+      break;
+
     }
   }
 
@@ -234,6 +279,9 @@ public class IOError extends java.io.IOE
     case BACKOFF_TIME_MILLIS:
       return Long.valueOf(getBackoffTimeMillis());
 
+    case EXCEPTION_CLASS:
+      return getExceptionClass();
+
     }
     throw new IllegalStateException();
   }
@@ -249,6 +297,8 @@ public class IOError extends java.io.IOE
       return isSetMessage();
     case BACKOFF_TIME_MILLIS:
       return isSetBackoffTimeMillis();
+    case EXCEPTION_CLASS:
+      return isSetExceptionClass();
     }
     throw new IllegalStateException();
   }
@@ -284,6 +334,15 @@ public class IOError extends java.io.IOE
         return false;
     }
 
+    boolean this_present_exceptionClass = true && this.isSetExceptionClass();
+    boolean that_present_exceptionClass = true && that.isSetExceptionClass();
+    if (this_present_exceptionClass || that_present_exceptionClass) {
+      if (!(this_present_exceptionClass && that_present_exceptionClass))
+        return false;
+      if (!this.exceptionClass.equals(that.exceptionClass))
+        return false;
+    }
+
     return true;
   }
 
@@ -320,6 +379,16 @@ public class IOError extends java.io.IOE
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(isSetExceptionClass()).compareTo(typedOther.isSetExceptionClass());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetExceptionClass()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.exceptionClass, typedOther.exceptionClass);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -351,6 +420,14 @@ public class IOError extends java.io.IOE
     sb.append("backoffTimeMillis:");
     sb.append(this.backoffTimeMillis);
     first = false;
+    if (!first) sb.append(", ");
+    sb.append("exceptionClass:");
+    if (this.exceptionClass == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.exceptionClass);
+    }
+    first = false;
     sb.append(")");
     return sb.toString();
   }
@@ -411,6 +488,14 @@ public class IOError extends java.io.IOE
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 3: // EXCEPTION_CLASS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.exceptionClass = iprot.readString();
+              struct.setExceptionClassIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -434,6 +519,11 @@ public class IOError extends java.io.IOE
       oprot.writeFieldBegin(BACKOFF_TIME_MILLIS_FIELD_DESC);
       oprot.writeI64(struct.backoffTimeMillis);
       oprot.writeFieldEnd();
+      if (struct.exceptionClass != null) {
+        oprot.writeFieldBegin(EXCEPTION_CLASS_FIELD_DESC);
+        oprot.writeString(struct.exceptionClass);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -458,19 +548,25 @@ public class IOError extends java.io.IOE
       if (struct.isSetBackoffTimeMillis()) {
         optionals.set(1);
       }
-      oprot.writeBitSet(optionals, 2);
+      if (struct.isSetExceptionClass()) {
+        optionals.set(2);
+      }
+      oprot.writeBitSet(optionals, 3);
       if (struct.isSetMessage()) {
         oprot.writeString(struct.message);
       }
       if (struct.isSetBackoffTimeMillis()) {
         oprot.writeI64(struct.backoffTimeMillis);
       }
+      if (struct.isSetExceptionClass()) {
+        oprot.writeString(struct.exceptionClass);
+      }
     }
 
     @Override
     public void read(org.apache.thrift.protocol.TProtocol prot, IOError struct) throws org.apache.thrift.TException {
       TTupleProtocol iprot = (TTupleProtocol) prot;
-      BitSet incoming = iprot.readBitSet(2);
+      BitSet incoming = iprot.readBitSet(3);
       if (incoming.get(0)) {
         struct.message = iprot.readString();
         struct.setMessageIsSet(true);
@@ -479,6 +575,10 @@ public class IOError extends java.io.IOE
         struct.backoffTimeMillis = iprot.readI64();
         struct.setBackoffTimeMillisIsSet(true);
       }
+      if (incoming.get(2)) {
+        struct.exceptionClass = iprot.readString();
+        struct.setExceptionClassIsSet(true);
+      }
     }
   }
 

Modified: hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift?rev=1391221&r1=1391220&r2=1391221&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift (original)
+++ hbase/branches/0.89-fb/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift Thu Sep 27 21:07:52 2012
@@ -146,7 +146,8 @@ struct TScan {
  */
 exception IOError {
   1: string message,
-  2: i64 backoffTimeMillis
+  2: i64 backoffTimeMillis,
+  3: string exceptionClass
 }
 
 /**