http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricPoint.java
----------------------------------------------------------------------
diff --git 
a/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricPoint.java 
b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricPoint.java
new file mode 100644
index 0000000..719277a
--- /dev/null
+++ b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetricPoint.java
@@ -0,0 +1,903 @@
+/**
+ * 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 WorkerMetricPoint implements 
org.apache.thrift.TBase<WorkerMetricPoint, WorkerMetricPoint._Fields>, 
java.io.Serializable, Cloneable, Comparable<WorkerMetricPoint> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("WorkerMetricPoint");
+
+  private static final org.apache.thrift.protocol.TField 
METRIC_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("metricName", 
org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField TIMESTAMP_FIELD_DESC 
= new org.apache.thrift.protocol.TField("timestamp", 
org.apache.thrift.protocol.TType.I64, (short)2);
+  private static final org.apache.thrift.protocol.TField 
METRIC_VALUE_FIELD_DESC = new org.apache.thrift.protocol.TField("metricValue", 
org.apache.thrift.protocol.TType.DOUBLE, (short)3);
+  private static final org.apache.thrift.protocol.TField 
COMPONENT_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("componentId", 
org.apache.thrift.protocol.TType.STRING, (short)4);
+  private static final org.apache.thrift.protocol.TField 
EXECUTOR_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("executorId", 
org.apache.thrift.protocol.TType.STRING, (short)5);
+  private static final org.apache.thrift.protocol.TField STREAM_ID_FIELD_DESC 
= new org.apache.thrift.protocol.TField("streamId", 
org.apache.thrift.protocol.TType.STRING, (short)6);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = 
new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new 
WorkerMetricPointStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new WorkerMetricPointTupleSchemeFactory());
+  }
+
+  private String metricName; // required
+  private long timestamp; // required
+  private double metricValue; // required
+  private String componentId; // required
+  private String executorId; // required
+  private String streamId; // 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 {
+    METRIC_NAME((short)1, "metricName"),
+    TIMESTAMP((short)2, "timestamp"),
+    METRIC_VALUE((short)3, "metricValue"),
+    COMPONENT_ID((short)4, "componentId"),
+    EXECUTOR_ID((short)5, "executorId"),
+    STREAM_ID((short)6, "streamId");
+
+    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: // METRIC_NAME
+          return METRIC_NAME;
+        case 2: // TIMESTAMP
+          return TIMESTAMP;
+        case 3: // METRIC_VALUE
+          return METRIC_VALUE;
+        case 4: // COMPONENT_ID
+          return COMPONENT_ID;
+        case 5: // EXECUTOR_ID
+          return EXECUTOR_ID;
+        case 6: // STREAM_ID
+          return STREAM_ID;
+        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 __TIMESTAMP_ISSET_ID = 0;
+  private static final int __METRICVALUE_ISSET_ID = 1;
+  private byte __isset_bitfield = 0;
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> 
metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.METRIC_NAME, new 
org.apache.thrift.meta_data.FieldMetaData("metricName", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.TIMESTAMP, new 
org.apache.thrift.meta_data.FieldMetaData("timestamp", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.METRIC_VALUE, new 
org.apache.thrift.meta_data.FieldMetaData("metricValue", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
+    tmpMap.put(_Fields.COMPONENT_ID, new 
org.apache.thrift.meta_data.FieldMetaData("componentId", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.EXECUTOR_ID, new 
org.apache.thrift.meta_data.FieldMetaData("executorId", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.STREAM_ID, new 
org.apache.thrift.meta_data.FieldMetaData("streamId", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(WorkerMetricPoint.class,
 metaDataMap);
+  }
+
+  public WorkerMetricPoint() {
+  }
+
+  public WorkerMetricPoint(
+    String metricName,
+    long timestamp,
+    double metricValue,
+    String componentId,
+    String executorId,
+    String streamId)
+  {
+    this();
+    this.metricName = metricName;
+    this.timestamp = timestamp;
+    set_timestamp_isSet(true);
+    this.metricValue = metricValue;
+    set_metricValue_isSet(true);
+    this.componentId = componentId;
+    this.executorId = executorId;
+    this.streamId = streamId;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public WorkerMetricPoint(WorkerMetricPoint other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.is_set_metricName()) {
+      this.metricName = other.metricName;
+    }
+    this.timestamp = other.timestamp;
+    this.metricValue = other.metricValue;
+    if (other.is_set_componentId()) {
+      this.componentId = other.componentId;
+    }
+    if (other.is_set_executorId()) {
+      this.executorId = other.executorId;
+    }
+    if (other.is_set_streamId()) {
+      this.streamId = other.streamId;
+    }
+  }
+
+  public WorkerMetricPoint deepCopy() {
+    return new WorkerMetricPoint(this);
+  }
+
+  @Override
+  public void clear() {
+    this.metricName = null;
+    set_timestamp_isSet(false);
+    this.timestamp = 0;
+    set_metricValue_isSet(false);
+    this.metricValue = 0.0;
+    this.componentId = null;
+    this.executorId = null;
+    this.streamId = null;
+  }
+
+  public String get_metricName() {
+    return this.metricName;
+  }
+
+  public void set_metricName(String metricName) {
+    this.metricName = metricName;
+  }
+
+  public void unset_metricName() {
+    this.metricName = null;
+  }
+
+  /** Returns true if field metricName is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_metricName() {
+    return this.metricName != null;
+  }
+
+  public void set_metricName_isSet(boolean value) {
+    if (!value) {
+      this.metricName = null;
+    }
+  }
+
+  public long get_timestamp() {
+    return this.timestamp;
+  }
+
+  public void set_timestamp(long timestamp) {
+    this.timestamp = timestamp;
+    set_timestamp_isSet(true);
+  }
+
+  public void unset_timestamp() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__TIMESTAMP_ISSET_ID);
+  }
+
+  /** Returns true if field timestamp is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_timestamp() {
+    return EncodingUtils.testBit(__isset_bitfield, __TIMESTAMP_ISSET_ID);
+  }
+
+  public void set_timestamp_isSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__TIMESTAMP_ISSET_ID, value);
+  }
+
+  public double get_metricValue() {
+    return this.metricValue;
+  }
+
+  public void set_metricValue(double metricValue) {
+    this.metricValue = metricValue;
+    set_metricValue_isSet(true);
+  }
+
+  public void unset_metricValue() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__METRICVALUE_ISSET_ID);
+  }
+
+  /** Returns true if field metricValue is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_metricValue() {
+    return EncodingUtils.testBit(__isset_bitfield, __METRICVALUE_ISSET_ID);
+  }
+
+  public void set_metricValue_isSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__METRICVALUE_ISSET_ID, value);
+  }
+
+  public String get_componentId() {
+    return this.componentId;
+  }
+
+  public void set_componentId(String componentId) {
+    this.componentId = componentId;
+  }
+
+  public void unset_componentId() {
+    this.componentId = null;
+  }
+
+  /** Returns true if field componentId is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_componentId() {
+    return this.componentId != null;
+  }
+
+  public void set_componentId_isSet(boolean value) {
+    if (!value) {
+      this.componentId = null;
+    }
+  }
+
+  public String get_executorId() {
+    return this.executorId;
+  }
+
+  public void set_executorId(String executorId) {
+    this.executorId = executorId;
+  }
+
+  public void unset_executorId() {
+    this.executorId = null;
+  }
+
+  /** Returns true if field executorId is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_executorId() {
+    return this.executorId != null;
+  }
+
+  public void set_executorId_isSet(boolean value) {
+    if (!value) {
+      this.executorId = null;
+    }
+  }
+
+  public String get_streamId() {
+    return this.streamId;
+  }
+
+  public void set_streamId(String streamId) {
+    this.streamId = streamId;
+  }
+
+  public void unset_streamId() {
+    this.streamId = null;
+  }
+
+  /** Returns true if field streamId is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_streamId() {
+    return this.streamId != null;
+  }
+
+  public void set_streamId_isSet(boolean value) {
+    if (!value) {
+      this.streamId = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case METRIC_NAME:
+      if (value == null) {
+        unset_metricName();
+      } else {
+        set_metricName((String)value);
+      }
+      break;
+
+    case TIMESTAMP:
+      if (value == null) {
+        unset_timestamp();
+      } else {
+        set_timestamp((Long)value);
+      }
+      break;
+
+    case METRIC_VALUE:
+      if (value == null) {
+        unset_metricValue();
+      } else {
+        set_metricValue((Double)value);
+      }
+      break;
+
+    case COMPONENT_ID:
+      if (value == null) {
+        unset_componentId();
+      } else {
+        set_componentId((String)value);
+      }
+      break;
+
+    case EXECUTOR_ID:
+      if (value == null) {
+        unset_executorId();
+      } else {
+        set_executorId((String)value);
+      }
+      break;
+
+    case STREAM_ID:
+      if (value == null) {
+        unset_streamId();
+      } else {
+        set_streamId((String)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case METRIC_NAME:
+      return get_metricName();
+
+    case TIMESTAMP:
+      return get_timestamp();
+
+    case METRIC_VALUE:
+      return get_metricValue();
+
+    case COMPONENT_ID:
+      return get_componentId();
+
+    case EXECUTOR_ID:
+      return get_executorId();
+
+    case STREAM_ID:
+      return get_streamId();
+
+    }
+    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 METRIC_NAME:
+      return is_set_metricName();
+    case TIMESTAMP:
+      return is_set_timestamp();
+    case METRIC_VALUE:
+      return is_set_metricValue();
+    case COMPONENT_ID:
+      return is_set_componentId();
+    case EXECUTOR_ID:
+      return is_set_executorId();
+    case STREAM_ID:
+      return is_set_streamId();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof WorkerMetricPoint)
+      return this.equals((WorkerMetricPoint)that);
+    return false;
+  }
+
+  public boolean equals(WorkerMetricPoint that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_metricName = true && this.is_set_metricName();
+    boolean that_present_metricName = true && that.is_set_metricName();
+    if (this_present_metricName || that_present_metricName) {
+      if (!(this_present_metricName && that_present_metricName))
+        return false;
+      if (!this.metricName.equals(that.metricName))
+        return false;
+    }
+
+    boolean this_present_timestamp = true;
+    boolean that_present_timestamp = true;
+    if (this_present_timestamp || that_present_timestamp) {
+      if (!(this_present_timestamp && that_present_timestamp))
+        return false;
+      if (this.timestamp != that.timestamp)
+        return false;
+    }
+
+    boolean this_present_metricValue = true;
+    boolean that_present_metricValue = true;
+    if (this_present_metricValue || that_present_metricValue) {
+      if (!(this_present_metricValue && that_present_metricValue))
+        return false;
+      if (this.metricValue != that.metricValue)
+        return false;
+    }
+
+    boolean this_present_componentId = true && this.is_set_componentId();
+    boolean that_present_componentId = true && that.is_set_componentId();
+    if (this_present_componentId || that_present_componentId) {
+      if (!(this_present_componentId && that_present_componentId))
+        return false;
+      if (!this.componentId.equals(that.componentId))
+        return false;
+    }
+
+    boolean this_present_executorId = true && this.is_set_executorId();
+    boolean that_present_executorId = true && that.is_set_executorId();
+    if (this_present_executorId || that_present_executorId) {
+      if (!(this_present_executorId && that_present_executorId))
+        return false;
+      if (!this.executorId.equals(that.executorId))
+        return false;
+    }
+
+    boolean this_present_streamId = true && this.is_set_streamId();
+    boolean that_present_streamId = true && that.is_set_streamId();
+    if (this_present_streamId || that_present_streamId) {
+      if (!(this_present_streamId && that_present_streamId))
+        return false;
+      if (!this.streamId.equals(that.streamId))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_metricName = true && (is_set_metricName());
+    list.add(present_metricName);
+    if (present_metricName)
+      list.add(metricName);
+
+    boolean present_timestamp = true;
+    list.add(present_timestamp);
+    if (present_timestamp)
+      list.add(timestamp);
+
+    boolean present_metricValue = true;
+    list.add(present_metricValue);
+    if (present_metricValue)
+      list.add(metricValue);
+
+    boolean present_componentId = true && (is_set_componentId());
+    list.add(present_componentId);
+    if (present_componentId)
+      list.add(componentId);
+
+    boolean present_executorId = true && (is_set_executorId());
+    list.add(present_executorId);
+    if (present_executorId)
+      list.add(executorId);
+
+    boolean present_streamId = true && (is_set_streamId());
+    list.add(present_streamId);
+    if (present_streamId)
+      list.add(streamId);
+
+    return list.hashCode();
+  }
+
+  @Override
+  public int compareTo(WorkerMetricPoint other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = 
Boolean.valueOf(is_set_metricName()).compareTo(other.is_set_metricName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_metricName()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.metricName, other.metricName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_timestamp()).compareTo(other.is_set_timestamp());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_timestamp()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.timestamp, 
other.timestamp);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_metricValue()).compareTo(other.is_set_metricValue());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_metricValue()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.metricValue, other.metricValue);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_componentId()).compareTo(other.is_set_componentId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_componentId()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.componentId, other.componentId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_executorId()).compareTo(other.is_set_executorId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_executorId()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.executorId, other.executorId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_streamId()).compareTo(other.is_set_streamId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_streamId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.streamId, 
other.streamId);
+      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("WorkerMetricPoint(");
+    boolean first = true;
+
+    sb.append("metricName:");
+    if (this.metricName == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.metricName);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("timestamp:");
+    sb.append(this.timestamp);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("metricValue:");
+    sb.append(this.metricValue);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("componentId:");
+    if (this.componentId == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.componentId);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("executorId:");
+    if (this.executorId == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.executorId);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("streamId:");
+    if (this.streamId == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.streamId);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!is_set_metricName()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'metricName' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_timestamp()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'timestamp' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_metricValue()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'metricValue' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_componentId()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'componentId' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_executorId()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'executorId' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_streamId()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'streamId' 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 WorkerMetricPointStandardSchemeFactory implements 
SchemeFactory {
+    public WorkerMetricPointStandardScheme getScheme() {
+      return new WorkerMetricPointStandardScheme();
+    }
+  }
+
+  private static class WorkerMetricPointStandardScheme extends 
StandardScheme<WorkerMetricPoint> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, 
WorkerMetricPoint 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: // METRIC_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.metricName = iprot.readString();
+              struct.set_metricName_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 2: // TIMESTAMP
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.timestamp = iprot.readI64();
+              struct.set_timestamp_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 3: // METRIC_VALUE
+            if (schemeField.type == org.apache.thrift.protocol.TType.DOUBLE) {
+              struct.metricValue = iprot.readDouble();
+              struct.set_metricValue_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 4: // COMPONENT_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.componentId = iprot.readString();
+              struct.set_componentId_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 5: // EXECUTOR_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.executorId = iprot.readString();
+              struct.set_executorId_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 6: // STREAM_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.streamId = iprot.readString();
+              struct.set_streamId_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, 
WorkerMetricPoint struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.metricName != null) {
+        oprot.writeFieldBegin(METRIC_NAME_FIELD_DESC);
+        oprot.writeString(struct.metricName);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(TIMESTAMP_FIELD_DESC);
+      oprot.writeI64(struct.timestamp);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(METRIC_VALUE_FIELD_DESC);
+      oprot.writeDouble(struct.metricValue);
+      oprot.writeFieldEnd();
+      if (struct.componentId != null) {
+        oprot.writeFieldBegin(COMPONENT_ID_FIELD_DESC);
+        oprot.writeString(struct.componentId);
+        oprot.writeFieldEnd();
+      }
+      if (struct.executorId != null) {
+        oprot.writeFieldBegin(EXECUTOR_ID_FIELD_DESC);
+        oprot.writeString(struct.executorId);
+        oprot.writeFieldEnd();
+      }
+      if (struct.streamId != null) {
+        oprot.writeFieldBegin(STREAM_ID_FIELD_DESC);
+        oprot.writeString(struct.streamId);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class WorkerMetricPointTupleSchemeFactory implements 
SchemeFactory {
+    public WorkerMetricPointTupleScheme getScheme() {
+      return new WorkerMetricPointTupleScheme();
+    }
+  }
+
+  private static class WorkerMetricPointTupleScheme extends 
TupleScheme<WorkerMetricPoint> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, 
WorkerMetricPoint struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.metricName);
+      oprot.writeI64(struct.timestamp);
+      oprot.writeDouble(struct.metricValue);
+      oprot.writeString(struct.componentId);
+      oprot.writeString(struct.executorId);
+      oprot.writeString(struct.streamId);
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, 
WorkerMetricPoint struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.metricName = iprot.readString();
+      struct.set_metricName_isSet(true);
+      struct.timestamp = iprot.readI64();
+      struct.set_timestamp_isSet(true);
+      struct.metricValue = iprot.readDouble();
+      struct.set_metricValue_isSet(true);
+      struct.componentId = iprot.readString();
+      struct.set_componentId_isSet(true);
+      struct.executorId = iprot.readString();
+      struct.set_executorId_isSet(true);
+      struct.streamId = iprot.readString();
+      struct.set_streamId_isSet(true);
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/generated/WorkerMetrics.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/generated/WorkerMetrics.java 
b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetrics.java
new file mode 100644
index 0000000..f7813fd
--- /dev/null
+++ b/storm-client/src/jvm/org/apache/storm/generated/WorkerMetrics.java
@@ -0,0 +1,712 @@
+/**
+ * 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 WorkerMetrics implements org.apache.thrift.TBase<WorkerMetrics, 
WorkerMetrics._Fields>, java.io.Serializable, Cloneable, 
Comparable<WorkerMetrics> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("WorkerMetrics");
+
+  private static final org.apache.thrift.protocol.TField 
TOPOLOGY_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("topologyId", 
org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField PORT_FIELD_DESC = new 
org.apache.thrift.protocol.TField("port", org.apache.thrift.protocol.TType.I32, 
(short)2);
+  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)3);
+  private static final org.apache.thrift.protocol.TField 
METRIC_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("metricList", 
org.apache.thrift.protocol.TType.STRUCT, (short)4);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = 
new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new 
WorkerMetricsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new WorkerMetricsTupleSchemeFactory());
+  }
+
+  private String topologyId; // required
+  private int port; // required
+  private String hostname; // required
+  private WorkerMetricList metricList; // 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 {
+    TOPOLOGY_ID((short)1, "topologyId"),
+    PORT((short)2, "port"),
+    HOSTNAME((short)3, "hostname"),
+    METRIC_LIST((short)4, "metricList");
+
+    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: // TOPOLOGY_ID
+          return TOPOLOGY_ID;
+        case 2: // PORT
+          return PORT;
+        case 3: // HOSTNAME
+          return HOSTNAME;
+        case 4: // METRIC_LIST
+          return METRIC_LIST;
+        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 __PORT_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.TOPOLOGY_ID, new 
org.apache.thrift.meta_data.FieldMetaData("topologyId", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.PORT, new 
org.apache.thrift.meta_data.FieldMetaData("port", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.HOSTNAME, new 
org.apache.thrift.meta_data.FieldMetaData("hostname", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.METRIC_LIST, new 
org.apache.thrift.meta_data.FieldMetaData("metricList", 
org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new 
org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT,
 WorkerMetricList.class)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(WorkerMetrics.class,
 metaDataMap);
+  }
+
+  public WorkerMetrics() {
+  }
+
+  public WorkerMetrics(
+    String topologyId,
+    int port,
+    String hostname,
+    WorkerMetricList metricList)
+  {
+    this();
+    this.topologyId = topologyId;
+    this.port = port;
+    set_port_isSet(true);
+    this.hostname = hostname;
+    this.metricList = metricList;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public WorkerMetrics(WorkerMetrics other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.is_set_topologyId()) {
+      this.topologyId = other.topologyId;
+    }
+    this.port = other.port;
+    if (other.is_set_hostname()) {
+      this.hostname = other.hostname;
+    }
+    if (other.is_set_metricList()) {
+      this.metricList = new WorkerMetricList(other.metricList);
+    }
+  }
+
+  public WorkerMetrics deepCopy() {
+    return new WorkerMetrics(this);
+  }
+
+  @Override
+  public void clear() {
+    this.topologyId = null;
+    set_port_isSet(false);
+    this.port = 0;
+    this.hostname = null;
+    this.metricList = null;
+  }
+
+  public String get_topologyId() {
+    return this.topologyId;
+  }
+
+  public void set_topologyId(String topologyId) {
+    this.topologyId = topologyId;
+  }
+
+  public void unset_topologyId() {
+    this.topologyId = null;
+  }
+
+  /** Returns true if field topologyId is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_topologyId() {
+    return this.topologyId != null;
+  }
+
+  public void set_topologyId_isSet(boolean value) {
+    if (!value) {
+      this.topologyId = null;
+    }
+  }
+
+  public int get_port() {
+    return this.port;
+  }
+
+  public void set_port(int port) {
+    this.port = port;
+    set_port_isSet(true);
+  }
+
+  public void unset_port() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__PORT_ISSET_ID);
+  }
+
+  /** Returns true if field port is set (has been assigned a value) and false 
otherwise */
+  public boolean is_set_port() {
+    return EncodingUtils.testBit(__isset_bitfield, __PORT_ISSET_ID);
+  }
+
+  public void set_port_isSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __PORT_ISSET_ID, 
value);
+  }
+
+  public String get_hostname() {
+    return this.hostname;
+  }
+
+  public void set_hostname(String hostname) {
+    this.hostname = hostname;
+  }
+
+  public void unset_hostname() {
+    this.hostname = null;
+  }
+
+  /** Returns true if field hostname is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_hostname() {
+    return this.hostname != null;
+  }
+
+  public void set_hostname_isSet(boolean value) {
+    if (!value) {
+      this.hostname = null;
+    }
+  }
+
+  public WorkerMetricList get_metricList() {
+    return this.metricList;
+  }
+
+  public void set_metricList(WorkerMetricList metricList) {
+    this.metricList = metricList;
+  }
+
+  public void unset_metricList() {
+    this.metricList = null;
+  }
+
+  /** Returns true if field metricList is set (has been assigned a value) and 
false otherwise */
+  public boolean is_set_metricList() {
+    return this.metricList != null;
+  }
+
+  public void set_metricList_isSet(boolean value) {
+    if (!value) {
+      this.metricList = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case TOPOLOGY_ID:
+      if (value == null) {
+        unset_topologyId();
+      } else {
+        set_topologyId((String)value);
+      }
+      break;
+
+    case PORT:
+      if (value == null) {
+        unset_port();
+      } else {
+        set_port((Integer)value);
+      }
+      break;
+
+    case HOSTNAME:
+      if (value == null) {
+        unset_hostname();
+      } else {
+        set_hostname((String)value);
+      }
+      break;
+
+    case METRIC_LIST:
+      if (value == null) {
+        unset_metricList();
+      } else {
+        set_metricList((WorkerMetricList)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case TOPOLOGY_ID:
+      return get_topologyId();
+
+    case PORT:
+      return get_port();
+
+    case HOSTNAME:
+      return get_hostname();
+
+    case METRIC_LIST:
+      return get_metricList();
+
+    }
+    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 TOPOLOGY_ID:
+      return is_set_topologyId();
+    case PORT:
+      return is_set_port();
+    case HOSTNAME:
+      return is_set_hostname();
+    case METRIC_LIST:
+      return is_set_metricList();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof WorkerMetrics)
+      return this.equals((WorkerMetrics)that);
+    return false;
+  }
+
+  public boolean equals(WorkerMetrics that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_topologyId = true && this.is_set_topologyId();
+    boolean that_present_topologyId = true && that.is_set_topologyId();
+    if (this_present_topologyId || that_present_topologyId) {
+      if (!(this_present_topologyId && that_present_topologyId))
+        return false;
+      if (!this.topologyId.equals(that.topologyId))
+        return false;
+    }
+
+    boolean this_present_port = true;
+    boolean that_present_port = true;
+    if (this_present_port || that_present_port) {
+      if (!(this_present_port && that_present_port))
+        return false;
+      if (this.port != that.port)
+        return false;
+    }
+
+    boolean this_present_hostname = true && this.is_set_hostname();
+    boolean that_present_hostname = true && that.is_set_hostname();
+    if (this_present_hostname || that_present_hostname) {
+      if (!(this_present_hostname && that_present_hostname))
+        return false;
+      if (!this.hostname.equals(that.hostname))
+        return false;
+    }
+
+    boolean this_present_metricList = true && this.is_set_metricList();
+    boolean that_present_metricList = true && that.is_set_metricList();
+    if (this_present_metricList || that_present_metricList) {
+      if (!(this_present_metricList && that_present_metricList))
+        return false;
+      if (!this.metricList.equals(that.metricList))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_topologyId = true && (is_set_topologyId());
+    list.add(present_topologyId);
+    if (present_topologyId)
+      list.add(topologyId);
+
+    boolean present_port = true;
+    list.add(present_port);
+    if (present_port)
+      list.add(port);
+
+    boolean present_hostname = true && (is_set_hostname());
+    list.add(present_hostname);
+    if (present_hostname)
+      list.add(hostname);
+
+    boolean present_metricList = true && (is_set_metricList());
+    list.add(present_metricList);
+    if (present_metricList)
+      list.add(metricList);
+
+    return list.hashCode();
+  }
+
+  @Override
+  public int compareTo(WorkerMetrics other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = 
Boolean.valueOf(is_set_topologyId()).compareTo(other.is_set_topologyId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_topologyId()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.topologyId, other.topologyId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_port()).compareTo(other.is_set_port());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_port()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.port, 
other.port);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_hostname()).compareTo(other.is_set_hostname());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_hostname()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.hostname, 
other.hostname);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(is_set_metricList()).compareTo(other.is_set_metricList());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (is_set_metricList()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.metricList, other.metricList);
+      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("WorkerMetrics(");
+    boolean first = true;
+
+    sb.append("topologyId:");
+    if (this.topologyId == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.topologyId);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("port:");
+    sb.append(this.port);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("hostname:");
+    if (this.hostname == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.hostname);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("metricList:");
+    if (this.metricList == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.metricList);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    if (!is_set_topologyId()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'topologyId' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_port()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'port' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_hostname()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'hostname' is unset! Struct:" + toString());
+    }
+
+    if (!is_set_metricList()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 
'metricList' is unset! Struct:" + toString());
+    }
+
+    // check for sub-struct validity
+    if (metricList != null) {
+      metricList.validate();
+    }
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws 
java.io.IOException, ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java 
serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class WorkerMetricsStandardSchemeFactory implements 
SchemeFactory {
+    public WorkerMetricsStandardScheme getScheme() {
+      return new WorkerMetricsStandardScheme();
+    }
+  }
+
+  private static class WorkerMetricsStandardScheme extends 
StandardScheme<WorkerMetrics> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, WorkerMetrics 
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: // TOPOLOGY_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.topologyId = iprot.readString();
+              struct.set_topologyId_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 2: // PORT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.port = iprot.readI32();
+              struct.set_port_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 3: // HOSTNAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.hostname = iprot.readString();
+              struct.set_hostname_isSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 4: // METRIC_LIST
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+              struct.metricList = new WorkerMetricList();
+              struct.metricList.read(iprot);
+              struct.set_metricList_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, 
WorkerMetrics struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.topologyId != null) {
+        oprot.writeFieldBegin(TOPOLOGY_ID_FIELD_DESC);
+        oprot.writeString(struct.topologyId);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(PORT_FIELD_DESC);
+      oprot.writeI32(struct.port);
+      oprot.writeFieldEnd();
+      if (struct.hostname != null) {
+        oprot.writeFieldBegin(HOSTNAME_FIELD_DESC);
+        oprot.writeString(struct.hostname);
+        oprot.writeFieldEnd();
+      }
+      if (struct.metricList != null) {
+        oprot.writeFieldBegin(METRIC_LIST_FIELD_DESC);
+        struct.metricList.write(oprot);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class WorkerMetricsTupleSchemeFactory implements 
SchemeFactory {
+    public WorkerMetricsTupleScheme getScheme() {
+      return new WorkerMetricsTupleScheme();
+    }
+  }
+
+  private static class WorkerMetricsTupleScheme extends 
TupleScheme<WorkerMetrics> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, WorkerMetrics 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeString(struct.topologyId);
+      oprot.writeI32(struct.port);
+      oprot.writeString(struct.hostname);
+      struct.metricList.write(oprot);
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, WorkerMetrics 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.topologyId = iprot.readString();
+      struct.set_topologyId_isSet(true);
+      struct.port = iprot.readI32();
+      struct.set_port_isSet(true);
+      struct.hostname = iprot.readString();
+      struct.set_hostname_isSet(true);
+      struct.metricList = new WorkerMetricList();
+      struct.metricList.read(iprot);
+      struct.set_metricList_isSet(true);
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/generated/WorkerResources.java
----------------------------------------------------------------------
diff --git 
a/storm-client/src/jvm/org/apache/storm/generated/WorkerResources.java 
b/storm-client/src/jvm/org/apache/storm/generated/WorkerResources.java
index 56e2348..d25b5b0 100644
--- a/storm-client/src/jvm/org/apache/storm/generated/WorkerResources.java
+++ b/storm-client/src/jvm/org/apache/storm/generated/WorkerResources.java
@@ -876,15 +876,15 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
           case 6: // RESOURCES
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
-                org.apache.thrift.protocol.TMap _map646 = iprot.readMapBegin();
-                struct.resources = new HashMap<String,Double>(2*_map646.size);
-                String _key647;
-                double _val648;
-                for (int _i649 = 0; _i649 < _map646.size; ++_i649)
+                org.apache.thrift.protocol.TMap _map666 = iprot.readMapBegin();
+                struct.resources = new HashMap<String,Double>(2*_map666.size);
+                String _key667;
+                double _val668;
+                for (int _i669 = 0; _i669 < _map666.size; ++_i669)
                 {
-                  _key647 = iprot.readString();
-                  _val648 = iprot.readDouble();
-                  struct.resources.put(_key647, _val648);
+                  _key667 = iprot.readString();
+                  _val668 = iprot.readDouble();
+                  struct.resources.put(_key667, _val668);
                 }
                 iprot.readMapEnd();
               }
@@ -896,15 +896,15 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
           case 7: // SHARED_RESOURCES
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
-                org.apache.thrift.protocol.TMap _map650 = iprot.readMapBegin();
-                struct.shared_resources = new 
HashMap<String,Double>(2*_map650.size);
-                String _key651;
-                double _val652;
-                for (int _i653 = 0; _i653 < _map650.size; ++_i653)
+                org.apache.thrift.protocol.TMap _map670 = iprot.readMapBegin();
+                struct.shared_resources = new 
HashMap<String,Double>(2*_map670.size);
+                String _key671;
+                double _val672;
+                for (int _i673 = 0; _i673 < _map670.size; ++_i673)
                 {
-                  _key651 = iprot.readString();
-                  _val652 = iprot.readDouble();
-                  struct.shared_resources.put(_key651, _val652);
+                  _key671 = iprot.readString();
+                  _val672 = iprot.readDouble();
+                  struct.shared_resources.put(_key671, _val672);
                 }
                 iprot.readMapEnd();
               }
