You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by sr...@apache.org on 2015/09/21 19:40:52 UTC

[07/24] storm git commit: nimbus api and stormbase changes to support component level debug

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/jvm/backtype/storm/generated/StormBase.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/generated/StormBase.java b/storm-core/src/jvm/backtype/storm/generated/StormBase.java
index a51ad45..342a1c7 100644
--- a/storm-core/src/jvm/backtype/storm/generated/StormBase.java
+++ b/storm-core/src/jvm/backtype/storm/generated/StormBase.java
@@ -51,7 +51,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-8-6")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-8-7")
 public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._Fields>, java.io.Serializable, Cloneable, Comparable<StormBase> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("StormBase");
 
@@ -63,7 +63,7 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
   private static final org.apache.thrift.protocol.TField OWNER_FIELD_DESC = new org.apache.thrift.protocol.TField("owner", org.apache.thrift.protocol.TType.STRING, (short)6);
   private static final org.apache.thrift.protocol.TField TOPOLOGY_ACTION_OPTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("topology_action_options", org.apache.thrift.protocol.TType.STRUCT, (short)7);
   private static final org.apache.thrift.protocol.TField PREV_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("prev_status", org.apache.thrift.protocol.TType.I32, (short)8);
-  private static final org.apache.thrift.protocol.TField DEBUG_FIELD_DESC = new org.apache.thrift.protocol.TField("debug", org.apache.thrift.protocol.TType.BOOL, (short)9);
+  private static final org.apache.thrift.protocol.TField COMPONENT_DEBUG_FIELD_DESC = new org.apache.thrift.protocol.TField("component_debug", org.apache.thrift.protocol.TType.MAP, (short)9);
 
   private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
   static {
@@ -79,7 +79,7 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
   private String owner; // optional
   private TopologyActionOptions topology_action_options; // optional
   private TopologyStatus prev_status; // optional
-  private boolean debug; // optional
+  private Map<String,Boolean> component_debug; // 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 {
@@ -99,7 +99,7 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
      * @see TopologyStatus
      */
     PREV_STATUS((short)8, "prev_status"),
-    DEBUG((short)9, "debug");
+    COMPONENT_DEBUG((short)9, "component_debug");
 
     private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
 
@@ -130,8 +130,8 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
           return TOPOLOGY_ACTION_OPTIONS;
         case 8: // PREV_STATUS
           return PREV_STATUS;
-        case 9: // DEBUG
-          return DEBUG;
+        case 9: // COMPONENT_DEBUG
+          return COMPONENT_DEBUG;
         default:
           return null;
       }
@@ -174,9 +174,8 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
   // isset id assignments
   private static final int __NUM_WORKERS_ISSET_ID = 0;
   private static final int __LAUNCH_TIME_SECS_ISSET_ID = 1;
-  private static final int __DEBUG_ISSET_ID = 2;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.COMPONENT_EXECUTORS,_Fields.LAUNCH_TIME_SECS,_Fields.OWNER,_Fields.TOPOLOGY_ACTION_OPTIONS,_Fields.PREV_STATUS,_Fields.DEBUG};
+  private static final _Fields optionals[] = {_Fields.COMPONENT_EXECUTORS,_Fields.LAUNCH_TIME_SECS,_Fields.OWNER,_Fields.TOPOLOGY_ACTION_OPTIONS,_Fields.PREV_STATUS,_Fields.COMPONENT_DEBUG};
   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);
@@ -198,8 +197,10 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
         new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TopologyActionOptions.class)));
     tmpMap.put(_Fields.PREV_STATUS, new org.apache.thrift.meta_data.FieldMetaData("prev_status", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, TopologyStatus.class)));
-    tmpMap.put(_Fields.DEBUG, new org.apache.thrift.meta_data.FieldMetaData("debug", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
-        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+    tmpMap.put(_Fields.COMPONENT_DEBUG, new org.apache.thrift.meta_data.FieldMetaData("component_debug", 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.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL))));
     metaDataMap = Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(StormBase.class, metaDataMap);
   }
@@ -245,7 +246,10 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
     if (other.is_set_prev_status()) {
       this.prev_status = other.prev_status;
     }
-    this.debug = other.debug;
+    if (other.is_set_component_debug()) {
+      Map<String,Boolean> __this__component_debug = new HashMap<String,Boolean>(other.component_debug);
+      this.component_debug = __this__component_debug;
+    }
   }
 
   public StormBase deepCopy() {
@@ -264,8 +268,7 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
     this.owner = null;
     this.topology_action_options = null;
     this.prev_status = null;
-    set_debug_isSet(false);
-    this.debug = false;
+    this.component_debug = null;
   }
 
   public String get_name() {
@@ -477,26 +480,38 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
     }
   }
 
-  public boolean is_debug() {
-    return this.debug;
+  public int get_component_debug_size() {
+    return (this.component_debug == null) ? 0 : this.component_debug.size();
   }
 
-  public void set_debug(boolean debug) {
-    this.debug = debug;
-    set_debug_isSet(true);
+  public void put_to_component_debug(String key, boolean val) {
+    if (this.component_debug == null) {
+      this.component_debug = new HashMap<String,Boolean>();
+    }
+    this.component_debug.put(key, val);
   }
 
-  public void unset_debug() {
-    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __DEBUG_ISSET_ID);
+  public Map<String,Boolean> get_component_debug() {
+    return this.component_debug;
   }
 
-  /** Returns true if field debug is set (has been assigned a value) and false otherwise */
-  public boolean is_set_debug() {
-    return EncodingUtils.testBit(__isset_bitfield, __DEBUG_ISSET_ID);
+  public void set_component_debug(Map<String,Boolean> component_debug) {
+    this.component_debug = component_debug;
   }
 
-  public void set_debug_isSet(boolean value) {
-    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __DEBUG_ISSET_ID, value);
+  public void unset_component_debug() {
+    this.component_debug = null;
+  }
+
+  /** Returns true if field component_debug is set (has been assigned a value) and false otherwise */
+  public boolean is_set_component_debug() {
+    return this.component_debug != null;
+  }
+
+  public void set_component_debug_isSet(boolean value) {
+    if (!value) {
+      this.component_debug = null;
+    }
   }
 
   public void setFieldValue(_Fields field, Object value) {
@@ -565,11 +580,11 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       }
       break;
 
-    case DEBUG:
+    case COMPONENT_DEBUG:
       if (value == null) {
-        unset_debug();
+        unset_component_debug();
       } else {
-        set_debug((Boolean)value);
+        set_component_debug((Map<String,Boolean>)value);
       }
       break;
 
@@ -602,8 +617,8 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
     case PREV_STATUS:
       return get_prev_status();
 
-    case DEBUG:
-      return Boolean.valueOf(is_debug());
+    case COMPONENT_DEBUG:
+      return get_component_debug();
 
     }
     throw new IllegalStateException();
@@ -632,8 +647,8 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       return is_set_topology_action_options();
     case PREV_STATUS:
       return is_set_prev_status();
-    case DEBUG:
-      return is_set_debug();
+    case COMPONENT_DEBUG:
+      return is_set_component_debug();
     }
     throw new IllegalStateException();
   }
@@ -723,12 +738,12 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
         return false;
     }
 
-    boolean this_present_debug = true && this.is_set_debug();
-    boolean that_present_debug = true && that.is_set_debug();
-    if (this_present_debug || that_present_debug) {
-      if (!(this_present_debug && that_present_debug))
+    boolean this_present_component_debug = true && this.is_set_component_debug();
+    boolean that_present_component_debug = true && that.is_set_component_debug();
+    if (this_present_component_debug || that_present_component_debug) {
+      if (!(this_present_component_debug && that_present_component_debug))
         return false;
-      if (this.debug != that.debug)
+      if (!this.component_debug.equals(that.component_debug))
         return false;
     }
 
@@ -779,10 +794,10 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
     if (present_prev_status)
       list.add(prev_status.getValue());
 
-    boolean present_debug = true && (is_set_debug());
-    list.add(present_debug);
-    if (present_debug)
-      list.add(debug);
+    boolean present_component_debug = true && (is_set_component_debug());
+    list.add(present_component_debug);
+    if (present_component_debug)
+      list.add(component_debug);
 
     return list.hashCode();
   }
@@ -875,12 +890,12 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
         return lastComparison;
       }
     }
-    lastComparison = Boolean.valueOf(is_set_debug()).compareTo(other.is_set_debug());
+    lastComparison = Boolean.valueOf(is_set_component_debug()).compareTo(other.is_set_component_debug());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (is_set_debug()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.debug, other.debug);
+    if (is_set_component_debug()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.component_debug, other.component_debug);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -970,10 +985,14 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       }
       first = false;
     }
-    if (is_set_debug()) {
+    if (is_set_component_debug()) {
       if (!first) sb.append(", ");
-      sb.append("debug:");
-      sb.append(this.debug);
+      sb.append("component_debug:");
+      if (this.component_debug == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.component_debug);
+      }
       first = false;
     }
     sb.append(")");
