drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paul-rogers <...@git.apache.org>
Subject [GitHub] drill pull request #822: DRILL-5457: Spill implementation for Hash Aggregate
Date Tue, 20 Jun 2017 00:49:36 GMT
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
      }
    ```



---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message