You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2015/03/18 20:39:16 UTC

[09/16] storm git commit: Regenrated the files using thrift-0.9.2 and fixed some bugs introduced by upmerging.

http://git-wip-us.apache.org/repos/asf/storm/blob/539a6a21/storm-core/src/jvm/backtype/storm/generated/ZKWorkerHeartbeat.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/generated/ZKWorkerHeartbeat.java b/storm-core/src/jvm/backtype/storm/generated/ZKWorkerHeartbeat.java
index 47d8428..01c5c67 100644
--- a/storm-core/src/jvm/backtype/storm/generated/ZKWorkerHeartbeat.java
+++ b/storm-core/src/jvm/backtype/storm/generated/ZKWorkerHeartbeat.java
@@ -16,13 +16,24 @@
  * limitations under the License.
  */
 /**
- * Autogenerated by Thrift Compiler (0.7.0)
+ * Autogenerated by Thrift Compiler (0.9.2)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
  */
 package backtype.storm.generated;
 
-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 org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
@@ -35,16 +46,25 @@ import java.util.Collections;
 import java.util.BitSet;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import javax.annotation.Generated;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartbeat, ZKWorkerHeartbeat._Fields>, java.io.Serializable, Cloneable {
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-3-5")
+public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartbeat, ZKWorkerHeartbeat._Fields>, java.io.Serializable, Cloneable, Comparable<ZKWorkerHeartbeat> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ZKWorkerHeartbeat");
 
   private static final org.apache.thrift.protocol.TField STORM_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("storm_id", org.apache.thrift.protocol.TType.STRING, (short)1);
   private static final org.apache.thrift.protocol.TField EXECUTOR_STATS_FIELD_DESC = new org.apache.thrift.protocol.TField("executor_stats", org.apache.thrift.protocol.TType.MAP, (short)2);
   private static final org.apache.thrift.protocol.TField TIME_SECS_FIELD_DESC = new org.apache.thrift.protocol.TField("time_secs", org.apache.thrift.protocol.TType.I32, (short)3);
 
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new ZKWorkerHeartbeatStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new ZKWorkerHeartbeatTupleSchemeFactory());
+  }
+
   private String storm_id; // required
   private Map<ExecutorInfo,ExecutorStats> executor_stats; // required
   private int time_secs; // required
@@ -115,18 +135,17 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
 
   // isset id assignments
   private static final int __TIME_SECS_ISSET_ID = 0;
