Github user paul-rogers commented on a diff in the pull request: https://github.com/apache/drill/pull/984#discussion_r144142548 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/TopN/PriorityQueue.java --- @@ -20,22 +20,58 @@ import org.apache.drill.exec.compile.TemplateClassDefinition; import org.apache.drill.exec.exception.SchemaChangeException; import org.apache.drill.exec.memory.BufferAllocator; -import org.apache.drill.exec.ops.FragmentContext; import org.apache.drill.exec.physical.impl.sort.RecordBatchData; import org.apache.drill.exec.record.VectorContainer; import org.apache.drill.exec.record.selection.SelectionVector4; public interface PriorityQueue { - public void add(FragmentContext context, RecordBatchData batch) throws SchemaChangeException; - public void init(int limit, FragmentContext context, BufferAllocator allocator, boolean hasSv2) throws SchemaChangeException; - public void generate() throws SchemaChangeException; - public VectorContainer getHyperBatch(); - public SelectionVector4 getHeapSv4(); - public SelectionVector4 getFinalSv4(); - public boolean validate(); - public void resetQueue(VectorContainer container, SelectionVector4 vector4) throws SchemaChangeException; - public void cleanup(); - - public static TemplateClassDefinition<PriorityQueue> TEMPLATE_DEFINITION = new TemplateClassDefinition<PriorityQueue>(PriorityQueue.class, PriorityQueueTemplate.class); + /** + * The elements in the given batch are added to the priority queue. Note that the priority queue + * only retains the top elements that fit within the size specified by the {@link #init(int, BufferAllocator, boolean)} + * method. + * @param batch The batch containing elements we want to add. + * @throws SchemaChangeException + */ + void add(RecordBatchData batch) throws SchemaChangeException; + /** + * Initializes the priority queue. This method must be called before any other methods on the priority + * queue are called. + * @param limit The size of the priority queue. + * @param allocator The {@link BufferAllocator} to use when creating the priority queue. + * @param hasSv2 True when incoming batches have v2 selection vectors. False otherwise. + * @throws SchemaChangeException + */ + void init(int limit, BufferAllocator allocator, boolean hasSv2) throws SchemaChangeException; + + /** + * This method must be called before fetching the final heap hyper batch and final Sv4 vector. --- End diff -- "heap hyper batch" seems an oxymoron. All batches, including hyper-batches, exist in direct memory. What is meant by "heap"?
---