@@ -1060,15 +1079,15 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
           case 4: // COMPONENT_EXECUTORS
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
-                org.apache.thrift.protocol.TMap _map416 = iprot.readMapBegin();
-                struct.component_executors = new HashMap<String,Integer>(2*_map416.size);
-                String _key417;
-                int _val418;
-                for (int _i419 = 0; _i419 < _map416.size; ++_i419)
+                org.apache.thrift.protocol.TMap _map426 = iprot.readMapBegin();
+                struct.component_executors = new HashMap<String,Integer>(2*_map426.size);
+                String _key427;
+                int _val428;
+                for (int _i429 = 0; _i429 < _map426.size; ++_i429)
                 {
-                  _key417 = iprot.readString();
-                  _val418 = iprot.readI32();
-                  struct.component_executors.put(_key417, _val418);
+                  _key427 = iprot.readString();
+                  _val428 = iprot.readI32();
+                  struct.component_executors.put(_key427, _val428);
                 }
                 iprot.readMapEnd();
               }
@@ -1110,10 +1129,22 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 9: // DEBUG
-            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
-              struct.debug = iprot.readBool();
-              struct.set_debug_isSet(true);
+          case 9: // COMPONENT_DEBUG
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map430 = iprot.readMapBegin();
+                struct.component_debug = new HashMap<String,Boolean>(2*_map430.size);
+                String _key431;
+                boolean _val432;
+                for (int _i433 = 0; _i433 < _map430.size; ++_i433)
+                {
+                  _key431 = iprot.readString();
+                  _val432 = iprot.readBool();
+                  struct.component_debug.put(_key431, _val432);
+                }
+                iprot.readMapEnd();
+              }
+              struct.set_component_debug_isSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -1149,10 +1180,10 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
           oprot.writeFieldBegin(COMPONENT_EXECUTORS_FIELD_DESC);
           {
             oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.I32, struct.component_executors.size()));
-            for (Map.Entry<String, Integer> _iter420 : struct.component_executors.entrySet())
+            for (Map.Entry<String, Integer> _iter434 : struct.component_executors.entrySet())
             {
-              oprot.writeString(_iter420.getKey());
-              oprot.writeI32(_iter420.getValue());
+              oprot.writeString(_iter434.getKey());
+              oprot.writeI32(_iter434.getValue());
             }
             oprot.writeMapEnd();
           }
@@ -1185,10 +1216,20 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
           oprot.writeFieldEnd();
         }
       }
-      if (struct.is_set_debug()) {
-        oprot.writeFieldBegin(DEBUG_FIELD_DESC);
-        oprot.writeBool(struct.debug);
-        oprot.writeFieldEnd();
+      if (struct.component_debug != null) {
+        if (struct.is_set_component_debug()) {
+          oprot.writeFieldBegin(COMPONENT_DEBUG_FIELD_DESC);
+          {
+            oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.BOOL, struct.component_debug.size()));
+            for (Map.Entry<String, Boolean> _iter435 : struct.component_debug.entrySet())
+            {
+              oprot.writeString(_iter435.getKey());
+              oprot.writeBool(_iter435.getValue());
+            }
+            oprot.writeMapEnd();
+          }
+          oprot.writeFieldEnd();
+        }
       }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
@@ -1226,17 +1267,17 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       if (struct.is_set_prev_status()) {
         optionals.set(4);
       }
-      if (struct.is_set_debug()) {
+      if (struct.is_set_component_debug()) {
         optionals.set(5);
       }
       oprot.writeBitSet(optionals, 6);
       if (struct.is_set_component_executors()) {
         {
           oprot.writeI32(struct.component_executors.size());
-          for (Map.Entry<String, Integer> _iter421 : struct.component_executors.entrySet())
+          for (Map.Entry<String, Integer> _iter436 : struct.component_executors.entrySet())
           {
-            oprot.writeString(_iter421.getKey());
-            oprot.writeI32(_iter421.getValue());
+            oprot.writeString(_iter436.getKey());
+            oprot.writeI32(_iter436.getValue());
           }
         }
       }
@@ -1252,8 +1293,15 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       if (struct.is_set_prev_status()) {
         oprot.writeI32(struct.prev_status.getValue());
       }
-      if (struct.is_set_debug()) {
-        oprot.writeBool(struct.debug);
+      if (struct.is_set_component_debug()) {
+        {
+          oprot.writeI32(struct.component_debug.size());
+          for (Map.Entry<String, Boolean> _iter437 : struct.component_debug.entrySet())
+          {
+            oprot.writeString(_iter437.getKey());
+            oprot.writeBool(_iter437.getValue());
+          }
+        }
       }
     }
 
@@ -1269,15 +1317,15 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
       BitSet incoming = iprot.readBitSet(6);
       if (incoming.get(0)) {
         {
-          org.apache.thrift.protocol.TMap _map422 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.I32, iprot.readI32());
-          struct.component_executors = new HashMap<String,Integer>(2*_map422.size);
-          String _key423;
-          int _val424;
-          for (int _i425 = 0; _i425 < _map422.size; ++_i425)
+          org.apache.thrift.protocol.TMap _map438 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.I32, iprot.readI32());
+          struct.component_executors = new HashMap<String,Integer>(2*_map438.size);
+          String _key439;
+          int _val440;
+          for (int _i441 = 0; _i441 < _map438.size; ++_i441)
           {
-            _key423 = iprot.readString();
-            _val424 = iprot.readI32();
-            struct.component_executors.put(_key423, _val424);
+            _key439 = iprot.readString();
+            _val440 = iprot.readI32();
+            struct.component_executors.put(_key439, _val440);
           }
         }
         struct.set_component_executors_isSet(true);
@@ -1300,8 +1348,19 @@ public class StormBase implements org.apache.thrift.TBase<StormBase, StormBase._
         struct.set_prev_status_isSet(true);
       }
       if (incoming.get(5)) {
-        struct.debug = iprot.readBool();
-        struct.set_debug_isSet(true);
+        {
+          org.apache.thrift.protocol.TMap _map442 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.BOOL, iprot.readI32());
+          struct.component_debug = new HashMap<String,Boolean>(2*_map442.size);
+          String _key443;
+          boolean _val444;
+          for (int _i445 = 0; _i445 < _map442.size; ++_i445)
+          {
+            _key443 = iprot.readString();
+            _val444 = iprot.readBool();
+            struct.component_debug.put(_key443, _val444);
+          }
+        }
+        struct.set_component_debug_isSet(true);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/jvm/backtype/storm/generated/SupervisorInfo.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/generated/SupervisorInfo.java b/storm-core/src/jvm/backtype/storm/generated/SupervisorInfo.java
index 9083b0d..e2b5ad1 100644
--- a/storm-core/src/jvm/backtype/storm/generated/SupervisorInfo.java
+++ b/storm-core/src/jvm/backtype/storm/generated/SupervisorInfo.java
@@ -51,7 +51,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-4-20")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-8-7")
 public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, SupervisorInfo._Fields>, java.io.Serializable, Cloneable, Comparable<SupervisorInfo> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("SupervisorInfo");
 
@@ -990,13 +990,13 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           case 4: // USED_PORTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list336 = iprot.readListBegin();
-                struct.used_ports = new ArrayList<Long>(_list336.size);
-                long _elem337;
-                for (int _i338 = 0; _i338 < _list336.size; ++_i338)
+                org.apache.thrift.protocol.TList _list346 = iprot.readListBegin();
+                struct.used_ports = new ArrayList<Long>(_list346.size);
+                long _elem347;
+                for (int _i348 = 0; _i348 < _list346.size; ++_i348)
                 {
-                  _elem337 = iprot.readI64();
-                  struct.used_ports.add(_elem337);
+                  _elem347 = iprot.readI64();
+                  struct.used_ports.add(_elem347);
                 }
                 iprot.readListEnd();
               }
@@ -1008,13 +1008,13 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           case 5: // META
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list339 = iprot.readListBegin();
-                struct.meta = new ArrayList<Long>(_list339.size);
-                long _elem340;
-                for (int _i341 = 0; _i341 < _list339.size; ++_i341)
+                org.apache.thrift.protocol.TList _list349 = iprot.readListBegin();
+                struct.meta = new ArrayList<Long>(_list349.size);
+                long _elem350;
+                for (int _i351 = 0; _i351 < _list349.size; ++_i351)
                 {
-                  _elem340 = iprot.readI64();
-                  struct.meta.add(_elem340);
+                  _elem350 = iprot.readI64();
+                  struct.meta.add(_elem350);
                 }
                 iprot.readListEnd();
               }
@@ -1026,15 +1026,15 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           case 6: // SCHEDULER_META
             if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
               {
-                org.apache.thrift.protocol.TMap _map342 = iprot.readMapBegin();
-                struct.scheduler_meta = new HashMap<String,String>(2*_map342.size);
-                String _key343;
-                String _val344;
-                for (int _i345 = 0; _i345 < _map342.size; ++_i345)
+                org.apache.thrift.protocol.TMap _map352 = iprot.readMapBegin();
+                struct.scheduler_meta = new HashMap<String,String>(2*_map352.size);
+                String _key353;
+                String _val354;
+                for (int _i355 = 0; _i355 < _map352.size; ++_i355)
                 {
-                  _key343 = iprot.readString();
-                  _val344 = iprot.readString();
-                  struct.scheduler_meta.put(_key343, _val344);
+                  _key353 = iprot.readString();
+                  _val354 = iprot.readString();
+                  struct.scheduler_meta.put(_key353, _val354);
                 }
                 iprot.readMapEnd();
               }
@@ -1092,9 +1092,9 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           oprot.writeFieldBegin(USED_PORTS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, struct.used_ports.size()));
-            for (long _iter346 : struct.used_ports)
+            for (long _iter356 : struct.used_ports)
             {
-              oprot.writeI64(_iter346);
+              oprot.writeI64(_iter356);
             }
             oprot.writeListEnd();
           }