-  private BitSet __isset_bit_vector = new BitSet(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.STORM_ID, new org.apache.thrift.meta_data.FieldMetaData("storm_id", org.apache.thrift.TFieldRequirementType.REQUIRED,
+    tmpMap.put(_Fields.STORM_ID, new org.apache.thrift.meta_data.FieldMetaData("storm_id", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-    tmpMap.put(_Fields.EXECUTOR_STATS, new org.apache.thrift.meta_data.FieldMetaData("executor_stats", org.apache.thrift.TFieldRequirementType.REQUIRED,
-        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP,
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ExecutorInfo.class),
+    tmpMap.put(_Fields.EXECUTOR_STATS, new org.apache.thrift.meta_data.FieldMetaData("executor_stats", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ExecutorInfo.class), 
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, ExecutorStats.class))));
-    tmpMap.put(_Fields.TIME_SECS, new org.apache.thrift.meta_data.FieldMetaData("time_secs", org.apache.thrift.TFieldRequirementType.REQUIRED,
+    tmpMap.put(_Fields.TIME_SECS, new org.apache.thrift.meta_data.FieldMetaData("time_secs", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ZKWorkerHeartbeat.class, metaDataMap);
@@ -151,13 +170,12 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
    * Performs a deep copy on <i>other</i>.
    */
   public ZKWorkerHeartbeat(ZKWorkerHeartbeat other) {
-    __isset_bit_vector.clear();
-    __isset_bit_vector.or(other.__isset_bit_vector);
+    __isset_bitfield = other.__isset_bitfield;
     if (other.is_set_storm_id()) {
       this.storm_id = other.storm_id;
     }
     if (other.is_set_executor_stats()) {
-      Map<ExecutorInfo,ExecutorStats> __this__executor_stats = new HashMap<ExecutorInfo,ExecutorStats>();
+      Map<ExecutorInfo,ExecutorStats> __this__executor_stats = new HashMap<ExecutorInfo,ExecutorStats>(other.executor_stats.size());
       for (Map.Entry<ExecutorInfo, ExecutorStats> other_element : other.executor_stats.entrySet()) {
 
         ExecutorInfo other_element_key = other_element.getKey();
@@ -253,16 +271,16 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
   }
 
   public void unset_time_secs() {
-    __isset_bit_vector.clear(__TIME_SECS_ISSET_ID);
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __TIME_SECS_ISSET_ID);
   }
 
   /** Returns true if field time_secs is set (has been assigned a value) and false otherwise */
   public boolean is_set_time_secs() {
-    return __isset_bit_vector.get(__TIME_SECS_ISSET_ID);
+    return EncodingUtils.testBit(__isset_bitfield, __TIME_SECS_ISSET_ID);
   }
 
   public void set_time_secs_isSet(boolean value) {
-    __isset_bit_vector.set(__TIME_SECS_ISSET_ID, value);
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TIME_SECS_ISSET_ID, value);
   }
 
   public void setFieldValue(_Fields field, Object value) {
@@ -371,60 +389,60 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
 
   @Override
   public int hashCode() {
-    HashCodeBuilder builder = new HashCodeBuilder();
+    List<Object> list = new ArrayList<Object>();
 
     boolean present_storm_id = true && (is_set_storm_id());
-    builder.append(present_storm_id);
+    list.add(present_storm_id);
     if (present_storm_id)
-      builder.append(storm_id);
+      list.add(storm_id);
 
     boolean present_executor_stats = true && (is_set_executor_stats());
-    builder.append(present_executor_stats);
+    list.add(present_executor_stats);
     if (present_executor_stats)
-      builder.append(executor_stats);
+      list.add(executor_stats);
 
     boolean present_time_secs = true;
-    builder.append(present_time_secs);
+    list.add(present_time_secs);
     if (present_time_secs)
-      builder.append(time_secs);
+      list.add(time_secs);
 
-    return builder.toHashCode();
+    return list.hashCode();
   }
 
+  @Override
   public int compareTo(ZKWorkerHeartbeat other) {
     if (!getClass().equals(other.getClass())) {
       return getClass().getName().compareTo(other.getClass().getName());
     }
 
     int lastComparison = 0;
-    ZKWorkerHeartbeat typedOther = (ZKWorkerHeartbeat)other;
 
-    lastComparison = Boolean.valueOf(is_set_storm_id()).compareTo(typedOther.is_set_storm_id());
+    lastComparison = Boolean.valueOf(is_set_storm_id()).compareTo(other.is_set_storm_id());
     if (lastComparison != 0) {
       return lastComparison;
     }
     if (is_set_storm_id()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.storm_id, typedOther.storm_id);
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.storm_id, other.storm_id);
       if (lastComparison != 0) {
         return lastComparison;
       }
     }
-    lastComparison = Boolean.valueOf(is_set_executor_stats()).compareTo(typedOther.is_set_executor_stats());
+    lastComparison = Boolean.valueOf(is_set_executor_stats()).compareTo(other.is_set_executor_stats());
     if (lastComparison != 0) {
       return lastComparison;
     }
     if (is_set_executor_stats()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.executor_stats, typedOther.executor_stats);
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.executor_stats, other.executor_stats);
       if (lastComparison != 0) {
         return lastComparison;
       }
     }
-    lastComparison = Boolean.valueOf(is_set_time_secs()).compareTo(typedOther.is_set_time_secs());
+    lastComparison = Boolean.valueOf(is_set_time_secs()).compareTo(other.is_set_time_secs());
     if (lastComparison != 0) {
       return lastComparison;
     }
     if (is_set_time_secs()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.time_secs, typedOther.time_secs);
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.time_secs, other.time_secs);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -437,87 +455,11 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
   }
 
   public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-    org.apache.thrift.protocol.TField field;
-    iprot.readStructBegin();
-    while (true)
-    {
-      field = iprot.readFieldBegin();
-      if (field.type == org.apache.thrift.protocol.TType.STOP) {
-        break;
-      }
-      switch (field.id) {
-        case 1: // STORM_ID
-          if (field.type == org.apache.thrift.protocol.TType.STRING) {
-            this.storm_id = iprot.readString();
-          } else { 
-            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-          }
-          break;
-        case 2: // EXECUTOR_STATS
-          if (field.type == org.apache.thrift.protocol.TType.MAP) {
-            {
-              org.apache.thrift.protocol.TMap _map213 = iprot.readMapBegin();
-              this.executor_stats = new HashMap<ExecutorInfo,ExecutorStats>(2*_map213.size);
-              for (int _i214 = 0; _i214 < _map213.size; ++_i214)
-              {
-                ExecutorInfo _key215; // required
-                ExecutorStats _val216; // required
-                _key215 = new ExecutorInfo();
-                _key215.read(iprot);
-                _val216 = new ExecutorStats();
-                _val216.read(iprot);
-                this.executor_stats.put(_key215, _val216);
-              }
-              iprot.readMapEnd();
-            }
-          } else { 
-            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-          }
-          break;
-        case 3: // TIME_SECS
-          if (field.type == org.apache.thrift.protocol.TType.I32) {
-            this.time_secs = iprot.readI32();
-            set_time_secs_isSet(true);
-          } else { 
-            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-          }
-          break;
-        default:
-          org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
-      }
-      iprot.readFieldEnd();
-    }
-    iprot.readStructEnd();
-    validate();
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
   }
 
   public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-    validate();
