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 2018/03/28 21:22:16 UTC

[06/10] storm git commit: [STORM-2693] Heartbeats and assignments promotion for storm2.0

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/SupervisorAssignments.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/SupervisorAssignments.java b/storm-client/src/jvm/org/apache/storm/generated/SupervisorAssignments.java
new file mode 100644
index 0000000..1cfb946
--- /dev/null
+++ b/storm-client/src/jvm/org/apache/storm/generated/SupervisorAssignments.java
@@ -0,0 +1,478 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.storm.generated;
+
+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;
+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 javax.annotation.Generated;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)")
+public class SupervisorAssignments implements org.apache.thrift.TBase<SupervisorAssignments, SupervisorAssignments._Fields>, java.io.Serializable, Cloneable, Comparable<SupervisorAssignments> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SupervisorAssignments");
+
+  private static final org.apache.thrift.protocol.TField STORM_ASSIGNMENT_FIELD_DESC = new org.apache.thrift.protocol.TField("storm_assignment", org.apache.thrift.protocol.TType.MAP, (short)1);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new SupervisorAssignmentsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new SupervisorAssignmentsTupleSchemeFactory());
+  }
+
+  private Map<String,Assignment> storm_assignment; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    STORM_ASSIGNMENT((short)1, "storm_assignment");
+
+    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: // STORM_ASSIGNMENT
+          return STORM_ASSIGNMENT;
+        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 _Fields optionals[] = {_Fields.STORM_ASSIGNMENT};
+  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_ASSIGNMENT, new org.apache.thrift.meta_data.FieldMetaData("storm_assignment", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        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, Assignment.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(SupervisorAssignments.class, metaDataMap);
+  }
+
+  public SupervisorAssignments() {
+    this.storm_assignment = new HashMap<String,Assignment>();
+
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public SupervisorAssignments(SupervisorAssignments other) {
+    if (other.is_set_storm_assignment()) {
+      Map<String,Assignment> __this__storm_assignment = new HashMap<String,Assignment>(other.storm_assignment.size());
+      for (Map.Entry<String, Assignment> other_element : other.storm_assignment.entrySet()) {
+
+        String other_element_key = other_element.getKey();
+        Assignment other_element_value = other_element.getValue();
+
+        String __this__storm_assignment_copy_key = other_element_key;
+
+        Assignment __this__storm_assignment_copy_value = new Assignment(other_element_value);
+
+        __this__storm_assignment.put(__this__storm_assignment_copy_key, __this__storm_assignment_copy_value);
+      }
+      this.storm_assignment = __this__storm_assignment;
+    }
+  }
+
+  public SupervisorAssignments deepCopy() {
+    return new SupervisorAssignments(this);
+  }
+
+  @Override
+  public void clear() {
+    this.storm_assignment = new HashMap<String,Assignment>();
+
+  }
+
+  public int get_storm_assignment_size() {
+    return (this.storm_assignment == null) ? 0 : this.storm_assignment.size();
+  }
+
+  public void put_to_storm_assignment(String key, Assignment val) {
+    if (this.storm_assignment == null) {
+      this.storm_assignment = new HashMap<String,Assignment>();
+    }
+    this.storm_assignment.put(key, val);
+  }
+
+  public Map<String,Assignment> get_storm_assignment() {
+    return this.storm_assignment;
+  }
+
+  public void set_storm_assignment(Map<String,Assignment> storm_assignment) {
+    this.storm_assignment = storm_assignment;
+  }
+
+  public void unset_storm_assignment() {
+    this.storm_assignment = null;
+  }
+
+  /** Returns true if field storm_assignment is set (has been assigned a value) and false otherwise */
+  public boolean is_set_storm_assignment() {
+    return this.storm_assignment != null;
+  }
+
+  public void set_storm_assignment_isSet(boolean value) {
+    if (!value) {
+      this.storm_assignment = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case STORM_ASSIGNMENT:
+      if (value == null) {
+        unset_storm_assignment();
+      } else {
+        set_storm_assignment((Map<String,Assignment>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case STORM_ASSIGNMENT:
+      return get_storm_assignment();
+
+    }
+    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 STORM_ASSIGNMENT:
+      return is_set_storm_assignment();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof SupervisorAssignments)
+      return this.equals((SupervisorAssignments)that);
+    return false;
+  }
+
+  public boolean equals(SupervisorAssignments that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_storm_assignment = true && this.is_set_storm_assignment();
+    boolean that_present_storm_assignment = true && that.is_set_storm_assignment();
+    if (this_present_storm_assignment || that_present_storm_assignment) {
+      if (!(this_present_storm_assignment && that_present_storm_assignment))
+        return false;
+      if (!this.storm_assignment.equals(that.storm_assignment))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_storm_assignment = true && (is_set_storm_assignment());
+    list.add(present_storm_assignment);
+    if (present_storm_assignment)
+      list.add(storm_assignment);
+
+    return list.hashCode();
+  }
+
+  @Override
+  public int compareTo(SupervisorAssignments other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(is_set_storm_assignment()).compareTo(other.is_set_storm_assignment());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_storm_assignment()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.storm_assignment, other.storm_assignment);
+      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("SupervisorAssignments(");
+    boolean first = true;
+
+    if (is_set_storm_assignment()) {
+      sb.append("storm_assignment:");
+      if (this.storm_assignment == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.storm_assignment);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class SupervisorAssignmentsStandardSchemeFactory implements SchemeFactory {
+    public SupervisorAssignmentsStandardScheme getScheme() {
+      return new SupervisorAssignmentsStandardScheme();
+    }
+  }
+
+  private static class SupervisorAssignmentsStandardScheme extends StandardScheme<SupervisorAssignments> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, SupervisorAssignments 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_ASSIGNMENT
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map886 = iprot.readMapBegin();
+                struct.storm_assignment = new HashMap<String,Assignment>(2*_map886.size);
+                String _key887;
+                Assignment _val888;
+                for (int _i889 = 0; _i889 < _map886.size; ++_i889)
+                {
+                  _key887 = iprot.readString();
+                  _val888 = new Assignment();
+                  _val888.read(iprot);
+                  struct.storm_assignment.put(_key887, _val888);
+                }
+                iprot.readMapEnd();
+              }
+              struct.set_storm_assignment_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, SupervisorAssignments struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.storm_assignment != null) {
+        if (struct.is_set_storm_assignment()) {
+          oprot.writeFieldBegin(STORM_ASSIGNMENT_FIELD_DESC);
+          {
+            oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, struct.storm_assignment.size()));
+            for (Map.Entry<String, Assignment> _iter890 : struct.storm_assignment.entrySet())
+            {
+              oprot.writeString(_iter890.getKey());
+              _iter890.getValue().write(oprot);
+            }
+            oprot.writeMapEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class SupervisorAssignmentsTupleSchemeFactory implements SchemeFactory {
+    public SupervisorAssignmentsTupleScheme getScheme() {
+      return new SupervisorAssignmentsTupleScheme();
+    }
+  }
+
+  private static class SupervisorAssignmentsTupleScheme extends TupleScheme<SupervisorAssignments> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, SupervisorAssignments struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.is_set_storm_assignment()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.is_set_storm_assignment()) {
+        {
+          oprot.writeI32(struct.storm_assignment.size());
+          for (Map.Entry<String, Assignment> _iter891 : struct.storm_assignment.entrySet())
+          {
+            oprot.writeString(_iter891.getKey());
+            _iter891.getValue().write(oprot);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, SupervisorAssignments struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        {
+          org.apache.thrift.protocol.TMap _map892 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.storm_assignment = new HashMap<String,Assignment>(2*_map892.size);
+          String _key893;
+          Assignment _val894;
+          for (int _i895 = 0; _i895 < _map892.size; ++_i895)
+          {
+            _key893 = iprot.readString();
+            _val894 = new Assignment();
+            _val894.read(iprot);
+            struct.storm_assignment.put(_key893, _val894);
+          }
+        }
+        struct.set_storm_assignment_isSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/SupervisorInfo.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/SupervisorInfo.java b/storm-client/src/jvm/org/apache/storm/generated/SupervisorInfo.java
index 45293ed..6d2a051 100644
--- a/storm-client/src/jvm/org/apache/storm/generated/SupervisorInfo.java
+++ b/storm-client/src/jvm/org/apache/storm/generated/SupervisorInfo.java
@@ -58,12 +58,13 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
   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.I64, (short)1);
   private static final org.apache.thrift.protocol.TField HOSTNAME_FIELD_DESC = new org.apache.thrift.protocol.TField("hostname", org.apache.thrift.protocol.TType.STRING, (short)2);
   private static final org.apache.thrift.protocol.TField ASSIGNMENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("assignment_id", org.apache.thrift.protocol.TType.STRING, (short)3);
-  private static final org.apache.thrift.protocol.TField USED_PORTS_FIELD_DESC = new org.apache.thrift.protocol.TField("used_ports", org.apache.thrift.protocol.TType.LIST, (short)4);
-  private static final org.apache.thrift.protocol.TField META_FIELD_DESC = new org.apache.thrift.protocol.TField("meta", org.apache.thrift.protocol.TType.LIST, (short)5);
-  private static final org.apache.thrift.protocol.TField SCHEDULER_META_FIELD_DESC = new org.apache.thrift.protocol.TField("scheduler_meta", org.apache.thrift.protocol.TType.MAP, (short)6);
-  private static final org.apache.thrift.protocol.TField UPTIME_SECS_FIELD_DESC = new org.apache.thrift.protocol.TField("uptime_secs", org.apache.thrift.protocol.TType.I64, (short)7);
-  private static final org.apache.thrift.protocol.TField VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("version", org.apache.thrift.protocol.TType.STRING, (short)8);
-  private static final org.apache.thrift.protocol.TField RESOURCES_MAP_FIELD_DESC = new org.apache.thrift.protocol.TField("resources_map", org.apache.thrift.protocol.TType.MAP, (short)9);
+  private static final org.apache.thrift.protocol.TField SERVER_PORT_FIELD_DESC = new org.apache.thrift.protocol.TField("server_port", org.apache.thrift.protocol.TType.I32, (short)4);
+  private static final org.apache.thrift.protocol.TField USED_PORTS_FIELD_DESC = new org.apache.thrift.protocol.TField("used_ports", org.apache.thrift.protocol.TType.LIST, (short)5);
+  private static final org.apache.thrift.protocol.TField META_FIELD_DESC = new org.apache.thrift.protocol.TField("meta", org.apache.thrift.protocol.TType.LIST, (short)6);
+  private static final org.apache.thrift.protocol.TField SCHEDULER_META_FIELD_DESC = new org.apache.thrift.protocol.TField("scheduler_meta", org.apache.thrift.protocol.TType.MAP, (short)7);
+  private static final org.apache.thrift.protocol.TField UPTIME_SECS_FIELD_DESC = new org.apache.thrift.protocol.TField("uptime_secs", org.apache.thrift.protocol.TType.I64, (short)8);
+  private static final org.apache.thrift.protocol.TField VERSION_FIELD_DESC = new org.apache.thrift.protocol.TField("version", org.apache.thrift.protocol.TType.STRING, (short)9);
+  private static final org.apache.thrift.protocol.TField RESOURCES_MAP_FIELD_DESC = new org.apache.thrift.protocol.TField("resources_map", org.apache.thrift.protocol.TType.MAP, (short)10);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -74,6 +75,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
   private long time_secs; // required
   private String hostname; // required
   private String assignment_id; // optional
+  private int server_port; // optional
   private List<Long> used_ports; // optional
   private List<Long> meta; // optional
   private Map<String,String> scheduler_meta; // optional
@@ -86,12 +88,13 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     TIME_SECS((short)1, "time_secs"),
     HOSTNAME((short)2, "hostname"),
     ASSIGNMENT_ID((short)3, "assignment_id"),
-    USED_PORTS((short)4, "used_ports"),
-    META((short)5, "meta"),
-    SCHEDULER_META((short)6, "scheduler_meta"),
-    UPTIME_SECS((short)7, "uptime_secs"),
-    VERSION((short)8, "version"),
-    RESOURCES_MAP((short)9, "resources_map");
+    SERVER_PORT((short)4, "server_port"),
+    USED_PORTS((short)5, "used_ports"),
+    META((short)6, "meta"),
+    SCHEDULER_META((short)7, "scheduler_meta"),
+    UPTIME_SECS((short)8, "uptime_secs"),
+    VERSION((short)9, "version"),
+    RESOURCES_MAP((short)10, "resources_map");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -112,17 +115,19 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           return HOSTNAME;
         case 3: // ASSIGNMENT_ID
           return ASSIGNMENT_ID;
-        case 4: // USED_PORTS
+        case 4: // SERVER_PORT
+          return SERVER_PORT;
+        case 5: // USED_PORTS
           return USED_PORTS;
-        case 5: // META
+        case 6: // META
           return META;
-        case 6: // SCHEDULER_META
+        case 7: // SCHEDULER_META
           return SCHEDULER_META;
-        case 7: // UPTIME_SECS
+        case 8: // UPTIME_SECS
           return UPTIME_SECS;
-        case 8: // VERSION
+        case 9: // VERSION
           return VERSION;
-        case 9: // RESOURCES_MAP
+        case 10: // RESOURCES_MAP
           return RESOURCES_MAP;
         default:
           return null;
@@ -165,9 +170,10 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
 
   // isset id assignments
   private static final int __TIME_SECS_ISSET_ID = 0;
-  private static final int __UPTIME_SECS_ISSET_ID = 1;
+  private static final int __SERVER_PORT_ISSET_ID = 1;
+  private static final int __UPTIME_SECS_ISSET_ID = 2;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.ASSIGNMENT_ID,_Fields.USED_PORTS,_Fields.META,_Fields.SCHEDULER_META,_Fields.UPTIME_SECS,_Fields.VERSION,_Fields.RESOURCES_MAP};
+  private static final _Fields optionals[] = {_Fields.ASSIGNMENT_ID,_Fields.SERVER_PORT,_Fields.USED_PORTS,_Fields.META,_Fields.SCHEDULER_META,_Fields.UPTIME_SECS,_Fields.VERSION,_Fields.RESOURCES_MAP};
   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);
@@ -177,6 +183,8 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.ASSIGNMENT_ID, new org.apache.thrift.meta_data.FieldMetaData("assignment_id", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.SERVER_PORT, new org.apache.thrift.meta_data.FieldMetaData("server_port", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
     tmpMap.put(_Fields.USED_PORTS, new org.apache.thrift.meta_data.FieldMetaData("used_ports", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
             new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64))));
@@ -224,6 +232,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     if (other.is_set_assignment_id()) {
       this.assignment_id = other.assignment_id;
     }
+    this.server_port = other.server_port;
     if (other.is_set_used_ports()) {
       List<Long> __this__used_ports = new ArrayList<Long>(other.used_ports);
       this.used_ports = __this__used_ports;
@@ -256,6 +265,8 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     this.time_secs = 0;
     this.hostname = null;
     this.assignment_id = null;
+    set_server_port_isSet(false);
+    this.server_port = 0;
     this.used_ports = null;
     this.meta = null;
     this.scheduler_meta = null;
@@ -333,6 +344,28 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     }
   }
 
+  public int get_server_port() {
+    return this.server_port;
+  }
+
+  public void set_server_port(int server_port) {
+    this.server_port = server_port;
+    set_server_port_isSet(true);
+  }
+
+  public void unset_server_port() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __SERVER_PORT_ISSET_ID);
+  }
+
+  /** Returns true if field server_port is set (has been assigned a value) and false otherwise */
+  public boolean is_set_server_port() {
+    return EncodingUtils.testBit(__isset_bitfield, __SERVER_PORT_ISSET_ID);
+  }
+
+  public void set_server_port_isSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __SERVER_PORT_ISSET_ID, value);
+  }
+
   public int get_used_ports_size() {
     return (this.used_ports == null) ? 0 : this.used_ports.size();
   }