@@ -1106,9 +1106,9 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           oprot.writeFieldBegin(META_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, struct.meta.size()));
-            for (long _iter347 : struct.meta)
+            for (long _iter357 : struct.meta)
             {
-              oprot.writeI64(_iter347);
+              oprot.writeI64(_iter357);
             }
             oprot.writeListEnd();
           }
@@ -1120,10 +1120,10 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
           oprot.writeFieldBegin(SCHEDULER_META_FIELD_DESC);
           {
             oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.STRING, struct.scheduler_meta.size()));
-            for (Map.Entry<String, String> _iter348 : struct.scheduler_meta.entrySet())
+            for (Map.Entry<String, String> _iter358 : struct.scheduler_meta.entrySet())
             {
-              oprot.writeString(_iter348.getKey());
-              oprot.writeString(_iter348.getValue());
+              oprot.writeString(_iter358.getKey());
+              oprot.writeString(_iter358.getValue());
             }
             oprot.writeMapEnd();
           }
@@ -1187,28 +1187,28 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       if (struct.is_set_used_ports()) {
         {
           oprot.writeI32(struct.used_ports.size());
-          for (long _iter349 : struct.used_ports)
+          for (long _iter359 : struct.used_ports)
           {
-            oprot.writeI64(_iter349);
+            oprot.writeI64(_iter359);
           }
         }
       }
       if (struct.is_set_meta()) {
         {
           oprot.writeI32(struct.meta.size());
-          for (long _iter350 : struct.meta)
+          for (long _iter360 : struct.meta)
           {
-            oprot.writeI64(_iter350);
+            oprot.writeI64(_iter360);
           }
         }
       }
       if (struct.is_set_scheduler_meta()) {
         {
           oprot.writeI32(struct.scheduler_meta.size());
-          for (Map.Entry<String, String> _iter351 : struct.scheduler_meta.entrySet())
+          for (Map.Entry<String, String> _iter361 : struct.scheduler_meta.entrySet())
           {
-            oprot.writeString(_iter351.getKey());
-            oprot.writeString(_iter351.getValue());
+            oprot.writeString(_iter361.getKey());
+            oprot.writeString(_iter361.getValue());
           }
         }
       }
@@ -1234,41 +1234,41 @@ public class SupervisorInfo implements org.apache.thrift.TBase<SupervisorInfo, S
       }
       if (incoming.get(1)) {
         {
-          org.apache.thrift.protocol.TList _list352 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
-          struct.used_ports = new ArrayList<Long>(_list352.size);
-          long _elem353;
-          for (int _i354 = 0; _i354 < _list352.size; ++_i354)
+          org.apache.thrift.protocol.TList _list362 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
+          struct.used_ports = new ArrayList<Long>(_list362.size);
+          long _elem363;
+          for (int _i364 = 0; _i364 < _list362.size; ++_i364)
           {
-            _elem353 = iprot.readI64();
-            struct.used_ports.add(_elem353);
+            _elem363 = iprot.readI64();
+            struct.used_ports.add(_elem363);
           }
         }
         struct.set_used_ports_isSet(true);
       }
       if (incoming.get(2)) {
         {
-          org.apache.thrift.protocol.TList _list355 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
-          struct.meta = new ArrayList<Long>(_list355.size);
-          long _elem356;
-          for (int _i357 = 0; _i357 < _list355.size; ++_i357)
+          org.apache.thrift.protocol.TList _list365 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.I64, iprot.readI32());
+          struct.meta = new ArrayList<Long>(_list365.size);
+          long _elem366;
+          for (int _i367 = 0; _i367 < _list365.size; ++_i367)
           {
-            _elem356 = iprot.readI64();
-            struct.meta.add(_elem356);
+            _elem366 = iprot.readI64();
+            struct.meta.add(_elem366);
           }
         }
         struct.set_meta_isSet(true);
       }
       if (incoming.get(3)) {
         {
-          org.apache.thrift.protocol.TMap _map358 = 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*_map358.size);
-          String _key359;
-          String _val360;
-          for (int _i361 = 0; _i361 < _map358.size; ++_i361)
+          org.apache.thrift.protocol.TMap _map368 = 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*_map368.size);
+          String _key369;
+          String _val370;
+          for (int _i371 = 0; _i371 < _map368.size; ++_i371)
           {
-            _key359 = iprot.readString();
-            _val360 = iprot.readString();
-            struct.scheduler_meta.put(_key359, _val360);
+            _key369 = iprot.readString();
+            _val370 = iprot.readString();
+            struct.scheduler_meta.put(_key369, _val370);
           }
         }
         struct.set_scheduler_meta_isSet(true);

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/jvm/backtype/storm/generated/TopologyInfo.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/generated/TopologyInfo.java b/storm-core/src/jvm/backtype/storm/generated/TopologyInfo.java
index 76b7c83..e050f24 100644
--- a/storm-core/src/jvm/backtype/storm/generated/TopologyInfo.java
+++ b/storm-core/src/jvm/backtype/storm/generated/TopologyInfo.java
@@ -51,7 +51,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-8-6")
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2015-8-7")
 public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, TopologyInfo._Fields>, java.io.Serializable, Cloneable, Comparable<TopologyInfo> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TopologyInfo");
 
@@ -61,7 +61,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
   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)4);
   private static final org.apache.thrift.protocol.TField STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("status", org.apache.thrift.protocol.TType.STRING, (short)5);
   private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.MAP, (short)6);
-  private static final org.apache.thrift.protocol.TField DEBUG_FIELD_DESC = new org.apache.thrift.protocol.TField("debug", org.apache.thrift.protocol.TType.BOOL, (short)7);
+  private static final org.apache.thrift.protocol.TField COMPONENT_DEBUG_FIELD_DESC = new org.apache.thrift.protocol.TField("component_debug", org.apache.thrift.protocol.TType.MAP, (short)7);
   private static final org.apache.thrift.protocol.TField SCHED_STATUS_FIELD_DESC = new org.apache.thrift.protocol.TField("sched_status", org.apache.thrift.protocol.TType.STRING, (short)513);
   private static final org.apache.thrift.protocol.TField OWNER_FIELD_DESC = new org.apache.thrift.protocol.TField("owner", org.apache.thrift.protocol.TType.STRING, (short)514);
 
@@ -77,7 +77,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
   private List<ExecutorSummary> executors; // required
   private String status; // required
   private Map<String,List<ErrorInfo>> errors; // required
-  private boolean debug; // required
+  private Map<String,Boolean> component_debug; // required
   private String sched_status; // optional
   private String owner; // optional
 
@@ -89,7 +89,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     EXECUTORS((short)4, "executors"),
     STATUS((short)5, "status"),
     ERRORS((short)6, "errors"),
-    DEBUG((short)7, "debug"),
+    COMPONENT_DEBUG((short)7, "component_debug"),
     SCHED_STATUS((short)513, "sched_status"),
     OWNER((short)514, "owner");
 
@@ -118,8 +118,8 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
           return STATUS;
         case 6: // ERRORS
           return ERRORS;
-        case 7: // DEBUG
-          return DEBUG;
+        case 7: // COMPONENT_DEBUG
+          return COMPONENT_DEBUG;
         case 513: // SCHED_STATUS
           return SCHED_STATUS;
         case 514: // OWNER
@@ -165,7 +165,6 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
 
   // isset id assignments
   private static final int __UPTIME_SECS_ISSET_ID = 0;
-  private static final int __DEBUG_ISSET_ID = 1;
   private byte __isset_bitfield = 0;
   private static final _Fields optionals[] = {_Fields.SCHED_STATUS,_Fields.OWNER};
   public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
@@ -187,8 +186,10 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
             new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
             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, ErrorInfo.class)))));