@@ -956,10 +956,10 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
           oprot.writeFieldBegin(RESOURCES_FIELD_DESC);
           {
             oprot.writeMapBegin(new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, struct.resources.size()));
-            for (Map.Entry<String, Double> _iter654 : 
struct.resources.entrySet())
+            for (Map.Entry<String, Double> _iter674 : 
struct.resources.entrySet())
             {
-              oprot.writeString(_iter654.getKey());
-              oprot.writeDouble(_iter654.getValue());
+              oprot.writeString(_iter674.getKey());
+              oprot.writeDouble(_iter674.getValue());
             }
             oprot.writeMapEnd();
           }
@@ -971,10 +971,10 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
           oprot.writeFieldBegin(SHARED_RESOURCES_FIELD_DESC);
           {
             oprot.writeMapBegin(new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, struct.shared_resources.size()));
-            for (Map.Entry<String, Double> _iter655 : 
struct.shared_resources.entrySet())
+            for (Map.Entry<String, Double> _iter675 : 
struct.shared_resources.entrySet())
             {
-              oprot.writeString(_iter655.getKey());
-              oprot.writeDouble(_iter655.getValue());
+              oprot.writeString(_iter675.getKey());
+              oprot.writeDouble(_iter675.getValue());
             }
             oprot.writeMapEnd();
           }