@@ -548,6 +581,14 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       }
       break;
 
+    case SERVER_PORT:
+      if (value == null) {
+        unset_server_port();
+      } else {
+        set_server_port((Integer)value);
+      }
+      break;
+
     case USED_PORTS:
       if (value == null) {
         unset_used_ports();
@@ -610,6 +651,9 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     case ASSIGNMENT_ID:
       return get_assignment_id();
 
+    case SERVER_PORT:
+      return get_server_port();
+
     case USED_PORTS:
       return get_used_ports();
 
@@ -645,6 +689,8 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       return is_set_hostname();
     case ASSIGNMENT_ID:
       return is_set_assignment_id();
+    case SERVER_PORT:
+      return is_set_server_port();
     case USED_PORTS:
       return is_set_used_ports();
     case META:
@@ -701,6 +747,15 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         return false;
     }
 
+    boolean this_present_server_port = true && this.is_set_server_port();
+    boolean that_present_server_port = true && that.is_set_server_port();
+    if (this_present_server_port || that_present_server_port) {
+      if (!(this_present_server_port && that_present_server_port))
+        return false;
+      if (this.server_port != that.server_port)
+        return false;
+    }
+
     boolean this_present_used_ports = true && this.is_set_used_ports();
     boolean that_present_used_ports = true && that.is_set_used_ports();
     if (this_present_used_ports || that_present_used_ports) {
@@ -777,6 +832,11 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
     if (present_assignment_id)
       list.add(assignment_id);
 
+    boolean present_server_port = true && (is_set_server_port());
+    list.add(present_server_port);
+    if (present_server_port)
+      list.add(server_port);
+
     boolean present_used_ports = true && (is_set_used_ports());
     list.add(present_used_ports);
     if (present_used_ports)
@@ -848,6 +908,16 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         return lastComparison;
       }
     }