-    tmpMap.put(_Fields.DEBUG, new org.apache.thrift.meta_data.FieldMetaData("debug", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+    tmpMap.put(_Fields.COMPONENT_DEBUG, new org.apache.thrift.meta_data.FieldMetaData("component_debug", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING), 
+            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL))));
     tmpMap.put(_Fields.SCHED_STATUS, new org.apache.thrift.meta_data.FieldMetaData("sched_status", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.OWNER, new org.apache.thrift.meta_data.FieldMetaData("owner", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
@@ -207,7 +208,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     List<ExecutorSummary> executors,
     String status,
     Map<String,List<ErrorInfo>> errors,
-    boolean debug)
+    Map<String,Boolean> component_debug)
   {
     this();
     this.id = id;
@@ -217,8 +218,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     this.executors = executors;
     this.status = status;
     this.errors = errors;
-    this.debug = debug;
-    set_debug_isSet(true);
+    this.component_debug = component_debug;
   }
 
   /**
@@ -261,7 +261,10 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       }
       this.errors = __this__errors;
     }
-    this.debug = other.debug;
+    if (other.is_set_component_debug()) {
+      Map<String,Boolean> __this__component_debug = new HashMap<String,Boolean>(other.component_debug);
+      this.component_debug = __this__component_debug;
+    }
     if (other.is_set_sched_status()) {
       this.sched_status = other.sched_status;
     }
@@ -283,8 +286,7 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     this.executors = null;
     this.status = null;
     this.errors = null;
-    set_debug_isSet(false);
-    this.debug = false;
+    this.component_debug = null;
     this.sched_status = null;
     this.owner = null;
   }
@@ -452,26 +454,38 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     }
   }
 
-  public boolean is_debug() {
-    return this.debug;
+  public int get_component_debug_size() {
+    return (this.component_debug == null) ? 0 : this.component_debug.size();
   }
 
-  public void set_debug(boolean debug) {
-    this.debug = debug;
-    set_debug_isSet(true);
+  public void put_to_component_debug(String key, boolean val) {
+    if (this.component_debug == null) {
+      this.component_debug = new HashMap<String,Boolean>();
+    }
+    this.component_debug.put(key, val);
   }
 
-  public void unset_debug() {
-    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __DEBUG_ISSET_ID);
+  public Map<String,Boolean> get_component_debug() {
+    return this.component_debug;
   }
 
-  /** Returns true if field debug is set (has been assigned a value) and false otherwise */
-  public boolean is_set_debug() {
-    return EncodingUtils.testBit(__isset_bitfield, __DEBUG_ISSET_ID);
+  public void set_component_debug(Map<String,Boolean> component_debug) {
+    this.component_debug = component_debug;
   }
 
-  public void set_debug_isSet(boolean value) {
-    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __DEBUG_ISSET_ID, value);
+  public void unset_component_debug() {
+    this.component_debug = null;
+  }
+
+  /** Returns true if field component_debug is set (has been assigned a value) and false otherwise */
+  public boolean is_set_component_debug() {
+    return this.component_debug != null;
+  }
+
+  public void set_component_debug_isSet(boolean value) {
+    if (!value) {
+      this.component_debug = null;
+    }
   }
 
   public String get_sched_status() {
@@ -570,11 +584,11 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       }
       break;
 
-    case DEBUG:
+    case COMPONENT_DEBUG:
       if (value == null) {
-        unset_debug();
+        unset_component_debug();
       } else {
-        set_debug((Boolean)value);
+        set_component_debug((Map<String,Boolean>)value);
       }
       break;
 
@@ -617,8 +631,8 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     case ERRORS:
       return get_errors();
 
-    case DEBUG:
-      return Boolean.valueOf(is_debug());
+    case COMPONENT_DEBUG:
+      return get_component_debug();
 
     case SCHED_STATUS:
       return get_sched_status();
@@ -649,8 +663,8 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       return is_set_status();
     case ERRORS:
       return is_set_errors();
-    case DEBUG:
-      return is_set_debug();
+    case COMPONENT_DEBUG:
+      return is_set_component_debug();
     case SCHED_STATUS:
       return is_set_sched_status();
     case OWNER:
@@ -726,12 +740,12 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
         return false;
     }
 
-    boolean this_present_debug = true;
-    boolean that_present_debug = true;
-    if (this_present_debug || that_present_debug) {
-      if (!(this_present_debug && that_present_debug))
+    boolean this_present_component_debug = true && this.is_set_component_debug();
+    boolean that_present_component_debug = true && that.is_set_component_debug();
+    if (this_present_component_debug || that_present_component_debug) {
+      if (!(this_present_component_debug && that_present_component_debug))
         return false;
-      if (this.debug != that.debug)
+      if (!this.component_debug.equals(that.component_debug))
         return false;
     }
 
@@ -790,10 +804,10 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     if (present_errors)
       list.add(errors);
 
-    boolean present_debug = true;
-    list.add(present_debug);
-    if (present_debug)
-      list.add(debug);
+    boolean present_component_debug = true && (is_set_component_debug());
+    list.add(present_component_debug);
+    if (present_component_debug)
+      list.add(component_debug);
 
     boolean present_sched_status = true && (is_set_sched_status());
     list.add(present_sched_status);
@@ -876,12 +890,12 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
         return lastComparison;
       }
     }
-    lastComparison = Boolean.valueOf(is_set_debug()).compareTo(other.is_set_debug());
+    lastComparison = Boolean.valueOf(is_set_component_debug()).compareTo(other.is_set_component_debug());
     if (lastComparison != 0) {
       return lastComparison;
     }
-    if (is_set_debug()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.debug, other.debug);
+    if (is_set_component_debug()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.component_debug, other.component_debug);
       if (lastComparison != 0) {
         return lastComparison;
       }
@@ -970,8 +984,12 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
     }
     first = false;
     if (!first) sb.append(", ");
-    sb.append("debug:");
-    sb.append(this.debug);
+    sb.append("component_debug:");
+    if (this.component_debug == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.component_debug);
+    }
     first = false;
     if (is_set_sched_status()) {
       if (!first) sb.append(", ");
@@ -1023,8 +1041,8 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       throw new org.apache.thrift.protocol.TProtocolException("Required field 'errors' is unset! Struct:" + toString());
     }
 
-    if (!is_set_debug()) {
-      throw new org.apache.thrift.protocol.TProtocolException("Required field 'debug' is unset! Struct:" + toString());
+    if (!is_set_component_debug()) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'component_debug' is unset! Struct:" + toString());
     }
 
     // check for sub-struct validity
@@ -1148,10 +1166,22 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 7: // DEBUG
-            if (schemeField.type == org.apache.thrift.protocol.TType.BOOL) {
-              struct.debug = iprot.readBool();
-              struct.set_debug_isSet(true);
+          case 7: // COMPONENT_DEBUG
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map300 = iprot.readMapBegin();
+                struct.component_debug = new HashMap<String,Boolean>(2*_map300.size);
+                String _key301;
+                boolean _val302;
+                for (int _i303 = 0; _i303 < _map300.size; ++_i303)
+                {
+                  _key301 = iprot.readString();
+                  _val302 = iprot.readBool();
+                  struct.component_debug.put(_key301, _val302);
+                }
+                iprot.readMapEnd();
+              }
+              struct.set_component_debug_isSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
@@ -1202,9 +1232,9 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
         oprot.writeFieldBegin(EXECUTORS_FIELD_DESC);
         {
           oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.executors.size()));
-          for (ExecutorSummary _iter300 : struct.executors)
+          for (ExecutorSummary _iter304 : struct.executors)
           {
-            _iter300.write(oprot);
+            _iter304.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -1219,14 +1249,14 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
         oprot.writeFieldBegin(ERRORS_FIELD_DESC);
         {
           oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, struct.errors.size()));
-          for (Map.Entry<String, List<ErrorInfo>> _iter301 : struct.errors.entrySet())
+          for (Map.Entry<String, List<ErrorInfo>> _iter305 : struct.errors.entrySet())
           {
-            oprot.writeString(_iter301.getKey());
+            oprot.writeString(_iter305.getKey());
             {
-              oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter301.getValue().size()));
-              for (ErrorInfo _iter302 : _iter301.getValue())
+              oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, _iter305.getValue().size()));
+              for (ErrorInfo _iter306 : _iter305.getValue())
               {
-                _iter302.write(oprot);
+                _iter306.write(oprot);
               }
               oprot.writeListEnd();
             }
@@ -1235,9 +1265,19 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
         }
         oprot.writeFieldEnd();
       }
