Github user roshannaik commented on a diff in the pull request:
https://github.com/apache/storm/pull/2502#discussion_r161361184
--- Diff: storm-client/src/jvm/org/apache/storm/tuple/TupleImpl.java ---
@@ -24,50 +24,46 @@
import org.apache.storm.task.GeneralTopologyContext;
public class TupleImpl implements Tuple {
- private final List<Object> values;
- private final int taskId;
- private final String streamId;
- private final GeneralTopologyContext context;
- private final MessageId id;
+ private List<Object> values;
+ private int taskId;
+ private String streamId;
+ private GeneralTopologyContext context;
+ private MessageId id;
+ private final String srcComponent;
private Long _processSampleStartTime;
private Long _executeSampleStartTime;
private long _outAckVal = 0;
-
+
public TupleImpl(Tuple t) {
this.values = t.getValues();
this.taskId = t.getSourceTask();
this.streamId = t.getSourceStreamId();
this.id = t.getMessageId();
this.context = t.getContext();
- if (t instanceof TupleImpl) {
+ this.srcComponent = t.getSourceComponent();
+ try {
TupleImpl ti = (TupleImpl) t;
this._processSampleStartTime = ti._processSampleStartTime;
this._executeSampleStartTime = ti._executeSampleStartTime;
this._outAckVal = ti._outAckVal;
+ } catch (ClassCastException e) {
+ // ignore ... if t is not a TupleImpl type .. faster than
checking and then casting
}
}
- public TupleImpl(GeneralTopologyContext context, List<Object> values,
int taskId, String streamId, MessageId id) {
+ public TupleImpl(GeneralTopologyContext context, List<Object> values,
String srcComponent, int taskId, String streamId, MessageId id) {
this.values = Collections.unmodifiableList(values);
this.taskId = taskId;
this.streamId = streamId;
this.id = id;
this.context = context;
-
- String componentId = context.getComponentId(taskId);
- Fields schema = context.getComponentOutputFields(componentId,
streamId);
- if(values.size()!=schema.size()) {
- throw new IllegalArgumentException(
- "Tuple created with wrong number of fields. " +
- "Expected " + schema.size() + " fields but got " +
- values.size() + " fields");
- }
--- End diff --
Ok, enabling it for local mode. Doing my best to eliminate map lookups in
critical path.
---