accumulo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ktur...@apache.org
Subject [09/10] ACCUMULO-1000 compressed iterator config in conditional writer RPC calls
Date Wed, 17 Jul 2013 12:58:23 GMT
http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java b/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
index 6f9d826..7ddfd98 100644
--- a/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
+++ b/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
@@ -70,7 +70,7 @@ import org.slf4j.LoggerFactory;
 
     public void update(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, org.apache.accumulo.core.data.thrift.TKeyExtent keyExtent, org.apache.accumulo.core.data.thrift.TMutation mutation) throws org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException, NotServingTabletException, ConstraintViolationException, org.apache.thrift.TException;
 
-    public List<org.apache.accumulo.core.data.thrift.TCMResult> conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations) throws org.apache.thrift.TException;
+    public List<org.apache.accumulo.core.data.thrift.TCMResult> conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols) throws org.apache.thrift.TException;
 
     public List<org.apache.accumulo.core.data.thrift.TKeyExtent> bulkImport(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, long tid, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> files, boolean setTime) throws org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException, org.apache.thrift.TException;
 
@@ -128,7 +128,7 @@ import org.slf4j.LoggerFactory;
 
     public void update(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, org.apache.accumulo.core.data.thrift.TKeyExtent keyExtent, org.apache.accumulo.core.data.thrift.TMutation mutation, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.update_call> resultHandler) throws org.apache.thrift.TException;
 
-    public void conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.conditionalUpdate_call> resultHandler) throws org.apache.thrift.TException;
+    public void conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.conditionalUpdate_call> resultHandler) throws org.apache.thrift.TException;
 
     public void bulkImport(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, long tid, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> files, boolean setTime, org.apache.thrift.async.AsyncMethodCallback<AsyncClient.bulkImport_call> resultHandler) throws org.apache.thrift.TException;
 
@@ -457,19 +457,20 @@ import org.slf4j.LoggerFactory;
       return;
     }
 
-    public List<org.apache.accumulo.core.data.thrift.TCMResult> conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations) throws org.apache.thrift.TException
+    public List<org.apache.accumulo.core.data.thrift.TCMResult> conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols) throws org.apache.thrift.TException
     {
-      send_conditionalUpdate(tinfo, credentials, authorizations, mutations);
+      send_conditionalUpdate(tinfo, credentials, authorizations, mutations, symbols);
       return recv_conditionalUpdate();
     }
 
-    public void send_conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations) throws org.apache.thrift.TException
+    public void send_conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols) throws org.apache.thrift.TException
     {
       conditionalUpdate_args args = new conditionalUpdate_args();
       args.setTinfo(tinfo);
       args.setCredentials(credentials);
       args.setAuthorizations(authorizations);
       args.setMutations(mutations);
+      args.setSymbols(symbols);
       sendBase("conditionalUpdate", args);
     }
 
@@ -1249,9 +1250,9 @@ import org.slf4j.LoggerFactory;
       }
     }
 
-    public void conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, org.apache.thrift.async.AsyncMethodCallback<conditionalUpdate_call> resultHandler) throws org.apache.thrift.TException {
+    public void conditionalUpdate(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols, org.apache.thrift.async.AsyncMethodCallback<conditionalUpdate_call> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      conditionalUpdate_call method_call = new conditionalUpdate_call(tinfo, credentials, authorizations, mutations, resultHandler, this, ___protocolFactory, ___transport);
+      conditionalUpdate_call method_call = new conditionalUpdate_call(tinfo, credentials, authorizations, mutations, symbols, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
@@ -1261,12 +1262,14 @@ import org.slf4j.LoggerFactory;
       private org.apache.accumulo.core.security.thrift.TCredentials credentials;
       private List<ByteBuffer> authorizations;
       private Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations;
-      public conditionalUpdate_call(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, org.apache.thrift.async.AsyncMethodCallback<conditionalUpdate_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 List<String> symbols;
+      public conditionalUpdate_call(org.apache.accumulo.trace.thrift.TInfo tinfo, org.apache.accumulo.core.security.thrift.TCredentials credentials, List<ByteBuffer> authorizations, Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations, List<String> symbols, org.apache.thrift.async.AsyncMethodCallback<conditionalUpdate_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.tinfo = tinfo;
         this.credentials = credentials;
         this.authorizations = authorizations;
         this.mutations = mutations;
+        this.symbols = symbols;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
@@ -1276,6 +1279,7 @@ import org.slf4j.LoggerFactory;
         args.setCredentials(credentials);
         args.setAuthorizations(authorizations);
         args.setMutations(mutations);
+        args.setSymbols(symbols);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -2221,7 +2225,7 @@ import org.slf4j.LoggerFactory;
 
       public conditionalUpdate_result getResult(I iface, conditionalUpdate_args args) throws org.apache.thrift.TException {
         conditionalUpdate_result result = new conditionalUpdate_result();
-        result.success = iface.conditionalUpdate(args.tinfo, args.credentials, args.authorizations, args.mutations);
+        result.success = iface.conditionalUpdate(args.tinfo, args.credentials, args.authorizations, args.mutations, args.symbols);
         return result;
       }
     }
@@ -13864,6 +13868,7 @@ import org.slf4j.LoggerFactory;
     private static final org.apache.thrift.protocol.TField CREDENTIALS_FIELD_DESC = new org.apache.thrift.protocol.TField("credentials", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField AUTHORIZATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("authorizations", org.apache.thrift.protocol.TType.LIST, (short)3);
     private static final org.apache.thrift.protocol.TField MUTATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("mutations", org.apache.thrift.protocol.TType.MAP, (short)4);
+    private static final org.apache.thrift.protocol.TField SYMBOLS_FIELD_DESC = new org.apache.thrift.protocol.TField("symbols", org.apache.thrift.protocol.TType.LIST, (short)5);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -13875,13 +13880,15 @@ import org.slf4j.LoggerFactory;
     public org.apache.accumulo.core.security.thrift.TCredentials credentials; // required
     public List<ByteBuffer> authorizations; // required
     public Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations; // required
+    public List<String> symbols; // required
 
     /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
     @SuppressWarnings("all") public enum _Fields implements org.apache.thrift.TFieldIdEnum {
       TINFO((short)1, "tinfo"),
       CREDENTIALS((short)2, "credentials"),
       AUTHORIZATIONS((short)3, "authorizations"),
-      MUTATIONS((short)4, "mutations");
+      MUTATIONS((short)4, "mutations"),
+      SYMBOLS((short)5, "symbols");
 
       private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -13904,6 +13911,8 @@ import org.slf4j.LoggerFactory;
             return AUTHORIZATIONS;
           case 4: // MUTATIONS
             return MUTATIONS;
+          case 5: // SYMBOLS
+            return SYMBOLS;
           default:
             return null;
         }
@@ -13956,6 +13965,9 @@ import org.slf4j.LoggerFactory;
               new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING              , true))));
       tmpMap.put(_Fields.MUTATIONS, new org.apache.thrift.meta_data.FieldMetaData("mutations", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.MAP          , "CMBatch")));