-      oprot.writeFieldBegin(DEBUG_FIELD_DESC);
-      oprot.writeBool(struct.debug);
-      oprot.writeFieldEnd();
+      if (struct.component_debug != null) {
+        oprot.writeFieldBegin(COMPONENT_DEBUG_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.BOOL, struct.component_debug.size()));
+          for (Map.Entry<String, Boolean> _iter307 : struct.component_debug.entrySet())
+          {
+            oprot.writeString(_iter307.getKey());
+            oprot.writeBool(_iter307.getValue());
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
       if (struct.sched_status != null) {
         if (struct.is_set_sched_status()) {
           oprot.writeFieldBegin(SCHED_STATUS_FIELD_DESC);
@@ -1274,27 +1314,34 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       oprot.writeI32(struct.uptime_secs);
       {
         oprot.writeI32(struct.executors.size());
-        for (ExecutorSummary _iter303 : struct.executors)
+        for (ExecutorSummary _iter308 : struct.executors)
         {
-          _iter303.write(oprot);
+          _iter308.write(oprot);
         }
       }
       oprot.writeString(struct.status);
       {
         oprot.writeI32(struct.errors.size());
-        for (Map.Entry<String, List<ErrorInfo>> _iter304 : struct.errors.entrySet())
+        for (Map.Entry<String, List<ErrorInfo>> _iter309 : struct.errors.entrySet())
         {
-          oprot.writeString(_iter304.getKey());
+          oprot.writeString(_iter309.getKey());
           {
-            oprot.writeI32(_iter304.getValue().size());
-            for (ErrorInfo _iter305 : _iter304.getValue())
+            oprot.writeI32(_iter309.getValue().size());
+            for (ErrorInfo _iter310 : _iter309.getValue())
             {
-              _iter305.write(oprot);
+              _iter310.write(oprot);
             }
           }
         }
       }
-      oprot.writeBool(struct.debug);
+      {
+        oprot.writeI32(struct.component_debug.size());
+        for (Map.Entry<String, Boolean> _iter311 : struct.component_debug.entrySet())
+        {
+          oprot.writeString(_iter311.getKey());
+          oprot.writeBool(_iter311.getValue());
+        }
+      }
       BitSet optionals = new BitSet();
       if (struct.is_set_sched_status()) {
         optionals.set(0);
@@ -1321,44 +1368,55 @@ public class TopologyInfo implements org.apache.thrift.TBase<TopologyInfo, Topol
       struct.uptime_secs = iprot.readI32();
       struct.set_uptime_secs_isSet(true);
       {
-        org.apache.thrift.protocol.TList _list306 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-        struct.executors = new ArrayList<ExecutorSummary>(_list306.size);
-        ExecutorSummary _elem307;
-        for (int _i308 = 0; _i308 < _list306.size; ++_i308)
+        org.apache.thrift.protocol.TList _list312 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.executors = new ArrayList<ExecutorSummary>(_list312.size);
+        ExecutorSummary _elem313;
+        for (int _i314 = 0; _i314 < _list312.size; ++_i314)
         {
-          _elem307 = new ExecutorSummary();
-          _elem307.read(iprot);
-          struct.executors.add(_elem307);
+          _elem313 = new ExecutorSummary();
+          _elem313.read(iprot);
+          struct.executors.add(_elem313);
         }
       }
       struct.set_executors_isSet(true);
       struct.status = iprot.readString();
       struct.set_status_isSet(true);
       {
-        org.apache.thrift.protocol.TMap _map309 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, iprot.readI32());
-        struct.errors = new HashMap<String,List<ErrorInfo>>(2*_map309.size);
-        String _key310;
-        List<ErrorInfo> _val311;
-        for (int _i312 = 0; _i312 < _map309.size; ++_i312)
+        org.apache.thrift.protocol.TMap _map315 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.LIST, iprot.readI32());
+        struct.errors = new HashMap<String,List<ErrorInfo>>(2*_map315.size);
+        String _key316;
+        List<ErrorInfo> _val317;
+        for (int _i318 = 0; _i318 < _map315.size; ++_i318)
         {
-          _key310 = iprot.readString();
+          _key316 = iprot.readString();
           {
-            org.apache.thrift.protocol.TList _list313 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-            _val311 = new ArrayList<ErrorInfo>(_list313.size);
-            ErrorInfo _elem314;
-            for (int _i315 = 0; _i315 < _list313.size; ++_i315)
+            org.apache.thrift.protocol.TList _list319 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            _val317 = new ArrayList<ErrorInfo>(_list319.size);
+            ErrorInfo _elem320;
+            for (int _i321 = 0; _i321 < _list319.size; ++_i321)
             {
-              _elem314 = new ErrorInfo();
-              _elem314.read(iprot);
-              _val311.add(_elem314);
+              _elem320 = new ErrorInfo();
+              _elem320.read(iprot);
+              _val317.add(_elem320);
             }
           }
-          struct.errors.put(_key310, _val311);
+          struct.errors.put(_key316, _val317);
         }
       }
       struct.set_errors_isSet(true);
-      struct.debug = iprot.readBool();
-      struct.set_debug_isSet(true);
+      {
+        org.apache.thrift.protocol.TMap _map322 = new org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, org.apache.thrift.protocol.TType.BOOL, iprot.readI32());
+        struct.component_debug = new HashMap<String,Boolean>(2*_map322.size);
+        String _key323;
+        boolean _val324;
+        for (int _i325 = 0; _i325 < _map322.size; ++_i325)
+        {
+          _key323 = iprot.readString();
+          _val324 = iprot.readBool();
+          struct.component_debug.put(_key323, _val324);
+        }
+      }
+      struct.set_component_debug_isSet(true);
       BitSet incoming = iprot.readBitSet(2);
       if (incoming.get(0)) {
         struct.sched_status = iprot.readString();

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/py/storm/Nimbus-remote
----------------------------------------------------------------------
diff --git a/storm-core/src/py/storm/Nimbus-remote b/storm-core/src/py/storm/Nimbus-remote
index d012659..f58c325 100644
--- a/storm-core/src/py/storm/Nimbus-remote
+++ b/storm-core/src/py/storm/Nimbus-remote
@@ -49,7 +49,7 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
   print('  void activate(string name)')
   print('  void deactivate(string name)')
   print('  void rebalance(string name, RebalanceOptions options)')
-  print('  void debug(string name, bool enable)')
+  print('  void debug(string name, string component, bool enable)')
   print('  void uploadNewCredentials(string name, Credentials creds)')
   print('  string beginFileUpload()')
   print('  void uploadChunk(string location, string chunk)')
@@ -162,10 +162,10 @@ elif cmd == 'rebalance':
   pp.pprint(client.rebalance(args[0],eval(args[1]),))
 
 elif cmd == 'debug':
-  if len(args) != 2:
-    print('debug requires 2 args')
+  if len(args) != 3:
+    print('debug requires 3 args')
     sys.exit(1)
-  pp.pprint(client.debug(args[0],eval(args[1]),))
+  pp.pprint(client.debug(args[0],args[1],eval(args[2]),))
 
 elif cmd == 'uploadNewCredentials':
   if len(args) != 2:

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/py/storm/Nimbus.py
----------------------------------------------------------------------
diff --git a/storm-core/src/py/storm/Nimbus.py b/storm-core/src/py/storm/Nimbus.py
index 9e6923d..2aff10d 100644
--- a/storm-core/src/py/storm/Nimbus.py
+++ b/storm-core/src/py/storm/Nimbus.py
@@ -94,10 +94,11 @@ class Iface:
     """
     pass
 
-  def debug(self, name, enable):
+  def debug(self, name, component, enable):
     """
     Parameters:
      - name
+     - component
      - enable
     """
     pass
@@ -451,19 +452,21 @@ class Client(Iface):
       raise result.aze
     return
 
-  def debug(self, name, enable):
+  def debug(self, name, component, enable):
     """
     Parameters:
      - name
+     - component
      - enable
     """
-    self.send_debug(name, enable)
+    self.send_debug(name, component, enable)
     self.recv_debug()
 
-  def send_debug(self, name, enable):
+  def send_debug(self, name, component, enable):
     self._oprot.writeMessageBegin('debug', TMessageType.CALL, self._seqid)
     args = debug_args()
     args.name = name
+    args.component = component
     args.enable = enable
     args.write(self._oprot)
     self._oprot.writeMessageEnd()
@@ -1084,7 +1087,7 @@ class Processor(Iface, TProcessor):
     iprot.readMessageEnd()
     result = debug_result()
     try:
-      self._handler.debug(args.name, args.enable)
+      self._handler.debug(args.name, args.component, args.enable)
     except NotAliveException, e:
       result.e = e
     except AuthorizationException, aze:
@@ -2476,17 +2479,20 @@ class debug_args:
   """
   Attributes:
    - name
+   - component
    - enable
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRING, 'name', None, None, ), # 1
-    (2, TType.BOOL, 'enable', None, None, ), # 2
+    (2, TType.STRING, 'component', None, None, ), # 2
+    (3, TType.BOOL, 'enable', None, None, ), # 3
   )
 
-  def __init__(self, name=None, enable=None,):
+  def __init__(self, name=None, component=None, enable=None,):
     self.name = name
+    self.component = component
     self.enable = enable
 
   def read(self, iprot):
@@ -2504,6 +2510,11 @@ class debug_args:
         else:
           iprot.skip(ftype)
       elif fid == 2:
+        if ftype == TType.STRING:
+          self.component = iprot.readString().decode('utf-8')
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
         if ftype == TType.BOOL:
           self.enable = iprot.readBool();
         else:
@@ -2522,8 +2533,12 @@ class debug_args:
       oprot.writeFieldBegin('name', TType.STRING, 1)
       oprot.writeString(self.name.encode('utf-8'))
       oprot.writeFieldEnd()
+    if self.component is not None:
+      oprot.writeFieldBegin('component', TType.STRING, 2)
+      oprot.writeString(self.component.encode('utf-8'))
+      oprot.writeFieldEnd()
     if self.enable is not None:
-      oprot.writeFieldBegin('enable', TType.BOOL, 2)
+      oprot.writeFieldBegin('enable', TType.BOOL, 3)
       oprot.writeBool(self.enable)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -2536,6 +2551,7 @@ class debug_args:
   def __hash__(self):
     value = 17
     value = (value * 31) ^ hash(self.name)
+    value = (value * 31) ^ hash(self.component)
     value = (value * 31) ^ hash(self.enable)
     return value
 

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/py/storm/ttypes.py
----------------------------------------------------------------------
diff --git a/storm-core/src/py/storm/ttypes.py b/storm-core/src/py/storm/ttypes.py
index 46e64ed..fe9663e 100644
--- a/storm-core/src/py/storm/ttypes.py
+++ b/storm-core/src/py/storm/ttypes.py
@@ -3566,7 +3566,7 @@ class TopologyInfo:
    - executors
    - status
    - errors