+    lastComparison = Boolean.valueOf(is_set_server_port()).compareTo(other.is_set_server_port());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_server_port()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.server_port, other.server_port);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     lastComparison = Boolean.valueOf(is_set_used_ports()).compareTo(other.is_set_used_ports());
     if (lastComparison != 0) {
       return lastComparison;
@@ -949,6 +1019,12 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       }
       first = false;
     }
+    if (is_set_server_port()) {
+      if (!first) sb.append(", ");
+      sb.append("server_port:");
+      sb.append(this.server_port);
+      first = false;
+    }
     if (is_set_used_ports()) {
       if (!first) sb.append(", ");
       sb.append("used_ports:");
@@ -1082,7 +1158,15 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 4: // USED_PORTS
+          case 4: // SERVER_PORT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.server_port = iprot.readI32();
+              struct.set_server_port_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // USED_PORTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list622 = iprot.readListBegin();
@@ -1100,7 +1184,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 5: // META
+          case 6: // META
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
                 org.apache.thrift.protocol.TList _list625 = iprot.readListBegin();
@@ -1118,7 +1202,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 6: // SCHEDULER_META
+          case 7: // SCHEDULER_META
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
                 org.apache.thrift.protocol.TMap _map628 = iprot.readMapBegin();
@@ -1138,7 +1222,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 7: // UPTIME_SECS
+          case 8: // UPTIME_SECS
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.uptime_secs = iprot.readI64();
               struct.set_uptime_secs_isSet(true);
@@ -1146,7 +1230,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 8: // VERSION
+          case 9: // VERSION
             if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
               struct.version = iprot.readString();
               struct.set_version_isSet(true);
@@ -1154,7 +1238,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 9: // RESOURCES_MAP
+          case 10: // RESOURCES_MAP
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
                 org.apache.thrift.protocol.TMap _map632 = iprot.readMapBegin();
@@ -1202,6 +1286,11 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           oprot.writeFieldEnd();
         }
       }