+      tmpMap.put(_Fields.SYMBOLS, new org.apache.thrift.meta_data.FieldMetaData("symbols", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(conditionalUpdate_args.class, metaDataMap);
     }
@@ -13967,13 +13979,15 @@ import org.slf4j.LoggerFactory;
       org.apache.accumulo.trace.thrift.TInfo tinfo,
       org.apache.accumulo.core.security.thrift.TCredentials credentials,
       List<ByteBuffer> authorizations,
-      Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations)
+      Map<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> mutations,
+      List<String> symbols)
     {
       this();
       this.tinfo = tinfo;
       this.credentials = credentials;
       this.authorizations = authorizations;
       this.mutations = mutations;
+      this.symbols = symbols;
     }
 
     /**
@@ -13998,6 +14012,13 @@ import org.slf4j.LoggerFactory;
       if (other.isSetMutations()) {
         this.mutations = other.mutations;
       }
+      if (other.isSetSymbols()) {
+        List<String> __this__symbols = new ArrayList<String>();
+        for (String other_element : other.symbols) {
+          __this__symbols.add(other_element);
+        }
+        this.symbols = __this__symbols;
+      }
     }
 
     public conditionalUpdate_args deepCopy() {
@@ -14010,6 +14031,7 @@ import org.slf4j.LoggerFactory;
       this.credentials = null;
       this.authorizations = null;
       this.mutations = null;
+      this.symbols = null;
     }
 
     public org.apache.accumulo.trace.thrift.TInfo getTinfo() {
@@ -14134,6 +14156,45 @@ import org.slf4j.LoggerFactory;
       }
     }
 
+    public int getSymbolsSize() {
+      return (this.symbols == null) ? 0 : this.symbols.size();
+    }
+
+    public java.util.Iterator<String> getSymbolsIterator() {
+      return (this.symbols == null) ? null : this.symbols.iterator();
+    }
+
+    public void addToSymbols(String elem) {
+      if (this.symbols == null) {
+        this.symbols = new ArrayList<String>();
+      }
+      this.symbols.add(elem);
+    }
+
+    public List<String> getSymbols() {
+      return this.symbols;
+    }
+
+    public conditionalUpdate_args setSymbols(List<String> symbols) {
+      this.symbols = symbols;
+      return this;
+    }
+
+    public void unsetSymbols() {
+      this.symbols = null;
+    }
+
+    /** Returns true if field symbols is set (has been assigned a value) and false otherwise */
+    public boolean isSetSymbols() {
+      return this.symbols != null;
+    }
+
+    public void setSymbolsIsSet(boolean value) {
+      if (!value) {
+        this.symbols = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
       case TINFO:
@@ -14168,6 +14229,14 @@ import org.slf4j.LoggerFactory;
         }
         break;
 
+      case SYMBOLS:
+        if (value == null) {
+          unsetSymbols();
+        } else {
+          setSymbols((List<String>)value);
+        }
+        break;
+
       }
     }
 
@@ -14185,6 +14254,9 @@ import org.slf4j.LoggerFactory;
       case MUTATIONS:
         return getMutations();
 
+      case SYMBOLS:
+        return getSymbols();
+
       }
       throw new IllegalStateException();
     }
@@ -14204,6 +14276,8 @@ import org.slf4j.LoggerFactory;
         return isSetAuthorizations();
       case MUTATIONS:
         return isSetMutations();
+      case SYMBOLS:
+        return isSetSymbols();
       }
       throw new IllegalStateException();
     }
@@ -14257,6 +14331,15 @@ import org.slf4j.LoggerFactory;
           return false;
       }
 
+      boolean this_present_symbols = true && this.isSetSymbols();
+      boolean that_present_symbols = true && that.isSetSymbols();
+      if (this_present_symbols || that_present_symbols) {
+        if (!(this_present_symbols && that_present_symbols))
+          return false;
+        if (!this.symbols.equals(that.symbols))
+          return false;
+      }
+
       return true;
     }
 
@@ -14313,6 +14396,16 @@ import org.slf4j.LoggerFactory;
           return lastComparison;
         }
       }
+      lastComparison = Boolean.valueOf(isSetSymbols()).compareTo(typedOther.isSetSymbols());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSymbols()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.symbols, typedOther.symbols);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -14364,6 +14457,14 @@ import org.slf4j.LoggerFactory;
         sb.append(this.mutations);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("symbols:");
+      if (this.symbols == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.symbols);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -14481,6 +14582,24 @@ import org.slf4j.LoggerFactory;
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 5: // SYMBOLS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list230 = iprot.readListBegin();
+                  struct.symbols = new ArrayList<String>(_list230.size);
+                  for (int _i231 = 0; _i231 < _list230.size; ++_i231)
+                  {
+                    String _elem232; // required
+                    _elem232 = iprot.readString();
+                    struct.symbols.add(_elem232);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setSymbolsIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -14510,9 +14629,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(AUTHORIZATIONS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.authorizations.size()));
-            for (ByteBuffer _iter230 : struct.authorizations)
+            for (ByteBuffer _iter233 : struct.authorizations)
             {
-              oprot.writeBinary(_iter230);
+              oprot.writeBinary(_iter233);
             }
             oprot.writeListEnd();
           }
@@ -14522,14 +14641,14 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(MUTATIONS_FIELD_DESC);
           {
             oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.LIST, struct.mutations.size()));
-            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> _iter231 : struct.mutations.entrySet())
+            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> _iter234 : struct.mutations.entrySet())
             {
-              _iter231.getKey().write(oprot);
+              _iter234.getKey().write(oprot);
               {
-                oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter231.getValue().size()));
-                for (org.apache.accumulo.core.data.thrift.TConditionalMutation _iter232 : _iter231.getValue())
+                oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter234.getValue().size()));
+                for (org.apache.accumulo.core.data.thrift.TConditionalMutation _iter235 : _iter234.getValue())
                 {
-                  _iter232.write(oprot);
+                  _iter235.write(oprot);
                 }
                 oprot.writeListEnd();
               }
@@ -14538,6 +14657,18 @@ import org.slf4j.LoggerFactory;
           }
           oprot.writeFieldEnd();
         }
+        if (struct.symbols != null) {
+          oprot.writeFieldBegin(SYMBOLS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.symbols.size()));
+            for (String _iter236 : struct.symbols)
+            {
+              oprot.writeString(_iter236);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -14568,7 +14699,10 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetMutations()) {
           optionals.set(3);
         }
-        oprot.writeBitSet(optionals, 4);
+        if (struct.isSetSymbols()) {
+          optionals.set(4);
+        }
+        oprot.writeBitSet(optionals, 5);
         if (struct.isSetTinfo()) {
           struct.tinfo.write(oprot);
         }
@@ -14578,34 +14712,43 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetAuthorizations()) {
           {
             oprot.writeI32(struct.authorizations.size());
-            for (ByteBuffer _iter233 : struct.authorizations)
+            for (ByteBuffer _iter237 : struct.authorizations)
             {
-              oprot.writeBinary(_iter233);
+              oprot.writeBinary(_iter237);
             }
           }
         }
         if (struct.isSetMutations()) {
           {
             oprot.writeI32(struct.mutations.size());
-            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> _iter234 : struct.mutations.entrySet())
+            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, List<org.apache.accumulo.core.data.thrift.TConditionalMutation>> _iter238 : struct.mutations.entrySet())
             {
-              _iter234.getKey().write(oprot);
+              _iter238.getKey().write(oprot);
               {
-                oprot.writeI32(_iter234.getValue().size());
-                for (org.apache.accumulo.core.data.thrift.TConditionalMutation _iter235 : _iter234.getValue())
+                oprot.writeI32(_iter238.getValue().size());
+                for (org.apache.accumulo.core.data.thrift.TConditionalMutation _iter239 : _iter238.getValue())
                 {
-                  _iter235.write(oprot);
+                  _iter239.write(oprot);
                 }
               }
             }
           }
         }
