drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-5260) Refinements to new "Cluster Fixture" test framework
Date Thu, 23 Feb 2017 21:08:44 GMT

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

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

Github user sohami commented on a diff in the pull request:

    https://github.com/apache/drill/pull/753#discussion_r102603020
  
    --- Diff: exec/java-exec/src/test/java/org/apache/drill/test/ProfileParser.java ---
    @@ -42,44 +48,207 @@
     public class ProfileParser {
     
       JsonObject profile;
    +  String query;
       List<String> plans;
    +  List<OpDefInfo> operations;
    +  Map<Integer,FragInfo> fragments = new HashMap<>();
    +  private List<OpDefInfo> topoOrder;
     
       public ProfileParser( File file ) throws IOException {
         try (FileReader fileReader = new FileReader(file);
              JsonReader reader = Json.createReader(fileReader)) {
           profile = (JsonObject) reader.read();
         }
    +
    +    parse();
    +  }
    +
    +  private void parse() {
    +    parseQuery();
    +    parsePlans();
    +    buildFrags();
    +    parseFragProfiles();
    +    mapOpProfiles();
    +    aggregateOpers();
    +    buildTree();
    +  }
    +
    +  private void parseQuery() {
    +    query = profile.getString("query");
    +    query = query.replace("//n", "\n");
    +  }
    +
    +  /**
    +   * Parse a text version of the plan as it appears in the JSON
    +   * query profile.
    +   */
    +
    +  private static class PlanParser {
    +
    +    List<String> plans = new ArrayList<>();
    +    List<OpDefInfo> operations = new ArrayList<>();
    +    List<OpDefInfo> sorted = new ArrayList<>();
    +
    +    public void parsePlans(String plan) {
    +      plans = new ArrayList<>( );
    +      String parts[] = plan.split("\n");
    +      for (String part : parts) {
    +        plans.add(part);
    +        OpDefInfo opDef = new OpDefInfo( part );
    +        operations.add(opDef);
    +      }
    +      sortList();
    +    }
    +
    +    public void sortList() {
    +      List<OpDefInfo> raw = new ArrayList<>( );
    +      raw.addAll( operations );
    +      Collections.sort( raw, new Comparator<OpDefInfo>() {
    +        @Override
    +        public int compare(OpDefInfo o1, OpDefInfo o2) {
    +          int result = Integer.compare(o1.majorId, o2.majorId);
    +          if ( result == 0 ) {
    +            result = Integer.compare(o1.stepId, o2.stepId);
    +          }
    +          return result;
    +        }
    +      });
    +      int currentFrag = 0;
    +      int currentStep = 0;
    +      for ( OpDefInfo opDef : raw ) {
    +        if ( currentFrag < opDef.majorId ) {
    +          currentFrag++;
    +          OpDefInfo sender = new OpDefInfo( currentFrag, 0 );
    +          sender.isInferred = true;
    +          sender.name = "Sender";
    +          sorted.add(sender);
    +          currentStep = 1;
    +          opDef.inferredParent = sender;
    +          sender.children.add( opDef );
    +        }
    +        if ( opDef.stepId > currentStep ) {
    +          OpDefInfo unknown = new OpDefInfo( currentFrag, currentStep );
    +          unknown.isInferred = true;
    +          unknown.name = "Unknown";
    +          sorted.add(unknown);
    +          opDef.inferredParent = unknown;
    +          unknown.children.add( opDef );
    +        }
    +        sorted.add( opDef );
    +        currentStep = opDef.stepId + 1;
    +      }
    +    }
    +  }
    +
    +  /**
    +   * Parse the plan portion of the query profile.
    +   */
    +
    +  private void parsePlans() {
    +    PlanParser parser = new PlanParser();
    +    String plan = getPlan( );
    +    parser.parsePlans(plan);
    +    plans = parser.plans;
    +    topoOrder = parser.operations;
    +    operations = parser.sorted;
    +  }
    --- End diff --
    
    wrong assignment ?` topoOrder = parser.sorted` and `operations = parser.operations` ?


> Refinements to new "Cluster Fixture" test framework
> ---------------------------------------------------
>
>                 Key: DRILL-5260
>                 URL: https://issues.apache.org/jira/browse/DRILL-5260
>             Project: Apache Drill
>          Issue Type: Improvement
>    Affects Versions: 1.10
>            Reporter: Paul Rogers
>            Assignee: Paul Rogers
>            Priority: Minor
>             Fix For: 1.10
>
>
> Roll-up of a number of enhancements to the cluster fixture framework.
> * Config option to suppress printing of CSV and other output. (Allows printing for single
tests, not printing when running from Maven.)
> * Parsing of query profiles to extract plan and run time information.
> * Fix bug in log fixture when enabling logging for a package.
> * Improved ZK support.
> * Set up the new CTTAS default temporary workspace for tests.
> * Revise TestDrillbitResiliance to use the new framework.
> * Revise TestWindowFrame to to use the new framework.
> * Revise TestMergeJoinWithSchemaChanges to use the new framework.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message