-   - debug
+   - component_debug
    - sched_status
    - owner
   """
@@ -3579,7 +3579,7 @@ class TopologyInfo:
     (4, TType.LIST, 'executors', (TType.STRUCT,(ExecutorSummary, ExecutorSummary.thrift_spec)), None, ), # 4
     (5, TType.STRING, 'status', None, None, ), # 5
     (6, TType.MAP, 'errors', (TType.STRING,None,TType.LIST,(TType.STRUCT,(ErrorInfo, ErrorInfo.thrift_spec))), None, ), # 6
-    (7, TType.BOOL, 'debug', None, None, ), # 7
+    (7, TType.MAP, 'component_debug', (TType.STRING,None,TType.BOOL,None), None, ), # 7
     None, # 8
     None, # 9
     None, # 10
@@ -4089,14 +4089,14 @@ class TopologyInfo:
     (514, TType.STRING, 'owner', None, None, ), # 514
   )
 
-  def __init__(self, id=None, name=None, uptime_secs=None, executors=None, status=None, errors=None, debug=None, sched_status=None, owner=None,):
+  def __init__(self, id=None, name=None, uptime_secs=None, executors=None, status=None, errors=None, component_debug=None, sched_status=None, owner=None,):
     self.id = id
     self.name = name
     self.uptime_secs = uptime_secs
     self.executors = executors
     self.status = status
     self.errors = errors
-    self.debug = debug
+    self.component_debug = component_debug
     self.sched_status = sched_status
     self.owner = owner
 
@@ -4158,8 +4158,14 @@ class TopologyInfo:
         else:
           iprot.skip(ftype)
       elif fid == 7:
-        if ftype == TType.BOOL:
-          self.debug = iprot.readBool();
+        if ftype == TType.MAP:
+          self.component_debug = {}
+          (_ktype280, _vtype281, _size279 ) = iprot.readMapBegin()
+          for _i283 in xrange(_size279):
+            _key284 = iprot.readString().decode('utf-8')
+            _val285 = iprot.readBool();
+            self.component_debug[_key284] = _val285
+          iprot.readMapEnd()
         else:
           iprot.skip(ftype)
       elif fid == 513:
@@ -4197,8 +4203,8 @@ class TopologyInfo:
     if self.executors is not None:
       oprot.writeFieldBegin('executors', TType.LIST, 4)
       oprot.writeListBegin(TType.STRUCT, len(self.executors))
-      for iter279 in self.executors:
-        iter279.write(oprot)
+      for iter286 in self.executors:
+        iter286.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.status is not None:
@@ -4208,17 +4214,21 @@ class TopologyInfo:
     if self.errors is not None:
       oprot.writeFieldBegin('errors', TType.MAP, 6)
       oprot.writeMapBegin(TType.STRING, TType.LIST, len(self.errors))
-      for kiter280,viter281 in self.errors.items():
-        oprot.writeString(kiter280.encode('utf-8'))
-        oprot.writeListBegin(TType.STRUCT, len(viter281))
-        for iter282 in viter281:
-          iter282.write(oprot)
+      for kiter287,viter288 in self.errors.items():
+        oprot.writeString(kiter287.encode('utf-8'))
+        oprot.writeListBegin(TType.STRUCT, len(viter288))
+        for iter289 in viter288:
+          iter289.write(oprot)
         oprot.writeListEnd()
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
-    if self.debug is not None:
-      oprot.writeFieldBegin('debug', TType.BOOL, 7)
-      oprot.writeBool(self.debug)
+    if self.component_debug is not None:
+      oprot.writeFieldBegin('component_debug', TType.MAP, 7)
+      oprot.writeMapBegin(TType.STRING, TType.BOOL, len(self.component_debug))
+      for kiter290,viter291 in self.component_debug.items():
+        oprot.writeString(kiter290.encode('utf-8'))
+        oprot.writeBool(viter291)
+      oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.sched_status is not None:
       oprot.writeFieldBegin('sched_status', TType.STRING, 513)
@@ -4244,8 +4254,8 @@ class TopologyInfo:
       raise TProtocol.TProtocolException(message='Required field status is unset!')
     if self.errors is None:
       raise TProtocol.TProtocolException(message='Required field errors is unset!')
-    if self.debug is None:
-      raise TProtocol.TProtocolException(message='Required field debug is unset!')
+    if self.component_debug is None:
+      raise TProtocol.TProtocolException(message='Required field component_debug is unset!')
     return
 
 
@@ -4257,7 +4267,7 @@ class TopologyInfo:
     value = (value * 31) ^ hash(self.executors)
     value = (value * 31) ^ hash(self.status)
     value = (value * 31) ^ hash(self.errors)
-    value = (value * 31) ^ hash(self.debug)
+    value = (value * 31) ^ hash(self.component_debug)
     value = (value * 31) ^ hash(self.sched_status)
     value = (value * 31) ^ hash(self.owner)
     return value
@@ -4380,11 +4390,11 @@ class RebalanceOptions:
       elif fid == 3:
         if ftype == TType.MAP:
           self.num_executors = {}
-          (_ktype284, _vtype285, _size283 ) = iprot.readMapBegin()
-          for _i287 in xrange(_size283):
-            _key288 = iprot.readString().decode('utf-8')
-            _val289 = iprot.readI32();
-            self.num_executors[_key288] = _val289
+          (_ktype293, _vtype294, _size292 ) = iprot.readMapBegin()
+          for _i296 in xrange(_size292):
+            _key297 = iprot.readString().decode('utf-8')
+            _val298 = iprot.readI32();
+            self.num_executors[_key297] = _val298
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -4409,9 +4419,9 @@ class RebalanceOptions:
     if self.num_executors is not None:
       oprot.writeFieldBegin('num_executors', TType.MAP, 3)
       oprot.writeMapBegin(TType.STRING, TType.I32, len(self.num_executors))
-      for kiter290,viter291 in self.num_executors.items():
-        oprot.writeString(kiter290.encode('utf-8'))
-        oprot.writeI32(viter291)
+      for kiter299,viter300 in self.num_executors.items():
+        oprot.writeString(kiter299.encode('utf-8'))
+        oprot.writeI32(viter300)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -4465,11 +4475,11 @@ class Credentials:
       if fid == 1:
         if ftype == TType.MAP:
           self.creds = {}
-          (_ktype293, _vtype294, _size292 ) = iprot.readMapBegin()
-          for _i296 in xrange(_size292):
-            _key297 = iprot.readString().decode('utf-8')
-            _val298 = iprot.readString().decode('utf-8')
-            self.creds[_key297] = _val298
+          (_ktype302, _vtype303, _size301 ) = iprot.readMapBegin()
+          for _i305 in xrange(_size301):
+            _key306 = iprot.readString().decode('utf-8')
+            _val307 = iprot.readString().decode('utf-8')
+            self.creds[_key306] = _val307
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -4486,9 +4496,9 @@ class Credentials:
     if self.creds is not None:
       oprot.writeFieldBegin('creds', TType.MAP, 1)
       oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.creds))
-      for kiter299,viter300 in self.creds.items():
-        oprot.writeString(kiter299.encode('utf-8'))
-        oprot.writeString(viter300.encode('utf-8'))
+      for kiter308,viter309 in self.creds.items():
+        oprot.writeString(kiter308.encode('utf-8'))
+        oprot.writeString(viter309.encode('utf-8'))
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -4659,31 +4669,31 @@ class SupervisorInfo:
       elif fid == 4:
         if ftype == TType.LIST:
           self.used_ports = []
-          (_etype304, _size301) = iprot.readListBegin()
-          for _i305 in xrange(_size301):
-            _elem306 = iprot.readI64();
-            self.used_ports.append(_elem306)
+          (_etype313, _size310) = iprot.readListBegin()
+          for _i314 in xrange(_size310):
+            _elem315 = iprot.readI64();
+            self.used_ports.append(_elem315)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.LIST:
           self.meta = []
-          (_etype310, _size307) = iprot.readListBegin()
-          for _i311 in xrange(_size307):
-            _elem312 = iprot.readI64();
-            self.meta.append(_elem312)
+          (_etype319, _size316) = iprot.readListBegin()
+          for _i320 in xrange(_size316):
+            _elem321 = iprot.readI64();
+            self.meta.append(_elem321)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 6:
         if ftype == TType.MAP:
           self.scheduler_meta = {}
-          (_ktype314, _vtype315, _size313 ) = iprot.readMapBegin()
-          for _i317 in xrange(_size313):
-            _key318 = iprot.readString().decode('utf-8')
-            _val319 = iprot.readString().decode('utf-8')
-            self.scheduler_meta[_key318] = _val319
+          (_ktype323, _vtype324, _size322 ) = iprot.readMapBegin()
+          for _i326 in xrange(_size322):
+            _key327 = iprot.readString().decode('utf-8')
+            _val328 = iprot.readString().decode('utf-8')
+            self.scheduler_meta[_key327] = _val328
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -4722,23 +4732,23 @@ class SupervisorInfo:
     if self.used_ports is not None:
       oprot.writeFieldBegin('used_ports', TType.LIST, 4)
       oprot.writeListBegin(TType.I64, len(self.used_ports))
-      for iter320 in self.used_ports:
-        oprot.writeI64(iter320)
+      for iter329 in self.used_ports:
+        oprot.writeI64(iter329)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.meta is not None:
       oprot.writeFieldBegin('meta', TType.LIST, 5)
       oprot.writeListBegin(TType.I64, len(self.meta))
-      for iter321 in self.meta:
-        oprot.writeI64(iter321)
+      for iter330 in self.meta:
+        oprot.writeI64(iter330)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.scheduler_meta is not None:
       oprot.writeFieldBegin('scheduler_meta', TType.MAP, 6)
       oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.scheduler_meta))
-      for kiter322,viter323 in self.scheduler_meta.items():
-        oprot.writeString(kiter322.encode('utf-8'))
-        oprot.writeString(viter323.encode('utf-8'))
+      for kiter331,viter332 in self.scheduler_meta.items():
+        oprot.writeString(kiter331.encode('utf-8'))
+        oprot.writeString(viter332.encode('utf-8'))
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.uptime_secs is not None:
@@ -4817,10 +4827,10 @@ class NodeInfo:
       elif fid == 2:
         if ftype == TType.SET:
           self.port = set()
-          (_etype327, _size324) = iprot.readSetBegin()
-          for _i328 in xrange(_size324):
-            _elem329 = iprot.readI64();
-            self.port.add(_elem329)
+          (_etype336, _size333) = iprot.readSetBegin()
+          for _i337 in xrange(_size333):
+            _elem338 = iprot.readI64();
+            self.port.add(_elem338)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
@@ -4841,8 +4851,8 @@ class NodeInfo:
     if self.port is not None:
       oprot.writeFieldBegin('port', TType.SET, 2)
       oprot.writeSetBegin(TType.I64, len(self.port))
-      for iter330 in self.port:
-        oprot.writeI64(iter330)
+      for iter339 in self.port:
+        oprot.writeI64(iter339)
       oprot.writeSetEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -4925,44 +4935,44 @@ class Assignment:
       elif fid == 2:
         if ftype == TType.MAP:
           self.node_host = {}
-          (_ktype332, _vtype333, _size331 ) = iprot.readMapBegin()
-          for _i335 in xrange(_size331):
-            _key336 = iprot.readString().decode('utf-8')
-            _val337 = iprot.readString().decode('utf-8')
-            self.node_host[_key336] = _val337
+          (_ktype341, _vtype342, _size340 ) = iprot.readMapBegin()
+          for _i344 in xrange(_size340):
+            _key345 = iprot.readString().decode('utf-8')
+            _val346 = iprot.readString().decode('utf-8')
+            self.node_host[_key345] = _val346
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.MAP:
           self.executor_node_port = {}
-          (_ktype339, _vtype340, _size338 ) = iprot.readMapBegin()
-          for _i342 in xrange(_size338):
-            _key343 = []
-            (_etype348, _size345) = iprot.readListBegin()
-            for _i349 in xrange(_size345):
-              _elem350 = iprot.readI64();
-              _key343.append(_elem350)
+          (_ktype348, _vtype349, _size347 ) = iprot.readMapBegin()
+          for _i351 in xrange(_size347):
+            _key352 = []
+            (_etype357, _size354) = iprot.readListBegin()
+            for _i358 in xrange(_size354):
+              _elem359 = iprot.readI64();
+              _key352.append(_elem359)
             iprot.readListEnd()
-            _val344 = NodeInfo()
-            _val344.read(iprot)
-            self.executor_node_port[_key343] = _val344
+            _val353 = NodeInfo()
+            _val353.read(iprot)
+            self.executor_node_port[_key352] = _val353
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.MAP:
           self.executor_start_time_secs = {}
-          (_ktype352, _vtype353, _size351 ) = iprot.readMapBegin()
-          for _i355 in xrange(_size351):
-            _key356 = []
-            (_etype361, _size358) = iprot.readListBegin()
-            for _i362 in xrange(_size358):
-              _elem363 = iprot.readI64();
-              _key356.append(_elem363)
+          (_ktype361, _vtype362, _size360 ) = iprot.readMapBegin()
+          for _i364 in xrange(_size360):
+            _key365 = []
+            (_etype370, _size367) = iprot.readListBegin()
+            for _i371 in xrange(_size367):
+              _elem372 = iprot.readI64();
+              _key365.append(_elem372)
             iprot.readListEnd()
-            _val357 = iprot.readI64();
-            self.executor_start_time_secs[_key356] = _val357
+            _val366 = iprot.readI64();
+            self.executor_start_time_secs[_key365] = _val366
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -4983,31 +4993,31 @@ class Assignment:
     if self.node_host is not None:
       oprot.writeFieldBegin('node_host', TType.MAP, 2)
       oprot.writeMapBegin(TType.STRING, TType.STRING, len(self.node_host))
-      for kiter364,viter365 in self.node_host.items():
-        oprot.writeString(kiter364.encode('utf-8'))
-        oprot.writeString(viter365.encode('utf-8'))
+      for kiter373,viter374 in self.node_host.items():
+        oprot.writeString(kiter373.encode('utf-8'))
+        oprot.writeString(viter374.encode('utf-8'))
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.executor_node_port is not None:
       oprot.writeFieldBegin('executor_node_port', TType.MAP, 3)
       oprot.writeMapBegin(TType.LIST, TType.STRUCT, len(self.executor_node_port))
-      for kiter366,viter367 in self.executor_node_port.items():
-        oprot.writeListBegin(TType.I64, len(kiter366))
-        for iter368 in kiter366:
-          oprot.writeI64(iter368)
+      for kiter375,viter376 in self.executor_node_port.items():
+        oprot.writeListBegin(TType.I64, len(kiter375))
+        for iter377 in kiter375:
+          oprot.writeI64(iter377)
         oprot.writeListEnd()
-        viter367.write(oprot)
+        viter376.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.executor_start_time_secs is not None:
       oprot.writeFieldBegin('executor_start_time_secs', TType.MAP, 4)
       oprot.writeMapBegin(TType.LIST, TType.I64, len(self.executor_start_time_secs))
-      for kiter369,viter370 in self.executor_start_time_secs.items():
-        oprot.writeListBegin(TType.I64, len(kiter369))
-        for iter371 in kiter369:
-          oprot.writeI64(iter371)
+      for kiter378,viter379 in self.executor_start_time_secs.items():
+        oprot.writeListBegin(TType.I64, len(kiter378))
+        for iter380 in kiter378:
+          oprot.writeI64(iter380)
         oprot.writeListEnd()
-        oprot.writeI64(viter370)
+        oprot.writeI64(viter379)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -5129,7 +5139,7 @@ class StormBase:
    - owner
    - topology_action_options
    - prev_status
-   - debug
+   - component_debug
   """
 
   thrift_spec = (
@@ -5142,10 +5152,10 @@ class StormBase:
     (6, TType.STRING, 'owner', None, None, ), # 6
     (7, TType.STRUCT, 'topology_action_options', (TopologyActionOptions, TopologyActionOptions.thrift_spec), None, ), # 7
     (8, TType.I32, 'prev_status', None, None, ), # 8
-    (9, TType.BOOL, 'debug', None, None, ), # 9
+    (9, TType.MAP, 'component_debug', (TType.STRING,None,TType.BOOL,None), None, ), # 9
   )
 