@@ -1039,20 +1039,20 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
       if (struct.is_set_resources()) {
         {
           oprot.writeI32(struct.resources.size());
-          for (Map.Entry<String, Double> _iter656 : 
struct.resources.entrySet())
+          for (Map.Entry<String, Double> _iter676 : 
struct.resources.entrySet())
           {
-            oprot.writeString(_iter656.getKey());
-            oprot.writeDouble(_iter656.getValue());
+            oprot.writeString(_iter676.getKey());
+            oprot.writeDouble(_iter676.getValue());
           }
         }
       }
       if (struct.is_set_shared_resources()) {
         {
           oprot.writeI32(struct.shared_resources.size());
-          for (Map.Entry<String, Double> _iter657 : 
struct.shared_resources.entrySet())
+          for (Map.Entry<String, Double> _iter677 : 
struct.shared_resources.entrySet())
           {
-            oprot.writeString(_iter657.getKey());
-            oprot.writeDouble(_iter657.getValue());
+            oprot.writeString(_iter677.getKey());
+            oprot.writeDouble(_iter677.getValue());
           }
         }
       }
@@ -1084,30 +1084,30 @@ public class WorkerResources implements 
org.apache.thrift.TBase<WorkerResources,
       }
       if (incoming.get(5)) {
         {
-          org.apache.thrift.protocol.TMap _map658 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, iprot.readI32());
-          struct.resources = new HashMap<String,Double>(2*_map658.size);
-          String _key659;
-          double _val660;
-          for (int _i661 = 0; _i661 < _map658.size; ++_i661)
+          org.apache.thrift.protocol.TMap _map678 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, iprot.readI32());
+          struct.resources = new HashMap<String,Double>(2*_map678.size);
+          String _key679;
+          double _val680;
+          for (int _i681 = 0; _i681 < _map678.size; ++_i681)
           {
-            _key659 = iprot.readString();
-            _val660 = iprot.readDouble();
-            struct.resources.put(_key659, _val660);
+            _key679 = iprot.readString();
+            _val680 = iprot.readDouble();
+            struct.resources.put(_key679, _val680);
           }
         }
         struct.set_resources_isSet(true);
       }
       if (incoming.get(6)) {
         {
-          org.apache.thrift.protocol.TMap _map662 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, iprot.readI32());
-          struct.shared_resources = new HashMap<String,Double>(2*_map662.size);
-          String _key663;
-          double _val664;
-          for (int _i665 = 0; _i665 < _map662.size; ++_i665)
+          org.apache.thrift.protocol.TMap _map682 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.DOUBLE, iprot.readI32());
+          struct.shared_resources = new HashMap<String,Double>(2*_map682.size);
+          String _key683;
+          double _val684;
+          for (int _i685 = 0; _i685 < _map682.size; ++_i685)
           {
-            _key663 = iprot.readString();
-            _val664 = iprot.readDouble();
-            struct.shared_resources.put(_key663, _val664);
+            _key683 = iprot.readString();
+            _val684 = iprot.readDouble();
+            struct.shared_resources.put(_key683, _val684);
           }
         }
         struct.set_shared_resources_isSet(true);

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/security/auth/authorizer/SimpleACLAuthorizer.java
----------------------------------------------------------------------
diff --git 
a/storm-client/src/jvm/org/apache/storm/security/auth/authorizer/SimpleACLAuthorizer.java
 
