package org.act.tstream.task.execute.spout; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import backtype.storm.spout.ISpout; import org.act.tstream.client.spout.IAckValueSpout; import org.act.tstream.stats.CommonStatsRolling; import org.act.tstream.task.comm.TupleInfo; /** * The action after spout receive one ack tuple * * @author yannian/Longda * */ public class AckSpoutMsg implements IAckMsg { private static Logger LOG = LoggerFactory.getLogger(AckSpoutMsg.class); private ISpout spout; private Object msgId; private String stream; private long timeStamp; private List<Object> values; private CommonStatsRolling task_stats; private boolean isDebug = false; public AckSpoutMsg(ISpout _spout, TupleInfo tupleInfo, CommonStatsRolling _task_stats, boolean _isDebug) { this.task_stats = _task_stats; this.spout = _spout; this.isDebug = _isDebug; this.msgId = tupleInfo.getMessageId(); this.stream = tupleInfo.getStream(); this.timeStamp = tupleInfo.getTimestamp(); this.values = tupleInfo.getValues(); } public void run() { if (isDebug) { LOG.info("Acking message {}", msgId); } if (spout instanceof IAckValueSpout) { IAckValueSpout ackValueSpout = (IAckValueSpout) spout; ackValueSpout.ack(msgId, values); } else { spout.ack(msgId); } task_stats.spout_acked_tuple(stream, timeStamp); } }