+        if (struct.isSetSymbols()) {
+          {
+            oprot.writeI32(struct.symbols.size());
+            for (String _iter240 : struct.symbols)
+            {
+              oprot.writeString(_iter240);
+            }
+          }
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, conditionalUpdate_args struct) throws org.apache.thrift.TException {
         TTupleProtocol iprot = (TTupleProtocol) prot;
-        BitSet incoming = iprot.readBitSet(4);
+        BitSet incoming = iprot.readBitSet(5);
         if (incoming.get(0)) {
           struct.tinfo = new org.apache.accumulo.trace.thrift.TInfo();
           struct.tinfo.read(iprot);
@@ -14618,43 +14761,56 @@ import org.slf4j.LoggerFactory;
         }
         if (incoming.get(2)) {
           {
-            org.apache.thrift.protocol.TList _list236 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-            struct.authorizations = new ArrayList<ByteBuffer>(_list236.size);
-            for (int _i237 = 0; _i237 < _list236.size; ++_i237)
+            org.apache.thrift.protocol.TList _list241 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+            struct.authorizations = new ArrayList<ByteBuffer>(_list241.size);
+            for (int _i242 = 0; _i242 < _list241.size; ++_i242)
             {
-              ByteBuffer _elem238; // required
-              _elem238 = iprot.readBinary();
-              struct.authorizations.add(_elem238);
+              ByteBuffer _elem243; // required
+              _elem243 = iprot.readBinary();
+              struct.authorizations.add(_elem243);
             }
           }
           struct.setAuthorizationsIsSet(true);
         }
         if (incoming.get(3)) {
           {
-            org.apache.thrift.protocol.TMap _map239 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.LIST, iprot.readI32());
-            struct.mutations = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>>(2*_map239.size);
-            for (int _i240 = 0; _i240 < _map239.size; ++_i240)
+            org.apache.thrift.protocol.TMap _map244 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.LIST, iprot.readI32());
+            struct.mutations = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,List<org.apache.accumulo.core.data.thrift.TConditionalMutation>>(2*_map244.size);
+            for (int _i245 = 0; _i245 < _map244.size; ++_i245)
             {
-              org.apache.accumulo.core.data.thrift.TKeyExtent _key241; // required
-              List<org.apache.accumulo.core.data.thrift.TConditionalMutation> _val242; // required
-              _key241 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
-              _key241.read(iprot);
+              org.apache.accumulo.core.data.thrift.TKeyExtent _key246; // required
+              List<org.apache.accumulo.core.data.thrift.TConditionalMutation> _val247; // required
+              _key246 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
+              _key246.read(iprot);
               {
-                org.apache.thrift.protocol.TList _list243 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-                _val242 = new ArrayList<org.apache.accumulo.core.data.thrift.TConditionalMutation>(_list243.size);
-                for (int _i244 = 0; _i244 < _list243.size; ++_i244)
+                org.apache.thrift.protocol.TList _list248 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+                _val247 = new ArrayList<org.apache.accumulo.core.data.thrift.TConditionalMutation>(_list248.size);
+                for (int _i249 = 0; _i249 < _list248.size; ++_i249)
                 {
-                  org.apache.accumulo.core.data.thrift.TConditionalMutation _elem245; // required
-                  _elem245 = new org.apache.accumulo.core.data.thrift.TConditionalMutation();
-                  _elem245.read(iprot);
-                  _val242.add(_elem245);
+                  org.apache.accumulo.core.data.thrift.TConditionalMutation _elem250; // required
+                  _elem250 = new org.apache.accumulo.core.data.thrift.TConditionalMutation();
+                  _elem250.read(iprot);
+                  _val247.add(_elem250);
                 }
               }
-              struct.mutations.put(_key241, _val242);
+              struct.mutations.put(_key246, _val247);
             }
           }
           struct.setMutationsIsSet(true);
         }
+        if (incoming.get(4)) {
+          {
+            org.apache.thrift.protocol.TList _list251 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+            struct.symbols = new ArrayList<String>(_list251.size);
+            for (int _i252 = 0; _i252 < _list251.size; ++_i252)
+            {
+              String _elem253; // required
+              _elem253 = iprot.readString();
+              struct.symbols.add(_elem253);
+            }
+          }
+          struct.setSymbolsIsSet(true);
+        }
       }
     }
 
@@ -14969,14 +15125,14 @@ import org.slf4j.LoggerFactory;
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list246 = iprot.readListBegin();
-                  struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TCMResult>(_list246.size);
-                  for (int _i247 = 0; _i247 < _list246.size; ++_i247)
+                  org.apache.thrift.protocol.TList _list254 = iprot.readListBegin();
+                  struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TCMResult>(_list254.size);
+                  for (int _i255 = 0; _i255 < _list254.size; ++_i255)
                   {
-                    org.apache.accumulo.core.data.thrift.TCMResult _elem248; // required
-                    _elem248 = new org.apache.accumulo.core.data.thrift.TCMResult();
-                    _elem248.read(iprot);
-                    struct.success.add(_elem248);
+                    org.apache.accumulo.core.data.thrift.TCMResult _elem256; // required
+                    _elem256 = new org.apache.accumulo.core.data.thrift.TCMResult();
+                    _elem256.read(iprot);
+                    struct.success.add(_elem256);
                   }
                   iprot.readListEnd();
                 }
@@ -15004,9 +15160,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.accumulo.core.data.thrift.TCMResult _iter249 : struct.success)
+            for (org.apache.accumulo.core.data.thrift.TCMResult _iter257 : struct.success)
             {
-              _iter249.write(oprot);
+              _iter257.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -15037,9 +15193,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.accumulo.core.data.thrift.TCMResult _iter250 : struct.success)
+            for (org.apache.accumulo.core.data.thrift.TCMResult _iter258 : struct.success)
             {
-              _iter250.write(oprot);
+              _iter258.write(oprot);
             }
           }
         }
@@ -15051,14 +15207,14 @@ import org.slf4j.LoggerFactory;
         BitSet incoming = iprot.readBitSet(1);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list251 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TCMResult>(_list251.size);
-            for (int _i252 = 0; _i252 < _list251.size; ++_i252)
+            org.apache.thrift.protocol.TList _list259 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TCMResult>(_list259.size);
+            for (int _i260 = 0; _i260 < _list259.size; ++_i260)
             {
-              org.apache.accumulo.core.data.thrift.TCMResult _elem253; // required
-              _elem253 = new org.apache.accumulo.core.data.thrift.TCMResult();
-              _elem253.read(iprot);
-              struct.success.add(_elem253);
+              org.apache.accumulo.core.data.thrift.TCMResult _elem261; // required
+              _elem261 = new org.apache.accumulo.core.data.thrift.TCMResult();
+              _elem261.read(iprot);
+              struct.success.add(_elem261);
             }
           }
           struct.setSuccessIsSet(true);