b/storm-client/src/jvm/org/apache/storm/security/auth/authorizer/SimpleACLAuthorizer.java
index dcc4854..05247f9 100644
--- 
a/storm-client/src/jvm/org/apache/storm/security/auth/authorizer/SimpleACLAuthorizer.java
+++ 
b/storm-client/src/jvm/org/apache/storm/security/auth/authorizer/SimpleACLAuthorizer.java
@@ -18,12 +18,12 @@
 
 package org.apache.storm.security.auth.authorizer;
 
+import java.io.IOException;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.HashSet;
-import java.util.Collection;
-import java.io.IOException;
 
 import org.apache.storm.Config;
 import org.apache.storm.security.auth.IAuthorizer;
@@ -49,7 +49,9 @@ public class SimpleACLAuthorizer implements IAuthorizer {
             "getClusterInfo",
             "getSupervisorPageInfo",
             "getOwnerResourceSummaries"));
-    protected Set<String> supervisorCommands = new 
HashSet<>(Arrays.asList("fileDownload"));
+    protected Set<String> supervisorCommands = new HashSet<>(Arrays.asList(
+            "fileDownload",
+            "processWorkerMetrics"));
     protected Set<String> topoReadOnlyCommands = new HashSet<>(Arrays.asList(
             "getTopologyConf",
             "getTopology",
@@ -86,8 +88,9 @@ public class SimpleACLAuthorizer implements IAuthorizer {
     protected Set<String> nimbusGroups;
     protected IPrincipalToLocal ptol;
     protected IGroupMappingServiceProvider groupMappingServiceProvider;
+
     /**
-     * Invoked once immediately after construction
+     * Invoked once immediately after construction.
      * @param conf Storm configuration
      */
     @Override
@@ -123,7 +126,7 @@ public class SimpleACLAuthorizer implements IAuthorizer {
     }
 
     /**
-     * permit() method is invoked for each incoming Thrift request
+     * permit() method is invoked for each incoming Thrift request.
      * @param context request context includes info about
      * @param operation operation name
      * @param topoConf configuration of targeted topology
@@ -138,7 +141,7 @@ public class SimpleACLAuthorizer implements IAuthorizer {
         if (groupMappingServiceProvider != null) {
             try {
                 userGroups = groupMappingServiceProvider.getGroups(user);
-            } catch(IOException e) {
+            } catch (IOException e) {
                 LOG.warn("Error while trying to fetch user groups",e);
             }
         }
@@ -169,7 +172,7 @@ public class SimpleACLAuthorizer implements IAuthorizer {
     }
 
     private Boolean checkTopoPermission(String principal, String user, 
Set<String> userGroups,
-                                        Map<String, Object> topoConf, String 
userConfigKey, String groupConfigKey){
+                                        Map<String, Object> topoConf, String 
userConfigKey, String groupConfigKey) {
         Set<String> configuredUsers = new HashSet<>();
 
         if (topoConf.containsKey(userConfigKey)) {
@@ -189,10 +192,11 @@ public class SimpleACLAuthorizer implements IAuthorizer {
     }
 
     private Boolean checkUserGroupAllowed(Set<String> userGroups, Set<String> 
configuredGroups) {
-        if(userGroups.size() > 0 && configuredGroups.size() > 0) {
+        if (userGroups.size() > 0 && configuredGroups.size() > 0) {
             for (String tgroup : configuredGroups) {
-                if(userGroups.contains(tgroup))
+                if (userGroups.contains(tgroup)) {
                     return true;
+                }
             }
         }
         return false;

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/utils/ConfigUtils.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/utils/ConfigUtils.java 
b/storm-client/src/jvm/org/apache/storm/utils/ConfigUtils.java
index 1c8015a..1bc94ac 100644
--- a/storm-client/src/jvm/org/apache/storm/utils/ConfigUtils.java
+++ b/storm-client/src/jvm/org/apache/storm/utils/ConfigUtils.java
@@ -217,7 +217,6 @@ public class ConfigUtils {
     }
 
     public static String absoluteStormBlobStoreDir(Map<String, Object> conf) {
-        String stormHome = System.getProperty("storm.home");
         String blobStoreDir = (String) conf.get(Config.BLOBSTORE_DIR);
         if (blobStoreDir == null) {
             return ConfigUtils.absoluteStormLocalDir(conf);
@@ -225,6 +224,7 @@ public class ConfigUtils {
             if (new File(blobStoreDir).isAbsolute()) {
                 return blobStoreDir;
             } else {
+                String stormHome = System.getProperty("storm.home");
                 return (stormHome + FILE_SEPARATOR + blobStoreDir);
             }
         }
@@ -273,7 +273,7 @@ public class ConfigUtils {
     public static Map overrideLoginConfigWithSystemProperty(Map<String, 
Object> conf) { // note that we delete the return value
         String loginConfFile = 
System.getProperty("java.security.auth.login.config");
         if (loginConfFile != null) {
-             conf.put("java.security.auth.login.config", loginConfFile);
+            conf.put("java.security.auth.login.config", loginConfFile);
         }
         return conf;
     }

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/jvm/org/apache/storm/utils/Utils.java
----------------------------------------------------------------------
diff --git a/storm-client/src/jvm/org/apache/storm/utils/Utils.java 
b/storm-client/src/jvm/org/apache/storm/utils/Utils.java
index 4ad2ee2..73cfc81 100644
--- a/storm-client/src/jvm/org/apache/storm/utils/Utils.java
+++ b/storm-client/src/jvm/org/apache/storm/utils/Utils.java
@@ -291,12 +291,22 @@ public class Utils {
      * runtime to avoid any zombie process in case cleanup function hangs.
      */
     public static void addShutdownHookWithForceKillIn1Sec (Runnable func) {
+        addShutdownHookWithDelayedForceKill(func, 1);
+    }
+
+    /**
+     * Adds the user supplied function as a shutdown hook for cleanup.
+     * Also adds a function that sleeps for numSecs and then halts the
+     * runtime to avoid any zombie process in case cleanup function hangs.
+     */
+    public static void addShutdownHookWithDelayedForceKill (Runnable func, int 
numSecs) {
         Runnable sleepKill = new Runnable() {
             @Override
             public void run() {
                 try {
-                    Time.sleepSecs(1);
-                    LOG.warn("Forceing Halt...");
+                    LOG.info("Halting after {} seconds", numSecs);
+                    Time.sleepSecs(numSecs);
+                    LOG.warn("Forcing Halt...");
                     Runtime.getRuntime().halt(20);
                 } catch (Exception e) {
                     LOG.warn("Exception in the ShutDownHook", e);

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/py/storm/Nimbus-remote
----------------------------------------------------------------------
diff --git a/storm-client/src/py/storm/Nimbus-remote 
b/storm-client/src/py/storm/Nimbus-remote
index 7b080cf..1ce91e4 100644
--- a/storm-client/src/py/storm/Nimbus-remote
+++ b/storm-client/src/py/storm/Nimbus-remote
@@ -88,6 +88,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print('  StormTopology getUserTopology(string id)')
   print('  TopologyHistoryInfo getTopologyHistory(string user)')
   print('   getOwnerResourceSummaries(string owner)')
+  print('  void processWorkerMetrics(WorkerMetrics metrics)')
   print('')
   sys.exit(0)
 
@@ -420,6 +421,12 @@ elif cmd == 'getOwnerResourceSummaries':
     sys.exit(1)
   pp.pprint(client.getOwnerResourceSummaries(args[0],))
 
+elif cmd == 'processWorkerMetrics':
+  if len(args) != 1:
+    print('processWorkerMetrics requires 1 args')
+    sys.exit(1)
+  pp.pprint(client.processWorkerMetrics(eval(args[0]),))
+
 else:
   print('Unrecognized method %s' % cmd)
   sys.exit(1)

http://git-wip-us.apache.org/repos/asf/storm/blob/48e23a99/storm-client/src/py/storm/Nimbus.py
----------------------------------------------------------------------
diff --git a/storm-client/src/py/storm/Nimbus.py 
b/storm-client/src/py/storm/Nimbus.py
index 522921b..5f9f324 100644
--- a/storm-client/src/py/storm/Nimbus.py
+++ b/storm-client/src/py/storm/Nimbus.py
@@ -383,6 +383,13 @@ class Iface:
     """
     pass
 
+  def processWorkerMetrics(self, metrics):
+    """
+    Parameters:
+     - metrics
+    """
+    pass
+
 
 class Client(Iface):
   def __init__(self, iprot, oprot=None):
@@ -1967,6 +1974,35 @@ class Client(Iface):
       raise result.aze
     raise TApplicationException(TApplicationException.MISSING_RESULT, 
"getOwnerResourceSummaries failed: unknown result")
 
+  def processWorkerMetrics(self, metrics):
+    """
+    Parameters:
+     - metrics
+    """
+    self.send_processWorkerMetrics(metrics)
+    self.recv_processWorkerMetrics()
+
+  def send_processWorkerMetrics(self, metrics):
+    self._oprot.writeMessageBegin('processWorkerMetrics', TMessageType.CALL, 
self._seqid)
+    args = processWorkerMetrics_args()
+    args.metrics = metrics
+    args.write(self._oprot)
+    self._oprot.writeMessageEnd()
+    self._oprot.trans.flush()
+
+  def recv_processWorkerMetrics(self):
+    iprot = self._iprot
+    (fname, mtype, rseqid) = iprot.readMessageBegin()
+    if mtype == TMessageType.EXCEPTION:
+      x = TApplicationException()
+      x.read(iprot)
+      iprot.readMessageEnd()
+      raise x
+    result = processWorkerMetrics_result()
+    result.read(iprot)
+    iprot.readMessageEnd()
+    return
+
 
 class Processor(Iface, TProcessor):
   def __init__(self, handler):
@@ -2018,6 +2054,7 @@ class Processor(Iface, TProcessor):
     self._processMap["getUserTopology"] = Processor.process_getUserTopology
     self._processMap["getTopologyHistory"] = 
Processor.process_getTopologyHistory
     self._processMap["getOwnerResourceSummaries"] = 
Processor.process_getOwnerResourceSummaries
+    self._processMap["processWorkerMetrics"] = 
Processor.process_processWorkerMetrics
 
   def process(self, iprot, oprot):
     (name, type, seqid) = iprot.readMessageBegin()
@@ -3115,6 +3152,25 @@ class Processor(Iface, TProcessor):
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
+  def process_processWorkerMetrics(self, seqid, iprot, oprot):
+    args = processWorkerMetrics_args()
+    args.read(iprot)
+    iprot.readMessageEnd()
+    result = processWorkerMetrics_result()
+    try:
+      self._handler.processWorkerMetrics(args.metrics)
+      msg_type = TMessageType.REPLY
+    except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+      raise
+    except Exception as ex:
+      msg_type = TMessageType.EXCEPTION
+      logging.exception(ex)
+      result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
+    oprot.writeMessageBegin("processWorkerMetrics", msg_type, seqid)
+    result.write(oprot)
+    oprot.writeMessageEnd()
+    oprot.trans.flush()
+
 
 # HELPER FUNCTIONS AND STRUCTURES
 
@@ -4977,11 +5033,11 @@ class getComponentPendingProfileActions_result:
       if fid == 0:
         if ftype == TType.LIST:
           self.success = []
-          (_etype776, _size773) = iprot.readListBegin()
-          for _i777 in xrange(_size773):
-            _elem778 = ProfileRequest()
-            _elem778.read(iprot)
-            self.success.append(_elem778)
+          (_etype801, _size798) = iprot.readListBegin()
+          for _i802 in xrange(_size798):
+            _elem803 = ProfileRequest()
+            _elem803.read(iprot)
+            self.success.append(_elem803)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -4998,8 +5054,8 @@ class getComponentPendingProfileActions_result:
     if self.success is not None:
       oprot.writeFieldBegin('success', TType.LIST, 0)
       oprot.writeListBegin(TType.STRUCT, len(self.success))
-      for iter779 in self.success:
-        iter779.write(oprot)
+      for iter804 in self.success:
+        iter804.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -10070,11 +10126,11 @@ class getOwnerResourceSummaries_result:
       if fid == 0:
         if ftype == TType.LIST:
           self.success = []
-          (_etype783, _size780) = iprot.readListBegin()
-          for _i784 in xrange(_size780):
-            _elem785 = OwnerResourceSummary()
-            _elem785.read(iprot)
-            self.success.append(_elem785)
+          (_etype808, _size805) = iprot.readListBegin()
+          for _i809 in xrange(_size805):
+            _elem810 = OwnerResourceSummary()
+            _elem810.read(iprot)
+            self.success.append(_elem810)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -10097,8 +10153,8 @@ class getOwnerResourceSummaries_result:
     if self.success is not None:
       oprot.writeFieldBegin('success', TType.LIST, 0)
       oprot.writeListBegin(TType.STRUCT, len(self.success))
-      for iter786 in self.success:
-        iter786.write(oprot)
+      for iter811 in self.success:
+        iter811.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.aze is not None:
@@ -10128,3 +10184,115 @@ class getOwnerResourceSummaries_result:
 
   def __ne__(self, other):
     return not (self == other)
+
+class processWorkerMetrics_args:
+  """
+  Attributes:
+   - metrics
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'metrics', (WorkerMetrics, WorkerMetrics.thrift_spec), 
None, ), # 1
+  )
+
+  def __init__(self, metrics=None,):
+    self.metrics = metrics
+
+  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.metrics = WorkerMetrics()
+          self.metrics.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('processWorkerMetrics_args')
+    if self.metrics is not None:
+      oprot.writeFieldBegin('metrics', TType.STRUCT, 1)
+      self.metrics.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.metrics)
+    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 processWorkerMetrics_result:
+
+  thrift_spec = (
+  )
+
+  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
+      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('processWorkerMetrics_result')
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    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)

Reply via email to