This is an automated email from the ASF dual-hosted git repository.
reidchan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new bffe895 HBASE-26025 Add a flag to mark if the IOError can be solved
by retry in thrift IOError (#3414)
bffe895 is described below
commit bffe8957c5591ccc2699b05ab7e00ea9047b548b
Author: YutSean <[email protected]>
AuthorDate: Fri Jun 25 16:44:14 2021 +0800
HBASE-26025 Add a flag to mark if the IOError can be solved by retry in
thrift IOError (#3414)
Signed-off-by: Reid Chan <[email protected]>
---
.../hbase/thrift/ThriftHBaseServiceHandler.java | 2 +
.../hadoop/hbase/thrift/generated/IOError.java | 138 ++++++++++++++---
.../hbase/thrift2/ThriftHBaseServiceHandler.java | 1 +
.../hadoop/hbase/thrift2/generated/TIOError.java | 167 ++++++++++++++++-----
.../org/apache/hadoop/hbase/thrift/Hbase.thrift | 1 +
.../org/apache/hadoop/hbase/thrift2/hbase.thrift | 1 +
6 files changed, 255 insertions(+), 55 deletions(-)
diff --git
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java
index e964d93..48a4f4c 100644
---
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java
+++
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftHBaseServiceHandler.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.hbase.CellBuilder;
import org.apache.hadoop.hbase.CellBuilderFactory;
import org.apache.hadoop.hbase.CellBuilderType;
import org.apache.hadoop.hbase.CellUtil;
+import org.apache.hadoop.hbase.DoNotRetryIOException;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.KeyValue;
@@ -1291,6 +1292,7 @@ public class ThriftHBaseServiceHandler extends
HBaseServiceHandler implements Hb
private static IOError getIOError(Throwable throwable) {
IOError error = new IOErrorWithCause(throwable);
+ error.setCanRetry(!(throwable instanceof DoNotRetryIOException));
error.setMessage(Throwables.getStackTraceAsString(throwable));
return error;
}
diff --git
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
index fd38449..cf89632 100644
---
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
+++
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/generated/IOError.java
@@ -17,15 +17,18 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new
org.apache.thrift.protocol.TStruct("IOError");
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 CAN_RETRY_FIELD_DESC
= new org.apache.thrift.protocol.TField("canRetry",
org.apache.thrift.protocol.TType.BOOL, (short)2);
private static final org.apache.thrift.scheme.SchemeFactory
STANDARD_SCHEME_FACTORY = new IOErrorStandardSchemeFactory();
private static final org.apache.thrift.scheme.SchemeFactory
TUPLE_SCHEME_FACTORY = new IOErrorTupleSchemeFactory();
public @org.apache.thrift.annotation.Nullable java.lang.String message; //
required
+ public boolean canRetry; // 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");
+ MESSAGE((short)1, "message"),
+ CAN_RETRY((short)2, "canRetry");
private static final java.util.Map<java.lang.String, _Fields> byName = new
java.util.HashMap<java.lang.String, _Fields>();
@@ -43,6 +46,8 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
switch(fieldId) {
case 1: // MESSAGE
return MESSAGE;
+ case 2: // CAN_RETRY
+ return CAN_RETRY;
default:
return null;
}
@@ -84,11 +89,15 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
}
// isset id assignments
+ private static final int __CANRETRY_ISSET_ID = 0;
+ private byte __isset_bitfield = 0;
public static final java.util.Map<_Fields,
org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
new java.util.EnumMap<_Fields,
org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
- tmpMap.put(_Fields.MESSAGE, new
org.apache.thrift.meta_data.FieldMetaData("message",
org.apache.thrift.TFieldRequirementType.DEFAULT,
- new
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+ tmpMap.put(_Fields.MESSAGE, new
org.apache.thrift.meta_data.FieldMetaData("message",
org.apache.thrift.TFieldRequirementType.DEFAULT,
+ new
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+ tmpMap.put(_Fields.CAN_RETRY, new
org.apache.thrift.meta_data.FieldMetaData("canRetry",
org.apache.thrift.TFieldRequirementType.DEFAULT,
+ new
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(IOError.class,
metaDataMap);
}
@@ -97,19 +106,24 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
}
public IOError(
- java.lang.String message)
+ java.lang.String message,
+ boolean canRetry)
{
this();
this.message = message;
+ this.canRetry = canRetry;
+ setCanRetryIsSet(true);
}
/**
* Performs a deep copy on <i>other</i>.
*/
public IOError(IOError other) {
+ __isset_bitfield = other.__isset_bitfield;
if (other.isSetMessage()) {
this.message = other.message;
}
+ this.canRetry = other.canRetry;
}
public IOError deepCopy() {
@@ -119,6 +133,8 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
@Override
public void clear() {
this.message = null;
+ setCanRetryIsSet(false);
+ this.canRetry = false;
}
@org.apache.thrift.annotation.Nullable
@@ -146,15 +162,46 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
}
}
+ public boolean isCanRetry() {
+ return this.canRetry;
+ }
+
+ public IOError setCanRetry(boolean canRetry) {
+ this.canRetry = canRetry;
+ setCanRetryIsSet(true);
+ return this;
+ }
+
+ public void unsetCanRetry() {
+ __isset_bitfield =
org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __CANRETRY_ISSET_ID);
+ }
+
+ /** Returns true if field canRetry is set (has been assigned a value) and
false otherwise */
+ public boolean isSetCanRetry() {
+ return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield,
__CANRETRY_ISSET_ID);
+ }
+
+ public void setCanRetryIsSet(boolean value) {
+ __isset_bitfield =
org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __CANRETRY_ISSET_ID,
value);
+ }
+
public void setFieldValue(_Fields field,
@org.apache.thrift.annotation.Nullable java.lang.Object value) {
switch (field) {
- case MESSAGE:
- if (value == null) {
- unsetMessage();
- } else {
- setMessage((java.lang.String)value);
- }
- break;
+ case MESSAGE:
+ if (value == null) {
+ unsetMessage();
+ } else {
+ setMessage((java.lang.String)value);
+ }
+ break;
+
+ case CAN_RETRY:
+ if (value == null) {
+ unsetCanRetry();
+ } else {
+ setCanRetry((java.lang.Boolean)value);
+ }
+ break;
}
}
@@ -162,8 +209,11 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
@org.apache.thrift.annotation.Nullable
public java.lang.Object getFieldValue(_Fields field) {
switch (field) {
- case MESSAGE:
- return getMessage();
+ case MESSAGE:
+ return getMessage();
+
+ case CAN_RETRY:
+ return isCanRetry();
}
throw new java.lang.IllegalStateException();
@@ -176,8 +226,10 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
}
switch (field) {
- case MESSAGE:
- return isSetMessage();
+ case MESSAGE:
+ return isSetMessage();
+ case CAN_RETRY:
+ return isSetCanRetry();
}
throw new java.lang.IllegalStateException();
}
@@ -204,6 +256,15 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
return false;
}
+ boolean this_present_canRetry = true;
+ boolean that_present_canRetry = true;
+ if (this_present_canRetry || that_present_canRetry) {
+ if (!(this_present_canRetry && that_present_canRetry))
+ return false;
+ if (this.canRetry != that.canRetry)
+ return false;
+ }
+
return true;
}
@@ -215,6 +276,8 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
if (isSetMessage())
hashCode = hashCode * 8191 + message.hashCode();
+ hashCode = hashCode * 8191 + ((canRetry) ? 131071 : 524287);
+
return hashCode;
}
@@ -236,6 +299,16 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
return lastComparison;
}
}
+ lastComparison = java.lang.Boolean.compare(isSetCanRetry(),
other.isSetCanRetry());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (isSetCanRetry()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.canRetry,
other.canRetry);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
return 0;
}
@@ -264,6 +337,10 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
sb.append(this.message);
}
first = false;
+ if (!first) sb.append(", ");
+ sb.append("canRetry:");
+ sb.append(this.canRetry);
+ first = false;
sb.append(")");
return sb.toString();
}
@@ -283,6 +360,8 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
private void readObject(java.io.ObjectInputStream in) throws
java.io.IOException, java.lang.ClassNotFoundException {
try {
+ // it doesn't seem like you should have to do this, but java
serialization is wacky, and doesn't call the default constructor.
+ __isset_bitfield = 0;
read(new org.apache.thrift.protocol.TCompactProtocol(new
org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
@@ -303,7 +382,7 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
while (true)
{
schemeField = iprot.readFieldBegin();
- if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
@@ -311,7 +390,15 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
struct.message = iprot.readString();
struct.setMessageIsSet(true);
- } else {
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
+ }
+ break;
+ case 2: // CAN_RETRY
+ if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+ struct.canRetry = iprot.readBool();
+ struct.setCanRetryIsSet(true);
+ } else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
}
break;
@@ -335,6 +422,9 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
oprot.writeString(struct.message);
oprot.writeFieldEnd();
}
+ oprot.writeFieldBegin(CAN_RETRY_FIELD_DESC);
+ oprot.writeBool(struct.canRetry);
+ oprot.writeFieldEnd();
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -356,20 +446,30 @@ public class IOError extends org.apache.thrift.TException
implements org.apache.
if (struct.isSetMessage()) {
optionals.set(0);
}
- oprot.writeBitSet(optionals, 1);
+ if (struct.isSetCanRetry()) {
+ optionals.set(1);
+ }
+ oprot.writeBitSet(optionals, 2);
if (struct.isSetMessage()) {
oprot.writeString(struct.message);
}
+ if (struct.isSetCanRetry()) {
+ oprot.writeBool(struct.canRetry);
+ }
}
@Override
public void read(org.apache.thrift.protocol.TProtocol prot, IOError
struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TTupleProtocol iprot =
(org.apache.thrift.protocol.TTupleProtocol) prot;
- java.util.BitSet incoming = iprot.readBitSet(1);
+ java.util.BitSet incoming = iprot.readBitSet(2);
if (incoming.get(0)) {
struct.message = iprot.readString();
struct.setMessageIsSet(true);
}
+ if (incoming.get(1)) {
+ struct.canRetry = iprot.readBool();
+ struct.setCanRetryIsSet(true);
+ }
}
}
diff --git
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
index d70241c..0f57089 100644
---
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
+++
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
@@ -186,6 +186,7 @@ public class ThriftHBaseServiceHandler extends
HBaseServiceHandler implements TH
private TIOError getTIOError(IOException e) {
TIOError err = new TIOErrorWithCause(e);
+ err.setCanRetry(!(e instanceof DoNotRetryIOException));
err.setMessage(e.getMessage());
return err;
}
diff --git
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
index 4f5c6cf..1030be8 100644
---
a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
+++
b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
@@ -17,15 +17,17 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new
org.apache.thrift.protocol.TStruct("TIOError");
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 CAN_RETRY_FIELD_DESC
= new org.apache.thrift.protocol.TField("canRetry",
org.apache.thrift.protocol.TType.BOOL, (short) 2);
private static final org.apache.thrift.scheme.SchemeFactory
STANDARD_SCHEME_FACTORY = new TIOErrorStandardSchemeFactory();
private static final org.apache.thrift.scheme.SchemeFactory
TUPLE_SCHEME_FACTORY = new TIOErrorTupleSchemeFactory();
public @org.apache.thrift.annotation.Nullable java.lang.String message; //
optional
+ public boolean canRetry; // optional
/** 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");
+ MESSAGE((short) 1, "message"), CAN_RETRY((short) 2, "canRetry");
private static final java.util.Map<java.lang.String, _Fields> byName = new
java.util.HashMap<java.lang.String, _Fields>();
@@ -43,6 +45,8 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
switch(fieldId) {
case 1: // MESSAGE
return MESSAGE;
+ case 2: // CAN_RETRY
+ return CAN_RETRY;
default:
return null;
}
@@ -84,12 +88,16 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
}
// isset id assignments
- private static final _Fields optionals[] = {_Fields.MESSAGE};
+ private static final int __CANRETRY_ISSET_ID = 0;
+ private byte __isset_bitfield = 0;
+ private static final _Fields optionals[] = { _Fields.MESSAGE,
_Fields.CAN_RETRY };
public static final java.util.Map<_Fields,
org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap =
new java.util.EnumMap<_Fields,
org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
- tmpMap.put(_Fields.MESSAGE, new
org.apache.thrift.meta_data.FieldMetaData("message",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ tmpMap.put(_Fields.MESSAGE, new
org.apache.thrift.meta_data.FieldMetaData("message",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
new
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+ tmpMap.put(_Fields.CAN_RETRY, new
org.apache.thrift.meta_data.FieldMetaData("canRetry",
org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TIOError.class,
metaDataMap);
}
@@ -101,9 +109,11 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
* Performs a deep copy on <i>other</i>.
*/
public TIOError(TIOError other) {
+ __isset_bitfield = other.__isset_bitfield;
if (other.isSetMessage()) {
this.message = other.message;
}
+ this.canRetry = other.canRetry;
}
public TIOError deepCopy() {
@@ -113,6 +123,8 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
@Override
public void clear() {
this.message = null;
+ setCanRetryIsSet(false);
+ this.canRetry = false;
}
@org.apache.thrift.annotation.Nullable
@@ -140,15 +152,46 @@ public class TIOError extends
org.apache.thrift.TException implements org.apache
}
}
+ public boolean isCanRetry() {
+ return this.canRetry;
+ }
+
+ public TIOError setCanRetry(boolean canRetry) {
+ this.canRetry = canRetry;
+ setCanRetryIsSet(true);
+ return this;
+ }
+
+ public void unsetCanRetry() {
+ __isset_bitfield =
org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __CANRETRY_ISSET_ID);
+ }
+
+ /** Returns true if field canRetry is set (has been assigned a value) and
false otherwise */
+ public boolean isSetCanRetry() {
+ return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield,
__CANRETRY_ISSET_ID);
+ }
+
+ public void setCanRetryIsSet(boolean value) {
+ __isset_bitfield =
org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __CANRETRY_ISSET_ID,
value);
+ }
+
public void setFieldValue(_Fields field,
@org.apache.thrift.annotation.Nullable java.lang.Object value) {
switch (field) {
- case MESSAGE:
- if (value == null) {
- unsetMessage();
- } else {
- setMessage((java.lang.String)value);
- }
- break;
+ case MESSAGE:
+ if (value == null) {
+ unsetMessage();
+ } else {
+ setMessage((java.lang.String) value);
+ }
+ break;
+
+ case CAN_RETRY:
+ if (value == null) {
+ unsetCanRetry();
+ } else {
+ setCanRetry((java.lang.Boolean) value);
+ }
+ break;
}
}
@@ -156,8 +199,11 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
@org.apache.thrift.annotation.Nullable
public java.lang.Object getFieldValue(_Fields field) {
switch (field) {
- case MESSAGE:
- return getMessage();
+ case MESSAGE:
+ return getMessage();
+
+ case CAN_RETRY:
+ return isCanRetry();
}
throw new java.lang.IllegalStateException();
@@ -170,32 +216,36 @@ public class TIOError extends
org.apache.thrift.TException implements org.apache
}
switch (field) {
- case MESSAGE:
- return isSetMessage();
+ case MESSAGE:
+ return isSetMessage();
+ case CAN_RETRY:
+ return isSetCanRetry();
}
throw new java.lang.IllegalStateException();
}
@Override
public boolean equals(java.lang.Object that) {
- if (that instanceof TIOError)
- return this.equals((TIOError)that);
+ if (that instanceof TIOError) return this.equals((TIOError) that);
return false;
}
public boolean equals(TIOError that) {
- if (that == null)
- return false;
- if (this == that)
- return true;
+ if (that == null) return false;
+ if (this == that) return true;
boolean this_present_message = true && this.isSetMessage();
boolean that_present_message = true && that.isSetMessage();
if (this_present_message || that_present_message) {
- if (!(this_present_message && that_present_message))
- return false;
- if (!this.message.equals(that.message))
- return false;
+ if (!(this_present_message && that_present_message)) return false;
+ if (!this.message.equals(that.message)) return false;
+ }
+
+ boolean this_present_canRetry = true && this.isSetCanRetry();
+ boolean that_present_canRetry = true && that.isSetCanRetry();
+ if (this_present_canRetry || that_present_canRetry) {
+ if (!(this_present_canRetry && that_present_canRetry)) return false;
+ if (this.canRetry != that.canRetry) return false;
}
return true;
@@ -206,8 +256,10 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
int hashCode = 1;
hashCode = hashCode * 8191 + ((isSetMessage()) ? 131071 : 524287);
- if (isSetMessage())
- hashCode = hashCode * 8191 + message.hashCode();
+ if (isSetMessage()) hashCode = hashCode * 8191 + message.hashCode();
+
+ hashCode = hashCode * 8191 + ((isSetCanRetry()) ? 131071 : 524287);
+ if (isSetCanRetry()) hashCode = hashCode * 8191 + ((canRetry) ? 131071 :
524287);
return hashCode;
}
@@ -230,6 +282,16 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
return lastComparison;
}
}
+ lastComparison = java.lang.Boolean.compare(isSetCanRetry(),
other.isSetCanRetry());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (isSetCanRetry()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.canRetry,
other.canRetry);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
return 0;
}
@@ -260,6 +322,12 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
}
first = false;
}
+ if (isSetCanRetry()) {
+ if (!first) sb.append(", ");
+ sb.append("canRetry:");
+ sb.append(this.canRetry);
+ first = false;
+ }
sb.append(")");
return sb.toString();
}
@@ -279,6 +347,8 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
private void readObject(java.io.ObjectInputStream in) throws
java.io.IOException, java.lang.ClassNotFoundException {
try {
+ // it doesn't seem like you should have to do this, but java
serialization is wacky, and doesn't call the default constructor.
+ __isset_bitfield = 0;
read(new org.apache.thrift.protocol.TCompactProtocol(new
org.apache.thrift.transport.TIOStreamTransport(in)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
@@ -296,10 +366,9 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
public void read(org.apache.thrift.protocol.TProtocol iprot, TIOError
struct) throws org.apache.thrift.TException {
org.apache.thrift.protocol.TField schemeField;
iprot.readStructBegin();
- while (true)
- {
+ while (true) {
schemeField = iprot.readFieldBegin();
- if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
+ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) {
break;
}
switch (schemeField.id) {
@@ -307,7 +376,15 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
struct.message = iprot.readString();
struct.setMessageIsSet(true);
- } else {
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
+ }
+ break;
+ case 2: // CAN_RETRY
+ if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+ struct.canRetry = iprot.readBool();
+ struct.setCanRetryIsSet(true);
+ } else {
org.apache.thrift.protocol.TProtocolUtil.skip(iprot,
schemeField.type);
}
break;
@@ -333,6 +410,11 @@ public class TIOError extends org.apache.thrift.TException
implements org.apache
oprot.writeFieldEnd();
}
}
+ if (struct.isSetCanRetry()) {
+ oprot.writeFieldBegin(CAN_RETRY_FIELD_DESC);
+ oprot.writeBool(struct.canRetry);
+ oprot.writeFieldEnd();
+ }
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -348,31 +430,44 @@ public class TIOError extends
org.apache.thrift.TException implements org.apache
private static class TIOErrorTupleScheme extends
org.apache.thrift.scheme.TupleScheme<TIOError> {
@Override
- public void write(org.apache.thrift.protocol.TProtocol prot, TIOError
struct) throws org.apache.thrift.TException {
+ public void write(org.apache.thrift.protocol.TProtocol prot, TIOError
struct)
+ throws org.apache.thrift.TException {
org.apache.thrift.protocol.TTupleProtocol oprot =
(org.apache.thrift.protocol.TTupleProtocol) prot;
java.util.BitSet optionals = new java.util.BitSet();
if (struct.isSetMessage()) {
optionals.set(0);
}
- oprot.writeBitSet(optionals, 1);
+ if (struct.isSetCanRetry()) {
+ optionals.set(1);
+ }
+ oprot.writeBitSet(optionals, 2);
if (struct.isSetMessage()) {
oprot.writeString(struct.message);
}
+ if (struct.isSetCanRetry()) {
+ oprot.writeBool(struct.canRetry);
+ }
}
@Override
- public void read(org.apache.thrift.protocol.TProtocol prot, TIOError
struct) throws org.apache.thrift.TException {
+ public void read(org.apache.thrift.protocol.TProtocol prot, TIOError
struct)
+ throws org.apache.thrift.TException {
org.apache.thrift.protocol.TTupleProtocol iprot =
(org.apache.thrift.protocol.TTupleProtocol) prot;
- java.util.BitSet incoming = iprot.readBitSet(1);
+ java.util.BitSet incoming = iprot.readBitSet(2);
if (incoming.get(0)) {
struct.message = iprot.readString();
struct.setMessageIsSet(true);
}
+ if (incoming.get(1)) {
+ struct.canRetry = iprot.readBool();
+ struct.setCanRetryIsSet(true);
+ }
}
}
private static <S extends org.apache.thrift.scheme.IScheme> S
scheme(org.apache.thrift.protocol.TProtocol proto) {
- return
(org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ?
STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+ return
(org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ?
+ STANDARD_SCHEME_FACTORY :
+ TUPLE_SCHEME_FACTORY).getScheme();
}
}
-
diff --git
a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
index b20cd11..bb47410 100644
---
a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
+++
b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
@@ -174,6 +174,7 @@ struct TAppend {
*/
exception IOError {
1:string message
+ 2:bool canRetry
}
/**
diff --git
a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
index 0e9551d..2068b65 100644
---
a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
+++
b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
@@ -511,6 +511,7 @@ struct TOnlineLogRecord {
*/
exception TIOError {
1: optional string message
+ 2: optional bool canRetry
}
/**