package storm.trident.operation.impl; import backtype.storm.tuple.Values; import java.util.List; import java.util.Map; import storm.trident.operation.CombinerAggregator; import storm.trident.operation.TridentCollector; import storm.trident.operation.TridentOperationContext; import storm.trident.state.CombinerValueUpdater; import storm.trident.state.StateUpdater; import storm.trident.state.snapshot.Snapshottable; import storm.trident.tuple.TridentTuple; public class CombinerAggStateUpdater implements StateUpdater<Snapshottable> { CombinerAggregator _agg; public CombinerAggStateUpdater(CombinerAggregator agg) { _agg = agg; } @Override public void updateState(Snapshottable state, List<TridentTuple> tuples, TridentCollector collector) { if(tuples.size()!=1) { throw new IllegalArgumentException("Combiner state updater should receive a single tuple. Received: " + tuples.toString()); } Object newVal = state.update(new CombinerValueUpdater(_agg, tuples.get(0).getValue(0))); collector.emit(new Values(newVal)); } @Override public void prepare(Map conf, TridentOperationContext context) { } @Override public void cleanup() { } }