package edu.washington.escience.myria.operator; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.ImmutableMap; import edu.washington.escience.myria.Schema; import edu.washington.escience.myria.storage.TupleBatch; /** * Used by a Producer to append outgoing messages for FTMode.REJOIN. The producer is the only modifier. * */ public final class SimpleAppender extends StreamingState { /** Required for Java serialization. */ private static final long serialVersionUID = 1L; /** * The logger for this class. * */ static final Logger LOGGER = LoggerFactory.getLogger(SimpleAppender.class); /** * list of tuple batches. * */ private transient List<TupleBatch> tuples; @Override public void cleanup() { tuples = null; } @Override public Schema getSchema() { return getOp().getInputSchema(); } @Override public void init(final ImmutableMap<String, Object> execEnvVars) { tuples = new ArrayList<TupleBatch>(); } @Override public TupleBatch update(final TupleBatch tb) { tuples.add(tb); numTuples += tb.numTuples(); return tb; } /** number of tuples. Used in resource profiling. */ private volatile int numTuples = 0; @Override public List<TupleBatch> exportState() { return tuples; } @Override public int numTuples() { return numTuples; } @Override public StreamingState duplicate() { return new SimpleAppender(); } }