You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tephra.apache.org by an...@apache.org on 2017/09/12 23:23:51 UTC

[3/4] incubator-tephra git commit: (TEPHRA-240) Include conflicting key and client id in TransactionConflictException

http://git-wip-us.apache.org/repos/asf/incubator-tephra/blob/174c3325/tephra-core/src/main/java/org/apache/tephra/distributed/thrift/TTransactionServer.java
----------------------------------------------------------------------
diff --git a/tephra-core/src/main/java/org/apache/tephra/distributed/thrift/TTransactionServer.java b/tephra-core/src/main/java/org/apache/tephra/distributed/thrift/TTransactionServer.java
index 6c07ccb..d578e4b 100644
--- a/tephra-core/src/main/java/org/apache/tephra/distributed/thrift/TTransactionServer.java
+++ b/tephra-core/src/main/java/org/apache/tephra/distributed/thrift/TTransactionServer.java
@@ -68,13 +68,15 @@ public class TTransactionServer {
 
     public TBoolean canCommitTx(TTransaction tx, Set<ByteBuffer> changes) throws TTransactionNotInProgressException, org.apache.thrift.TException;
 
-    public TBoolean canCommitOrThrow(TTransaction tx, Set<ByteBuffer> changes) throws TTransactionNotInProgressException, TGenericException, org.apache.thrift.TException;
+    public void canCommitOrThrow(long tx, Set<ByteBuffer> changes) throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException;
 
     public TBoolean commitTx(TTransaction tx) throws TTransactionNotInProgressException, org.apache.thrift.TException;
 
+    public void commitOrThrow(long txId, long wp) throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException;
+
     public void abortTx(TTransaction tx) throws org.apache.thrift.TException;
 
-    public boolean invalidateTx(long tx) throws org.apache.thrift.TException;
+    public boolean invalidateTx(long txid) throws org.apache.thrift.TException;
 
     public ByteBuffer getSnapshot() throws TTransactionCouldNotTakeSnapshotException, org.apache.thrift.TException;
 
@@ -112,13 +114,15 @@ public class TTransactionServer {
 
     public void canCommitTx(TTransaction tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.canCommitTx_call> resultHandler) throws org.apache.thrift.TException;
 
-    public void canCommitOrThrow(TTransaction tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.canCommitOrThrow_call> resultHandler) throws org.apache.thrift.TException;
+    public void canCommitOrThrow(long tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.canCommitOrThrow_call> resultHandler) throws org.apache.thrift.TException;
 
     public void commitTx(TTransaction tx, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.commitTx_call> resultHandler) throws org.apache.thrift.TException;
 
+    public void commitOrThrow(long txId, long wp, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.commitOrThrow_call> resultHandler) throws org.apache.thrift.TException;
+
     public void abortTx(TTransaction tx, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.abortTx_call> resultHandler) throws org.apache.thrift.TException;
 
-    public void invalidateTx(long tx, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.invalidateTx_call> resultHandler) throws org.apache.thrift.TException;
+    public void invalidateTx(long txid, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.invalidateTx_call> resultHandler) throws org.apache.thrift.TException;
 
     public void getSnapshot(org.apache.thrift.async.AsyncMethodCallback<AsyncClient.getSnapshot_call> resultHandler) throws org.apache.thrift.TException;
 
@@ -357,13 +361,13 @@ public class TTransactionServer {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "canCommitTx failed: unknown result");
     }
 
-    public TBoolean canCommitOrThrow(TTransaction tx, Set<ByteBuffer> changes) throws TTransactionNotInProgressException, TGenericException, org.apache.thrift.TException
+    public void canCommitOrThrow(long tx, Set<ByteBuffer> changes) throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException
     {
       send_canCommitOrThrow(tx, changes);
-      return recv_canCommitOrThrow();
+      recv_canCommitOrThrow();
     }
 
-    public void send_canCommitOrThrow(TTransaction tx, Set<ByteBuffer> changes) throws org.apache.thrift.TException
+    public void send_canCommitOrThrow(long tx, Set<ByteBuffer> changes) throws org.apache.thrift.TException
     {
       canCommitOrThrow_args args = new canCommitOrThrow_args();
       args.setTx(tx);
@@ -371,20 +375,20 @@ public class TTransactionServer {
       sendBase("canCommitOrThrow", args);
     }
 
-    public TBoolean recv_canCommitOrThrow() throws TTransactionNotInProgressException, TGenericException, org.apache.thrift.TException
+    public void recv_canCommitOrThrow() throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException
     {
       canCommitOrThrow_result result = new canCommitOrThrow_result();
       receiveBase(result, "canCommitOrThrow");
-      if (result.isSetSuccess()) {
-        return result.success;
-      }
       if (result.e != null) {
         throw result.e;
       }
+      if (result.c != null) {
+        throw result.c;
+      }
       if (result.g != null) {
         throw result.g;
       }
-      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "canCommitOrThrow failed: unknown result");
+      return;
     }
 
     public TBoolean commitTx(TTransaction tx) throws TTransactionNotInProgressException, org.apache.thrift.TException
@@ -413,6 +417,36 @@ public class TTransactionServer {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "commitTx failed: unknown result");
     }
 
+    public void commitOrThrow(long txId, long wp) throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException
+    {
+      send_commitOrThrow(txId, wp);
+      recv_commitOrThrow();
+    }
+
+    public void send_commitOrThrow(long txId, long wp) throws org.apache.thrift.TException
+    {
+      commitOrThrow_args args = new commitOrThrow_args();
+      args.setTxId(txId);
+      args.setWp(wp);
+      sendBase("commitOrThrow", args);
+    }
+
+    public void recv_commitOrThrow() throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException
+    {
+      commitOrThrow_result result = new commitOrThrow_result();
+      receiveBase(result, "commitOrThrow");
+      if (result.e != null) {
+        throw result.e;
+      }
+      if (result.c != null) {
+        throw result.c;
+      }
+      if (result.g != null) {
+        throw result.g;
+      }
+      return;
+    }
+
     public void abortTx(TTransaction tx) throws org.apache.thrift.TException
     {
       send_abortTx(tx);
@@ -433,16 +467,16 @@ public class TTransactionServer {
       return;
     }
 
-    public boolean invalidateTx(long tx) throws org.apache.thrift.TException
+    public boolean invalidateTx(long txid) throws org.apache.thrift.TException
     {
-      send_invalidateTx(tx);
+      send_invalidateTx(txid);
       return recv_invalidateTx();
     }
 
-    public void send_invalidateTx(long tx) throws org.apache.thrift.TException
+    public void send_invalidateTx(long txid) throws org.apache.thrift.TException
     {
       invalidateTx_args args = new invalidateTx_args();
-      args.setTx(tx);
+      args.setTxid(txid);
       sendBase("invalidateTx", args);
     }
 
@@ -912,7 +946,7 @@ public class TTransactionServer {
       }
     }
 
