Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-2883

HepPlanner subprogram may loop till getting out of memory

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • None
    • None
    • None

    Description

      Consider the following two hep programs.

      Program 1:

      final HepProgramBuilder programBuilder = new HepProgramBuilder();
      programBuilder.addMatchOrder(HepMatchOrder.BOTTOM_UP);
      programBuilder.addRuleInstance(JoinToMultiJoinRule.INSTANCE);
      programBuilder.addRuleInstance(LoptOptimizeJoinRule.INSTANCE);
      final HepProgram program = programBuilder.build();
      

      Program 2:

      final HepProgramBuilder programBuilder = new HepProgramBuilder();
      final HepProgramBuilder subprogramBuilder = new HepProgramBuilder();
      subprogramBuilder.addMatchOrder(HepMatchOrder.BOTTOM_UP);
      subprogramBuilder.addRuleInstance(JoinToMultiJoinRule.INSTANCE);
      subprogramBuilder.addRuleInstance(LoptOptimizeJoinRule.INSTANCE);
      programBuilder.addSubprogram(subprogramBuilder.build());
      final HepProgram program = programBuilder.build();
      

      I would expect both programs to behave similarly. However, program 2 will loop indefinitely. The reason is that HepPlanner subprogram execution loops if subprogram generates any new expression.
      https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L339
      This does not seem right since planner can control exiting the program (and thus, subprogram) depending on its own internal state and configuration properties, e.g., match limit.

      Attachments

        Issue Links

          Activity

            People

              jcamacho Jesús Camacho Rodríguez
              jcamacho Jesús Camacho Rodríguez
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m