@@ -15704,29 +15860,29 @@ import org.slf4j.LoggerFactory;
             case 2: // FILES
               if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
                 {
-                  org.apache.thrift.protocol.TMap _map254 = iprot.readMapBegin();
-                  struct.files = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>>(2*_map254.size);
-                  for (int _i255 = 0; _i255 < _map254.size; ++_i255)
+                  org.apache.thrift.protocol.TMap _map262 = iprot.readMapBegin();
+                  struct.files = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>>(2*_map262.size);
+                  for (int _i263 = 0; _i263 < _map262.size; ++_i263)
                   {
-                    org.apache.accumulo.core.data.thrift.TKeyExtent _key256; // required
-                    Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo> _val257; // required
-                    _key256 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
-                    _key256.read(iprot);
+                    org.apache.accumulo.core.data.thrift.TKeyExtent _key264; // required
+                    Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo> _val265; // required
+                    _key264 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
+                    _key264.read(iprot);
                     {
-                      org.apache.thrift.protocol.TMap _map258 = iprot.readMapBegin();
-                      _val257 = new HashMap<String,org.apache.accumulo.core.data.thrift.MapFileInfo>(2*_map258.size);
-                      for (int _i259 = 0; _i259 < _map258.size; ++_i259)
+                      org.apache.thrift.protocol.TMap _map266 = iprot.readMapBegin();
+                      _val265 = new HashMap<String,org.apache.accumulo.core.data.thrift.MapFileInfo>(2*_map266.size);
+                      for (int _i267 = 0; _i267 < _map266.size; ++_i267)
                       {
-                        String _key260; // required
-                        org.apache.accumulo.core.data.thrift.MapFileInfo _val261; // required
-                        _key260 = iprot.readString();
-                        _val261 = new org.apache.accumulo.core.data.thrift.MapFileInfo();
-                        _val261.read(iprot);
-                        _val257.put(_key260, _val261);
+                        String _key268; // required
+                        org.apache.accumulo.core.data.thrift.MapFileInfo _val269; // required
+                        _key268 = iprot.readString();
+                        _val269 = new org.apache.accumulo.core.data.thrift.MapFileInfo();
+                        _val269.read(iprot);
+                        _val265.put(_key268, _val269);
                       }
                       iprot.readMapEnd();
                     }
-                    struct.files.put(_key256, _val257);
+                    struct.files.put(_key264, _val265);
                   }
                   iprot.readMapEnd();
                 }
@@ -15767,15 +15923,15 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(FILES_FIELD_DESC);
           {
             oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP, struct.files.size()));
-            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> _iter262 : struct.files.entrySet())
+            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> _iter270 : struct.files.entrySet())
             {
-              _iter262.getKey().write(oprot);
+              _iter270.getKey().write(oprot);
               {
-                oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter262.getValue().size()));
-                for (Map.Entry<String, org.apache.accumulo.core.data.thrift.MapFileInfo> _iter263 : _iter262.getValue().entrySet())
+                oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, _iter270.getValue().size()));
+                for (Map.Entry<String, org.apache.accumulo.core.data.thrift.MapFileInfo> _iter271 : _iter270.getValue().entrySet())
                 {
-                  oprot.writeString(_iter263.getKey());
-                  _iter263.getValue().write(oprot);
+                  oprot.writeString(_iter271.getKey());
+                  _iter271.getValue().write(oprot);
                 }
                 oprot.writeMapEnd();
               }
@@ -15841,15 +15997,15 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetFiles()) {
           {
             oprot.writeI32(struct.files.size());
-            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> _iter264 : struct.files.entrySet())
+            for (Map.Entry<org.apache.accumulo.core.data.thrift.TKeyExtent, Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>> _iter272 : struct.files.entrySet())
             {
-              _iter264.getKey().write(oprot);
+              _iter272.getKey().write(oprot);
               {
-                oprot.writeI32(_iter264.getValue().size());
-                for (Map.Entry<String, org.apache.accumulo.core.data.thrift.MapFileInfo> _iter265 : _iter264.getValue().entrySet())
+                oprot.writeI32(_iter272.getValue().size());
+                for (Map.Entry<String, org.apache.accumulo.core.data.thrift.MapFileInfo> _iter273 : _iter272.getValue().entrySet())
                 {
-                  oprot.writeString(_iter265.getKey());
-                  _iter265.getValue().write(oprot);
+                  oprot.writeString(_iter273.getKey());
+                  _iter273.getValue().write(oprot);
                 }
               }
             }
@@ -15880,28 +16036,28 @@ import org.slf4j.LoggerFactory;
         }
         if (incoming.get(3)) {
           {
-            org.apache.thrift.protocol.TMap _map266 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP, iprot.readI32());
-            struct.files = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>>(2*_map266.size);
-            for (int _i267 = 0; _i267 < _map266.size; ++_i267)
+            org.apache.thrift.protocol.TMap _map274 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.MAP, iprot.readI32());
+            struct.files = new HashMap<org.apache.accumulo.core.data.thrift.TKeyExtent,Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo>>(2*_map274.size);
+            for (int _i275 = 0; _i275 < _map274.size; ++_i275)
             {
-              org.apache.accumulo.core.data.thrift.TKeyExtent _key268; // required
-              Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo> _val269; // required
-              _key268 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
-              _key268.read(iprot);
+              org.apache.accumulo.core.data.thrift.TKeyExtent _key276; // required
+              Map<String,org.apache.accumulo.core.data.thrift.MapFileInfo> _val277; // required
+              _key276 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
+              _key276.read(iprot);
               {
-                org.apache.thrift.protocol.TMap _map270 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-                _val269 = new HashMap<String,org.apache.accumulo.core.data.thrift.MapFileInfo>(2*_map270.size);
-                for (int _i271 = 0; _i271 < _map270.size; ++_i271)
+                org.apache.thrift.protocol.TMap _map278 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+                _val277 = new HashMap<String,org.apache.accumulo.core.data.thrift.MapFileInfo>(2*_map278.size);
+                for (int _i279 = 0; _i279 < _map278.size; ++_i279)
                 {
-                  String _key272; // required
-                  org.apache.accumulo.core.data.thrift.MapFileInfo _val273; // required
-                  _key272 = iprot.readString();
-                  _val273 = new org.apache.accumulo.core.data.thrift.MapFileInfo();
-                  _val273.read(iprot);
-                  _val269.put(_key272, _val273);
+                  String _key280; // required
+                  org.apache.accumulo.core.data.thrift.MapFileInfo _val281; // required
+                  _key280 = iprot.readString();
+                  _val281 = new org.apache.accumulo.core.data.thrift.MapFileInfo();
+                  _val281.read(iprot);
+                  _val277.put(_key280, _val281);
                 }
               }
-              struct.files.put(_key268, _val269);
+              struct.files.put(_key276, _val277);
             }
           }
           struct.setFilesIsSet(true);
@@ -16301,14 +16457,14 @@ import org.slf4j.LoggerFactory;
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list274 = iprot.readListBegin();
-                  struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TKeyExtent>(_list274.size);
-                  for (int _i275 = 0; _i275 < _list274.size; ++_i275)
+                  org.apache.thrift.protocol.TList _list282 = iprot.readListBegin();
+                  struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TKeyExtent>(_list282.size);
+                  for (int _i283 = 0; _i283 < _list282.size; ++_i283)
                   {
-                    org.apache.accumulo.core.data.thrift.TKeyExtent _elem276; // required
-                    _elem276 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
-                    _elem276.read(iprot);
-                    struct.success.add(_elem276);
+                    org.apache.accumulo.core.data.thrift.TKeyExtent _elem284; // required
+                    _elem284 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
+                    _elem284.read(iprot);
+                    struct.success.add(_elem284);
                   }
                   iprot.readListEnd();
                 }
@@ -16345,9 +16501,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (org.apache.accumulo.core.data.thrift.TKeyExtent _iter277 : struct.success)
+            for (org.apache.accumulo.core.data.thrift.TKeyExtent _iter285 : struct.success)
             {
-              _iter277.write(oprot);
+              _iter285.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -16386,9 +16542,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (org.apache.accumulo.core.data.thrift.TKeyExtent _iter278 : struct.success)
+            for (org.apache.accumulo.core.data.thrift.TKeyExtent _iter286 : struct.success)
             {
-              _iter278.write(oprot);
+              _iter286.write(oprot);
             }
           }
         }