-    public void canCommitOrThrow(TTransaction tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<canCommitOrThrow_call> resultHandler) throws org.apache.thrift.TException {
+    public void canCommitOrThrow(long tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<canCommitOrThrow_call> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       canCommitOrThrow_call method_call = new canCommitOrThrow_call(tx, changes, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
@@ -920,9 +954,9 @@ public class TTransactionServer {
     }
 
     public static class canCommitOrThrow_call extends org.apache.thrift.async.TAsyncMethodCall {
-      private TTransaction tx;
+      private long tx;
       private Set<ByteBuffer> changes;
-      public canCommitOrThrow_call(TTransaction tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<canCommitOrThrow_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public canCommitOrThrow_call(long tx, Set<ByteBuffer> changes, org.apache.thrift.async.AsyncMethodCallback<canCommitOrThrow_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
         this.tx = tx;
         this.changes = changes;
@@ -937,13 +971,13 @@ public class TTransactionServer {
         prot.writeMessageEnd();
       }
 
-      public TBoolean getResult() throws TTransactionNotInProgressException, TGenericException, org.apache.thrift.TException {
+      public void getResult() throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException {
         if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
           throw new IllegalStateException("Method call not finished!");
         }
         org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
         org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
-        return (new Client(prot)).recv_canCommitOrThrow();
+        (new Client(prot)).recv_canCommitOrThrow();
       }
     }
 
@@ -979,6 +1013,41 @@ public class TTransactionServer {
       }
     }
 
+    public void commitOrThrow(long txId, long wp, org.apache.thrift.async.AsyncMethodCallback<commitOrThrow_call> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      commitOrThrow_call method_call = new commitOrThrow_call(txId, wp, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class commitOrThrow_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private long txId;
+      private long wp;
+      public commitOrThrow_call(long txId, long wp, org.apache.thrift.async.AsyncMethodCallback<commitOrThrow_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.txId = txId;
+        this.wp = wp;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("commitOrThrow", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        commitOrThrow_args args = new commitOrThrow_args();
+        args.setTxId(txId);
+        args.setWp(wp);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public void getResult() throws TTransactionNotInProgressException, TTransactionConflictException, TGenericException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        (new Client(prot)).recv_commitOrThrow();
+      }
+    }
+
     public void abortTx(TTransaction tx, org.apache.thrift.async.AsyncMethodCallback<abortTx_call> resultHandler) throws org.apache.thrift.TException {
       checkReady();
       abortTx_call method_call = new abortTx_call(tx, resultHandler, this, ___protocolFactory, ___transport);
@@ -1011,24 +1080,24 @@ public class TTransactionServer {
       }
     }
 
-    public void invalidateTx(long tx, org.apache.thrift.async.AsyncMethodCallback<invalidateTx_call> resultHandler) throws org.apache.thrift.TException {
+    public void invalidateTx(long txid, org.apache.thrift.async.AsyncMethodCallback<invalidateTx_call> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      invalidateTx_call method_call = new invalidateTx_call(tx, resultHandler, this, ___protocolFactory, ___transport);
+      invalidateTx_call method_call = new invalidateTx_call(txid, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class invalidateTx_call extends org.apache.thrift.async.TAsyncMethodCall {
-      private long tx;
-      public invalidateTx_call(long tx, org.apache.thrift.async.AsyncMethodCallback<invalidateTx_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      private long txid;
+      public invalidateTx_call(long txid, org.apache.thrift.async.AsyncMethodCallback<invalidateTx_call> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
-        this.tx = tx;
+        this.txid = txid;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
         prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("invalidateTx", org.apache.thrift.protocol.TMessageType.CALL, 0));
         invalidateTx_args args = new invalidateTx_args();
-        args.setTx(tx);
+        args.setTxid(txid);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -1307,6 +1376,7 @@ public class TTransactionServer {
       processMap.put("canCommitTx", new canCommitTx());
       processMap.put("canCommitOrThrow", new canCommitOrThrow());
       processMap.put("commitTx", new commitTx());
+      processMap.put("commitOrThrow", new commitOrThrow());
       processMap.put("abortTx", new abortTx());
       processMap.put("invalidateTx", new invalidateTx());
       processMap.put("getSnapshot", new getSnapshot());
@@ -1516,9 +1586,11 @@ public class TTransactionServer {
       public canCommitOrThrow_result getResult(I iface, canCommitOrThrow_args args) throws org.apache.thrift.TException {
         canCommitOrThrow_result result = new canCommitOrThrow_result();
         try {
-          result.success = iface.canCommitOrThrow(args.tx, args.changes);
+          iface.canCommitOrThrow(args.tx, args.changes);
         } catch (TTransactionNotInProgressException e) {
           result.e = e;
+        } catch (TTransactionConflictException c) {
+          result.c = c;
         } catch (TGenericException g) {
           result.g = g;
         }
@@ -1550,6 +1622,34 @@ public class TTransactionServer {
       }
     }
 
+    public static class commitOrThrow<I extends Iface> extends org.apache.thrift.ProcessFunction<I, commitOrThrow_args> {
+      public commitOrThrow() {
+        super("commitOrThrow");
+      }
+
+      public commitOrThrow_args getEmptyArgsInstance() {
+        return new commitOrThrow_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public commitOrThrow_result getResult(I iface, commitOrThrow_args args) throws org.apache.thrift.TException {
+        commitOrThrow_result result = new commitOrThrow_result();
+        try {
+          iface.commitOrThrow(args.txId, args.wp);
+        } catch (TTransactionNotInProgressException e) {
+          result.e = e;
+        } catch (TTransactionConflictException c) {
+          result.c = c;
+        } catch (TGenericException g) {
+          result.g = g;
+        }
+        return result;
+      }
+    }
+
     public static class abortTx<I extends Iface> extends org.apache.thrift.ProcessFunction<I, abortTx_args> {
       public abortTx() {
         super("abortTx");
@@ -1585,7 +1685,7 @@ public class TTransactionServer {
 
       public invalidateTx_result getResult(I iface, invalidateTx_args args) throws org.apache.thrift.TException {
         invalidateTx_result result = new invalidateTx_result();
-        result.success = iface.invalidateTx(args.tx);
+        result.success = iface.invalidateTx(args.txid);
         result.setSuccessIsSet(true);
         return result;
       }
@@ -8020,7 +8120,7 @@ public class TTransactionServer {
   public static class canCommitOrThrow_args implements org.apache.thrift.TBase<canCommitOrThrow_args, canCommitOrThrow_args._Fields>, java.io.Serializable, Cloneable   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("canCommitOrThrow_args");
 
-    private static final org.apache.thrift.protocol.TField TX_FIELD_DESC = new org.apache.thrift.protocol.TField("tx", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField TX_FIELD_DESC = new org.apache.thrift.protocol.TField("tx", org.apache.thrift.protocol.TType.I64, (short)1);
     private static final org.apache.thrift.protocol.TField CHANGES_FIELD_DESC = new org.apache.thrift.protocol.TField("changes", org.apache.thrift.protocol.TType.SET, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
@@ -8029,7 +8129,7 @@ public class TTransactionServer {
       schemes.put(TupleScheme.class, new canCommitOrThrow_argsTupleSchemeFactory());
     }
 
-    public TTransaction tx; // required
+    public long tx; // required
     public Set<ByteBuffer> changes; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
@@ -8094,11 +8194,13 @@ public class TTransactionServer {
     }
 
     // isset id assignments
+    private static final int __TX_ISSET_ID = 0;
+    private byte __isset_bitfield = 0;
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
       tmpMap.put(_Fields.TX, new org.apache.thrift.meta_data.FieldMetaData("tx", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTransaction.class)));
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
       tmpMap.put(_Fields.CHANGES, new org.apache.thrift.meta_data.FieldMetaData("changes", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, 
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING              , true))));
@@ -8110,11 +8212,12 @@ public class TTransactionServer {
     }
 
     public canCommitOrThrow_args(
-      TTransaction tx,
+      long tx,
       Set<ByteBuffer> changes)
     {
       this();
       this.tx = tx;
+      setTxIsSet(true);
       this.changes = changes;
     }
 
@@ -8122,9 +8225,8 @@ public class TTransactionServer {
      * Performs a deep copy on <i>other</i>.
      */
     public canCommitOrThrow_args(canCommitOrThrow_args other) {
-      if (other.isSetTx()) {
-        this.tx = new TTransaction(other.tx);
-      }
+      __isset_bitfield = other.__isset_bitfield;
+      this.tx = other.tx;
       if (other.isSetChanges()) {
         Set<ByteBuffer> __this__changes = new HashSet<ByteBuffer>();
         for (ByteBuffer other_element : other.changes) {
@@ -8142,32 +8244,32 @@ public class TTransactionServer {
 
     @Override
     public void clear() {
-      this.tx = null;
+      setTxIsSet(false);
+      this.tx = 0;
       this.changes = null;
     }
 
-    public TTransaction getTx() {
+    public long getTx() {
       return this.tx;
     }
 
-    public canCommitOrThrow_args setTx(TTransaction tx) {
+    public canCommitOrThrow_args setTx(long tx) {
       this.tx = tx;
+      setTxIsSet(true);
       return this;
     }
 
     public void unsetTx() {
-      this.tx = null;
+      __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __TX_ISSET_ID);
     }
 
     /** Returns true if field tx is set (has been assigned a value) and false otherwise */
     public boolean isSetTx() {
-      return this.tx != null;
+      return EncodingUtils.testBit(__isset_bitfield, __TX_ISSET_ID);
     }
 
     public void setTxIsSet(boolean value) {
-      if (!value) {
-        this.tx = null;
-      }
+      __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TX_ISSET_ID, value);
     }
 
     public int getChangesSize() {
@@ -8215,7 +8317,7 @@ public class TTransactionServer {
         if (value == null) {
           unsetTx();
         } else {
-          setTx((TTransaction)value);
+          setTx((Long)value);
         }
         break;
 
@@ -8233,7 +8335,7 @@ public class TTransactionServer {
     public Object getFieldValue(_Fields field) {
       switch (field) {
       case TX:
-        return getTx();
+        return Long.valueOf(getTx());
 
       case CHANGES:
         return getChanges();
@@ -8270,12 +8372,12 @@ public class TTransactionServer {
       if (that == null)
         return false;
 
-      boolean this_present_tx = true && this.isSetTx();
-      boolean that_present_tx = true && that.isSetTx();
+      boolean this_present_tx = true;
+      boolean that_present_tx = true;
       if (this_present_tx || that_present_tx) {
         if (!(this_present_tx && that_present_tx))
           return false;
-        if (!this.tx.equals(that.tx))
+        if (this.tx != that.tx)
           return false;
       }
 
@@ -8345,11 +8447,7 @@ public class TTransactionServer {
       boolean first = true;
 
       sb.append("tx:");
-      if (this.tx == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.tx);
-      }
+      sb.append(this.tx);
       first = false;
       if (!first) sb.append(", ");
       sb.append("changes:");
@@ -8366,9 +8464,6 @@ public class TTransactionServer {
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
       // check for sub-struct validity
-      if (tx != null) {
-        tx.validate();
-      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -8381,6 +8476,8 @@ public class TTransactionServer {
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, 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);
@@ -8406,9 +8503,8 @@ public class TTransactionServer {
           }
           switch (schemeField.id) {
             case 1: // TX
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.tx = new TTransaction();
-                struct.tx.read(iprot);
+              if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                struct.tx = iprot.readI64();
                 struct.setTxIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -8447,11 +8543,9 @@ public class TTransactionServer {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.tx != null) {
-          oprot.writeFieldBegin(TX_FIELD_DESC);
-          struct.tx.write(oprot);
-          oprot.writeFieldEnd();
-        }
+        oprot.writeFieldBegin(TX_FIELD_DESC);
+        oprot.writeI64(struct.tx);
+        oprot.writeFieldEnd();
         if (struct.changes != null) {
           oprot.writeFieldBegin(CHANGES_FIELD_DESC);
           {
@@ -8490,7 +8584,7 @@ public class TTransactionServer {
         }
         oprot.writeBitSet(optionals, 2);
         if (struct.isSetTx()) {
-          struct.tx.write(oprot);
+          oprot.writeI64(struct.tx);
         }
         if (struct.isSetChanges()) {
           {
@@ -8508,8 +8602,7 @@ public class TTransactionServer {
         TTupleProtocol iprot = (TTupleProtocol) prot;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
-          struct.tx = new TTransaction();
-          struct.tx.read(iprot);
+          struct.tx = iprot.readI64();
           struct.setTxIsSet(true);
         }
         if (incoming.get(1)) {
@@ -8533,9 +8626,9 @@ public class TTransactionServer {
   public static class canCommitOrThrow_result implements org.apache.thrift.TBase<canCommitOrThrow_result, canCommitOrThrow_result._Fields>, java.io.Serializable, Cloneable   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("canCommitOrThrow_result");
 
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRUCT, (short)0);
     private static final org.apache.thrift.protocol.TField E_FIELD_DESC = new org.apache.thrift.protocol.TField("e", org.apache.thrift.protocol.TType.STRUCT, (short)1);
-    private static final org.apache.thrift.protocol.TField G_FIELD_DESC = new org.apache.thrift.protocol.TField("g", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField C_FIELD_DESC = new org.apache.thrift.protocol.TField("c", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField G_FIELD_DESC = new org.apache.thrift.protocol.TField("g", org.apache.thrift.protocol.TType.STRUCT, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -8543,15 +8636,15 @@ public class TTransactionServer {
       schemes.put(TupleScheme.class, new canCommitOrThrow_resultTupleSchemeFactory());
     }
 
-    public TBoolean success; // required
     public TTransactionNotInProgressException e; // required
+    public TTransactionConflictException c; // required
     public TGenericException g; // 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 {
-      SUCCESS((short)0, "success"),
       E((short)1, "e"),
-      G((short)2, "g");
+      C((short)2, "c"),
+      G((short)3, "g");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -8566,11 +8659,11 @@ public class TTransactionServer {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 0: // SUCCESS
-            return SUCCESS;
           case 1: // E
             return E;
-          case 2: // G
+          case 2: // C
+            return C;
+          case 3: // G
             return G;
           default:
             return null;
@@ -8615,10 +8708,10 @@ public class TTransactionServer {
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TBoolean.class)));
       tmpMap.put(_Fields.E, new org.apache.thrift.meta_data.FieldMetaData("e", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
+      tmpMap.put(_Fields.C, new org.apache.thrift.meta_data.FieldMetaData("c", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
       tmpMap.put(_Fields.G, new org.apache.thrift.meta_data.FieldMetaData("g", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
@@ -8629,13 +8722,13 @@ public class TTransactionServer {
     }
 
     public canCommitOrThrow_result(
-      TBoolean success,
       TTransactionNotInProgressException e,
+      TTransactionConflictException c,
       TGenericException g)
     {
       this();
-      this.success = success;
       this.e = e;
+      this.c = c;
       this.g = g;
     }
 
@@ -8643,12 +8736,12 @@ public class TTransactionServer {
      * Performs a deep copy on <i>other</i>.
      */
     public canCommitOrThrow_result(canCommitOrThrow_result other) {
-      if (other.isSetSuccess()) {
-        this.success = new TBoolean(other.success);
-      }
       if (other.isSetE()) {
         this.e = new TTransactionNotInProgressException(other.e);
       }
+      if (other.isSetC()) {
+        this.c = new TTransactionConflictException(other.c);
+      }
       if (other.isSetG()) {
         this.g = new TGenericException(other.g);
       }
@@ -8660,56 +8753,56 @@ public class TTransactionServer {
 
     @Override
     public void clear() {
-      this.success = null;
       this.e = null;
+      this.c = null;
       this.g = null;
     }
 
-    public TBoolean getSuccess() {
-      return this.success;
+    public TTransactionNotInProgressException getE() {
+      return this.e;
     }
 
-    public canCommitOrThrow_result setSuccess(TBoolean success) {
-      this.success = success;
+    public canCommitOrThrow_result setE(TTransactionNotInProgressException e) {
+      this.e = e;
       return this;
     }
 
-    public void unsetSuccess() {
-      this.success = null;
+    public void unsetE() {
+      this.e = null;
     }
 
-    /** Returns true if field success is set (has been assigned a value) and false otherwise */
-    public boolean isSetSuccess() {
-      return this.success != null;
+    /** Returns true if field e is set (has been assigned a value) and false otherwise */
+    public boolean isSetE() {
+      return this.e != null;
     }
 
-    public void setSuccessIsSet(boolean value) {
+    public void setEIsSet(boolean value) {
       if (!value) {
-        this.success = null;
+        this.e = null;
       }
     }
 
-    public TTransactionNotInProgressException getE() {
-      return this.e;
+    public TTransactionConflictException getC() {
+      return this.c;
     }
 
-    public canCommitOrThrow_result setE(TTransactionNotInProgressException e) {
-      this.e = e;
+    public canCommitOrThrow_result setC(TTransactionConflictException c) {
+      this.c = c;
       return this;
     }
 
-    public void unsetE() {
-      this.e = null;
+    public void unsetC() {
+      this.c = null;
     }
 
-    /** Returns true if field e is set (has been assigned a value) and false otherwise */
-    public boolean isSetE() {
-      return this.e != null;
+    /** Returns true if field c is set (has been assigned a value) and false otherwise */
+    public boolean isSetC() {
+      return this.c != null;
     }
 
-    public void setEIsSet(boolean value) {
+    public void setCIsSet(boolean value) {
       if (!value) {
-        this.e = null;
+        this.c = null;
       }
     }
 
@@ -8739,19 +8832,19 @@ public class TTransactionServer {
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
-      case SUCCESS:
+      case E:
         if (value == null) {
-          unsetSuccess();
+          unsetE();
         } else {
-          setSuccess((TBoolean)value);
+          setE((TTransactionNotInProgressException)value);
         }
         break;
 
-      case E:
+      case C:
         if (value == null) {
-          unsetE();
+          unsetC();
         } else {
-          setE((TTransactionNotInProgressException)value);
+          setC((TTransactionConflictException)value);
         }
         break;
 
@@ -8768,12 +8861,12 @@ public class TTransactionServer {
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
-      case SUCCESS:
-        return getSuccess();
-
       case E:
         return getE();
 
+      case C:
+        return getC();
+
       case G:
         return getG();
 
@@ -8788,10 +8881,10 @@ public class TTransactionServer {
       }
 
       switch (field) {
-      case SUCCESS:
-        return isSetSuccess();
       case E:
         return isSetE();
+      case C:
+        return isSetC();
       case G:
         return isSetG();
       }
@@ -8811,15 +8904,6 @@ public class TTransactionServer {
       if (that == null)
         return false;
 
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
-      if (this_present_success || that_present_success) {
-        if (!(this_present_success && that_present_success))
-          return false;
-        if (!this.success.equals(that.success))
-          return false;
-      }
-
       boolean this_present_e = true && this.isSetE();
       boolean that_present_e = true && that.isSetE();
       if (this_present_e || that_present_e) {
@@ -8829,6 +8913,15 @@ public class TTransactionServer {
           return false;
       }
 
+      boolean this_present_c = true && this.isSetC();
+      boolean that_present_c = true && that.isSetC();
+      if (this_present_c || that_present_c) {
+        if (!(this_present_c && that_present_c))
+          return false;
+        if (!this.c.equals(that.c))
+          return false;
+      }
+
       boolean this_present_g = true && this.isSetG();
       boolean that_present_g = true && that.isSetG();
       if (this_present_g || that_present_g) {
@@ -8854,22 +8947,22 @@ public class TTransactionServer {
       int lastComparison = 0;
       canCommitOrThrow_result typedOther = (canCommitOrThrow_result)other;
 
-      lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(typedOther.isSetSuccess());
+      lastComparison = Boolean.valueOf(isSetE()).compareTo(typedOther.isSetE());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetSuccess()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, typedOther.success);
+      if (isSetE()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.e, typedOther.e);
         if (lastComparison != 0) {
           return lastComparison;
         }
       }
-      lastComparison = Boolean.valueOf(isSetE()).compareTo(typedOther.isSetE());
+      lastComparison = Boolean.valueOf(isSetC()).compareTo(typedOther.isSetC());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetE()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.e, typedOther.e);
+      if (isSetC()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.c, typedOther.c);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -8904,19 +8997,19 @@ public class TTransactionServer {
       StringBuilder sb = new StringBuilder("canCommitOrThrow_result(");
       boolean first = true;
 
-      sb.append("success:");
-      if (this.success == null) {
+      sb.append("e:");
+      if (this.e == null) {
         sb.append("null");
       } else {
-        sb.append(this.success);
+        sb.append(this.e);
       }
       first = false;
       if (!first) sb.append(", ");
-      sb.append("e:");
-      if (this.e == null) {
+      sb.append("c:");
+      if (this.c == null) {
         sb.append("null");
       } else {
-        sb.append(this.e);
+        sb.append(this.c);
       }
       first = false;
       if (!first) sb.append(", ");
@@ -8934,9 +9027,6 @@ public class TTransactionServer {
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
       // check for sub-struct validity
-      if (success != null) {
-        success.validate();
-      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -8973,25 +9063,25 @@ public class TTransactionServer {
             break;
           }
           switch (schemeField.id) {
-            case 0: // SUCCESS
+            case 1: // E
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.success = new TBoolean();
-                struct.success.read(iprot);
-                struct.setSuccessIsSet(true);
+                struct.e = new TTransactionNotInProgressException();
+                struct.e.read(iprot);
+                struct.setEIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 1: // E
+            case 2: // C
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.e = new TTransactionNotInProgressException();
-                struct.e.read(iprot);
-                struct.setEIsSet(true);
+                struct.c = new TTransactionConflictException();
+                struct.c.read(iprot);
+                struct.setCIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 2: // G
+            case 3: // G
               if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
                 struct.g = new TGenericException();
                 struct.g.read(iprot);
@@ -9015,16 +9105,16 @@ public class TTransactionServer {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.success != null) {
-          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          struct.success.write(oprot);
-          oprot.writeFieldEnd();
-        }
         if (struct.e != null) {
           oprot.writeFieldBegin(E_FIELD_DESC);
           struct.e.write(oprot);
           oprot.writeFieldEnd();
         }
+        if (struct.c != null) {
+          oprot.writeFieldBegin(C_FIELD_DESC);
+          struct.c.write(oprot);
+          oprot.writeFieldEnd();
+        }
         if (struct.g != null) {
           oprot.writeFieldBegin(G_FIELD_DESC);
           struct.g.write(oprot);
@@ -9048,22 +9138,22 @@ public class TTransactionServer {
       public void write(org.apache.thrift.protocol.TProtocol prot, canCommitOrThrow_result struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
         BitSet optionals = new BitSet();
-        if (struct.isSetSuccess()) {
+        if (struct.isSetE()) {
           optionals.set(0);
         }
-        if (struct.isSetE()) {
+        if (struct.isSetC()) {
           optionals.set(1);
         }
         if (struct.isSetG()) {
           optionals.set(2);
         }
         oprot.writeBitSet(optionals, 3);
-        if (struct.isSetSuccess()) {
-          struct.success.write(oprot);
-        }
         if (struct.isSetE()) {
           struct.e.write(oprot);
         }
+        if (struct.isSetC()) {
+          struct.c.write(oprot);
+        }
         if (struct.isSetG()) {
           struct.g.write(oprot);
         }
@@ -9074,15 +9164,15 @@ public class TTransactionServer {
         TTupleProtocol iprot = (TTupleProtocol) prot;
         BitSet incoming = iprot.readBitSet(3);
         if (incoming.get(0)) {
-          struct.success = new TBoolean();
-          struct.success.read(iprot);
-          struct.setSuccessIsSet(true);
-        }
-        if (incoming.get(1)) {
           struct.e = new TTransactionNotInProgressException();
           struct.e.read(iprot);
           struct.setEIsSet(true);
         }
+        if (incoming.get(1)) {
+          struct.c = new TTransactionConflictException();
+          struct.c.read(iprot);
+          struct.setCIsSet(true);
+        }
         if (incoming.get(2)) {
           struct.g = new TGenericException();
           struct.g.read(iprot);
@@ -9913,22 +10003,25 @@ public class TTransactionServer {
 
   }
 
-  public static class abortTx_args implements org.apache.thrift.TBase<abortTx_args, abortTx_args._Fields>, java.io.Serializable, Cloneable   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("abortTx_args");
+  public static class commitOrThrow_args implements org.apache.thrift.TBase<commitOrThrow_args, commitOrThrow_args._Fields>, java.io.Serializable, Cloneable   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("commitOrThrow_args");
 
-    private static final org.apache.thrift.protocol.TField TX_FIELD_DESC = new org.apache.thrift.protocol.TField("tx", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField TX_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("txId", org.apache.thrift.protocol.TType.I64, (short)1);
+    private static final org.apache.thrift.protocol.TField WP_FIELD_DESC = new org.apache.thrift.protocol.TField("wp", org.apache.thrift.protocol.TType.I64, (short)2);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
-      schemes.put(StandardScheme.class, new abortTx_argsStandardSchemeFactory());
-      schemes.put(TupleScheme.class, new abortTx_argsTupleSchemeFactory());
+      schemes.put(StandardScheme.class, new commitOrThrow_argsStandardSchemeFactory());
+      schemes.put(TupleScheme.class, new commitOrThrow_argsTupleSchemeFactory());
     }
 
-    public TTransaction tx; // required
+    public long txId; // required
+    public long wp; // 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 {
-      TX((short)1, "tx");
+      TX_ID((short)1, "txId"),
+      WP((short)2, "wp");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -9943,8 +10036,10 @@ public class TTransactionServer {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // TX
-            return TX;
+          case 1: // TX_ID
+            return TX_ID;
+          case 2: // WP
+            return WP;
           default:
             return null;
         }
@@ -9985,74 +10080,116 @@ public class TTransactionServer {
     }
 
     // isset id assignments
+    private static final int __TXID_ISSET_ID = 0;
+    private static final int __WP_ISSET_ID = 1;
+    private byte __isset_bitfield = 0;
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.TX, new org.apache.thrift.meta_data.FieldMetaData("tx", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTransaction.class)));
+      tmpMap.put(_Fields.TX_ID, new org.apache.thrift.meta_data.FieldMetaData("txId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+      tmpMap.put(_Fields.WP, new org.apache.thrift.meta_data.FieldMetaData("wp", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(abortTx_args.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(commitOrThrow_args.class, metaDataMap);
     }
 
-    public abortTx_args() {
+    public commitOrThrow_args() {
     }
 
-    public abortTx_args(
-      TTransaction tx)
+    public commitOrThrow_args(
+      long txId,
+      long wp)
     {
       this();
-      this.tx = tx;
+      this.txId = txId;
+      setTxIdIsSet(true);
+      this.wp = wp;
+      setWpIsSet(true);
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public abortTx_args(abortTx_args other) {
-      if (other.isSetTx()) {
-        this.tx = new TTransaction(other.tx);
-      }
+    public commitOrThrow_args(commitOrThrow_args other) {
+      __isset_bitfield = other.__isset_bitfield;
+      this.txId = other.txId;
+      this.wp = other.wp;
     }
 
-    public abortTx_args deepCopy() {
-      return new abortTx_args(this);
+    public commitOrThrow_args deepCopy() {
+      return new commitOrThrow_args(this);
     }
 
     @Override
     public void clear() {
-      this.tx = null;
+      setTxIdIsSet(false);
+      this.txId = 0;
+      setWpIsSet(false);
+      this.wp = 0;
     }
 
-    public TTransaction getTx() {
-      return this.tx;
+    public long getTxId() {
+      return this.txId;
     }
 
-    public abortTx_args setTx(TTransaction tx) {
-      this.tx = tx;
+    public commitOrThrow_args setTxId(long txId) {
+      this.txId = txId;
+      setTxIdIsSet(true);
       return this;
     }
 
-    public void unsetTx() {
-      this.tx = null;
+    public void unsetTxId() {
+      __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __TXID_ISSET_ID);
     }
 
-    /** Returns true if field tx is set (has been assigned a value) and false otherwise */
-    public boolean isSetTx() {
-      return this.tx != null;
+    /** Returns true if field txId is set (has been assigned a value) and false otherwise */
+    public boolean isSetTxId() {
+      return EncodingUtils.testBit(__isset_bitfield, __TXID_ISSET_ID);
     }
 
-    public void setTxIsSet(boolean value) {
-      if (!value) {
-        this.tx = null;
-      }
+    public void setTxIdIsSet(boolean value) {
+      __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TXID_ISSET_ID, value);
+    }
+
+    public long getWp() {
+      return this.wp;
+    }
+
+    public commitOrThrow_args setWp(long wp) {
+      this.wp = wp;
+      setWpIsSet(true);
+      return this;
+    }
+
+    public void unsetWp() {
+      __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __WP_ISSET_ID);
+    }
+
+    /** Returns true if field wp is set (has been assigned a value) and false otherwise */
+    public boolean isSetWp() {
+      return EncodingUtils.testBit(__isset_bitfield, __WP_ISSET_ID);
+    }
+
+    public void setWpIsSet(boolean value) {
+      __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __WP_ISSET_ID, value);
     }
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
-      case TX:
+      case TX_ID:
         if (value == null) {
-          unsetTx();
+          unsetTxId();
         } else {
-          setTx((TTransaction)value);
+          setTxId((Long)value);
+        }
+        break;
+
+      case WP:
+        if (value == null) {
+          unsetWp();
+        } else {
+          setWp((Long)value);
         }
         break;
 
@@ -10061,8 +10198,11 @@ public class TTransactionServer {
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
-      case TX:
-        return getTx();
+      case TX_ID:
+        return Long.valueOf(getTxId());
+
+      case WP:
+        return Long.valueOf(getWp());
 
       }
       throw new IllegalStateException();
@@ -10075,8 +10215,10 @@ public class TTransactionServer {
       }
 
       switch (field) {
-      case TX:
-        return isSetTx();
+      case TX_ID:
+        return isSetTxId();
+      case WP:
+        return isSetWp();
       }
       throw new IllegalStateException();
     }
@@ -10085,21 +10227,30 @@ public class TTransactionServer {
     public boolean equals(Object that) {
       if (that == null)
         return false;
-      if (that instanceof abortTx_args)
-        return this.equals((abortTx_args)that);
+      if (that instanceof commitOrThrow_args)
+        return this.equals((commitOrThrow_args)that);
       return false;
     }
 
-    public boolean equals(abortTx_args that) {
+    public boolean equals(commitOrThrow_args that) {
       if (that == null)
         return false;
 
-      boolean this_present_tx = true && this.isSetTx();
-      boolean that_present_tx = true && that.isSetTx();
-      if (this_present_tx || that_present_tx) {
-        if (!(this_present_tx && that_present_tx))
+      boolean this_present_txId = true;
+      boolean that_present_txId = true;
+      if (this_present_txId || that_present_txId) {
+        if (!(this_present_txId && that_present_txId))
           return false;
-        if (!this.tx.equals(that.tx))
+        if (this.txId != that.txId)
+          return false;
+      }
+
+      boolean this_present_wp = true;
+      boolean that_present_wp = true;
+      if (this_present_wp || that_present_wp) {
+        if (!(this_present_wp && that_present_wp))
+          return false;
+        if (this.wp != that.wp)
           return false;
       }
 
@@ -10111,20 +10262,30 @@ public class TTransactionServer {
       return 0;
     }
 
-    public int compareTo(abortTx_args other) {
+    public int compareTo(commitOrThrow_args other) {
       if (!getClass().equals(other.getClass())) {
         return getClass().getName().compareTo(other.getClass().getName());
       }
 
       int lastComparison = 0;
-      abortTx_args typedOther = (abortTx_args)other;
+      commitOrThrow_args typedOther = (commitOrThrow_args)other;
 
-      lastComparison = Boolean.valueOf(isSetTx()).compareTo(typedOther.isSetTx());
+      lastComparison = Boolean.valueOf(isSetTxId()).compareTo(typedOther.isSetTxId());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetTx()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tx, typedOther.tx);
+      if (isSetTxId()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.txId, typedOther.txId);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = Boolean.valueOf(isSetWp()).compareTo(typedOther.isSetWp());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetWp()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.wp, typedOther.wp);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -10146,15 +10307,15 @@ public class TTransactionServer {
 
     @Override
     public String toString() {
-      StringBuilder sb = new StringBuilder("abortTx_args(");
+      StringBuilder sb = new StringBuilder("commitOrThrow_args(");
       boolean first = true;
 
-      sb.append("tx:");
-      if (this.tx == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.tx);
-      }
+      sb.append("txId:");
+      sb.append(this.txId);
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("wp:");
+      sb.append(this.wp);
       first = false;
       sb.append(")");
       return sb.toString();
@@ -10163,9 +10324,6 @@ public class TTransactionServer {
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
       // check for sub-struct validity
-      if (tx != null) {
-        tx.validate();
-      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -10178,21 +10336,23 @@ public class TTransactionServer {
 
     private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, 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);
       }
     }
 
-    private static class abortTx_argsStandardSchemeFactory implements SchemeFactory {
-      public abortTx_argsStandardScheme getScheme() {
-        return new abortTx_argsStandardScheme();
+    private static class commitOrThrow_argsStandardSchemeFactory implements SchemeFactory {
+      public commitOrThrow_argsStandardScheme getScheme() {
+        return new commitOrThrow_argsStandardScheme();
       }
     }
 
-    private static class abortTx_argsStandardScheme extends StandardScheme<abortTx_args> {
+    private static class commitOrThrow_argsStandardScheme extends StandardScheme<commitOrThrow_args> {
 
-      public void read(org.apache.thrift.protocol.TProtocol iprot, abortTx_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol iprot, commitOrThrow_args struct) throws org.apache.thrift.TException {
         org.apache.thrift.protocol.TField schemeField;
         iprot.readStructBegin();
         while (true)
@@ -10202,11 +10362,18 @@ public class TTransactionServer {
             break;
           }
           switch (schemeField.id) {
-            case 1: // TX
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
-                struct.tx = new TTransaction();
-                struct.tx.read(iprot);
-                struct.setTxIsSet(true);
+            case 1: // TX_ID
+              if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                struct.txId = iprot.readI64();
+                struct.setTxIdIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // WP
+              if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+                struct.wp = iprot.readI64();
+                struct.setWpIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
@@ -10222,70 +10389,88 @@ public class TTransactionServer {
         struct.validate();
       }
 
-      public void write(org.apache.thrift.protocol.TProtocol oprot, abortTx_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol oprot, commitOrThrow_args struct) throws org.apache.thrift.TException {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.tx != null) {
-          oprot.writeFieldBegin(TX_FIELD_DESC);
-          struct.tx.write(oprot);
-          oprot.writeFieldEnd();
-        }
+        oprot.writeFieldBegin(TX_ID_FIELD_DESC);
+        oprot.writeI64(struct.txId);
+        oprot.writeFieldEnd();
+        oprot.writeFieldBegin(WP_FIELD_DESC);
+        oprot.writeI64(struct.wp);
+        oprot.writeFieldEnd();
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
 
     }
 
-    private static class abortTx_argsTupleSchemeFactory implements SchemeFactory {
-      public abortTx_argsTupleScheme getScheme() {
-        return new abortTx_argsTupleScheme();
+    private static class commitOrThrow_argsTupleSchemeFactory implements SchemeFactory {
+      public commitOrThrow_argsTupleScheme getScheme() {
+        return new commitOrThrow_argsTupleScheme();
       }
     }
 
-    private static class abortTx_argsTupleScheme extends TupleScheme<abortTx_args> {
+    private static class commitOrThrow_argsTupleScheme extends TupleScheme<commitOrThrow_args> {
 
       @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, abortTx_args struct) throws org.apache.thrift.TException {
+      public void write(org.apache.thrift.protocol.TProtocol prot, commitOrThrow_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
         BitSet optionals = new BitSet();
-        if (struct.isSetTx()) {
+        if (struct.isSetTxId()) {
           optionals.set(0);
         }
-        oprot.writeBitSet(optionals, 1);
-        if (struct.isSetTx()) {
-          struct.tx.write(oprot);
+        if (struct.isSetWp()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetTxId()) {
+          oprot.writeI64(struct.txId);
+        }
+        if (struct.isSetWp()) {
+          oprot.writeI64(struct.wp);
         }
       }
 
       @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, abortTx_args struct) throws org.apache.thrift.TException {
+      public void read(org.apache.thrift.protocol.TProtocol prot, commitOrThrow_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
-        BitSet incoming = iprot.readBitSet(1);
+        BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
-          struct.tx = new TTransaction();
-          struct.tx.read(iprot);
-          struct.setTxIsSet(true);
+          struct.txId = iprot.readI64();
+          struct.setTxIdIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.wp = iprot.readI64();
+          struct.setWpIsSet(true);
         }
       }
     }
 
   }
 
-  public static class abortTx_result implements org.apache.thrift.TBase<abortTx_result, abortTx_result._Fields>, java.io.Serializable, Cloneable   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("abortTx_result");
+  public static class commitOrThrow_result implements org.apache.thrift.TBase<commitOrThrow_result, commitOrThrow_result._Fields>, java.io.Serializable, Cloneable   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("commitOrThrow_result");
 
+    private static final org.apache.thrift.protocol.TField E_FIELD_DESC = new org.apache.thrift.protocol.TField("e", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField C_FIELD_DESC = new org.apache.thrift.protocol.TField("c", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+    private static final org.apache.thrift.protocol.TField G_FIELD_DESC = new org.apache.thrift.protocol.TField("g", org.apache.thrift.protocol.TType.STRUCT, (short)3);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
-      schemes.put(StandardScheme.class, new abortTx_resultStandardSchemeFactory());
-      schemes.put(TupleScheme.class, new abortTx_resultTupleSchemeFactory());
+      schemes.put(StandardScheme.class, new commitOrThrow_resultStandardSchemeFactory());
+      schemes.put(TupleScheme.class, new commitOrThrow_resultTupleSchemeFactory());
     }
 
+    public TTransactionNotInProgressException e; // required
+    public TTransactionConflictException c; // required
+    public TGenericException g; // 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 {
-;
+      E((short)1, "e"),
+      C((short)2, "c"),
+      G((short)3, "g");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -10300,6 +10485,12 @@ public class TTransactionServer {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
+          case 1: // E
+            return E;
+          case 2: // C
+            return C;
+          case 3: // G
+            return G;
           default:
             return null;
         }
@@ -10338,86 +10529,991 @@ public class TTransactionServer {
         return _fieldName;
       }
     }
+
+    // isset id assignments
     public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.E, new org.apache.thrift.meta_data.FieldMetaData("e", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
+      tmpMap.put(_Fields.C, new org.apache.thrift.meta_data.FieldMetaData("c", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
+      tmpMap.put(_Fields.G, new org.apache.thrift.meta_data.FieldMetaData("g", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(abortTx_result.class, metaDataMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(commitOrThrow_result.class, metaDataMap);
     }
 
-    public abortTx_result() {
+    public commitOrThrow_result() {
+    }
+
+    public commitOrThrow_result(
+      TTransactionNotInProgressException e,
+      TTransactionConflictException c,
+      TGenericException g)
+    {
+      this();
+      this.e = e;
+      this.c = c;
+      this.g = g;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public abortTx_result(abortTx_result other) {
+    public commitOrThrow_result(commitOrThrow_result other) {
+      if (other.isSetE()) {
+        this.e = new TTransactionNotInProgressException(other.e);
+      }
+      if (other.isSetC()) {
+        this.c = new TTransactionConflictException(other.c);
+      }
+      if (other.isSetG()) {
+        this.g = new TGenericException(other.g);
+      }
     }
 
-    public abortTx_result deepCopy() {
-      return new abortTx_result(this);
+    public commitOrThrow_result deepCopy() {
+      return new commitOrThrow_result(this);
     }
 
     @Override
     public void clear() {
+      this.e = null;
+      this.c = null;
+      this.g = null;
     }
 
-    public void setFieldValue(_Fields field, Object value) {
-      switch (field) {
-      }
+    public TTransactionNotInProgressException getE() {
+      return this.e;
     }
 
-    public Object getFieldValue(_Fields field) {
-      switch (field) {
-      }
-      throw new IllegalStateException();
+    public commitOrThrow_result setE(TTransactionNotInProgressException e) {
+      this.e = e;
+      return this;
     }
 
-    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
-    public boolean isSet(_Fields field) {
-      if (field == null) {
-        throw new IllegalArgumentException();
-      }
+    public void unsetE() {
+      this.e = null;
+    }
 
-      switch (field) {
+    /** Returns true if field e is set (has been assigned a value) and false otherwise */
+    public boolean isSetE() {
+      return this.e != null;
+    }
+
+    public void setEIsSet(boolean value) {
+      if (!value) {
+        this.e = null;
       }
-      throw new IllegalStateException();
     }
 
-    @Override
-    public boolean equals(Object that) {
-      if (that == null)
-        return false;
-      if (that instanceof abortTx_result)
-        return this.equals((abortTx_result)that);
-      return false;
+    public TTransactionConflictException getC() {
+      return this.c;
     }
 
-    public boolean equals(abortTx_result that) {
-      if (that == null)
-        return false;
+    public commitOrThrow_result setC(TTransactionConflictException c) {
+      this.c = c;
+      return this;
+    }
 
-      return true;
+    public void unsetC() {
+      this.c = null;
     }
 
-    @Override
-    public int hashCode() {
-      return 0;
+    /** Returns true if field c is set (has been assigned a value) and false otherwise */
+    public boolean isSetC() {
+      return this.c != null;
     }
 
-    public int compareTo(abortTx_result other) {
-      if (!getClass().equals(other.getClass())) {
-        return getClass().getName().compareTo(other.getClass().getName());
+    public void setCIsSet(boolean value) {
+      if (!value) {
+        this.c = null;
       }
-
-      int lastComparison = 0;
-      abortTx_result typedOther = (abortTx_result)other;
-
-      return 0;
     }
 
-    public _Fields fieldForId(int fieldId) {
-      return _Fields.findByThriftId(fieldId);
+    public TGenericException getG() {
+      return this.g;
+    }
+
+    public commitOrThrow_result setG(TGenericException g) {
+      this.g = g;
+      return this;
+    }
+
+    public void unsetG() {
+      this.g = null;
+    }
+
+    /** Returns true if field g is set (has been assigned a value) and false otherwise */
+    public boolean isSetG() {
+      return this.g != null;
+    }
+
+    public void setGIsSet(boolean value) {
+      if (!value) {
+        this.g = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, Object value) {
+      switch (field) {
+      case E:
+        if (value == null) {
+          unsetE();
+        } else {
+          setE((TTransactionNotInProgressException)value);
+        }
+        break;
+
+      case C:
+        if (value == null) {
+          unsetC();
+        } else {
+          setC((TTransactionConflictException)value);
+        }
+        break;
+
+      case G:
+        if (value == null) {
+          unsetG();
+        } else {
+          setG((TGenericException)value);
+        }
+        break;
+
+      }
+    }
+
+    public Object getFieldValue(_Fields field) {
+      switch (field) {
+      case E:
+        return getE();
+
+      case C:
+        return getC();
+
+      case G:
+        return getG();
+
+      }
+      throw new IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new IllegalArgumentException();
+      }
+
+      switch (field) {
+      case E:
+        return isSetE();
+      case C:
+        return isSetC();
+      case G:
+        return isSetG();
+      }
+      throw new IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof commitOrThrow_result)
+        return this.equals((commitOrThrow_result)that);
+      return false;
+    }
+
+    public boolean equals(commitOrThrow_result that) {
+      if (that == null)
+        return false;
+
+      boolean this_present_e = true && this.isSetE();
+      boolean that_present_e = true && that.isSetE();
+      if (this_present_e || that_present_e) {
+        if (!(this_present_e && that_present_e))
+          return false;
+        if (!this.e.equals(that.e))
+          return false;
+      }
+
+      boolean this_present_c = true && this.isSetC();
+      boolean that_present_c = true && that.isSetC();
+      if (this_present_c || that_present_c) {
+        if (!(this_present_c && that_present_c))
+          return false;
+        if (!this.c.equals(that.c))
+          return false;
+      }
+
+      boolean this_present_g = true && this.isSetG();
+      boolean that_present_g = true && that.isSetG();
+      if (this_present_g || that_present_g) {
+        if (!(this_present_g && that_present_g))
+          return false;
+        if (!this.g.equals(that.g))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return 0;
+    }
+
+    public int compareTo(commitOrThrow_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+      commitOrThrow_result typedOther = (commitOrThrow_result)other;
+
+      lastComparison = Boolean.valueOf(isSetE()).compareTo(typedOther.isSetE());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetE()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.e, typedOther.e);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = Boolean.valueOf(isSetC()).compareTo(typedOther.isSetC());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetC()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.c, typedOther.c);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = Boolean.valueOf(isSetG()).compareTo(typedOther.isSetG());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetG()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.g, typedOther.g);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+      }
+
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder("commitOrThrow_result(");
+      boolean first = true;
+
+      sb.append("e:");
+      if (this.e == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.e);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("c:");
+      if (this.c == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.c);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("g:");
+      if (this.g == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.g);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+      try {
+        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);
+      }
+    }
+
+    private static class commitOrThrow_resultStandardSchemeFactory implements SchemeFactory {
+      public commitOrThrow_resultStandardScheme getScheme() {
+        return new commitOrThrow_resultStandardScheme();
+      }
+    }
+
+    private static class commitOrThrow_resultStandardScheme extends StandardScheme<commitOrThrow_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, commitOrThrow_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // E
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.e = new TTransactionNotInProgressException();
+                struct.e.read(iprot);
+                struct.setEIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // C
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.c = new TTransactionConflictException();
+                struct.c.read(iprot);
+                struct.setCIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 3: // G
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.g = new TGenericException();
+                struct.g.read(iprot);
+                struct.setGIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, commitOrThrow_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.e != null) {
+          oprot.writeFieldBegin(E_FIELD_DESC);
+          struct.e.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.c != null) {
+          oprot.writeFieldBegin(C_FIELD_DESC);
+          struct.c.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        if (struct.g != null) {
+          oprot.writeFieldBegin(G_FIELD_DESC);
+          struct.g.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class commitOrThrow_resultTupleSchemeFactory implements SchemeFactory {
+      public commitOrThrow_resultTupleScheme getScheme() {
+        return new commitOrThrow_resultTupleScheme();
+      }
+    }
+
+    private static class commitOrThrow_resultTupleScheme extends TupleScheme<commitOrThrow_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, commitOrThrow_result struct) throws org.apache.thrift.TException {
+        TTupleProtocol oprot = (TTupleProtocol) prot;
+        BitSet optionals = new BitSet();
+        if (struct.isSetE()) {
+          optionals.set(0);
+        }
+        if (struct.isSetC()) {
+          optionals.set(1);
+        }
+        if (struct.isSetG()) {
+          optionals.set(2);
+        }
+        oprot.writeBitSet(optionals, 3);
+        if (struct.isSetE()) {
+          struct.e.write(oprot);
+        }
+        if (struct.isSetC()) {
+          struct.c.write(oprot);
+        }
+        if (struct.isSetG()) {
+          struct.g.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, commitOrThrow_result struct) throws org.apache.thrift.TException {
+        TTupleProtocol iprot = (TTupleProtocol) prot;
+        BitSet incoming = iprot.readBitSet(3);
+        if (incoming.get(0)) {
+          struct.e = new TTransactionNotInProgressException();
+          struct.e.read(iprot);
+          struct.setEIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.c = new TTransactionConflictException();
+          struct.c.read(iprot);
+          struct.setCIsSet(true);
+        }
+        if (incoming.get(2)) {
+          struct.g = new TGenericException();
+          struct.g.read(iprot);
+          struct.setGIsSet(true);
+        }
+      }
+    }
+
+  }
+
+  public static class abortTx_args implements org.apache.thrift.TBase<abortTx_args, abortTx_args._Fields>, java.io.Serializable, Cloneable   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("abortTx_args");
+
+    private static final org.apache.thrift.protocol.TField TX_FIELD_DESC = new org.apache.thrift.protocol.TField("tx", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+    static {
+      schemes.put(StandardScheme.class, new abortTx_argsStandardSchemeFactory());
+      schemes.put(TupleScheme.class, new abortTx_argsTupleSchemeFactory());
+    }
+
+    public TTransaction tx; // 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 {
+      TX((short)1, "tx");
+
+      private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+      static {
+        for (_Fields field : EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // TX
+            return TX;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final String _fieldName;
+
+      _Fields(short thriftId, String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.TX, new org.apache.thrift.meta_data.FieldMetaData("tx", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TTransaction.class)));
+      metaDataMap = Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(abortTx_args.class, metaDataMap);
+    }
+
+    public abortTx_args() {
+    }
+
+    public abortTx_args(
+      TTransaction tx)
+    {
+      this();
+      this.tx = tx;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public abortTx_args(abortTx_args other) {
+      if (other.isSetTx()) {
+        this.tx = new TTransaction(other.tx);
+      }
+    }
+
+    public abortTx_args deepCopy() {
+      return new abortTx_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.tx = null;
+    }
+
+    public TTransaction getTx() {
+      return this.tx;
+    }
+
+    public abortTx_args setTx(TTransaction tx) {
+      this.tx = tx;
+      return this;
+    }
+
+    public void unsetTx() {
+      this.tx = null;
+    }
+
+    /** Returns true if field tx is set (has been assigned a value) and false otherwise */
+    public boolean isSetTx() {
+      return this.tx != null;
+    }
+
+    public void setTxIsSet(boolean value) {
+      if (!value) {
+        this.tx = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, Object value) {
+      switch (field) {
+      case TX:
+        if (value == null) {
+          unsetTx();
+        } else {
+          setTx((TTransaction)value);
+        }
+        break;
+
+      }
+    }
+
+    public Object getFieldValue(_Fields field) {
+      switch (field) {
+      case TX:
+        return getTx();
+
+      }
+      throw new IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new IllegalArgumentException();
+      }
+
+      switch (field) {
+      case TX:
+        return isSetTx();
+      }
+      throw new IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof abortTx_args)
+        return this.equals((abortTx_args)that);
+      return false;
+    }
+
+    public boolean equals(abortTx_args that) {
+      if (that == null)
+        return false;
+
+      boolean this_present_tx = true && this.isSetTx();
+      boolean that_present_tx = true && that.isSetTx();
+      if (this_present_tx || that_present_tx) {
+        if (!(this_present_tx && that_present_tx))
+          return false;
+        if (!this.tx.equals(that.tx))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return 0;
+    }
+
+    public int compareTo(abortTx_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+      abortTx_args typedOther = (abortTx_args)other;
+
+      lastComparison = Boolean.valueOf(isSetTx()).compareTo(typedOther.isSetTx());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetTx()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tx, typedOther.tx);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+    }
+
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder("abortTx_args(");
+      boolean first = true;
+
+      sb.append("tx:");
+      if (this.tx == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.tx);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+      if (tx != null) {
+        tx.validate();
+      }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+      try {
+        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);
+      }
+    }
+
+    private static class abortTx_argsStandardSchemeFactory implements SchemeFactory {
+      public abortTx_argsStandardScheme getScheme() {
+        return new abortTx_argsStandardScheme();
+      }
+    }
+
+    private static class abortTx_argsStandardScheme extends StandardScheme<abortTx_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, abortTx_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // TX
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.tx = new TTransaction();
+                struct.tx.read(iprot);
+                struct.setTxIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, abortTx_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.tx != null) {
+          oprot.writeFieldBegin(TX_FIELD_DESC);
+          struct.tx.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class abortTx_argsTupleSchemeFactory implements SchemeFactory {
+      public abortTx_argsTupleScheme getScheme() {
+        return new abortTx_argsTupleScheme();
+      }
+    }
+
+    private static class abortTx_argsTupleScheme extends TupleScheme<abortTx_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, abortTx_args struct) throws org.apache.thrift.TException {
+        TTupleProtocol oprot = (TTupleProtocol) prot;
+        BitSet optionals = new BitSet();
+        if (struct.isSetTx()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetTx()) {
+          struct.tx.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.proto

<TRUNCATED>