-  def __init__(self, name=None, status=None, num_workers=None, component_executors=None, launch_time_secs=None, owner=None, topology_action_options=None, prev_status=None, debug=None,):
+  def __init__(self, name=None, status=None, num_workers=None, component_executors=None, launch_time_secs=None, owner=None, topology_action_options=None, prev_status=None, component_debug=None,):
     self.name = name
     self.status = status
     self.num_workers = num_workers
@@ -5154,7 +5164,7 @@ class StormBase:
     self.owner = owner
     self.topology_action_options = topology_action_options
     self.prev_status = prev_status
-    self.debug = debug
+    self.component_debug = component_debug
 
   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:
@@ -5183,11 +5193,11 @@ class StormBase:
       elif fid == 4:
         if ftype == TType.MAP:
           self.component_executors = {}
-          (_ktype373, _vtype374, _size372 ) = iprot.readMapBegin()
-          for _i376 in xrange(_size372):
-            _key377 = iprot.readString().decode('utf-8')
-            _val378 = iprot.readI32();
-            self.component_executors[_key377] = _val378
+          (_ktype382, _vtype383, _size381 ) = iprot.readMapBegin()
+          for _i385 in xrange(_size381):
+            _key386 = iprot.readString().decode('utf-8')
+            _val387 = iprot.readI32();
+            self.component_executors[_key386] = _val387
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -5213,8 +5223,14 @@ class StormBase:
         else:
           iprot.skip(ftype)
       elif fid == 9:
-        if ftype == TType.BOOL:
-          self.debug = iprot.readBool();
+        if ftype == TType.MAP:
+          self.component_debug = {}
+          (_ktype389, _vtype390, _size388 ) = iprot.readMapBegin()
+          for _i392 in xrange(_size388):
+            _key393 = iprot.readString().decode('utf-8')
+            _val394 = iprot.readBool();
+            self.component_debug[_key393] = _val394
+          iprot.readMapEnd()
         else:
           iprot.skip(ftype)
       else:
@@ -5242,9 +5258,9 @@ class StormBase:
     if self.component_executors is not None:
       oprot.writeFieldBegin('component_executors', TType.MAP, 4)
       oprot.writeMapBegin(TType.STRING, TType.I32, len(self.component_executors))
-      for kiter379,viter380 in self.component_executors.items():
-        oprot.writeString(kiter379.encode('utf-8'))
-        oprot.writeI32(viter380)
+      for kiter395,viter396 in self.component_executors.items():
+        oprot.writeString(kiter395.encode('utf-8'))
+        oprot.writeI32(viter396)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.launch_time_secs is not None:
@@ -5263,9 +5279,13 @@ class StormBase:
       oprot.writeFieldBegin('prev_status', TType.I32, 8)
       oprot.writeI32(self.prev_status)
       oprot.writeFieldEnd()
-    if self.debug is not None:
-      oprot.writeFieldBegin('debug', TType.BOOL, 9)
-      oprot.writeBool(self.debug)
+    if self.component_debug is not None:
+      oprot.writeFieldBegin('component_debug', TType.MAP, 9)
+      oprot.writeMapBegin(TType.STRING, TType.BOOL, len(self.component_debug))
+      for kiter397,viter398 in self.component_debug.items():
+        oprot.writeString(kiter397.encode('utf-8'))
+        oprot.writeBool(viter398)
+      oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
@@ -5290,7 +5310,7 @@ class StormBase:
     value = (value * 31) ^ hash(self.owner)
     value = (value * 31) ^ hash(self.topology_action_options)
     value = (value * 31) ^ hash(self.prev_status)
