package com.linkedin.parseq.batching; import java.util.Map; import java.util.Set; import com.linkedin.parseq.Task; import com.linkedin.parseq.batching.SimpleBatchingStrategy.Group; import com.linkedin.parseq.function.Try; import static com.linkedin.parseq.batching.SimpleBatchingStrategy.ALL; /** * A simple {@link TaskBatchingStrategy} that groups all keys into one batch. * * @author Jaroslaw Odzga (jodzga@linkedin.com) * * @param <K> Type of a Key * @param <T> Type of a Value */ public abstract class SimpleTaskBatchingStrategy<K, T> extends TaskBatchingStrategy<SimpleBatchingStrategy.Group, K, T> { @Override final public Group classify(K key) { return ALL; } @Override public Task<Map<K, Try<T>>> taskForBatch(Group group, Set<K> keys) { return taskForBatch(keys); } @Override final public String getBatchName(Group group, Set<K> keys) { return getBatchName(keys); } /** * Overriding this method allows providing custom name for a batch. Name will appear in the * ParSeq trace as a description of the task that executes the batch. * @param batch set of keys belonging to the batch that needs to be described * @return name for the batch */ public String getBatchName(Set<K> batch) { return super.getBatchName(ALL, batch); } /** * This method will be called for every batch. It returns a map that for every key contains * either a success with a value or a failure. If returned map does not contain results for * some keys the tasks for which results are missing will fail. * @param keys set of keys belonging to the batch * @return A map that for every key contains either a success with a value or a failure. * If returned map does not contain results for some keys the tasks for which results are missing will fail. */ public abstract Task<Map<K, Try<T>>> taskForBatch(Set<K> keys); }