@@ -16403,14 +16559,14 @@ import org.slf4j.LoggerFactory;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list279 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TKeyExtent>(_list279.size);
-            for (int _i280 = 0; _i280 < _list279.size; ++_i280)
+            org.apache.thrift.protocol.TList _list287 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new ArrayList<org.apache.accumulo.core.data.thrift.TKeyExtent>(_list287.size);
+            for (int _i288 = 0; _i288 < _list287.size; ++_i288)
             {
-              org.apache.accumulo.core.data.thrift.TKeyExtent _elem281; // required
-              _elem281 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
-              _elem281.read(iprot);
-              struct.success.add(_elem281);
+              org.apache.accumulo.core.data.thrift.TKeyExtent _elem289; // required
+              _elem289 = new org.apache.accumulo.core.data.thrift.TKeyExtent();
+              _elem289.read(iprot);
+              struct.success.add(_elem289);
             }
           }
           struct.setSuccessIsSet(true);
@@ -23984,14 +24140,14 @@ import org.slf4j.LoggerFactory;
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list282 = iprot.readListBegin();
-                  struct.success = new ArrayList<TabletStats>(_list282.size);
-                  for (int _i283 = 0; _i283 < _list282.size; ++_i283)
+                  org.apache.thrift.protocol.TList _list290 = iprot.readListBegin();
+                  struct.success = new ArrayList<TabletStats>(_list290.size);
+                  for (int _i291 = 0; _i291 < _list290.size; ++_i291)
                   {
-                    TabletStats _elem284; // required
-                    _elem284 = new TabletStats();
-                    _elem284.read(iprot);
-                    struct.success.add(_elem284);
+                    TabletStats _elem292; // required
+                    _elem292 = new TabletStats();
+                    _elem292.read(iprot);
+                    struct.success.add(_elem292);
                   }
                   iprot.readListEnd();
                 }
@@ -24028,9 +24184,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (TabletStats _iter285 : struct.success)
+            for (TabletStats _iter293 : struct.success)
             {
-              _iter285.write(oprot);
+              _iter293.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -24069,9 +24225,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (TabletStats _iter286 : struct.success)
+            for (TabletStats _iter294 : struct.success)
             {
-              _iter286.write(oprot);
+              _iter294.write(oprot);
             }
           }
         }
@@ -24086,14 +24242,14 @@ import org.slf4j.LoggerFactory;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list287 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new ArrayList<TabletStats>(_list287.size);
-            for (int _i288 = 0; _i288 < _list287.size; ++_i288)
+            org.apache.thrift.protocol.TList _list295 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new ArrayList<TabletStats>(_list295.size);
+            for (int _i296 = 0; _i296 < _list295.size; ++_i296)
             {
-              TabletStats _elem289; // required
-              _elem289 = new TabletStats();
-              _elem289.read(iprot);
-              struct.success.add(_elem289);
+              TabletStats _elem297; // required
+              _elem297 = new TabletStats();
+              _elem297.read(iprot);
+              struct.success.add(_elem297);
             }
           }
           struct.setSuccessIsSet(true);
@@ -27367,14 +27523,14 @@ import org.slf4j.LoggerFactory;
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list290 = iprot.readListBegin();
-                  struct.success = new ArrayList<ActiveScan>(_list290.size);
-                  for (int _i291 = 0; _i291 < _list290.size; ++_i291)
+                  org.apache.thrift.protocol.TList _list298 = iprot.readListBegin();
+                  struct.success = new ArrayList<ActiveScan>(_list298.size);
+                  for (int _i299 = 0; _i299 < _list298.size; ++_i299)
                   {
-                    ActiveScan _elem292; // required
-                    _elem292 = new ActiveScan();
-                    _elem292.read(iprot);
-                    struct.success.add(_elem292);
+                    ActiveScan _elem300; // required
+                    _elem300 = new ActiveScan();
+                    _elem300.read(iprot);
+                    struct.success.add(_elem300);
                   }
                   iprot.readListEnd();
                 }
@@ -27411,9 +27567,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (ActiveScan _iter293 : struct.success)
+            for (ActiveScan _iter301 : struct.success)
             {
-              _iter293.write(oprot);
+              _iter301.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -27452,9 +27608,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (ActiveScan _iter294 : struct.success)
+            for (ActiveScan _iter302 : struct.success)
             {
-              _iter294.write(oprot);
+              _iter302.write(oprot);
             }
           }
         }
@@ -27469,14 +27625,14 @@ import org.slf4j.LoggerFactory;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list295 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new ArrayList<ActiveScan>(_list295.size);
-            for (int _i296 = 0; _i296 < _list295.size; ++_i296)
+            org.apache.thrift.protocol.TList _list303 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new ArrayList<ActiveScan>(_list303.size);
+            for (int _i304 = 0; _i304 < _list303.size; ++_i304)
             {
-              ActiveScan _elem297; // required
-              _elem297 = new ActiveScan();
-              _elem297.read(iprot);
-              struct.success.add(_elem297);
+              ActiveScan _elem305; // required
+              _elem305 = new ActiveScan();
+              _elem305.read(iprot);
+              struct.success.add(_elem305);
             }
           }
           struct.setSuccessIsSet(true);
@@ -28341,14 +28497,14 @@ import org.slf4j.LoggerFactory;
             case 0: // SUCCESS
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list298 = iprot.readListBegin();
-                  struct.success = new ArrayList<ActiveCompaction>(_list298.size);
-                  for (int _i299 = 0; _i299 < _list298.size; ++_i299)
+                  org.apache.thrift.protocol.TList _list306 = iprot.readListBegin();
+                  struct.success = new ArrayList<ActiveCompaction>(_list306.size);
+                  for (int _i307 = 0; _i307 < _list306.size; ++_i307)
                   {
-                    ActiveCompaction _elem300; // required
-                    _elem300 = new ActiveCompaction();
-                    _elem300.read(iprot);
-                    struct.success.add(_elem300);
+                    ActiveCompaction _elem308; // required
+                    _elem308 = new ActiveCompaction();
+                    _elem308.read(iprot);
+                    struct.success.add(_elem308);
                   }
                   iprot.readListEnd();
                 }
@@ -28385,9 +28541,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
-            for (ActiveCompaction _iter301 : struct.success)
+            for (ActiveCompaction _iter309 : struct.success)
             {
-              _iter301.write(oprot);
+              _iter309.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -28426,9 +28582,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetSuccess()) {
           {
             oprot.writeI32(struct.success.size());
-            for (ActiveCompaction _iter302 : struct.success)
+            for (ActiveCompaction _iter310 : struct.success)
             {
-              _iter302.write(oprot);
+              _iter310.write(oprot);
             }
           }
         }