-    value = (value * 31) ^ hash(self.debug)
+    value = (value * 31) ^ hash(self.component_debug)
     return value
 
   def __repr__(self):
@@ -5344,13 +5364,13 @@ class ClusterWorkerHeartbeat:
       elif fid == 2:
         if ftype == TType.MAP:
           self.executor_stats = {}
-          (_ktype382, _vtype383, _size381 ) = iprot.readMapBegin()
-          for _i385 in xrange(_size381):
-            _key386 = ExecutorInfo()
-            _key386.read(iprot)
-            _val387 = ExecutorStats()
-            _val387.read(iprot)
-            self.executor_stats[_key386] = _val387
+          (_ktype400, _vtype401, _size399 ) = iprot.readMapBegin()
+          for _i403 in xrange(_size399):
+            _key404 = ExecutorInfo()
+            _key404.read(iprot)
+            _val405 = ExecutorStats()
+            _val405.read(iprot)
+            self.executor_stats[_key404] = _val405
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -5381,9 +5401,9 @@ class ClusterWorkerHeartbeat:
     if self.executor_stats is not None:
       oprot.writeFieldBegin('executor_stats', TType.MAP, 2)
       oprot.writeMapBegin(TType.STRUCT, TType.STRUCT, len(self.executor_stats))
-      for kiter388,viter389 in self.executor_stats.items():
-        kiter388.write(oprot)
-        viter389.write(oprot)
+      for kiter406,viter407 in self.executor_stats.items():
+        kiter406.write(oprot)
+        viter407.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     if self.time_secs is not None:
@@ -5536,12 +5556,12 @@ class LocalStateData:
       if fid == 1:
         if ftype == TType.MAP:
           self.serialized_parts = {}
-          (_ktype391, _vtype392, _size390 ) = iprot.readMapBegin()
-          for _i394 in xrange(_size390):
-            _key395 = iprot.readString().decode('utf-8')
-            _val396 = ThriftSerializedObject()
-            _val396.read(iprot)
-            self.serialized_parts[_key395] = _val396
+          (_ktype409, _vtype410, _size408 ) = iprot.readMapBegin()
+          for _i412 in xrange(_size408):
+            _key413 = iprot.readString().decode('utf-8')
+            _val414 = ThriftSerializedObject()
+            _val414.read(iprot)
+            self.serialized_parts[_key413] = _val414
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -5558,9 +5578,9 @@ class LocalStateData:
     if self.serialized_parts is not None:
       oprot.writeFieldBegin('serialized_parts', TType.MAP, 1)
       oprot.writeMapBegin(TType.STRING, TType.STRUCT, len(self.serialized_parts))
-      for kiter397,viter398 in self.serialized_parts.items():
-        oprot.writeString(kiter397.encode('utf-8'))
-        viter398.write(oprot)
+      for kiter415,viter416 in self.serialized_parts.items():
+        oprot.writeString(kiter415.encode('utf-8'))
+        viter416.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -5622,11 +5642,11 @@ class LocalAssignment:
       elif fid == 2:
         if ftype == TType.LIST:
           self.executors = []
-          (_etype402, _size399) = iprot.readListBegin()
-          for _i403 in xrange(_size399):
-            _elem404 = ExecutorInfo()
-            _elem404.read(iprot)
-            self.executors.append(_elem404)
+          (_etype420, _size417) = iprot.readListBegin()
+          for _i421 in xrange(_size417):
+            _elem422 = ExecutorInfo()
+            _elem422.read(iprot)
+            self.executors.append(_elem422)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -5647,8 +5667,8 @@ class LocalAssignment:
     if self.executors is not None:
       oprot.writeFieldBegin('executors', TType.LIST, 2)
       oprot.writeListBegin(TType.STRUCT, len(self.executors))
-      for iter405 in self.executors:
-        iter405.write(oprot)
+      for iter423 in self.executors:
+        iter423.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -5772,11 +5792,11 @@ class LSApprovedWorkers:
       if fid == 1:
         if ftype == TType.MAP:
           self.approved_workers = {}
-          (_ktype407, _vtype408, _size406 ) = iprot.readMapBegin()
-          for _i410 in xrange(_size406):
-            _key411 = iprot.readString().decode('utf-8')
-            _val412 = iprot.readI32();
-            self.approved_workers[_key411] = _val412
+          (_ktype425, _vtype426, _size424 ) = iprot.readMapBegin()
+          for _i428 in xrange(_size424):
+            _key429 = iprot.readString().decode('utf-8')
+            _val430 = iprot.readI32();
+            self.approved_workers[_key429] = _val430
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -5793,9 +5813,9 @@ class LSApprovedWorkers:
     if self.approved_workers is not None:
       oprot.writeFieldBegin('approved_workers', TType.MAP, 1)
       oprot.writeMapBegin(TType.STRING, TType.I32, len(self.approved_workers))
-      for kiter413,viter414 in self.approved_workers.items():
-        oprot.writeString(kiter413.encode('utf-8'))
-        oprot.writeI32(viter414)
+      for kiter431,viter432 in self.approved_workers.items():
+        oprot.writeString(kiter431.encode('utf-8'))
+        oprot.writeI32(viter432)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -5849,12 +5869,12 @@ class LSSupervisorAssignments:
       if fid == 1:
         if ftype == TType.MAP:
           self.assignments = {}
-          (_ktype416, _vtype417, _size415 ) = iprot.readMapBegin()
-          for _i419 in xrange(_size415):
-            _key420 = iprot.readI32();
-            _val421 = LocalAssignment()
-            _val421.read(iprot)
-            self.assignments[_key420] = _val421
+          (_ktype434, _vtype435, _size433 ) = iprot.readMapBegin()
+          for _i437 in xrange(_size433):
+            _key438 = iprot.readI32();
+            _val439 = LocalAssignment()
+            _val439.read(iprot)
+            self.assignments[_key438] = _val439
           iprot.readMapEnd()
         else:
           iprot.skip(ftype)
@@ -5871,9 +5891,9 @@ class LSSupervisorAssignments:
     if self.assignments is not None:
       oprot.writeFieldBegin('assignments', TType.MAP, 1)
       oprot.writeMapBegin(TType.I32, TType.STRUCT, len(self.assignments))
-      for kiter422,viter423 in self.assignments.items():
-        oprot.writeI32(kiter422)
-        viter423.write(oprot)
+      for kiter440,viter441 in self.assignments.items():
+        oprot.writeI32(kiter440)
+        viter441.write(oprot)
       oprot.writeMapEnd()
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -5946,11 +5966,11 @@ class LSWorkerHeartbeat:
       elif fid == 3:
         if ftype == TType.LIST:
           self.executors = []
-          (_etype427, _size424) = iprot.readListBegin()
-          for _i428 in xrange(_size424):
-            _elem429 = ExecutorInfo()
-            _elem429.read(iprot)
-            self.executors.append(_elem429)
+          (_etype445, _size442) = iprot.readListBegin()
+          for _i446 in xrange(_size442):
+            _elem447 = ExecutorInfo()
+            _elem447.read(iprot)
+            self.executors.append(_elem447)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
@@ -5980,8 +6000,8 @@ class LSWorkerHeartbeat:
     if self.executors is not None:
       oprot.writeFieldBegin('executors', TType.LIST, 3)
       oprot.writeListBegin(TType.STRUCT, len(self.executors))
-      for iter430 in self.executors:
-        iter430.write(oprot)
+      for iter448 in self.executors:
+        iter448.write(oprot)
       oprot.writeListEnd()
       oprot.writeFieldEnd()
     if self.port is not None:

http://git-wip-us.apache.org/repos/asf/storm/blob/306ec57d/storm-core/src/storm.thrift
----------------------------------------------------------------------
diff --git a/storm-core/src/storm.thrift b/storm-core/src/storm.thrift
index e4436be..c4417d4 100644
--- a/storm-core/src/storm.thrift
+++ b/storm-core/src/storm.thrift
@@ -218,7 +218,7 @@ struct TopologyInfo {
   4: required list<ExecutorSummary> executors;
   5: required string status;
   6: required map<string, list<ErrorInfo>> errors;
-  7: required bool debug;
+  7: required map<string, bool> component_debug;
 513: optional string sched_status;
 514: optional string owner;
 }
@@ -290,7 +290,7 @@ struct StormBase {
     6: optional string owner;
     7: optional TopologyActionOptions topology_action_options;
     8: optional TopologyStatus prev_status;//currently only used during rebalance action.
-    9: optional bool debug;
+    9: optional map<string, bool> component_debug; // topology/component level debug flags.
 }
 
 struct ClusterWorkerHeartbeat {
@@ -351,7 +351,7 @@ service Nimbus {
   void activate(1: string name) throws (1: NotAliveException e, 2: AuthorizationException aze);
   void deactivate(1: string name) throws (1: NotAliveException e, 2: AuthorizationException aze);
   void rebalance(1: string name, 2: RebalanceOptions options) throws (1: NotAliveException e, 2: InvalidTopologyException ite, 3: AuthorizationException aze);
-  void debug(1: string name, 2: bool enable) throws (1: NotAliveException e, 2: AuthorizationException aze);
+  void debug(1: string name, 2: string component, 3: bool enable) throws (1: NotAliveException e, 2: AuthorizationException aze);
   void uploadNewCredentials(1: string name, 2: Credentials creds) throws (1: NotAliveException e, 2: InvalidTopologyException ite, 3: AuthorizationException aze);
 
   // need to add functions for asking about status of storms, what nodes they're running on, looking at task logs