You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by ls...@apache.org on 2014/11/13 08:43:43 UTC

[6/9] incubator-sentry git commit: SENTRY-432: Synchronization of HDFS permissions to Sentry permissions (Arun Suresh via Lenni Kuff)

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/2e509e4b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsDump.java
----------------------------------------------------------------------
diff --git a/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsDump.java b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsDump.java
new file mode 100644
index 0000000..200ecad
--- /dev/null
+++ b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsDump.java
@@ -0,0 +1,549 @@
+/**
+ * Autogenerated by Thrift Compiler (0.9.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.sentry.hdfs.service.thrift;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TPathsDump implements org.apache.thrift.TBase<TPathsDump, TPathsDump._Fields>, java.io.Serializable, Cloneable {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TPathsDump");
+
+  private static final org.apache.thrift.protocol.TField ROOT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("rootId", org.apache.thrift.protocol.TType.I32, (short)1);
+  private static final org.apache.thrift.protocol.TField NODE_MAP_FIELD_DESC = new org.apache.thrift.protocol.TField("nodeMap", org.apache.thrift.protocol.TType.MAP, (short)2);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new TPathsDumpStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new TPathsDumpTupleSchemeFactory());
+  }
+
+  private int rootId; // required
+  private Map<Integer,TPathEntry> nodeMap; // 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 {
+    ROOT_ID((short)1, "rootId"),
+    NODE_MAP((short)2, "nodeMap");
+
+    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: // ROOT_ID
+          return ROOT_ID;
+        case 2: // NODE_MAP
+          return NODE_MAP;
+        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
+  private static final int __ROOTID_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.ROOT_ID, new org.apache.thrift.meta_data.FieldMetaData("rootId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.NODE_MAP, new org.apache.thrift.meta_data.FieldMetaData("nodeMap", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32), 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TPathEntry.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TPathsDump.class, metaDataMap);
+  }
+
+  public TPathsDump() {
+  }
+
+  public TPathsDump(
+    int rootId,
+    Map<Integer,TPathEntry> nodeMap)
+  {
+    this();
+    this.rootId = rootId;
+    setRootIdIsSet(true);
+    this.nodeMap = nodeMap;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public TPathsDump(TPathsDump other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.rootId = other.rootId;
+    if (other.isSetNodeMap()) {
+      Map<Integer,TPathEntry> __this__nodeMap = new HashMap<Integer,TPathEntry>();
+      for (Map.Entry<Integer, TPathEntry> other_element : other.nodeMap.entrySet()) {
+
+        Integer other_element_key = other_element.getKey();
+        TPathEntry other_element_value = other_element.getValue();
+
+        Integer __this__nodeMap_copy_key = other_element_key;
+
+        TPathEntry __this__nodeMap_copy_value = new TPathEntry(other_element_value);
+
+        __this__nodeMap.put(__this__nodeMap_copy_key, __this__nodeMap_copy_value);
+      }
+      this.nodeMap = __this__nodeMap;
+    }
+  }
+
+  public TPathsDump deepCopy() {
+    return new TPathsDump(this);
+  }
+
+  @Override
+  public void clear() {
+    setRootIdIsSet(false);
+    this.rootId = 0;
+    this.nodeMap = null;
+  }
+
+  public int getRootId() {
+    return this.rootId;
+  }
+
+  public void setRootId(int rootId) {
+    this.rootId = rootId;
+    setRootIdIsSet(true);
+  }
+
+  public void unsetRootId() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __ROOTID_ISSET_ID);
+  }
+
+  /** Returns true if field rootId is set (has been assigned a value) and false otherwise */
+  public boolean isSetRootId() {
+    return EncodingUtils.testBit(__isset_bitfield, __ROOTID_ISSET_ID);
+  }
+
+  public void setRootIdIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __ROOTID_ISSET_ID, value);
+  }
+
+  public int getNodeMapSize() {
+    return (this.nodeMap == null) ? 0 : this.nodeMap.size();
+  }
+
+  public void putToNodeMap(int key, TPathEntry val) {
+    if (this.nodeMap == null) {
+      this.nodeMap = new HashMap<Integer,TPathEntry>();
+    }
+    this.nodeMap.put(key, val);
+  }
+
+  public Map<Integer,TPathEntry> getNodeMap() {
+    return this.nodeMap;
+  }
+
+  public void setNodeMap(Map<Integer,TPathEntry> nodeMap) {
+    this.nodeMap = nodeMap;
+  }
+
+  public void unsetNodeMap() {
+    this.nodeMap = null;
+  }
+
+  /** Returns true if field nodeMap is set (has been assigned a value) and false otherwise */
+  public boolean isSetNodeMap() {
+    return this.nodeMap != null;
+  }
+
+  public void setNodeMapIsSet(boolean value) {
+    if (!value) {
+      this.nodeMap = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case ROOT_ID:
+      if (value == null) {
+        unsetRootId();
+      } else {
+        setRootId((Integer)value);
+      }
+      break;
+
+    case NODE_MAP:
+      if (value == null) {
+        unsetNodeMap();
+      } else {
+        setNodeMap((Map<Integer,TPathEntry>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case ROOT_ID:
+      return Integer.valueOf(getRootId());
+
+    case NODE_MAP:
+      return getNodeMap();
+
+    }
+    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 ROOT_ID:
+      return isSetRootId();
+    case NODE_MAP:
+      return isSetNodeMap();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof TPathsDump)
+      return this.equals((TPathsDump)that);
+    return false;
+  }
+
+  public boolean equals(TPathsDump that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_rootId = true;
+    boolean that_present_rootId = true;
+    if (this_present_rootId || that_present_rootId) {
+      if (!(this_present_rootId && that_present_rootId))
+        return false;
+      if (this.rootId != that.rootId)
+        return false;
+    }
+
+    boolean this_present_nodeMap = true && this.isSetNodeMap();
+    boolean that_present_nodeMap = true && that.isSetNodeMap();
+    if (this_present_nodeMap || that_present_nodeMap) {
+      if (!(this_present_nodeMap && that_present_nodeMap))
+        return false;
+      if (!this.nodeMap.equals(that.nodeMap))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+
+    boolean present_rootId = true;
+    builder.append(present_rootId);
+    if (present_rootId)
+      builder.append(rootId);
+
+    boolean present_nodeMap = true && (isSetNodeMap());
+    builder.append(present_nodeMap);
+    if (present_nodeMap)
+      builder.append(nodeMap);
+
+    return builder.toHashCode();
+  }
+
+  public int compareTo(TPathsDump other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+    TPathsDump typedOther = (TPathsDump)other;
+
+    lastComparison = Boolean.valueOf(isSetRootId()).compareTo(typedOther.isSetRootId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetRootId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.rootId, typedOther.rootId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetNodeMap()).compareTo(typedOther.isSetNodeMap());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetNodeMap()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.nodeMap, typedOther.nodeMap);
+      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("TPathsDump(");
+    boolean first = true;
+
+    sb.append("rootId:");
+    sb.append(this.rootId);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("nodeMap:");
+    if (this.nodeMap == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.nodeMap);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!isSetRootId()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'rootId' is unset! Struct:" + toString());
+    }
+
+    if (!isSetNodeMap()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'nodeMap' is unset! Struct:" + toString());
+    }
+
+    // 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 {
+      // 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 TPathsDumpStandardSchemeFactory implements SchemeFactory {
+    public TPathsDumpStandardScheme getScheme() {
+      return new TPathsDumpStandardScheme();
+    }
+  }
+
+  private static class TPathsDumpStandardScheme extends StandardScheme<TPathsDump> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, TPathsDump 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: // ROOT_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.rootId = iprot.readI32();
+              struct.setRootIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // NODE_MAP
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map40 = iprot.readMapBegin();
+                struct.nodeMap = new HashMap<Integer,TPathEntry>(2*_map40.size);
+                for (int _i41 = 0; _i41 < _map40.size; ++_i41)
+                {
+                  int _key42; // required
+                  TPathEntry _val43; // required
+                  _key42 = iprot.readI32();
+                  _val43 = new TPathEntry();
+                  _val43.read(iprot);
+                  struct.nodeMap.put(_key42, _val43);
+                }
+                iprot.readMapEnd();
+              }
+              struct.setNodeMapIsSet(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();
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, TPathsDump struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(ROOT_ID_FIELD_DESC);
+      oprot.writeI32(struct.rootId);
+      oprot.writeFieldEnd();
+      if (struct.nodeMap != null) {
+        oprot.writeFieldBegin(NODE_MAP_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.STRUCT, struct.nodeMap.size()));
+          for (Map.Entry<Integer, TPathEntry> _iter44 : struct.nodeMap.entrySet())
+          {
+            oprot.writeI32(_iter44.getKey());
+            _iter44.getValue().write(oprot);
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class TPathsDumpTupleSchemeFactory implements SchemeFactory {
+    public TPathsDumpTupleScheme getScheme() {
+      return new TPathsDumpTupleScheme();
+    }
+  }
+
+  private static class TPathsDumpTupleScheme extends TupleScheme<TPathsDump> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, TPathsDump struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeI32(struct.rootId);
+      {
+        oprot.writeI32(struct.nodeMap.size());
+        for (Map.Entry<Integer, TPathEntry> _iter45 : struct.nodeMap.entrySet())
+        {
+          oprot.writeI32(_iter45.getKey());
+          _iter45.getValue().write(oprot);
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, TPathsDump struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.rootId = iprot.readI32();
+      struct.setRootIdIsSet(true);
+      {
+        org.apache.thrift.protocol.TMap _map46 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.I32, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.nodeMap = new HashMap<Integer,TPathEntry>(2*_map46.size);
+        for (int _i47 = 0; _i47 < _map46.size; ++_i47)
+        {
+          int _key48; // required
+          TPathEntry _val49; // required
+          _key48 = iprot.readI32();
+          _val49 = new TPathEntry();
+          _val49.read(iprot);
+          struct.nodeMap.put(_key48, _val49);
+        }
+      }
+      struct.setNodeMapIsSet(true);
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/2e509e4b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsUpdate.java
----------------------------------------------------------------------
diff --git a/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsUpdate.java b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsUpdate.java
new file mode 100644
index 0000000..d0ee6b6
--- /dev/null
+++ b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPathsUpdate.java
@@ -0,0 +1,748 @@
+/**
+ * Autogenerated by Thrift Compiler (0.9.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.sentry.hdfs.service.thrift;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TPathsUpdate implements org.apache.thrift.TBase<TPathsUpdate, TPathsUpdate._Fields>, java.io.Serializable, Cloneable {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TPathsUpdate");
+
+  private static final org.apache.thrift.protocol.TField HAS_FULL_IMAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("hasFullImage", org.apache.thrift.protocol.TType.BOOL, (short)1);
+  private static final org.apache.thrift.protocol.TField PATHS_DUMP_FIELD_DESC = new org.apache.thrift.protocol.TField("pathsDump", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+  private static final org.apache.thrift.protocol.TField SEQ_NUM_FIELD_DESC = new org.apache.thrift.protocol.TField("seqNum", org.apache.thrift.protocol.TType.I64, (short)3);
+  private static final org.apache.thrift.protocol.TField PATH_CHANGES_FIELD_DESC = new org.apache.thrift.protocol.TField("pathChanges", org.apache.thrift.protocol.TType.LIST, (short)4);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new TPathsUpdateStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new TPathsUpdateTupleSchemeFactory());
+  }
+
+  private boolean hasFullImage; // required
+  private TPathsDump pathsDump; // optional
+  private long seqNum; // required
+  private List<TPathChanges> pathChanges; // 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 {
+    HAS_FULL_IMAGE((short)1, "hasFullImage"),
+    PATHS_DUMP((short)2, "pathsDump"),
+    SEQ_NUM((short)3, "seqNum"),
+    PATH_CHANGES((short)4, "pathChanges");
+
+    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: // HAS_FULL_IMAGE
+          return HAS_FULL_IMAGE;
+        case 2: // PATHS_DUMP
+          return PATHS_DUMP;
+        case 3: // SEQ_NUM
+          return SEQ_NUM;
+        case 4: // PATH_CHANGES
+          return PATH_CHANGES;
+        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
+  private static final int __HASFULLIMAGE_ISSET_ID = 0;
+  private static final int __SEQNUM_ISSET_ID = 1;
+  private byte __isset_bitfield = 0;
+  private _Fields optionals[] = {_Fields.PATHS_DUMP};
+  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.HAS_FULL_IMAGE, new org.apache.thrift.meta_data.FieldMetaData("hasFullImage", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+    tmpMap.put(_Fields.PATHS_DUMP, new org.apache.thrift.meta_data.FieldMetaData("pathsDump", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TPathsDump.class)));
+    tmpMap.put(_Fields.SEQ_NUM, new org.apache.thrift.meta_data.FieldMetaData("seqNum", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.PATH_CHANGES, new org.apache.thrift.meta_data.FieldMetaData("pathChanges", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TPathChanges.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TPathsUpdate.class, metaDataMap);
+  }
+
+  public TPathsUpdate() {
+  }
+
+  public TPathsUpdate(
+    boolean hasFullImage,
+    long seqNum,
+    List<TPathChanges> pathChanges)
+  {
+    this();
+    this.hasFullImage = hasFullImage;
+    setHasFullImageIsSet(true);
+    this.seqNum = seqNum;
+    setSeqNumIsSet(true);
+    this.pathChanges = pathChanges;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public TPathsUpdate(TPathsUpdate other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.hasFullImage = other.hasFullImage;
+    if (other.isSetPathsDump()) {
+      this.pathsDump = new TPathsDump(other.pathsDump);
+    }
+    this.seqNum = other.seqNum;
+    if (other.isSetPathChanges()) {
+      List<TPathChanges> __this__pathChanges = new ArrayList<TPathChanges>();
+      for (TPathChanges other_element : other.pathChanges) {
+        __this__pathChanges.add(new TPathChanges(other_element));
+      }
+      this.pathChanges = __this__pathChanges;
+    }
+  }
+
+  public TPathsUpdate deepCopy() {
+    return new TPathsUpdate(this);
+  }
+
+  @Override
+  public void clear() {
+    setHasFullImageIsSet(false);
+    this.hasFullImage = false;
+    this.pathsDump = null;
+    setSeqNumIsSet(false);
+    this.seqNum = 0;
+    this.pathChanges = null;
+  }
+
+  public boolean isHasFullImage() {
+    return this.hasFullImage;
+  }
+
+  public void setHasFullImage(boolean hasFullImage) {
+    this.hasFullImage = hasFullImage;
+    setHasFullImageIsSet(true);
+  }
+
+  public void unsetHasFullImage() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID);
+  }
+
+  /** Returns true if field hasFullImage is set (has been assigned a value) and false otherwise */
+  public boolean isSetHasFullImage() {
+    return EncodingUtils.testBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID);
+  }
+
+  public void setHasFullImageIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID, value);
+  }
+
+  public TPathsDump getPathsDump() {
+    return this.pathsDump;
+  }
+
+  public void setPathsDump(TPathsDump pathsDump) {
+    this.pathsDump = pathsDump;
+  }
+
+  public void unsetPathsDump() {
+    this.pathsDump = null;
+  }
+
+  /** Returns true if field pathsDump is set (has been assigned a value) and false otherwise */
+  public boolean isSetPathsDump() {
+    return this.pathsDump != null;
+  }
+
+  public void setPathsDumpIsSet(boolean value) {
+    if (!value) {
+      this.pathsDump = null;
+    }
+  }
+
+  public long getSeqNum() {
+    return this.seqNum;
+  }
+
+  public void setSeqNum(long seqNum) {
+    this.seqNum = seqNum;
+    setSeqNumIsSet(true);
+  }
+
+  public void unsetSeqNum() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SEQNUM_ISSET_ID);
+  }
+
+  /** Returns true if field seqNum is set (has been assigned a value) and false otherwise */
+  public boolean isSetSeqNum() {
+    return EncodingUtils.testBit(__isset_bitfield, __SEQNUM_ISSET_ID);
+  }
+
+  public void setSeqNumIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SEQNUM_ISSET_ID, value);
+  }
+
+  public int getPathChangesSize() {
+    return (this.pathChanges == null) ? 0 : this.pathChanges.size();
+  }
+
+  public java.util.Iterator<TPathChanges> getPathChangesIterator() {
+    return (this.pathChanges == null) ? null : this.pathChanges.iterator();
+  }
+
+  public void addToPathChanges(TPathChanges elem) {
+    if (this.pathChanges == null) {
+      this.pathChanges = new ArrayList<TPathChanges>();
+    }
+    this.pathChanges.add(elem);
+  }
+
+  public List<TPathChanges> getPathChanges() {
+    return this.pathChanges;
+  }
+
+  public void setPathChanges(List<TPathChanges> pathChanges) {
+    this.pathChanges = pathChanges;
+  }
+
+  public void unsetPathChanges() {
+    this.pathChanges = null;
+  }
+
+  /** Returns true if field pathChanges is set (has been assigned a value) and false otherwise */
+  public boolean isSetPathChanges() {
+    return this.pathChanges != null;
+  }
+
+  public void setPathChangesIsSet(boolean value) {
+    if (!value) {
+      this.pathChanges = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case HAS_FULL_IMAGE:
+      if (value == null) {
+        unsetHasFullImage();
+      } else {
+        setHasFullImage((Boolean)value);
+      }
+      break;
+
+    case PATHS_DUMP:
+      if (value == null) {
+        unsetPathsDump();
+      } else {
+        setPathsDump((TPathsDump)value);
+      }
+      break;
+
+    case SEQ_NUM:
+      if (value == null) {
+        unsetSeqNum();
+      } else {
+        setSeqNum((Long)value);
+      }
+      break;
+
+    case PATH_CHANGES:
+      if (value == null) {
+        unsetPathChanges();
+      } else {
+        setPathChanges((List<TPathChanges>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case HAS_FULL_IMAGE:
+      return Boolean.valueOf(isHasFullImage());
+
+    case PATHS_DUMP:
+      return getPathsDump();
+
+    case SEQ_NUM:
+      return Long.valueOf(getSeqNum());
+
+    case PATH_CHANGES:
+      return getPathChanges();
+
+    }
+    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 HAS_FULL_IMAGE:
+      return isSetHasFullImage();
+    case PATHS_DUMP:
+      return isSetPathsDump();
+    case SEQ_NUM:
+      return isSetSeqNum();
+    case PATH_CHANGES:
+      return isSetPathChanges();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof TPathsUpdate)
+      return this.equals((TPathsUpdate)that);
+    return false;
+  }
+
+  public boolean equals(TPathsUpdate that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_hasFullImage = true;
+    boolean that_present_hasFullImage = true;
+    if (this_present_hasFullImage || that_present_hasFullImage) {
+      if (!(this_present_hasFullImage && that_present_hasFullImage))
+        return false;
+      if (this.hasFullImage != that.hasFullImage)
+        return false;
+    }
+
+    boolean this_present_pathsDump = true && this.isSetPathsDump();
+    boolean that_present_pathsDump = true && that.isSetPathsDump();
+    if (this_present_pathsDump || that_present_pathsDump) {
+      if (!(this_present_pathsDump && that_present_pathsDump))
+        return false;
+      if (!this.pathsDump.equals(that.pathsDump))
+        return false;
+    }
+
+    boolean this_present_seqNum = true;
+    boolean that_present_seqNum = true;
+    if (this_present_seqNum || that_present_seqNum) {
+      if (!(this_present_seqNum && that_present_seqNum))
+        return false;
+      if (this.seqNum != that.seqNum)
+        return false;
+    }
+
+    boolean this_present_pathChanges = true && this.isSetPathChanges();
+    boolean that_present_pathChanges = true && that.isSetPathChanges();
+    if (this_present_pathChanges || that_present_pathChanges) {
+      if (!(this_present_pathChanges && that_present_pathChanges))
+        return false;
+      if (!this.pathChanges.equals(that.pathChanges))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+
+    boolean present_hasFullImage = true;
+    builder.append(present_hasFullImage);
+    if (present_hasFullImage)
+      builder.append(hasFullImage);
+
+    boolean present_pathsDump = true && (isSetPathsDump());
+    builder.append(present_pathsDump);
+    if (present_pathsDump)
+      builder.append(pathsDump);
+
+    boolean present_seqNum = true;
+    builder.append(present_seqNum);
+    if (present_seqNum)
+      builder.append(seqNum);
+
+    boolean present_pathChanges = true && (isSetPathChanges());
+    builder.append(present_pathChanges);
+    if (present_pathChanges)
+      builder.append(pathChanges);
+
+    return builder.toHashCode();
+  }
+
+  public int compareTo(TPathsUpdate other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+    TPathsUpdate typedOther = (TPathsUpdate)other;
+
+    lastComparison = Boolean.valueOf(isSetHasFullImage()).compareTo(typedOther.isSetHasFullImage());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetHasFullImage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.hasFullImage, typedOther.hasFullImage);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetPathsDump()).compareTo(typedOther.isSetPathsDump());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetPathsDump()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.pathsDump, typedOther.pathsDump);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetSeqNum()).compareTo(typedOther.isSetSeqNum());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetSeqNum()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.seqNum, typedOther.seqNum);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetPathChanges()).compareTo(typedOther.isSetPathChanges());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetPathChanges()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.pathChanges, typedOther.pathChanges);
+      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("TPathsUpdate(");
+    boolean first = true;
+
+    sb.append("hasFullImage:");
+    sb.append(this.hasFullImage);
+    first = false;
+    if (isSetPathsDump()) {
+      if (!first) sb.append(", ");
+      sb.append("pathsDump:");
+      if (this.pathsDump == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.pathsDump);
+      }
+      first = false;
+    }
+    if (!first) sb.append(", ");
+    sb.append("seqNum:");
+    sb.append(this.seqNum);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("pathChanges:");
+    if (this.pathChanges == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.pathChanges);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!isSetHasFullImage()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'hasFullImage' is unset! Struct:" + toString());
+    }
+
+    if (!isSetSeqNum()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'seqNum' is unset! Struct:" + toString());
+    }
+
+    if (!isSetPathChanges()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'pathChanges' is unset! Struct:" + toString());
+    }
+
+    // check for sub-struct validity
+    if (pathsDump != null) {
+      pathsDump.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 {
+      // 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 TPathsUpdateStandardSchemeFactory implements SchemeFactory {
+    public TPathsUpdateStandardScheme getScheme() {
+      return new TPathsUpdateStandardScheme();
+    }
+  }
+
+  private static class TPathsUpdateStandardScheme extends StandardScheme<TPathsUpdate> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, TPathsUpdate 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: // HAS_FULL_IMAGE
+            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+              struct.hasFullImage = iprot.readBool();
+              struct.setHasFullImageIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // PATHS_DUMP
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.pathsDump = new TPathsDump();
+              struct.pathsDump.read(iprot);
+              struct.setPathsDumpIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // SEQ_NUM
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.seqNum = iprot.readI64();
+              struct.setSeqNumIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // PATH_CHANGES
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list50 = iprot.readListBegin();
+                struct.pathChanges = new ArrayList<TPathChanges>(_list50.size);
+                for (int _i51 = 0; _i51 < _list50.size; ++_i51)
+                {
+                  TPathChanges _elem52; // required
+                  _elem52 = new TPathChanges();
+                  _elem52.read(iprot);
+                  struct.pathChanges.add(_elem52);
+                }
+                iprot.readListEnd();
+              }
+              struct.setPathChangesIsSet(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();
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, TPathsUpdate struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(HAS_FULL_IMAGE_FIELD_DESC);
+      oprot.writeBool(struct.hasFullImage);
+      oprot.writeFieldEnd();
+      if (struct.pathsDump != null) {
+        if (struct.isSetPathsDump()) {
+          oprot.writeFieldBegin(PATHS_DUMP_FIELD_DESC);
+          struct.pathsDump.write(oprot);
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldBegin(SEQ_NUM_FIELD_DESC);
+      oprot.writeI64(struct.seqNum);
+      oprot.writeFieldEnd();
+      if (struct.pathChanges != null) {
+        oprot.writeFieldBegin(PATH_CHANGES_FIELD_DESC);
+        {
+          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.pathChanges.size()));
+          for (TPathChanges _iter53 : struct.pathChanges)
+          {
+            _iter53.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class TPathsUpdateTupleSchemeFactory implements SchemeFactory {
+    public TPathsUpdateTupleScheme getScheme() {
+      return new TPathsUpdateTupleScheme();
+    }
+  }
+
+  private static class TPathsUpdateTupleScheme extends TupleScheme<TPathsUpdate> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, TPathsUpdate struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeBool(struct.hasFullImage);
+      oprot.writeI64(struct.seqNum);
+      {
+        oprot.writeI32(struct.pathChanges.size());
+        for (TPathChanges _iter54 : struct.pathChanges)
+        {
+          _iter54.write(oprot);
+        }
+      }
+      BitSet optionals = new BitSet();
+      if (struct.isSetPathsDump()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.isSetPathsDump()) {
+        struct.pathsDump.write(oprot);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, TPathsUpdate struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.hasFullImage = iprot.readBool();
+      struct.setHasFullImageIsSet(true);
+      struct.seqNum = iprot.readI64();
+      struct.setSeqNumIsSet(true);
+      {
+        org.apache.thrift.protocol.TList _list55 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.pathChanges = new ArrayList<TPathChanges>(_list55.size);
+        for (int _i56 = 0; _i56 < _list55.size; ++_i56)
+        {
+          TPathChanges _elem57; // required
+          _elem57 = new TPathChanges();
+          _elem57.read(iprot);
+          struct.pathChanges.add(_elem57);
+        }
+      }
+      struct.setPathChangesIsSet(true);
+      BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        struct.pathsDump = new TPathsDump();
+        struct.pathsDump.read(iprot);
+        struct.setPathsDumpIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/2e509e4b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPermissionsUpdate.java
----------------------------------------------------------------------
diff --git a/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPermissionsUpdate.java b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPermissionsUpdate.java
new file mode 100644
index 0000000..850404b
--- /dev/null
+++ b/sentry-hdfs/sentry-hdfs-common/src/gen/thrift/gen-javabean/org/apache/sentry/hdfs/service/thrift/TPermissionsUpdate.java
@@ -0,0 +1,810 @@
+/**
+ * Autogenerated by Thrift Compiler (0.9.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.sentry.hdfs.service.thrift;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TPermissionsUpdate implements org.apache.thrift.TBase<TPermissionsUpdate, TPermissionsUpdate._Fields>, java.io.Serializable, Cloneable {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TPermissionsUpdate");
+
+  private static final org.apache.thrift.protocol.TField HASFULL_IMAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("hasfullImage", org.apache.thrift.protocol.TType.BOOL, (short)1);
+  private static final org.apache.thrift.protocol.TField SEQ_NUM_FIELD_DESC = new org.apache.thrift.protocol.TField("seqNum", org.apache.thrift.protocol.TType.I64, (short)2);
+  private static final org.apache.thrift.protocol.TField PRIVILEGE_CHANGES_FIELD_DESC = new org.apache.thrift.protocol.TField("privilegeChanges", org.apache.thrift.protocol.TType.MAP, (short)3);
+  private static final org.apache.thrift.protocol.TField ROLE_CHANGES_FIELD_DESC = new org.apache.thrift.protocol.TField("roleChanges", org.apache.thrift.protocol.TType.MAP, (short)4);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new TPermissionsUpdateStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new TPermissionsUpdateTupleSchemeFactory());
+  }
+
+  private boolean hasfullImage; // required
+  private long seqNum; // required
+  private Map<String,TPrivilegeChanges> privilegeChanges; // required
+  private Map<String,TRoleChanges> roleChanges; // 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 {
+    HASFULL_IMAGE((short)1, "hasfullImage"),
+    SEQ_NUM((short)2, "seqNum"),
+    PRIVILEGE_CHANGES((short)3, "privilegeChanges"),
+    ROLE_CHANGES((short)4, "roleChanges");
+
+    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: // HASFULL_IMAGE
+          return HASFULL_IMAGE;
+        case 2: // SEQ_NUM
+          return SEQ_NUM;
+        case 3: // PRIVILEGE_CHANGES
+          return PRIVILEGE_CHANGES;
+        case 4: // ROLE_CHANGES
+          return ROLE_CHANGES;
+        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
+  private static final int __HASFULLIMAGE_ISSET_ID = 0;
+  private static final int __SEQNUM_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.HASFULL_IMAGE, new org.apache.thrift.meta_data.FieldMetaData("hasfullImage", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+    tmpMap.put(_Fields.SEQ_NUM, new org.apache.thrift.meta_data.FieldMetaData("seqNum", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.PRIVILEGE_CHANGES, new org.apache.thrift.meta_data.FieldMetaData("privilegeChanges", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TPrivilegeChanges.class))));
+    tmpMap.put(_Fields.ROLE_CHANGES, new org.apache.thrift.meta_data.FieldMetaData("roleChanges", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TRoleChanges.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TPermissionsUpdate.class, metaDataMap);
+  }
+
+  public TPermissionsUpdate() {
+  }
+
+  public TPermissionsUpdate(
+    boolean hasfullImage,
+    long seqNum,
+    Map<String,TPrivilegeChanges> privilegeChanges,
+    Map<String,TRoleChanges> roleChanges)
+  {
+    this();
+    this.hasfullImage = hasfullImage;
+    setHasfullImageIsSet(true);
+    this.seqNum = seqNum;
+    setSeqNumIsSet(true);
+    this.privilegeChanges = privilegeChanges;
+    this.roleChanges = roleChanges;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public TPermissionsUpdate(TPermissionsUpdate other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.hasfullImage = other.hasfullImage;
+    this.seqNum = other.seqNum;
+    if (other.isSetPrivilegeChanges()) {
+      Map<String,TPrivilegeChanges> __this__privilegeChanges = new HashMap<String,TPrivilegeChanges>();
+      for (Map.Entry<String, TPrivilegeChanges> other_element : other.privilegeChanges.entrySet()) {
+
+        String other_element_key = other_element.getKey();
+        TPrivilegeChanges other_element_value = other_element.getValue();
+
+        String __this__privilegeChanges_copy_key = other_element_key;
+
+        TPrivilegeChanges __this__privilegeChanges_copy_value = new TPrivilegeChanges(other_element_value);
+
+        __this__privilegeChanges.put(__this__privilegeChanges_copy_key, __this__privilegeChanges_copy_value);
+      }
+      this.privilegeChanges = __this__privilegeChanges;
+    }
+    if (other.isSetRoleChanges()) {
+      Map<String,TRoleChanges> __this__roleChanges = new HashMap<String,TRoleChanges>();
+      for (Map.Entry<String, TRoleChanges> other_element : other.roleChanges.entrySet()) {
+
+        String other_element_key = other_element.getKey();
+        TRoleChanges other_element_value = other_element.getValue();
+
+        String __this__roleChanges_copy_key = other_element_key;
+
+        TRoleChanges __this__roleChanges_copy_value = new TRoleChanges(other_element_value);
+
+        __this__roleChanges.put(__this__roleChanges_copy_key, __this__roleChanges_copy_value);
+      }
+      this.roleChanges = __this__roleChanges;
+    }
+  }
+
+  public TPermissionsUpdate deepCopy() {
+    return new TPermissionsUpdate(this);
+  }
+
+  @Override
+  public void clear() {
+    setHasfullImageIsSet(false);
+    this.hasfullImage = false;
+    setSeqNumIsSet(false);
+    this.seqNum = 0;
+    this.privilegeChanges = null;
+    this.roleChanges = null;
+  }
+
+  public boolean isHasfullImage() {
+    return this.hasfullImage;
+  }
+
+  public void setHasfullImage(boolean hasfullImage) {
+    this.hasfullImage = hasfullImage;
+    setHasfullImageIsSet(true);
+  }
+
+  public void unsetHasfullImage() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID);
+  }
+
+  /** Returns true if field hasfullImage is set (has been assigned a value) and false otherwise */
+  public boolean isSetHasfullImage() {
+    return EncodingUtils.testBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID);
+  }
+
+  public void setHasfullImageIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __HASFULLIMAGE_ISSET_ID, value);
+  }
+
+  public long getSeqNum() {
+    return this.seqNum;
+  }
+
+  public void setSeqNum(long seqNum) {
+    this.seqNum = seqNum;
+    setSeqNumIsSet(true);
+  }
+
+  public void unsetSeqNum() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SEQNUM_ISSET_ID);
+  }
+
+  /** Returns true if field seqNum is set (has been assigned a value) and false otherwise */
+  public boolean isSetSeqNum() {
+    return EncodingUtils.testBit(__isset_bitfield, __SEQNUM_ISSET_ID);
+  }
+
+  public void setSeqNumIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SEQNUM_ISSET_ID, value);
+  }
+
+  public int getPrivilegeChangesSize() {
+    return (this.privilegeChanges == null) ? 0 : this.privilegeChanges.size();
+  }
+
+  public void putToPrivilegeChanges(String key, TPrivilegeChanges val) {
+    if (this.privilegeChanges == null) {
+      this.privilegeChanges = new HashMap<String,TPrivilegeChanges>();
+    }
+    this.privilegeChanges.put(key, val);
+  }
+
+  public Map<String,TPrivilegeChanges> getPrivilegeChanges() {
+    return this.privilegeChanges;
+  }
+
+  public void setPrivilegeChanges(Map<String,TPrivilegeChanges> privilegeChanges) {
+    this.privilegeChanges = privilegeChanges;
+  }
+
+  public void unsetPrivilegeChanges() {
+    this.privilegeChanges = null;
+  }
+
+  /** Returns true if field privilegeChanges is set (has been assigned a value) and false otherwise */
+  public boolean isSetPrivilegeChanges() {
+    return this.privilegeChanges != null;
+  }
+
+  public void setPrivilegeChangesIsSet(boolean value) {
+    if (!value) {
+      this.privilegeChanges = null;
+    }
+  }
+
+  public int getRoleChangesSize() {
+    return (this.roleChanges == null) ? 0 : this.roleChanges.size();
+  }
+
+  public void putToRoleChanges(String key, TRoleChanges val) {
+    if (this.roleChanges == null) {
+      this.roleChanges = new HashMap<String,TRoleChanges>();
+    }
+    this.roleChanges.put(key, val);
+  }
+
+  public Map<String,TRoleChanges> getRoleChanges() {
+    return this.roleChanges;
+  }
+
+  public void setRoleChanges(Map<String,TRoleChanges> roleChanges) {
+    this.roleChanges = roleChanges;
+  }
+
+  public void unsetRoleChanges() {
+    this.roleChanges = null;
+  }
+
+  /** Returns true if field roleChanges is set (has been assigned a value) and false otherwise */
+  public boolean isSetRoleChanges() {
+    return this.roleChanges != null;
+  }
+
+  public void setRoleChangesIsSet(boolean value) {
+    if (!value) {
+      this.roleChanges = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case HASFULL_IMAGE:
+      if (value == null) {
+        unsetHasfullImage();
+      } else {
+        setHasfullImage((Boolean)value);
+      }
+      break;
+
+    case SEQ_NUM:
+      if (value == null) {
+        unsetSeqNum();
+      } else {
+        setSeqNum((Long)value);
+      }
+      break;
+
+    case PRIVILEGE_CHANGES:
+      if (value == null) {
+        unsetPrivilegeChanges();
+      } else {
+        setPrivilegeChanges((Map<String,TPrivilegeChanges>)value);
+      }
+      break;
+
+    case ROLE_CHANGES:
+      if (value == null) {
+        unsetRoleChanges();
+      } else {
+        setRoleChanges((Map<String,TRoleChanges>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case HASFULL_IMAGE:
+      return Boolean.valueOf(isHasfullImage());
+
+    case SEQ_NUM:
+      return Long.valueOf(getSeqNum());
+
+    case PRIVILEGE_CHANGES:
+      return getPrivilegeChanges();
+
+    case ROLE_CHANGES:
+      return getRoleChanges();
+
+    }
+    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 HASFULL_IMAGE:
+      return isSetHasfullImage();
+    case SEQ_NUM:
+      return isSetSeqNum();
+    case PRIVILEGE_CHANGES:
+      return isSetPrivilegeChanges();
+    case ROLE_CHANGES:
+      return isSetRoleChanges();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof TPermissionsUpdate)
+      return this.equals((TPermissionsUpdate)that);
+    return false;
+  }
+
+  public boolean equals(TPermissionsUpdate that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_hasfullImage = true;
+    boolean that_present_hasfullImage = true;
+    if (this_present_hasfullImage || that_present_hasfullImage) {
+      if (!(this_present_hasfullImage && that_present_hasfullImage))
+        return false;
+      if (this.hasfullImage != that.hasfullImage)
+        return false;
+    }
+
+    boolean this_present_seqNum = true;
+    boolean that_present_seqNum = true;
+    if (this_present_seqNum || that_present_seqNum) {
+      if (!(this_present_seqNum && that_present_seqNum))
+        return false;
+      if (this.seqNum != that.seqNum)
+        return false;
+    }
+
+    boolean this_present_privilegeChanges = true && this.isSetPrivilegeChanges();
+    boolean that_present_privilegeChanges = true && that.isSetPrivilegeChanges();
+    if (this_present_privilegeChanges || that_present_privilegeChanges) {
+      if (!(this_present_privilegeChanges && that_present_privilegeChanges))
+        return false;
+      if (!this.privilegeChanges.equals(that.privilegeChanges))
+        return false;
+    }
+
+    boolean this_present_roleChanges = true && this.isSetRoleChanges();
+    boolean that_present_roleChanges = true && that.isSetRoleChanges();
+    if (this_present_roleChanges || that_present_roleChanges) {
+      if (!(this_present_roleChanges && that_present_roleChanges))
+        return false;
+      if (!this.roleChanges.equals(that.roleChanges))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+
+    boolean present_hasfullImage = true;
+    builder.append(present_hasfullImage);
+    if (present_hasfullImage)
+      builder.append(hasfullImage);
+
+    boolean present_seqNum = true;
+    builder.append(present_seqNum);
+    if (present_seqNum)
+      builder.append(seqNum);
+
+    boolean present_privilegeChanges = true && (isSetPrivilegeChanges());
+    builder.append(present_privilegeChanges);
+    if (present_privilegeChanges)
+      builder.append(privilegeChanges);
+
+    boolean present_roleChanges = true && (isSetRoleChanges());
+    builder.append(present_roleChanges);
+    if (present_roleChanges)
+      builder.append(roleChanges);
+
+    return builder.toHashCode();
+  }
+
+  public int compareTo(TPermissionsUpdate other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+    TPermissionsUpdate typedOther = (TPermissionsUpdate)other;
+
+    lastComparison = Boolean.valueOf(isSetHasfullImage()).compareTo(typedOther.isSetHasfullImage());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetHasfullImage()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.hasfullImage, typedOther.hasfullImage);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetSeqNum()).compareTo(typedOther.isSetSeqNum());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetSeqNum()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.seqNum, typedOther.seqNum);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetPrivilegeChanges()).compareTo(typedOther.isSetPrivilegeChanges());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetPrivilegeChanges()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.privilegeChanges, typedOther.privilegeChanges);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetRoleChanges()).compareTo(typedOther.isSetRoleChanges());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetRoleChanges()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.roleChanges, typedOther.roleChanges);
+      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("TPermissionsUpdate(");
+    boolean first = true;
+
+    sb.append("hasfullImage:");
+    sb.append(this.hasfullImage);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("seqNum:");
+    sb.append(this.seqNum);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("privilegeChanges:");
+    if (this.privilegeChanges == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.privilegeChanges);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("roleChanges:");
+    if (this.roleChanges == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.roleChanges);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!isSetHasfullImage()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'hasfullImage' is unset! Struct:" + toString());
+    }
+
+    if (!isSetSeqNum()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'seqNum' is unset! Struct:" + toString());
+    }
+
+    if (!isSetPrivilegeChanges()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'privilegeChanges' is unset! Struct:" + toString());
+    }
+
+    if (!isSetRoleChanges()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'roleChanges' is unset! Struct:" + toString());
+    }
+
+    // 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 {
+      // 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 TPermissionsUpdateStandardSchemeFactory implements SchemeFactory {
+    public TPermissionsUpdateStandardScheme getScheme() {
+      return new TPermissionsUpdateStandardScheme();
+    }
+  }
+
+  private static class TPermissionsUpdateStandardScheme extends StandardScheme<TPermissionsUpdate> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, TPermissionsUpdate 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: // HASFULL_IMAGE
+            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
+              struct.hasfullImage = iprot.readBool();
+              struct.setHasfullImageIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // SEQ_NUM
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.seqNum = iprot.readI64();
+              struct.setSeqNumIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // PRIVILEGE_CHANGES
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map94 = iprot.readMapBegin();
+                struct.privilegeChanges = new HashMap<String,TPrivilegeChanges>(2*_map94.size);
+                for (int _i95 = 0; _i95 < _map94.size; ++_i95)
+                {
+                  String _key96; // required
+                  TPrivilegeChanges _val97; // required
+                  _key96 = iprot.readString();
+                  _val97 = new TPrivilegeChanges();
+                  _val97.read(iprot);
+                  struct.privilegeChanges.put(_key96, _val97);
+                }
+                iprot.readMapEnd();
+              }
+              struct.setPrivilegeChangesIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // ROLE_CHANGES
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map98 = iprot.readMapBegin();
+                struct.roleChanges = new HashMap<String,TRoleChanges>(2*_map98.size);
+                for (int _i99 = 0; _i99 < _map98.size; ++_i99)
+                {
+                  String _key100; // required
+                  TRoleChanges _val101; // required
+                  _key100 = iprot.readString();
+                  _val101 = new TRoleChanges();
+                  _val101.read(iprot);
+                  struct.roleChanges.put(_key100, _val101);
+                }
+                iprot.readMapEnd();
+              }
+              struct.setRoleChangesIsSet(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();
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, TPermissionsUpdate struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(HASFULL_IMAGE_FIELD_DESC);
+      oprot.writeBool(struct.hasfullImage);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(SEQ_NUM_FIELD_DESC);
+      oprot.writeI64(struct.seqNum);
+      oprot.writeFieldEnd();
+      if (struct.privilegeChanges != null) {
+        oprot.writeFieldBegin(PRIVILEGE_CHANGES_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, struct.privilegeChanges.size()));
+          for (Map.Entry<String, TPrivilegeChanges> _iter102 : struct.privilegeChanges.entrySet())
+          {
+            oprot.writeString(_iter102.getKey());
+            _iter102.getValue().write(oprot);
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      if (struct.roleChanges != null) {
+        oprot.writeFieldBegin(ROLE_CHANGES_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, struct.roleChanges.size()));
+          for (Map.Entry<String, TRoleChanges> _iter103 : struct.roleChanges.entrySet())
+          {
+            oprot.writeString(_iter103.getKey());
+            _iter103.getValue().write(oprot);
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class TPermissionsUpdateTupleSchemeFactory implements SchemeFactory {
+    public TPermissionsUpdateTupleScheme getScheme() {
+      return new TPermissionsUpdateTupleScheme();
+    }
+  }
+
+  private static class TPermissionsUpdateTupleScheme extends TupleScheme<TPermissionsUpdate> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, TPermissionsUpdate struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeBool(struct.hasfullImage);
+      oprot.writeI64(struct.seqNum);
+      {
+        oprot.writeI32(struct.privilegeChanges.size());
+        for (Map.Entry<String, TPrivilegeChanges> _iter104 : struct.privilegeChanges.entrySet())
+        {
+          oprot.writeString(_iter104.getKey());
+          _iter104.getValue().write(oprot);
+        }
+      }
+      {
+        oprot.writeI32(struct.roleChanges.size());
+        for (Map.Entry<String, TRoleChanges> _iter105 : struct.roleChanges.entrySet())
+        {
+          oprot.writeString(_iter105.getKey());
+          _iter105.getValue().write(oprot);
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, TPermissionsUpdate struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.hasfullImage = iprot.readBool();
+      struct.setHasfullImageIsSet(true);
+      struct.seqNum = iprot.readI64();
+      struct.setSeqNumIsSet(true);
+      {
+        org.apache.thrift.protocol.TMap _map106 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.privilegeChanges = new HashMap<String,TPrivilegeChanges>(2*_map106.size);
+        for (int _i107 = 0; _i107 < _map106.size; ++_i107)
+        {
+          String _key108; // required
+          TPrivilegeChanges _val109; // required
+          _key108 = iprot.readString();
+          _val109 = new TPrivilegeChanges();
+          _val109.read(iprot);
+          struct.privilegeChanges.put(_key108, _val109);
+        }
+      }
+      struct.setPrivilegeChangesIsSet(true);
+      {
+        org.apache.thrift.protocol.TMap _map110 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.roleChanges = new HashMap<String,TRoleChanges>(2*_map110.size);
+        for (int _i111 = 0; _i111 < _map110.size; ++_i111)
+        {
+          String _key112; // required
+          TRoleChanges _val113; // required
+          _key112 = iprot.readString();
+          _val113 = new TRoleChanges();
+          _val113.read(iprot);
+          struct.roleChanges.put(_key112, _val113);
+        }
+      }
+      struct.setRoleChangesIsSet(true);
+    }
+  }
+
+}
+