@@ -28443,14 +28599,14 @@ import org.slf4j.LoggerFactory;
         BitSet incoming = iprot.readBitSet(2);
         if (incoming.get(0)) {
           {
-            org.apache.thrift.protocol.TList _list303 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            struct.success = new ArrayList<ActiveCompaction>(_list303.size);
-            for (int _i304 = 0; _i304 < _list303.size; ++_i304)
+            org.apache.thrift.protocol.TList _list311 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new ArrayList<ActiveCompaction>(_list311.size);
+            for (int _i312 = 0; _i312 < _list311.size; ++_i312)
             {
-              ActiveCompaction _elem305; // required
-              _elem305 = new ActiveCompaction();
-              _elem305.read(iprot);
-              struct.success.add(_elem305);
+              ActiveCompaction _elem313; // required
+              _elem313 = new ActiveCompaction();
+              _elem313.read(iprot);
+              struct.success.add(_elem313);
             }
           }
           struct.setSuccessIsSet(true);
@@ -28952,13 +29108,13 @@ import org.slf4j.LoggerFactory;
             case 3: // FILENAMES
               if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
                 {
-                  org.apache.thrift.protocol.TList _list306 = iprot.readListBegin();
-                  struct.filenames = new ArrayList<String>(_list306.size);
-                  for (int _i307 = 0; _i307 < _list306.size; ++_i307)
+                  org.apache.thrift.protocol.TList _list314 = iprot.readListBegin();
+                  struct.filenames = new ArrayList<String>(_list314.size);
+                  for (int _i315 = 0; _i315 < _list314.size; ++_i315)
                   {
-                    String _elem308; // required
-                    _elem308 = iprot.readString();
-                    struct.filenames.add(_elem308);
+                    String _elem316; // required
+                    _elem316 = iprot.readString();
+                    struct.filenames.add(_elem316);
                   }
                   iprot.readListEnd();
                 }
@@ -28996,9 +29152,9 @@ import org.slf4j.LoggerFactory;
           oprot.writeFieldBegin(FILENAMES_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.filenames.size()));
-            for (String _iter309 : struct.filenames)
+            for (String _iter317 : struct.filenames)
             {
-              oprot.writeString(_iter309);
+              oprot.writeString(_iter317);
             }
             oprot.writeListEnd();
           }
@@ -29041,9 +29197,9 @@ import org.slf4j.LoggerFactory;
         if (struct.isSetFilenames()) {
           {
             oprot.writeI32(struct.filenames.size());
-            for (String _iter310 : struct.filenames)
+            for (String _iter318 : struct.filenames)
             {
-              oprot.writeString(_iter310);
+              oprot.writeString(_iter318);
             }
           }
         }