-
-    oprot.writeStructBegin(STRUCT_DESC);
-    if (this.storm_id != null) {
-      oprot.writeFieldBegin(STORM_ID_FIELD_DESC);
-      oprot.writeString(this.storm_id);
-      oprot.writeFieldEnd();
-    }
-    if (this.executor_stats != null) {
-      oprot.writeFieldBegin(EXECUTOR_STATS_FIELD_DESC);
-      {
-        oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.STRUCT, this.executor_stats.size()));
-        for (Map.Entry<ExecutorInfo, ExecutorStats> _iter217 : this.executor_stats.entrySet())
-        {
-          _iter217.getKey().write(oprot);
-          _iter217.getValue().write(oprot);
-        }
-        oprot.writeMapEnd();
-      }
-      oprot.writeFieldEnd();
-    }
-    oprot.writeFieldBegin(TIME_SECS_FIELD_DESC);
-    oprot.writeI32(this.time_secs);
-    oprot.writeFieldEnd();
-    oprot.writeFieldStop();
-    oprot.writeStructEnd();
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
   }
 
   @Override
@@ -562,6 +504,7 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
       throw new org.apache.thrift.protocol.TProtocolException("Required field 'time_secs' is unset! Struct:" + toString());
     }
 
+    // check for sub-struct validity
   }
 
   private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -575,12 +518,156 @@ public class ZKWorkerHeartbeat implements org.apache.thrift.TBase<ZKWorkerHeartb
   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_bit_vector = new BitSet(1);
+      __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 ZKWorkerHeartbeatStandardSchemeFactory implements SchemeFactory {
+    public ZKWorkerHeartbeatStandardScheme getScheme() {
+      return new ZKWorkerHeartbeatStandardScheme();
+    }
+  }
+
+  private static class ZKWorkerHeartbeatStandardScheme extends StandardScheme<ZKWorkerHeartbeat> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, ZKWorkerHeartbeat 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: // STORM_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.storm_id = iprot.readString();
+              struct.set_storm_id_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // EXECUTOR_STATS
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map426 = iprot.readMapBegin();
+                struct.executor_stats = new HashMap<ExecutorInfo,ExecutorStats>(2*_map426.size);
+                ExecutorInfo _key427;
+                ExecutorStats _val428;
+                for (int _i429 = 0; _i429 < _map426.size; ++_i429)
+                {
+                  _key427 = new ExecutorInfo();
+                  _key427.read(iprot);
+                  _val428 = new ExecutorStats();
+                  _val428.read(iprot);
+                  struct.executor_stats.put(_key427, _val428);
+                }
+                iprot.readMapEnd();
+              }
+              struct.set_executor_stats_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // TIME_SECS
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.time_secs = iprot.readI32();
+              struct.set_time_secs_isSet(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, ZKWorkerHeartbeat struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.storm_id != null) {
+        oprot.writeFieldBegin(STORM_ID_FIELD_DESC);
+        oprot.writeString(struct.storm_id);
+        oprot.writeFieldEnd();
+      }
+      if (struct.executor_stats != null) {
+        oprot.writeFieldBegin(EXECUTOR_STATS_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.STRUCT, struct.executor_stats.size()));
+          for (Map.Entry<ExecutorInfo, ExecutorStats> _iter430 : struct.executor_stats.entrySet())
+          {
+            _iter430.getKey().write(oprot);
+            _iter430.getValue().write(oprot);
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(TIME_SECS_FIELD_DESC);
+      oprot.writeI32(struct.time_secs);
+      oprot.writeFieldEnd();
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class ZKWorkerHeartbeatTupleSchemeFactory implements SchemeFactory {
+    public ZKWorkerHeartbeatTupleScheme getScheme() {
+      return new ZKWorkerHeartbeatTupleScheme();
+    }
+  }
+
+  private static class ZKWorkerHeartbeatTupleScheme extends TupleScheme<ZKWorkerHeartbeat> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, ZKWorkerHeartbeat struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.storm_id);
+      {
+        oprot.writeI32(struct.executor_stats.size());
+        for (Map.Entry<ExecutorInfo, ExecutorStats> _iter431 : struct.executor_stats.entrySet())
+        {
+          _iter431.getKey().write(oprot);
+          _iter431.getValue().write(oprot);
+        }
+      }
+      oprot.writeI32(struct.time_secs);
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, ZKWorkerHeartbeat struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.storm_id = iprot.readString();
+      struct.set_storm_id_isSet(true);
+      {
+        org.apache.thrift.protocol.TMap _map432 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRUCT, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.executor_stats = new HashMap<ExecutorInfo,ExecutorStats>(2*_map432.size);
+        ExecutorInfo _key433;
+        ExecutorStats _val434;
+        for (int _i435 = 0; _i435 < _map432.size; ++_i435)
+        {
+          _key433 = new ExecutorInfo();
+          _key433.read(iprot);
+          _val434 = new ExecutorStats();
+          _val434.read(iprot);
+          struct.executor_stats.put(_key433, _val434);
+        }
+      }
+      struct.set_executor_stats_isSet(true);
+      struct.time_secs = iprot.readI32();
+      struct.set_time_secs_isSet(true);
+    }
+  }
+
 }
 

