[ 
https://issues.apache.org/jira/browse/DRILL-5457?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16055009#comment-16055009
 ] 

ASF GitHub Bot commented on DRILL-5457:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/822#discussion_r122858748
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/aggregate/HashAggBatch.java
 ---
    @@ -149,14 +149,24 @@ public IterOutcome innerNext() {
           if ( aggOut == HashAggregator.AggIterOutcome.AGG_OK ) { return 
IterOutcome.OK; }
           // if RESTART - continue below with doWork() - read some spilled 
partition, just like reading incoming
           incoming = aggregator.getNewIncoming(); // Restart - incoming was 
just changed
    -      if ( wasKilled ) { // if kill() was called before, then finish up
    -        aggregator.cleanup();
    -        incoming.kill(false);
    -        return IterOutcome.NONE;
    -      }
         }
     
    -    AggOutcome out = aggregator.doWork();
    +    if ( wasKilled ) { // if kill() was called before, then finish up
    +      aggregator.cleanup();
    +      incoming.kill(false);
    +      return IterOutcome.NONE;
    +    }
    +
    +    // Read and aggregate records
    +    // ( may need to run again if the spilled partition that was read
    +    //   generated new partitions that were all spilled )
    +    AggOutcome out = AggOutcome.CALL_WORK_AGAIN;
    +    while ( out == AggOutcome.CALL_WORK_AGAIN) {
    +      //
    +      //  Read incoming batches and process their records
    +      //
    +      out = aggregator.doWork();
    +    }
    --- End diff --
    
    Scratch that, I see you need the value of "out". So:
    ```
      AggOutcome out;
      do {
          //
          //  Read incoming batches and process their records
          //
          out = aggregator.doWork();
      } while (out == AggOutcome.CALL_WORK_AGAIN) {
    ```
    
    Or Even:
    ```
      //  Read incoming batches and process their records
      AggOutcome out;
      while ((out = aggregator.doWork()) == AggOutcome.CALL_WORK_AGAIN) {
        // Nothing to do
      }
    ```



> Support Spill to Disk for the Hash Aggregate Operator
> -----------------------------------------------------
>
>                 Key: DRILL-5457
>                 URL: https://issues.apache.org/jira/browse/DRILL-5457
>             Project: Apache Drill
>          Issue Type: Improvement
>          Components: Execution - Relational Operators
>    Affects Versions: 1.10.0
>            Reporter: Boaz Ben-Zvi
>            Assignee: Boaz Ben-Zvi
>             Fix For: 1.11.0
>
>
> Support gradual spilling memory to disk as the available memory gets too 
> small to allow in memory work for the Hash Aggregate Operator.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to