@@ -29065,13 +29221,13 @@ import org.slf4j.LoggerFactory;
         }
         if (incoming.get(2)) {
           {
-            org.apache.thrift.protocol.TList _list311 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
-            struct.filenames = new ArrayList<String>(_list311.size);
-            for (int _i312 = 0; _i312 < _list311.size; ++_i312)
+            org.apache.thrift.protocol.TList _list319 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+            struct.filenames = new ArrayList<String>(_list319.size);
+            for (int _i320 = 0; _i320 < _list319.size; ++_i320)
             {
-              String _elem313; // required
-              _elem313 = iprot.readString();
-              struct.filenames.add(_elem313);
+              String _elem321; // required
+              _elem321 = iprot.readString();
+              struct.filenames.add(_elem321);
             }
           }
           struct.setFilenamesIsSet(true);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java b/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
new file mode 100644
index 0000000..b640581
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
@@ -0,0 +1,195 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.core.util;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hadoop.io.WritableUtils;
+
+/**
+ * 
+ */
+public class UnsynchronizedBuffer {
+  // created this little class instead of using ByteArrayOutput stream and DataOutputStream
+  // because both are synchronized... lots of small syncs slow things down
+  public static class Writer {
+    
+    int offset = 0;
+    byte data[];
+    
+    public Writer() {
+      data = new byte[64];
+    }
+    
+    public Writer(int initialCapacity) {
+      data = new byte[initialCapacity];
+    }
+    
+    private void reserve(int l) {
+      if (offset + l > data.length) {
+        int newSize = UnsynchronizedBuffer.nextArraySize(offset + l);
+
+        byte[] newData = new byte[newSize];
+        System.arraycopy(data, 0, newData, 0, offset);
+        data = newData;
+      }
+      
+    }
+    
+    public void add(byte[] bytes, int off, int length) {
+      reserve(length);
+      System.arraycopy(bytes, off, data, offset, length);
+      offset += length;
+    }
+    
+    public void add(boolean b) {
+      reserve(1);
+      if (b)
+        data[offset++] = 1;
+      else
+        data[offset++] = 0;
+    }
+    
+    public byte[] toArray() {
+      byte ret[] = new byte[offset];
+      System.arraycopy(data, 0, ret, 0, offset);
+      return ret;
+    }
+    
+    public ByteBuffer toByteBuffer() {
+      return ByteBuffer.wrap(data, 0, offset);
+    }
+
+    public void writeVInt(int i) {
+      writeVLong(i);
+    }
+
+    public void writeVLong(long i) {
+      reserve(9);
+      if (i >= -112 && i <= 127) {
+        data[offset++] = (byte) i;
+        return;
+      }
+      
+      int len = -112;
+      if (i < 0) {
+        i ^= -1L; // take one's complement'
+        len = -120;
+      }
+      
+      long tmp = i;
+      while (tmp != 0) {
+        tmp = tmp >> 8;
+        len--;
+      }
+      
+      data[offset++] = (byte) len;
+      
+      len = (len < -120) ? -(len + 120) : -(len + 112);
+      
+      for (int idx = len; idx != 0; idx--) {
+        int shiftbits = (idx - 1) * 8;
+        long mask = 0xFFL << shiftbits;
+        data[offset++] = (byte) ((i & mask) >> shiftbits);
+      }
+    }
+  }
+  
+  public static class Reader {
+    int offset;
+    byte data[];
+    
+    public Reader(byte b[]) {
+      this.data = b;
+    }
+    
+    public Reader(ByteBuffer buffer) {
+      if (buffer.hasArray()) {
+        offset = buffer.arrayOffset();
+        data = buffer.array();
+      } else {
+        data = new byte[buffer.remaining()];
+        buffer.get(data);
+      }
+    }
+
+    public int readInt() {
+      return (data[offset++] << 24) + ((data[offset++] & 255) << 16) + ((data[offset++] & 255) << 8) + ((data[offset++] & 255) << 0);
+    }
+    
+    public long readLong() {
+      return (((long) data[offset++] << 56) + ((long) (data[offset++] & 255) << 48) + ((long) (data[offset++] & 255) << 40)
+          + ((long) (data[offset++] & 255) << 32) + ((long) (data[offset++] & 255) << 24) + ((data[offset++] & 255) << 16) + ((data[offset++] & 255) << 8) + ((data[offset++] & 255) << 0));
+    }
+    
+    public void readBytes(byte b[]) {
+      System.arraycopy(data, offset, b, 0, b.length);
+      offset += b.length;
+    }
+    
+    public boolean readBoolean() {
+      return (data[offset++] == 1);
+    }
+    
+    public int readVInt() {
+      return (int) readVLong();
+    }
+
+    public long readVLong() {
+      byte firstByte = data[offset++];
+      int len = WritableUtils.decodeVIntSize(firstByte);
+      if (len == 1) {
+        return firstByte;
+      }
+      long i = 0;
+      for (int idx = 0; idx < len - 1; idx++) {
+        byte b = data[offset++];
+        i = i << 8;
+        i = i | (b & 0xFF);
+      }
+      return (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);
+    }
+  }
+
+  /**
+   * Determines what next array size should be by rounding up to next power of two.
+   * 
+   */
+  public static int nextArraySize(int i) {
+    if (i < 0)
+      throw new IllegalArgumentException();
+    
+    if (i > (1 << 30))
+      return Integer.MAX_VALUE; // this is the next power of 2 minus one... a special case
+  
+    if (i == 0) {
+      return 1;
+    }
+    
+    // round up to next power of two
+    int ret = i;
+    ret--;
+    ret |= ret >> 1;
+    ret |= ret >> 2;
+    ret |= ret >> 4;
+    ret |= ret >> 8;
+    ret |= ret >> 16;
+    ret++;
+    
+    return ret;
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/core/src/main/thrift/data.thrift
----------------------------------------------------------------------
diff --git a/core/src/main/thrift/data.thrift b/core/src/main/thrift/data.thrift
index a6fa145..6a590c4 100644
--- a/core/src/main/thrift/data.thrift
+++ b/core/src/main/thrift/data.thrift
@@ -133,8 +133,7 @@ struct TCondition {
 	4:i64 ts;
 	5:bool hasTimestamp;
 	6:binary val;
-	7:list<IterInfo> ssiList
-	8:map<string, map<string, string>> ssio 
+	7:binary iterators;
 }
 
 struct TConditionalMutation {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/core/src/main/thrift/tabletserver.thrift
----------------------------------------------------------------------
diff --git a/core/src/main/thrift/tabletserver.thrift b/core/src/main/thrift/tabletserver.thrift
index 7a5e936..8887202 100644
--- a/core/src/main/thrift/tabletserver.thrift
+++ b/core/src/main/thrift/tabletserver.thrift
@@ -167,7 +167,7 @@ service TabletClientService extends client.ClientService {
             2:NotServingTabletException nste, 
             3:ConstraintViolationException cve),
   
-  list<data.TCMResult> conditionalUpdate(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:list<binary> authorizations, 4:data.CMBatch mutations);
+  list<data.TCMResult> conditionalUpdate(1:trace.TInfo tinfo, 2:security.TCredentials credentials, 3:list<binary> authorizations, 4:data.CMBatch mutations, 5:list<string> symbols);
 
   // on success, returns an empty list
   list<data.TKeyExtent> bulkImport(3:trace.TInfo tinfo, 1:security.TCredentials credentials, 4:i64 tid, 2:data.TabletFiles files, 5:bool setTime) throws (1:client.ThriftSecurityException sec),

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/core/src/test/java/org/apache/accumulo/core/file/rfile/RelativeKeyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/file/rfile/RelativeKeyTest.java b/core/src/test/java/org/apache/accumulo/core/file/rfile/RelativeKeyTest.java
index bf577c1..1608576 100644
--- a/core/src/test/java/org/apache/accumulo/core/file/rfile/RelativeKeyTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/file/rfile/RelativeKeyTest.java
@@ -31,6 +31,7 @@ import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.PartialKey;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.file.rfile.RelativeKey.MByteSequence;
+import org.apache.accumulo.core.util.UnsynchronizedBuffer;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -39,25 +40,25 @@ public class RelativeKeyTest {
   
   @Test
   public void testBasicRelativeKey() {
-    assertEquals(1, RelativeKey.nextArraySize(0));
-    assertEquals(1, RelativeKey.nextArraySize(1));
-    assertEquals(2, RelativeKey.nextArraySize(2));
-    assertEquals(4, RelativeKey.nextArraySize(3));
-    assertEquals(4, RelativeKey.nextArraySize(4));
-    assertEquals(8, RelativeKey.nextArraySize(5));
-    assertEquals(8, RelativeKey.nextArraySize(8));
-    assertEquals(16, RelativeKey.nextArraySize(9));
+    assertEquals(1, UnsynchronizedBuffer.nextArraySize(0));
+    assertEquals(1, UnsynchronizedBuffer.nextArraySize(1));
+    assertEquals(2, UnsynchronizedBuffer.nextArraySize(2));
+    assertEquals(4, UnsynchronizedBuffer.nextArraySize(3));
+    assertEquals(4, UnsynchronizedBuffer.nextArraySize(4));
+    assertEquals(8, UnsynchronizedBuffer.nextArraySize(5));
+    assertEquals(8, UnsynchronizedBuffer.nextArraySize(8));
+    assertEquals(16, UnsynchronizedBuffer.nextArraySize(9));
     
-    assertEquals(1 << 16, RelativeKey.nextArraySize((1 << 16) - 1));
-    assertEquals(1 << 16, RelativeKey.nextArraySize(1 << 16));
-    assertEquals(1 << 17, RelativeKey.nextArraySize((1 << 16) + 1));
+    assertEquals(1 << 16, UnsynchronizedBuffer.nextArraySize((1 << 16) - 1));
+    assertEquals(1 << 16, UnsynchronizedBuffer.nextArraySize(1 << 16));
+    assertEquals(1 << 17, UnsynchronizedBuffer.nextArraySize((1 << 16) + 1));
     
-    assertEquals(1 << 30, RelativeKey.nextArraySize((1 << 30) - 1));
+    assertEquals(1 << 30, UnsynchronizedBuffer.nextArraySize((1 << 30) - 1));
 
-    assertEquals(1 << 30, RelativeKey.nextArraySize(1 << 30));
+    assertEquals(1 << 30, UnsynchronizedBuffer.nextArraySize(1 << 30));
 
-    assertEquals(Integer.MAX_VALUE, RelativeKey.nextArraySize(Integer.MAX_VALUE - 1));
-    assertEquals(Integer.MAX_VALUE, RelativeKey.nextArraySize(Integer.MAX_VALUE));
+    assertEquals(Integer.MAX_VALUE, UnsynchronizedBuffer.nextArraySize(Integer.MAX_VALUE - 1));
+    assertEquals(Integer.MAX_VALUE, UnsynchronizedBuffer.nextArraySize(Integer.MAX_VALUE));
   }
   
   @Test

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java b/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java
index c99e09a..43dbdd6 100644
--- a/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java
+++ b/server/src/main/java/org/apache/accumulo/server/tabletserver/TabletServer.java
@@ -66,6 +66,8 @@ import org.apache.accumulo.core.Constants;
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.CompressedIterators;
+import org.apache.accumulo.core.client.impl.CompressedIterators.IterConfig;
 import org.apache.accumulo.core.client.impl.ScannerImpl;
 import org.apache.accumulo.core.client.impl.TabletType;
 import org.apache.accumulo.core.client.impl.Translator;
@@ -1698,12 +1700,15 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
     
     private RowLocks rowLocks = new RowLocks();
 
-    private void checkConditions(Map<KeyExtent,List<ServerConditionalMutation>> updates, ArrayList<TCMResult> results, Authorizations authorizations) {
+    private void checkConditions(Map<KeyExtent,List<ServerConditionalMutation>> updates, ArrayList<TCMResult> results, Authorizations authorizations,
+        List<String> symbols) {
       Iterator<Entry<KeyExtent,List<ServerConditionalMutation>>> iter = updates.entrySet().iterator();
       
       // TODO use constant
       HashSet<Column> columns = new HashSet<Column>();
 
+      CompressedIterators compressedIters = new CompressedIterators(symbols);
+
       while (iter.hasNext()) {
         Entry<KeyExtent,List<ServerConditionalMutation>> entry = iter.next();
         Tablet tablet = onlineTablets.get(entry.getKey());
@@ -1728,8 +1733,10 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
               
               AtomicBoolean interruptFlag = new AtomicBoolean();
 
+              IterConfig ic = compressedIters.decompress(tc.iterators);
+
               //TODO use one iterator per tablet, push checks into tablet?
-              Scanner scanner = tablet.createScanner(range, 1, columns, authorizations, tc.ssiList, tc.ssio, false, interruptFlag);
+              Scanner scanner = tablet.createScanner(range, 1, columns, authorizations, ic.ssiList, ic.ssio, false, interruptFlag);
               
               try {
                 ScanBatch batch = scanner.read();
@@ -1850,7 +1857,7 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
     }
 
     private Map<KeyExtent,List<ServerConditionalMutation>> conditionalUpdate(TCredentials credentials, List<ByteBuffer> authorizations,
-        Map<KeyExtent,List<ServerConditionalMutation>> updates, ArrayList<TCMResult> results) {
+        Map<KeyExtent,List<ServerConditionalMutation>> updates, ArrayList<TCMResult> results, List<String> symbols) {
       // sort each list of mutations, this is done to avoid deadlock and doing seeks in order is more efficient and detect duplicate rows.
       ConditionalMutationSet.sortConditionalMutations(updates);
       
@@ -1862,7 +1869,7 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
       // get as many locks as possible w/o blocking... defer any rows that are locked
       List<RowLock> locks = rowLocks.acquireRowlocks(updates, deferred);
       try {
-        checkConditions(updates, results, new Authorizations(authorizations));
+        checkConditions(updates, results, new Authorizations(authorizations), symbols);
         writeConditionalMutations(updates, results, credentials);
       } finally {
         rowLocks.releaseRowLocks(locks);
@@ -1872,7 +1879,7 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
     
     @Override
     public List<TCMResult> conditionalUpdate(TInfo tinfo, TCredentials credentials, List<ByteBuffer> authorizations,
-        Map<TKeyExtent,List<TConditionalMutation>> mutations) throws TException {
+        Map<TKeyExtent,List<TConditionalMutation>> mutations, List<String> symbols) throws TException {
       // TODO check credentials, permissions, and authorizations
       // TODO sessions, should show up in list scans
       // TODO timeout like scans do
@@ -1882,10 +1889,10 @@ public class TabletServer extends AbstractMetricsImpl implements org.apache.accu
       
       ArrayList<TCMResult> results = new ArrayList<TCMResult>();
       
-      Map<KeyExtent,List<ServerConditionalMutation>> deferred = conditionalUpdate(credentials, authorizations, updates, results);
+      Map<KeyExtent,List<ServerConditionalMutation>> deferred = conditionalUpdate(credentials, authorizations, updates, results, symbols);
 
       while (deferred.size() > 0) {
-        deferred = conditionalUpdate(credentials, authorizations, deferred, results);
+        deferred = conditionalUpdate(credentials, authorizations, deferred, results, symbols);
       }
 
       return results;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java
----------------------------------------------------------------------
diff --git a/test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java b/test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java
index 7ae8451..f8b32de 100644
--- a/test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java
+++ b/test/src/main/java/org/apache/accumulo/test/performance/thrift/NullTserver.java
@@ -205,7 +205,7 @@ public class NullTserver {
 
     @Override
     public List<TCMResult> conditionalUpdate(TInfo tinfo, TCredentials credentials, List<ByteBuffer> authorizations,
-        Map<TKeyExtent,List<TConditionalMutation>> mutations) throws TException {
+        Map<TKeyExtent,List<TConditionalMutation>> mutations, List<String> symbols) throws TException {
       return null;
     }
   }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/be54c959/test/src/test/java/org/apache/accumulo/test/ConditionalWriterTest.java
----------------------------------------------------------------------
diff --git a/test/src/test/java/org/apache/accumulo/test/ConditionalWriterTest.java b/test/src/test/java/org/apache/accumulo/test/ConditionalWriterTest.java
index 94f453f..33a7f4e 100644
--- a/test/src/test/java/org/apache/accumulo/test/ConditionalWriterTest.java
+++ b/test/src/test/java/org/apache/accumulo/test/ConditionalWriterTest.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Random;
 import java.util.SortedSet;
@@ -55,6 +56,7 @@ import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.LongCombiner.Type;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
+import org.apache.accumulo.core.iterators.user.VersioningIterator;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.accumulo.core.security.ColumnVisibility;
 import org.apache.accumulo.core.util.FastFormat;
@@ -378,12 +380,30 @@ public class ConditionalWriterTest {
     bw.addMutation(m);
     bw.addMutation(m);
     bw.addMutation(m);
+    
+    m = new Mutation("ACCUMULO-1001");
+    m.put("count2", "comments", "1");
+    bw.addMutation(m);
+    bw.addMutation(m);
+
+    m = new Mutation("ACCUMULO-1002");
+    m.put("count2", "comments", "1");
+    bw.addMutation(m);
+    bw.addMutation(m);
+
     bw.close();
     
     IteratorSetting iterConfig = new IteratorSetting(10, SummingCombiner.class);
     SummingCombiner.setEncodingType(iterConfig, Type.STRING);
     SummingCombiner.setColumns(iterConfig, Collections.singletonList(new IteratorSetting.Column("count")));
     
+    IteratorSetting iterConfig2 = new IteratorSetting(10, SummingCombiner.class);
+    SummingCombiner.setEncodingType(iterConfig2, Type.STRING);
+    SummingCombiner.setColumns(iterConfig2, Collections.singletonList(new IteratorSetting.Column("count2", "comments")));
+    
+    IteratorSetting iterConfig3 = new IteratorSetting(5, VersioningIterator.class);
+    VersioningIterator.setMaxVersions(iterConfig3, 1);
+
     Scanner scanner = conn.createScanner(table, new Authorizations());
     scanner.addScanIterator(iterConfig);
     scanner.setRange(new Range("ACCUMULO-1000"));
@@ -408,7 +428,34 @@ public class ConditionalWriterTest {
     Assert.assertEquals(Status.REJECTED, cw.write(cm1).getStatus());
     Assert.assertEquals("4", scanner.iterator().next().getValue().toString());
     
-    // TODO test conditions with different iterators
+    // run test with multiple iterators passed in same batch and condition with two iterators
+
+    ConditionalMutation cm3 = new ConditionalMutation("ACCUMULO-1000", new Condition("count", "comments").setIterators(iterConfig).setValue("4"));
+    cm3.put("count", "comments", "1");
+    
+    ConditionalMutation cm4 = new ConditionalMutation("ACCUMULO-1001", new Condition("count2", "comments").setIterators(iterConfig2).setValue("2"));
+    cm4.put("count2", "comments", "1");
+    
+    ConditionalMutation cm5 = new ConditionalMutation("ACCUMULO-1002", new Condition("count2", "comments").setIterators(iterConfig2, iterConfig3).setValue("2"));
+    cm5.put("count2", "comments", "1");
+    
+    Iterator<Result> results = cw.write(Arrays.asList(cm3, cm4, cm5).iterator());
+    Map<String,Status> actual = new HashMap<String,Status>();
+    
+    while (results.hasNext()) {
+      Result result = results.next();
+      String k = new String(result.getMutation().getRow());
+      Assert.assertFalse(actual.containsKey(k));
+      actual.put(k, result.getStatus());
+    }
+
+    Map<String,Status> expected = new HashMap<String,Status>();
+    expected.put("ACCUMULO-1000", Status.ACCEPTED);
+    expected.put("ACCUMULO-1001", Status.ACCEPTED);
+    expected.put("ACCUMULO-1002", Status.REJECTED);
+    
+    Assert.assertEquals(expected, actual);
+
     // TODO test w/ table that has iterators configured
     
     cw.close();
@@ -933,8 +980,7 @@ public class ConditionalWriterTest {
 
     while (rowIter.hasNext()) {
       Iterator<Entry<Key,Value>> row = rowIter.next();
-      Stats stats = new Stats(row);
-      System.out.println(stats);
+      new Stats(row);
     }
   }
 
@@ -961,6 +1007,11 @@ public class ConditionalWriterTest {
     // TODO test against a offline table
   }
 
+  @Test
+  public void testError() {
+    // test an iterator that throws an exception
+  }
+
   @AfterClass
   public static void tearDownAfterClass() throws Exception {
     cluster.stop();


Mime
View raw message