+      if (struct.is_set_server_port()) {
+        oprot.writeFieldBegin(SERVER_PORT_FIELD_DESC);
+        oprot.writeI32(struct.server_port);
+        oprot.writeFieldEnd();
+      }
       if (struct.used_ports != null) {
         if (struct.is_set_used_ports()) {
           oprot.writeFieldBegin(USED_PORTS_FIELD_DESC);
@@ -1295,28 +1384,34 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       if (struct.is_set_assignment_id()) {
         optionals.set(0);
       }
-      if (struct.is_set_used_ports()) {
+      if (struct.is_set_server_port()) {
         optionals.set(1);
       }
-      if (struct.is_set_meta()) {
+      if (struct.is_set_used_ports()) {
         optionals.set(2);
       }
-      if (struct.is_set_scheduler_meta()) {
+      if (struct.is_set_meta()) {
         optionals.set(3);
       }
-      if (struct.is_set_uptime_secs()) {
+      if (struct.is_set_scheduler_meta()) {
         optionals.set(4);
       }
-      if (struct.is_set_version()) {
+      if (struct.is_set_uptime_secs()) {
         optionals.set(5);
       }
-      if (struct.is_set_resources_map()) {
+      if (struct.is_set_version()) {
         optionals.set(6);
       }
-      oprot.writeBitSet(optionals, 7);
+      if (struct.is_set_resources_map()) {
+        optionals.set(7);
+      }
+      oprot.writeBitSet(optionals, 8);
       if (struct.is_set_assignment_id()) {
         oprot.writeString(struct.assignment_id);
       }
+      if (struct.is_set_server_port()) {
+        oprot.writeI32(struct.server_port);
+      }
       if (struct.is_set_used_ports()) {
         {
           oprot.writeI32(struct.used_ports.size());
@@ -1370,12 +1465,16 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       struct.set_time_secs_isSet(true);
       struct.hostname = iprot.readString();
       struct.set_hostname_isSet(true);
-      BitSet incoming = iprot.readBitSet(7);
+      BitSet incoming = iprot.readBitSet(8);
       if (incoming.get(0)) {
         struct.assignment_id = iprot.readString();
         struct.set_assignment_id_isSet(true);
       }
       if (incoming.get(1)) {
+        struct.server_port = iprot.readI32();
+        struct.set_server_port_isSet(true);
+      }
+      if (incoming.get(2)) {
         {
           org.apache.thrift.protocol.TList _list644 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
           struct.used_ports = new ArrayList<Long>(_list644.size);
@@ -1388,7 +1487,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         }
         struct.set_used_ports_isSet(true);
       }
-      if (incoming.get(2)) {
+      if (incoming.get(3)) {
         {
           org.apache.thrift.protocol.TList _list647 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
           struct.meta = new ArrayList<Long>(_list647.size);
@@ -1401,7 +1500,7 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         }
         struct.set_meta_isSet(true);
       }
-      if (incoming.get(3)) {
+      if (incoming.get(4)) {
         {
           org.apache.thrift.protocol.TMap _map650 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.scheduler_meta = new HashMap<String,String>(2*_map650.size);
@@ -1416,15 +1515,15 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
         }
         struct.set_scheduler_meta_isSet(true);
       }
-      if (incoming.get(4)) {
+      if (incoming.get(5)) {
         struct.uptime_secs = iprot.readI64();
         struct.set_uptime_secs_isSet(true);
       }
-      if (incoming.get(5)) {
+      if (incoming.get(6)) {
         struct.version = iprot.readString();
         struct.set_version_isSet(true);
       }
-      if (incoming.get(6)) {
+      if (incoming.get(7)) {
         {
           org.apache.thrift.protocol.TMap _map654 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.DOUBLE, iprot.readI32());
           struct.resources_map = new HashMap<String,Double>(2*_map654.size);

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeat.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeat.java b/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeat.java
new file mode 100644
index 0000000..0d5c65f
--- /dev/null
+++ b/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeat.java
@@ -0,0 +1,660 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.storm.generated;
+
+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;
+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 javax.annotation.Generated;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)")
+public class SupervisorWorkerHeartbeat implements org.apache.thrift.TBase<SupervisorWorkerHeartbeat, SupervisorWorkerHeartbeat._Fields>, java.io.Serializable, Cloneable, Comparable<SupervisorWorkerHeartbeat> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SupervisorWorkerHeartbeat");
+
+  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 EXECUTORS_FIELD_DESC = new org.apache.thrift.protocol.TField("executors", org.apache.thrift.protocol.TType.LIST, (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 SupervisorWorkerHeartbeatStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new SupervisorWorkerHeartbeatTupleSchemeFactory());
+  }
+
+  private String storm_id; // required
+  private List<ExecutorInfo> executors; // required
+  private int time_secs; // 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 {
+    STORM_ID((short)1, "storm_id"),
+    EXECUTORS((short)2, "executors"),
+    TIME_SECS((short)3, "time_secs");
+
+    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: // STORM_ID
+          return STORM_ID;
+        case 2: // EXECUTORS
+          return EXECUTORS;
+        case 3: // TIME_SECS
+          return TIME_SECS;
+        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 __TIME_SECS_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.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.EXECUTORS, new org.apache.thrift.meta_data.FieldMetaData("executors", 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, ExecutorInfo.class))));
+    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(SupervisorWorkerHeartbeat.class, metaDataMap);
+  }
+
+  public SupervisorWorkerHeartbeat() {
+  }
+
+  public SupervisorWorkerHeartbeat(
+    String storm_id,
+    List<ExecutorInfo> executors,
+    int time_secs)
+  {
+    this();
+    this.storm_id = storm_id;
+    this.executors = executors;
+    this.time_secs = time_secs;
+    set_time_secs_isSet(true);
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public SupervisorWorkerHeartbeat(SupervisorWorkerHeartbeat other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.is_set_storm_id()) {
+      this.storm_id = other.storm_id;
+    }
+    if (other.is_set_executors()) {
+      List<ExecutorInfo> __this__executors = new ArrayList<ExecutorInfo>(other.executors.size());
+      for (ExecutorInfo other_element : other.executors) {
+        __this__executors.add(new ExecutorInfo(other_element));
+      }
+      this.executors = __this__executors;
+    }
+    this.time_secs = other.time_secs;
+  }
+
+  public SupervisorWorkerHeartbeat deepCopy() {
+    return new SupervisorWorkerHeartbeat(this);
+  }
+
+  @Override
+  public void clear() {
+    this.storm_id = null;
+    this.executors = null;
+    set_time_secs_isSet(false);
+    this.time_secs = 0;
+  }
+
+  public String get_storm_id() {
+    return this.storm_id;
+  }
+
+  public void set_storm_id(String storm_id) {
+    this.storm_id = storm_id;
+  }
+
+  public void unset_storm_id() {
+    this.storm_id = null;
+  }
+
+  /** Returns true if field storm_id is set (has been assigned a value) and false otherwise */
+  public boolean is_set_storm_id() {
+    return this.storm_id != null;
+  }
+
+  public void set_storm_id_isSet(boolean value) {
+    if (!value) {
+      this.storm_id = null;
+    }
+  }
+
+  public int get_executors_size() {
+    return (this.executors == null) ? 0 : this.executors.size();
+  }
+
+  public java.util.Iterator<ExecutorInfo> get_executors_iterator() {
+    return (this.executors == null) ? null : this.executors.iterator();
+  }
+
+  public void add_to_executors(ExecutorInfo elem) {
+    if (this.executors == null) {
+      this.executors = new ArrayList<ExecutorInfo>();
+    }
+    this.executors.add(elem);
+  }
+
+  public List<ExecutorInfo> get_executors() {
+    return this.executors;
+  }
+
+  public void set_executors(List<ExecutorInfo> executors) {
+    this.executors = executors;
+  }
+
+  public void unset_executors() {
+    this.executors = null;
+  }
+
+  /** Returns true if field executors is set (has been assigned a value) and false otherwise */
+  public boolean is_set_executors() {
+    return this.executors != null;
+  }
+
+  public void set_executors_isSet(boolean value) {
+    if (!value) {
+      this.executors = null;
+    }
+  }
+
+  public int get_time_secs() {
+    return this.time_secs;
+  }
+
+  public void set_time_secs(int time_secs) {
+    this.time_secs = time_secs;
+    set_time_secs_isSet(true);
+  }
+
+  public void unset_time_secs() {
+    __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 EncodingUtils.testBit(__isset_bitfield, __TIME_SECS_ISSET_ID);
+  }
+
+  public void set_time_secs_isSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TIME_SECS_ISSET_ID, value);
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case STORM_ID:
+      if (value == null) {
+        unset_storm_id();
+      } else {
+        set_storm_id((String)value);
+      }
+      break;
+
+    case EXECUTORS:
+      if (value == null) {
+        unset_executors();
+      } else {
+        set_executors((List<ExecutorInfo>)value);
+      }
+      break;
+
+    case TIME_SECS:
+      if (value == null) {
+        unset_time_secs();
+      } else {
+        set_time_secs((Integer)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case STORM_ID:
+      return get_storm_id();
+
+    case EXECUTORS:
+      return get_executors();
+
+    case TIME_SECS:
+      return get_time_secs();
+
+    }
+    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 STORM_ID:
+      return is_set_storm_id();
+    case EXECUTORS:
+      return is_set_executors();
+    case TIME_SECS:
+      return is_set_time_secs();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof SupervisorWorkerHeartbeat)
+      return this.equals((SupervisorWorkerHeartbeat)that);
+    return false;
+  }
+
+  public boolean equals(SupervisorWorkerHeartbeat that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_storm_id = true && this.is_set_storm_id();
+    boolean that_present_storm_id = true && that.is_set_storm_id();
+    if (this_present_storm_id || that_present_storm_id) {
+      if (!(this_present_storm_id && that_present_storm_id))
+        return false;
+      if (!this.storm_id.equals(that.storm_id))
+        return false;
+    }
+
+    boolean this_present_executors = true && this.is_set_executors();
+    boolean that_present_executors = true && that.is_set_executors();
+    if (this_present_executors || that_present_executors) {
+      if (!(this_present_executors && that_present_executors))
+        return false;
+      if (!this.executors.equals(that.executors))
+        return false;
+    }
+
+    boolean this_present_time_secs = true;
+    boolean that_present_time_secs = true;
+    if (this_present_time_secs || that_present_time_secs) {
+      if (!(this_present_time_secs && that_present_time_secs))
+        return false;
+      if (this.time_secs != that.time_secs)
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_storm_id = true && (is_set_storm_id());
+    list.add(present_storm_id);
+    if (present_storm_id)
+      list.add(storm_id);
+
+    boolean present_executors = true && (is_set_executors());
+    list.add(present_executors);
+    if (present_executors)
+      list.add(executors);
+
+    boolean present_time_secs = true;
+    list.add(present_time_secs);
+    if (present_time_secs)
+      list.add(time_secs);
+
+    return list.hashCode();
+  }
+
+  @Override
+  public int compareTo(SupervisorWorkerHeartbeat other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    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, other.storm_id);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(is_set_executors()).compareTo(other.is_set_executors());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_executors()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.executors, other.executors);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    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, other.time_secs);
+      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("SupervisorWorkerHeartbeat(");
+    boolean first = true;
+
+    sb.append("storm_id:");
+    if (this.storm_id == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.storm_id);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("executors:");
+    if (this.executors == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.executors);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("time_secs:");
+    sb.append(this.time_secs);
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!is_set_storm_id()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'storm_id' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_executors()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'executors' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_time_secs()) {
+      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 {
+    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 SupervisorWorkerHeartbeatStandardSchemeFactory implements SchemeFactory {
+    public SupervisorWorkerHeartbeatStandardScheme getScheme() {
+      return new SupervisorWorkerHeartbeatStandardScheme();
+    }
+  }
+
+  private static class SupervisorWorkerHeartbeatStandardScheme extends StandardScheme<SupervisorWorkerHeartbeat> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, SupervisorWorkerHeartbeat 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: // EXECUTORS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list870 = iprot.readListBegin();
+                struct.executors = new ArrayList<ExecutorInfo>(_list870.size);
+                ExecutorInfo _elem871;
+                for (int _i872 = 0; _i872 < _list870.size; ++_i872)
+                {
+                  _elem871 = new ExecutorInfo();
+                  _elem871.read(iprot);
+                  struct.executors.add(_elem871);
+                }
+                iprot.readListEnd();
+              }
+              struct.set_executors_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, SupervisorWorkerHeartbeat 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.executors != null) {
+        oprot.writeFieldBegin(EXECUTORS_FIELD_DESC);
+        {
+          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.executors.size()));
+          for (ExecutorInfo _iter873 : struct.executors)
+          {
+            _iter873.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(TIME_SECS_FIELD_DESC);
+      oprot.writeI32(struct.time_secs);
+      oprot.writeFieldEnd();
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class SupervisorWorkerHeartbeatTupleSchemeFactory implements SchemeFactory {
+    public SupervisorWorkerHeartbeatTupleScheme getScheme() {
+      return new SupervisorWorkerHeartbeatTupleScheme();
+    }
+  }
+
+  private static class SupervisorWorkerHeartbeatTupleScheme extends TupleScheme<SupervisorWorkerHeartbeat> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, SupervisorWorkerHeartbeat struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.storm_id);
+      {
+        oprot.writeI32(struct.executors.size());
+        for (ExecutorInfo _iter874 : struct.executors)
+        {
+          _iter874.write(oprot);
+        }
+      }
+      oprot.writeI32(struct.time_secs);
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, SupervisorWorkerHeartbeat 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.TList _list875 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.executors = new ArrayList<ExecutorInfo>(_list875.size);
+        ExecutorInfo _elem876;
+        for (int _i877 = 0; _i877 < _list875.size; ++_i877)
+        {
+          _elem876 = new ExecutorInfo();
+          _elem876.read(iprot);
+          struct.executors.add(_elem876);
+        }
+      }
+      struct.set_executors_isSet(true);
+      struct.time_secs = iprot.readI32();
+      struct.set_time_secs_isSet(true);
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeats.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeats.java b/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeats.java
new file mode 100644
index 0000000..2856869
--- /dev/null
+++ b/storm-client/src/jvm/org/apache/storm/generated/SupervisorWorkerHeartbeats.java
@@ -0,0 +1,561 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.3)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.storm.generated;
+
+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;
+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 javax.annotation.Generated;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)")
+public class SupervisorWorkerHeartbeats implements org.apache.thrift.TBase<SupervisorWorkerHeartbeats, SupervisorWorkerHeartbeats._Fields>, java.io.Serializable, Cloneable, Comparable<SupervisorWorkerHeartbeats> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SupervisorWorkerHeartbeats");
+
+  private static final org.apache.thrift.protocol.TField SUPERVISOR_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("supervisor_id", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField WORKER_HEARTBEATS_FIELD_DESC = new org.apache.thrift.protocol.TField("worker_heartbeats", org.apache.thrift.protocol.TType.LIST, (short)2);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new SupervisorWorkerHeartbeatsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new SupervisorWorkerHeartbeatsTupleSchemeFactory());
+  }
+
+  private String supervisor_id; // required
+  private List<SupervisorWorkerHeartbeat> worker_heartbeats; // 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 {
+    SUPERVISOR_ID((short)1, "supervisor_id"),
+    WORKER_HEARTBEATS((short)2, "worker_heartbeats");
+
+    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: // SUPERVISOR_ID
+          return SUPERVISOR_ID;
+        case 2: // WORKER_HEARTBEATS
+          return WORKER_HEARTBEATS;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.SUPERVISOR_ID, new org.apache.thrift.meta_data.FieldMetaData("supervisor_id", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.WORKER_HEARTBEATS, new org.apache.thrift.meta_data.FieldMetaData("worker_heartbeats", 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, SupervisorWorkerHeartbeat.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(SupervisorWorkerHeartbeats.class, metaDataMap);
+  }
+
+  public SupervisorWorkerHeartbeats() {
+  }
+
+  public SupervisorWorkerHeartbeats(
+    String supervisor_id,
+    List<SupervisorWorkerHeartbeat> worker_heartbeats)
+  {
+    this();
+    this.supervisor_id = supervisor_id;
+    this.worker_heartbeats = worker_heartbeats;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public SupervisorWorkerHeartbeats(SupervisorWorkerHeartbeats other) {
+    if (other.is_set_supervisor_id()) {
+      this.supervisor_id = other.supervisor_id;
+    }
+    if (other.is_set_worker_heartbeats()) {
+      List<SupervisorWorkerHeartbeat> __this__worker_heartbeats = new ArrayList<SupervisorWorkerHeartbeat>(other.worker_heartbeats.size());
+      for (SupervisorWorkerHeartbeat other_element : other.worker_heartbeats) {
+        __this__worker_heartbeats.add(new SupervisorWorkerHeartbeat(other_element));
+      }
+      this.worker_heartbeats = __this__worker_heartbeats;
+    }
+  }
+
+  public SupervisorWorkerHeartbeats deepCopy() {
+    return new SupervisorWorkerHeartbeats(this);
+  }
+
+  @Override
+  public void clear() {
+    this.supervisor_id = null;
+    this.worker_heartbeats = null;
+  }
+
+  public String get_supervisor_id() {
+    return this.supervisor_id;
+  }
+
+  public void set_supervisor_id(String supervisor_id) {
+    this.supervisor_id = supervisor_id;
+  }
+
+  public void unset_supervisor_id() {
+    this.supervisor_id = null;
+  }
+
+  /** Returns true if field supervisor_id is set (has been assigned a value) and false otherwise */
+  public boolean is_set_supervisor_id() {
+    return this.supervisor_id != null;
+  }
+
+  public void set_supervisor_id_isSet(boolean value) {
+    if (!value) {
+      this.supervisor_id = null;
+    }
+  }
+
+  public int get_worker_heartbeats_size() {
+    return (this.worker_heartbeats == null) ? 0 : this.worker_heartbeats.size();
+  }
+
+  public java.util.Iterator<SupervisorWorkerHeartbeat> get_worker_heartbeats_iterator() {
+    return (this.worker_heartbeats == null) ? null : this.worker_heartbeats.iterator();
+  }
+
+  public void add_to_worker_heartbeats(SupervisorWorkerHeartbeat elem) {
+    if (this.worker_heartbeats == null) {
+      this.worker_heartbeats = new ArrayList<SupervisorWorkerHeartbeat>();
+    }
+    this.worker_heartbeats.add(elem);
+  }
+
+  public List<SupervisorWorkerHeartbeat> get_worker_heartbeats() {
+    return this.worker_heartbeats;
+  }
+
+  public void set_worker_heartbeats(List<SupervisorWorkerHeartbeat> worker_heartbeats) {
+    this.worker_heartbeats = worker_heartbeats;
+  }
+
+  public void unset_worker_heartbeats() {
+    this.worker_heartbeats = null;
+  }
+
+  /** Returns true if field worker_heartbeats is set (has been assigned a value) and false otherwise */
+  public boolean is_set_worker_heartbeats() {
+    return this.worker_heartbeats != null;
+  }
+
+  public void set_worker_heartbeats_isSet(boolean value) {
+    if (!value) {
+      this.worker_heartbeats = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case SUPERVISOR_ID:
+      if (value == null) {
+        unset_supervisor_id();
+      } else {
+        set_supervisor_id((String)value);
+      }
+      break;
+
+    case WORKER_HEARTBEATS:
+      if (value == null) {
+        unset_worker_heartbeats();
+      } else {
+        set_worker_heartbeats((List<SupervisorWorkerHeartbeat>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case SUPERVISOR_ID:
+      return get_supervisor_id();
+
+    case WORKER_HEARTBEATS:
+      return get_worker_heartbeats();
+
+    }
+    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 SUPERVISOR_ID:
+      return is_set_supervisor_id();
+    case WORKER_HEARTBEATS:
+      return is_set_worker_heartbeats();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof SupervisorWorkerHeartbeats)
+      return this.equals((SupervisorWorkerHeartbeats)that);
+    return false;
+  }
+
+  public boolean equals(SupervisorWorkerHeartbeats that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_supervisor_id = true && this.is_set_supervisor_id();
+    boolean that_present_supervisor_id = true && that.is_set_supervisor_id();
+    if (this_present_supervisor_id || that_present_supervisor_id) {
+      if (!(this_present_supervisor_id && that_present_supervisor_id))
+        return false;
+      if (!this.supervisor_id.equals(that.supervisor_id))
+        return false;
+    }
+
+    boolean this_present_worker_heartbeats = true && this.is_set_worker_heartbeats();
+    boolean that_present_worker_heartbeats = true && that.is_set_worker_heartbeats();
+    if (this_present_worker_heartbeats || that_present_worker_heartbeats) {
+      if (!(this_present_worker_heartbeats && that_present_worker_heartbeats))
+        return false;
+      if (!this.worker_heartbeats.equals(that.worker_heartbeats))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_supervisor_id = true && (is_set_supervisor_id());
+    list.add(present_supervisor_id);
+    if (present_supervisor_id)
+      list.add(supervisor_id);
+
+    boolean present_worker_heartbeats = true && (is_set_worker_heartbeats());
+    list.add(present_worker_heartbeats);
+    if (present_worker_heartbeats)
+      list.add(worker_heartbeats);
+
+    return list.hashCode();
+  }
+
+  @Override
+  public int compareTo(SupervisorWorkerHeartbeats other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(is_set_supervisor_id()).compareTo(other.is_set_supervisor_id());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_supervisor_id()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.supervisor_id, other.supervisor_id);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(is_set_worker_heartbeats()).compareTo(other.is_set_worker_heartbeats());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_worker_heartbeats()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.worker_heartbeats, other.worker_heartbeats);
+      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("SupervisorWorkerHeartbeats(");
+    boolean first = true;
+
+    sb.append("supervisor_id:");
+    if (this.supervisor_id == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.supervisor_id);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("worker_heartbeats:");
+    if (this.worker_heartbeats == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.worker_heartbeats);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!is_set_supervisor_id()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'supervisor_id' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_worker_heartbeats()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'worker_heartbeats' 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 {
+      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 SupervisorWorkerHeartbeatsStandardSchemeFactory implements SchemeFactory {
+    public SupervisorWorkerHeartbeatsStandardScheme getScheme() {
+      return new SupervisorWorkerHeartbeatsStandardScheme();
+    }
+  }
+
+  private static class SupervisorWorkerHeartbeatsStandardScheme extends StandardScheme<SupervisorWorkerHeartbeats> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, SupervisorWorkerHeartbeats 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: // SUPERVISOR_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.supervisor_id = iprot.readString();
+              struct.set_supervisor_id_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // WORKER_HEARTBEATS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list878 = iprot.readListBegin();
+                struct.worker_heartbeats = new ArrayList<SupervisorWorkerHeartbeat>(_list878.size);
+                SupervisorWorkerHeartbeat _elem879;
+                for (int _i880 = 0; _i880 < _list878.size; ++_i880)
+                {
+                  _elem879 = new SupervisorWorkerHeartbeat();
+                  _elem879.read(iprot);
+                  struct.worker_heartbeats.add(_elem879);
+                }
+                iprot.readListEnd();
+              }
+              struct.set_worker_heartbeats_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, SupervisorWorkerHeartbeats struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.supervisor_id != null) {
+        oprot.writeFieldBegin(SUPERVISOR_ID_FIELD_DESC);
+        oprot.writeString(struct.supervisor_id);
+        oprot.writeFieldEnd();
+      }
+      if (struct.worker_heartbeats != null) {
+        oprot.writeFieldBegin(WORKER_HEARTBEATS_FIELD_DESC);
+        {
+          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.worker_heartbeats.size()));
+          for (SupervisorWorkerHeartbeat _iter881 : struct.worker_heartbeats)
+          {
+            _iter881.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class SupervisorWorkerHeartbeatsTupleSchemeFactory implements SchemeFactory {
+    public SupervisorWorkerHeartbeatsTupleScheme getScheme() {
+      return new SupervisorWorkerHeartbeatsTupleScheme();
+    }
+  }
+
+  private static class SupervisorWorkerHeartbeatsTupleScheme extends TupleScheme<SupervisorWorkerHeartbeats> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, SupervisorWorkerHeartbeats struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.supervisor_id);
+      {
+        oprot.writeI32(struct.worker_heartbeats.size());
+        for (SupervisorWorkerHeartbeat _iter882 : struct.worker_heartbeats)
+        {
+          _iter882.write(oprot);
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, SupervisorWorkerHeartbeats struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.supervisor_id = iprot.readString();
+      struct.set_supervisor_id_isSet(true);
+      {
+        org.apache.thrift.protocol.TList _list883 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.worker_heartbeats = new ArrayList<SupervisorWorkerHeartbeat>(_list883.size);
+        SupervisorWorkerHeartbeat _elem884;
+        for (int _i885 = 0; _i885 < _list883.size; ++_i885)
+        {
+          _elem884 = new SupervisorWorkerHeartbeat();
+          _elem884.read(iprot);
+          struct.worker_heartbeats.add(_elem884);
+        }
+      }
+      struct.set_worker_heartbeats_isSet(true);
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricList.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricList.java b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricList.java
index 0bf95b5..764a4f9 100644
--- a/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricList.java
+++ b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricList.java
@@ -367,14 +367,14 @@ public class WorkerMetricList implements org.apache.thrift.TBase<WorkerMetricLis
           case 1: // METRICS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list870 = iprot.readListBegin();
-                struct.metrics = new ArrayList<WorkerMetricPoint>(_list870.size);
-                WorkerMetricPoint _elem871;
-                for (int _i872 = 0; _i872 < _list870.size; ++_i872)
+                org.apache.thrift.protocol.TList _list896 = iprot.readListBegin();
+                struct.metrics = new ArrayList<WorkerMetricPoint>(_list896.size);
+                WorkerMetricPoint _elem897;
+                for (int _i898 = 0; _i898 < _list896.size; ++_i898)
                 {
-                  _elem871 = new WorkerMetricPoint();
-                  _elem871.read(iprot);
-                  struct.metrics.add(_elem871);
+                  _elem897 = new WorkerMetricPoint();
+                  _elem897.read(iprot);
+                  struct.metrics.add(_elem897);
                 }
                 iprot.readListEnd();
               }
@@ -400,9 +400,9 @@ public class WorkerMetricList implements org.apache.thrift.TBase<WorkerMetricLis
         oprot.writeFieldBegin(METRICS_FIELD_DESC);
         {
           oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.metrics.size()));
-          for (WorkerMetricPoint _iter873 : struct.metrics)
+          for (WorkerMetricPoint _iter899 : struct.metrics)
           {
-            _iter873.write(oprot);
+            _iter899.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -433,9 +433,9 @@ public class WorkerMetricList implements org.apache.thrift.TBase<WorkerMetricLis
       if (struct.is_set_metrics()) {
         {
           oprot.writeI32(struct.metrics.size());
-          for (WorkerMetricPoint _iter874 : struct.metrics)
+          for (WorkerMetricPoint _iter900 : struct.metrics)
           {
-            _iter874.write(oprot);
+            _iter900.write(oprot);
           }
         }
       }
@@ -447,14 +447,14 @@ public class WorkerMetricList implements org.apache.thrift.TBase<WorkerMetricLis
       BitSet incoming = iprot.readBitSet(1);
       if (incoming.get(0)) {
         {
-          org.apache.thrift.protocol.TList _list875 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.metrics = new ArrayList<WorkerMetricPoint>(_list875.size);
-          WorkerMetricPoint _elem876;
-          for (int _i877 = 0; _i877 < _list875.size; ++_i877)
+          org.apache.thrift.protocol.TList _list901 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.metrics = new ArrayList<WorkerMetricPoint>(_list901.size);
+          WorkerMetricPoint _elem902;
+          for (int _i903 = 0; _i903 < _list901.size; ++_i903)
           {
-            _elem876 = new WorkerMetricPoint();
-            _elem876.read(iprot);
-            struct.metrics.add(_elem876);
+            _elem902 = new WorkerMetricPoint();
+            _elem902.read(iprot);
+            struct.metrics.add(_elem902);
           }
         }
         struct.set_metrics_isSet(true);

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/generated/WorkerTokenServiceType.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/WorkerTokenServiceType.java b/storm-client/src/jvm/org/apache/storm/generated/WorkerTokenServiceType.java
index 99c26a8..3602c97 100644
--- a/storm-client/src/jvm/org/apache/storm/generated/WorkerTokenServiceType.java
+++ b/storm-client/src/jvm/org/apache/storm/generated/WorkerTokenServiceType.java
@@ -30,7 +30,8 @@ import org.apache.thrift.TEnum;
 
 public enum WorkerTokenServiceType implements org.apache.thrift.TEnum {
   NIMBUS(0),
-  DRPC(1);
+  DRPC(1),
+  SUPERVISOR(2);
 
   private final int value;
 
@@ -55,6 +56,8 @@ public enum WorkerTokenServiceType implements org.apache.thrift.TEnum {
         return NIMBUS;
       case 1:
         return DRPC;
+      case 2:
+        return SUPERVISOR;
       default:
         return null;
     }

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/grouping/LoadAwareShuffleGrouping.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/grouping/LoadAwareShuffleGrouping.java b/storm-client/src/jvm/org/apache/storm/grouping/LoadAwareShuffleGrouping.java
index f1aebd3..f8dcf56 100644
--- a/storm-client/src/jvm/org/apache/storm/grouping/LoadAwareShuffleGrouping.java
+++ b/storm-client/src/jvm/org/apache/storm/grouping/LoadAwareShuffleGrouping.java
@@ -295,7 +295,13 @@ public class LoadAwareShuffleGrouping implements LoadAwareCustomStreamGrouping,
     private Map<String, String> getHostToRackMapping(Map<Integer, NodeInfo> taskToNodePort) {
         Set<String> hosts = new HashSet();
         for (int task: targetTasks) {
-            hosts.add(taskToNodePort.get(task).get_node());
+            //if this task containing worker will be killed by a assignments sync,
+            //taskToNodePort will be an empty map which is refreshed by WorkerState
+            if (taskToNodePort.containsKey(task)) {
+                hosts.add(taskToNodePort.get(task).get_node());
+            } else {
+                LOG.error("Could not find task NodeInfo from local cache.");
+            }
         }
         hosts.add(sourceNodeInfo.get_node());
         return dnsToSwitchMapping.resolve(new ArrayList<>(hosts));

http://git-wip-us.apache.org/repos/asf/storm/blob/0dac58b0/storm-client/src/jvm/org/apache/storm/security/auth/IAuthorizer.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/security/auth/IAuthorizer.java b/storm-client/src/jvm/org/apache/storm/security/auth/IAuthorizer.java
index 70f9e32..d83cc72 100644
--- a/storm-client/src/jvm/org/apache/storm/security/auth/IAuthorizer.java
+++ b/storm-client/src/jvm/org/apache/storm/security/auth/IAuthorizer.java
@@ -37,10 +37,10 @@ import java.util.Map;
  */
 public interface IAuthorizer {
     /**
-     * Invoked once immediately after construction
-     * @param topoConf Storm configuration
+     * Invoked once immediately after construction.
+     * @param conf Storm cluster configuration
      */
-    void prepare(Map<String, Object> topoConf);
+    void prepare(Map<String, Object> conf);
     
     /**
      * permit() method is invoked for each incoming Thrift request.