http://git-wip-us.apache.org/repos/asf/storm/blob/539a6a21/storm-core/src/py/storm/ttypes.py
----------------------------------------------------------------------
diff --git a/storm-core/src/py/storm/ttypes.py b/storm-core/src/py/storm/ttypes.py
index 8c3f5e6..924f761 100644
--- a/storm-core/src/py/storm/ttypes.py
+++ b/storm-core/src/py/storm/ttypes.py
@@ -46,6 +46,26 @@ class TopologyInitialStatus:
     "INACTIVE": 2,
   }
 
+class TopologyStatus:
+  ACTIVE = 1
+  INACTIVE = 2
+  REBALANCING = 3
+  KILLED = 4
+
+  _VALUES_TO_NAMES = {
+    1: "ACTIVE",
+    2: "INACTIVE",
+    3: "REBALANCING",
+    4: "KILLED",
+  }
+
+  _NAMES_TO_VALUES = {
+    "ACTIVE": 1,
+    "INACTIVE": 2,
+    "REBALANCING": 3,
+    "KILLED": 4,
+  }
+
 class NumErrorsChoice:
   ALL = 0
   NONE = 1
@@ -3150,6 +3170,7 @@ class ExecutorStats:
    - emitted
    - transferred
    - specific
+   - rate
   """
 
   thrift_spec = (
@@ -3157,12 +3178,14 @@ class ExecutorStats:
     (1, TType.MAP, 'emitted', (TType.STRING,None,TType.MAP,(TType.STRING,None,TType.I64,None)), None, ), # 1
     (2, TType.MAP, 'transferred', (TType.STRING,None,TType.MAP,(TType.STRING,None,TType.I64,None)), None, ), # 2
     (3, TType.STRUCT, 'specific', (ExecutorSpecificStats, ExecutorSpecificStats.thrift_spec), None, ), # 3
+    (4, TType.DOUBLE, 'rate', None, None, ), # 4
   )
 
-  def __init__(self, emitted=None, transferred=None, specific=None,):
+  def __init__(self, emitted=None, transferred=None, specific=None, rate=None,):
     self.emitted = emitted
     self.transferred = transferred
     self.specific = specific
+    self.rate = rate
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
@@ -3213,6 +3236,11 @@ class ExecutorStats:
           self.specific.read(iprot)
         else:
           iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.DOUBLE:
+          self.rate = iprot.readDouble();
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -3251,6 +3279,10 @@ class ExecutorStats:
       oprot.writeFieldBegin('specific', TType.STRUCT, 3)
       self.specific.write(oprot)
       oprot.writeFieldEnd()
+    if self.rate is not None:
+      oprot.writeFieldBegin('rate', TType.DOUBLE, 4)
+      oprot.writeDouble(self.rate)
+      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -3261,6 +3293,8 @@ class ExecutorStats:
       raise TProtocol.TProtocolException(message='Required field transferred is unset!')
     if self.specific is None:
       raise TProtocol.TProtocolException(message='Required field specific is unset!')
+    if self.rate is None:
+      raise TProtocol.TProtocolException(message='Required field rate is unset!')
     return
 
 
@@ -3269,6 +3303,7 @@ class ExecutorStats:
     value = (value * 31) ^ hash(self.emitted)
     value = (value * 31) ^ hash(self.transferred)
     value = (value * 31) ^ hash(self.specific)
+    value = (value * 31) ^ hash(self.rate)
     return value
 
   def __repr__(self):
@@ -4533,6 +4568,796 @@ class SubmitOptions:
   def __ne__(self, other):
     return not (self == other)
 
+class SupervisorInfo:
+  """
+  Attributes:
+   - time_secs
+   - hostname
+   - assignment_id
+   - used_ports
+   - meta
+   - scheduler_meta
+   - uptime_secs
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.I64, 'time_secs', None, None, ), # 1
+    (2, TType.STRING, 'hostname', None, None, ), # 2
+    (3, TType.STRING, 'assignment_id', None, None, ), # 3
+    (4, TType.LIST, 'used_ports', (TType.I64,None), None, ), # 4
+    (5, TType.LIST, 'meta', (TType.I64,None), None, ), # 5
+    (6, TType.MAP, 'scheduler_meta', (TType.STRING,None,TType.STRING,None), None, ), # 6
+    (7, TType.I64, 'uptime_secs', None, None, ), # 7
+  )
+
+  def __init__(self, time_secs=None, hostname=None, assignment_id=None, used_ports=None, meta=None, scheduler_meta=None, uptime_secs=None,):
+    self.time_secs = time_secs
+    self.hostname = hostname
+    self.assignment_id = assignment_id
+    self.used_ports = used_ports
+    self.meta = meta
+    self.scheduler_meta = scheduler_meta
+    self.uptime_secs = uptime_secs
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.I64:
+          self.time_secs = iprot.readI64();
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRING:
+          self.hostname = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRING:
+          self.assignment_id = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.LIST:
+          self.used_ports = []
+          (_etype304, _size301) = iprot.readListBegin()
+          for _i305 in xrange(_size301):
+            _elem306 = iprot.readI64();
+            self.used_ports.append(_elem306)
+          iprot.readListEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.LIST:
+          self.meta = []
+          (_etype310, _size307) = iprot.readListBegin()
+          for _i311 in xrange(_size307):
+            _elem312 = iprot.readI64();
+            self.meta.append(_elem312)
+          iprot.readListEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.MAP:
+          self.scheduler_meta = {}
+          (_ktype314, _vtype315, _size313 ) = iprot.readMapBegin()
+          for _i317 in xrange(_size313):
+            _key318 = iprot.readString().decode('utf-8')
+            _val319 = iprot.readString().decode('utf-8')
+            self.scheduler_meta[_key318] = _val319
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 7:
+        if ftype == TType.I64:
+          self.uptime_secs = iprot.readI64();
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('SupervisorInfo')
+    if self.time_secs is not None:
+      oprot.writeFieldBegin('time_secs', TType.I64, 1)
+      oprot.writeI64(self.time_secs)
+      oprot.writeFieldEnd()
+    if self.hostname is not None:
+      oprot.writeFieldBegin('hostname', TType.STRING, 2)
+      oprot.writeString(self.hostname.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.assignment_id is not None:
+      oprot.writeFieldBegin('assignment_id', TType.STRING, 3)
+      oprot.writeString(self.assignment_id.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.used_ports is not None:
+      oprot.writeFieldBegin('used_ports', TType.LIST, 4)
+      oprot.writeListBegin(TType.I64, len(self.used_ports))
+      for iter320 in self.used_ports:
+        oprot.writeI64(iter320)
+      oprot.writeListEnd()
+      oprot.writeFieldEnd()
+    if self.meta is not None:
+      oprot.writeFieldBegin('meta', TType.LIST, 5)
+      oprot.writeListBegin(TType.I64, len(self.meta))
+      for iter321 in self.meta:
+        oprot.writeI64(iter321)
+      oprot.writeListEnd()
+      oprot.writeFieldEnd()
+    if self.scheduler_meta is not None:
+      oprot.writeFieldBegin('scheduler_meta', TType.MAP, 6)
+      oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.scheduler_meta))
+      for kiter322,viter323 in self.scheduler_meta.items():
+        oprot.writeString(kiter322.encode('utf-8'))
+        oprot.writeString(viter323.encode('utf-8'))
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    if self.uptime_secs is not None:
+      oprot.writeFieldBegin('uptime_secs', TType.I64, 7)
+      oprot.writeI64(self.uptime_secs)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.time_secs is None:
+      raise TProtocol.TProtocolException(message='Required field time_secs is unset!')
+    if self.hostname is None:
+      raise TProtocol.TProtocolException(message='Required field hostname is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.time_secs)
+    value = (value * 31) ^ hash(self.hostname)
+    value = (value * 31) ^ hash(self.assignment_id)
+    value = (value * 31) ^ hash(self.used_ports)
+    value = (value * 31) ^ hash(self.meta)
+    value = (value * 31) ^ hash(self.scheduler_meta)
+    value = (value * 31) ^ hash(self.uptime_secs)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class NodeInfo:
+  """
+  Attributes:
+   - node
+   - port
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRING, 'node', None, None, ), # 1
+    (2, TType.SET, 'port', (TType.I64,None), None, ), # 2
+  )
+
+  def __init__(self, node=None, port=None,):
+    self.node = node
+    self.port = port
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRING:
+          self.node = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.SET:
+          self.port = set()
+          (_etype327, _size324) = iprot.readSetBegin()
+          for _i328 in xrange(_size324):
+            _elem329 = iprot.readI64();
+            self.port.add(_elem329)
+          iprot.readSetEnd()
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('NodeInfo')
+    if self.node is not None:
+      oprot.writeFieldBegin('node', TType.STRING, 1)
+      oprot.writeString(self.node.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.port is not None:
+      oprot.writeFieldBegin('port', TType.SET, 2)
+      oprot.writeSetBegin(TType.I64, len(self.port))
+      for iter330 in self.port:
+        oprot.writeI64(iter330)
+      oprot.writeSetEnd()
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.node is None:
+      raise TProtocol.TProtocolException(message='Required field node is unset!')
+    if self.port is None:
+      raise TProtocol.TProtocolException(message='Required field port is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.node)
+    value = (value * 31) ^ hash(self.port)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class Assignment:
+  """
+  Attributes:
+   - master_code_dir
+   - node_host
+   - executor_node_port
+   - executor_start_time_secs
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRING, 'master_code_dir', None, None, ), # 1
+    (2, TType.MAP, 'node_host', (TType.STRING,None,TType.STRING,None), {
+    }, ), # 2
+    (3, TType.MAP, 'executor_node_port', (TType.LIST,(TType.I64,None),TType.STRUCT,(NodeInfo, NodeInfo.thrift_spec)), {
+    }, ), # 3
+    (4, TType.MAP, 'executor_start_time_secs', (TType.LIST,(TType.I64,None),TType.I64,None), {
+    }, ), # 4
+  )
+
+  def __init__(self, master_code_dir=None, node_host=thrift_spec[2][4], executor_node_port=thrift_spec[3][4], executor_start_time_secs=thrift_spec[4][4],):
+    self.master_code_dir = master_code_dir
+    if node_host is self.thrift_spec[2][4]:
+      node_host = {
+    }
+    self.node_host = node_host
+    if executor_node_port is self.thrift_spec[3][4]:
+      executor_node_port = {
+    }
+    self.executor_node_port = executor_node_port
+    if executor_start_time_secs is self.thrift_spec[4][4]:
+      executor_start_time_secs = {
+    }
+    self.executor_start_time_secs = executor_start_time_secs
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRING:
+          self.master_code_dir = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.MAP:
+          self.node_host = {}
+          (_ktype332, _vtype333, _size331 ) = iprot.readMapBegin()
+          for _i335 in xrange(_size331):
+            _key336 = iprot.readString().decode('utf-8')
+            _val337 = iprot.readString().decode('utf-8')
+            self.node_host[_key336] = _val337
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.MAP:
+          self.executor_node_port = {}
+          (_ktype339, _vtype340, _size338 ) = iprot.readMapBegin()
+          for _i342 in xrange(_size338):
+            _key343 = []
+            (_etype348, _size345) = iprot.readListBegin()
+            for _i349 in xrange(_size345):
+              _elem350 = iprot.readI64();
+              _key343.append(_elem350)
+            iprot.readListEnd()
+            _val344 = NodeInfo()
+            _val344.read(iprot)
+            self.executor_node_port[_key343] = _val344
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.MAP:
+          self.executor_start_time_secs = {}
+          (_ktype352, _vtype353, _size351 ) = iprot.readMapBegin()
+          for _i355 in xrange(_size351):
+            _key356 = []
+            (_etype361, _size358) = iprot.readListBegin()
+            for _i362 in xrange(_size358):
+              _elem363 = iprot.readI64();
+              _key356.append(_elem363)
+            iprot.readListEnd()
+            _val357 = iprot.readI64();
+            self.executor_start_time_secs[_key356] = _val357
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('Assignment')
+    if self.master_code_dir is not None:
+      oprot.writeFieldBegin('master_code_dir', TType.STRING, 1)
+      oprot.writeString(self.master_code_dir.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.node_host is not None:
+      oprot.writeFieldBegin('node_host', TType.MAP, 2)
+      oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.node_host))
+      for kiter364,viter365 in self.node_host.items():
+        oprot.writeString(kiter364.encode('utf-8'))
+        oprot.writeString(viter365.encode('utf-8'))
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    if self.executor_node_port is not None:
+      oprot.writeFieldBegin('executor_node_port', TType.MAP, 3)
+      oprot.writeMapBegin(TType.LIST, TType.STRUCT, len(self.executor_node_port))
+      for kiter366,viter367 in self.executor_node_port.items():
+        oprot.writeListBegin(TType.I64, len(kiter366))
+        for iter368 in kiter366:
+          oprot.writeI64(iter368)
+        oprot.writeListEnd()
+        viter367.write(oprot)
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    if self.executor_start_time_secs is not None:
+      oprot.writeFieldBegin('executor_start_time_secs', TType.MAP, 4)
+      oprot.writeMapBegin(TType.LIST, TType.I64, len(self.executor_start_time_secs))
+      for kiter369,viter370 in self.executor_start_time_secs.items():
+        oprot.writeListBegin(TType.I64, len(kiter369))
+        for iter371 in kiter369:
+          oprot.writeI64(iter371)
+        oprot.writeListEnd()
+        oprot.writeI64(viter370)
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.master_code_dir is None:
+      raise TProtocol.TProtocolException(message='Required field master_code_dir is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.master_code_dir)
+    value = (value * 31) ^ hash(self.node_host)
+    value = (value * 31) ^ hash(self.executor_node_port)
+    value = (value * 31) ^ hash(self.executor_start_time_secs)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class TopologyActionOptions:
+  """
+  Attributes:
+   - kill_options
+   - rebalance_options
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'kill_options', (KillOptions, KillOptions.thrift_spec), None, ), # 1
+    (2, TType.STRUCT, 'rebalance_options', (RebalanceOptions, RebalanceOptions.thrift_spec), None, ), # 2
+  )
+
+  def __init__(self, kill_options=None, rebalance_options=None,):
+    self.kill_options = kill_options
+    self.rebalance_options = rebalance_options
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRUCT:
+          self.kill_options = KillOptions()
+          self.kill_options.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRUCT:
+          self.rebalance_options = RebalanceOptions()
+          self.rebalance_options.read(iprot)
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('TopologyActionOptions')
+    if self.kill_options is not None:
+      oprot.writeFieldBegin('kill_options', TType.STRUCT, 1)
+      self.kill_options.write(oprot)
+      oprot.writeFieldEnd()
+    if self.rebalance_options is not None:
+      oprot.writeFieldBegin('rebalance_options', TType.STRUCT, 2)
+      self.rebalance_options.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.kill_options)
+    value = (value * 31) ^ hash(self.rebalance_options)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class StormBase:
+  """
+  Attributes:
+   - name
+   - status
+   - num_workers
+   - component_executors
+   - launch_time_secs
+   - owner
+   - topology_action_options
+   - prev_status
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRING, 'name', None, None, ), # 1
+    (2, TType.I32, 'status', None, None, ), # 2
+    (3, TType.I32, 'num_workers', None, None, ), # 3
+    (4, TType.MAP, 'component_executors', (TType.STRING,None,TType.I32,None), None, ), # 4
+    (5, TType.I32, 'launch_time_secs', None, None, ), # 5
+    (6, TType.STRING, 'owner', None, None, ), # 6
+    (7, TType.STRUCT, 'topology_action_options', (TopologyActionOptions, TopologyActionOptions.thrift_spec), None, ), # 7
+    (8, TType.I32, 'prev_status', None, None, ), # 8
+  )
+
+  def __init__(self, name=None, status=None, num_workers=None, component_executors=None, launch_time_secs=None, owner=None, topology_action_options=None, prev_status=None,):
+    self.name = name
+    self.status = status
+    self.num_workers = num_workers
+    self.component_executors = component_executors
+    self.launch_time_secs = launch_time_secs
+    self.owner = owner
+    self.topology_action_options = topology_action_options
+    self.prev_status = prev_status
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRING:
+          self.name = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.I32:
+          self.status = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.I32:
+          self.num_workers = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.MAP:
+          self.component_executors = {}
+          (_ktype373, _vtype374, _size372 ) = iprot.readMapBegin()
+          for _i376 in xrange(_size372):
+            _key377 = iprot.readString().decode('utf-8')
+            _val378 = iprot.readI32();
+            self.component_executors[_key377] = _val378
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.I32:
+          self.launch_time_secs = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.STRING:
+          self.owner = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 7:
+        if ftype == TType.STRUCT:
+          self.topology_action_options = TopologyActionOptions()
+          self.topology_action_options.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 8:
+        if ftype == TType.I32:
+          self.prev_status = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('StormBase')
+    if self.name is not None:
+      oprot.writeFieldBegin('name', TType.STRING, 1)
+      oprot.writeString(self.name.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.status is not None:
+      oprot.writeFieldBegin('status', TType.I32, 2)
+      oprot.writeI32(self.status)
+      oprot.writeFieldEnd()
+    if self.num_workers is not None:
+      oprot.writeFieldBegin('num_workers', TType.I32, 3)
+      oprot.writeI32(self.num_workers)
+      oprot.writeFieldEnd()
+    if self.component_executors is not None:
+      oprot.writeFieldBegin('component_executors', TType.MAP, 4)
+      oprot.writeMapBegin(TType.STRING, TType.I32, len(self.component_executors))
+      for kiter379,viter380 in self.component_executors.items():
+        oprot.writeString(kiter379.encode('utf-8'))
+        oprot.writeI32(viter380)
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    if self.launch_time_secs is not None:
+      oprot.writeFieldBegin('launch_time_secs', TType.I32, 5)
+      oprot.writeI32(self.launch_time_secs)
+      oprot.writeFieldEnd()
+    if self.owner is not None:
+      oprot.writeFieldBegin('owner', TType.STRING, 6)
+      oprot.writeString(self.owner.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.topology_action_options is not None:
+      oprot.writeFieldBegin('topology_action_options', TType.STRUCT, 7)
+      self.topology_action_options.write(oprot)
+      oprot.writeFieldEnd()
+    if self.prev_status is not None:
+      oprot.writeFieldBegin('prev_status', TType.I32, 8)
+      oprot.writeI32(self.prev_status)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.name is None:
+      raise TProtocol.TProtocolException(message='Required field name is unset!')
+    if self.status is None:
+      raise TProtocol.TProtocolException(message='Required field status is unset!')
+    if self.num_workers is None:
+      raise TProtocol.TProtocolException(message='Required field num_workers is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.name)
+    value = (value * 31) ^ hash(self.status)
+    value = (value * 31) ^ hash(self.num_workers)
+    value = (value * 31) ^ hash(self.component_executors)
+    value = (value * 31) ^ hash(self.launch_time_secs)
+    value = (value * 31) ^ hash(self.owner)
+    value = (value * 31) ^ hash(self.topology_action_options)
+    value = (value * 31) ^ hash(self.prev_status)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
+class ZKWorkerHeartbeat:
+  """
+  Attributes:
+   - storm_id
+   - executor_stats
+   - time_secs
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRING, 'storm_id', None, None, ), # 1
+    (2, TType.MAP, 'executor_stats', (TType.STRUCT,(ExecutorInfo, ExecutorInfo.thrift_spec),TType.STRUCT,(ExecutorStats, ExecutorStats.thrift_spec)), None, ), # 2
+    (3, TType.I32, 'time_secs', None, None, ), # 3
+  )
+
+  def __init__(self, storm_id=None, executor_stats=None, time_secs=None,):
+    self.storm_id = storm_id
+    self.executor_stats = executor_stats
+    self.time_secs = time_secs
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 1:
+        if ftype == TType.STRING:
+          self.storm_id = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.MAP:
+          self.executor_stats = {}
+          (_ktype382, _vtype383, _size381 ) = iprot.readMapBegin()
+          for _i385 in xrange(_size381):
+            _key386 = ExecutorInfo()
+            _key386.read(iprot)
+            _val387 = ExecutorStats()
+            _val387.read(iprot)
+            self.executor_stats[_key386] = _val387
+          iprot.readMapEnd()
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.I32:
+          self.time_secs = iprot.readI32();
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
+      return
+    oprot.writeStructBegin('ZKWorkerHeartbeat')
+    if self.storm_id is not None:
+      oprot.writeFieldBegin('storm_id', TType.STRING, 1)
+      oprot.writeString(self.storm_id.encode('utf-8'))
+      oprot.writeFieldEnd()
+    if self.executor_stats is not None:
+      oprot.writeFieldBegin('executor_stats', TType.MAP, 2)
+      oprot.writeMapBegin(TType.STRUCT, TType.STRUCT, len(self.executor_stats))
+      for kiter388,viter389 in self.executor_stats.items():
+        kiter388.write(oprot)
+        viter389.write(oprot)
+      oprot.writeMapEnd()
+      oprot.writeFieldEnd()
+    if self.time_secs is not None:
+      oprot.writeFieldBegin('time_secs', TType.I32, 3)
+      oprot.writeI32(self.time_secs)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.storm_id is None:
+      raise TProtocol.TProtocolException(message='Required field storm_id is unset!')
+    if self.executor_stats is None:
+      raise TProtocol.TProtocolException(message='Required field executor_stats is unset!')
+    if self.time_secs is None:
+      raise TProtocol.TProtocolException(message='Required field time_secs is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.storm_id)
+    value = (value * 31) ^ hash(self.executor_stats)
+    value = (value * 31) ^ hash(self.time_secs)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+  def __eq__(self, other):
+    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+  def __ne__(self, other):
+    return not (self == other)
+
 class GetInfoOptions:
   """
   Attributes: