(If there's a better target for an issue request, please let me know!)

While trying to understand the details Calcite rule execution, I turned on
the Calcite tracing per
https://calcite.incubator.apache.org/docs/howto.html#tracing . At that
point (running a query from the web UI)  I get the error

Query Failed: An Error Occurred
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
AssertionError: Internal error: should never get here ...


The query is pretty straightforward:

select Person, sum(Qty1) from mongo.mine.test group by Person



A simple trial with the same settings against the Apache Calcite
example/csv doesn't show the same behavior. (Calcite query: SELECT DEPTNO,
SUM(EMPNO) FROM emps GROUP BY DEPTNO ; )

In Drill, I'm querying against a Mongo db but the code path in the
exception trace doesn't immediately appear to be relevant for that. It
seems to happen the very first time dumpGraph is called.

The innermost cause (in all its glory) is due to the method:

@Override public RelOptCost computeSelfCost(RelOptPlanner planner) {
  // HepRelMetadataProvider is supposed to intercept this
  // and redirect to the real rels.
  throw Util.newInternal("should never get here");
}


and the trace is:

          cause {
            exception_class: "java.lang.AssertionError"
            message: "Internal error: should never get here"
            stack_trace {
              class_name: "org.apache.calcite.util.Util"
              file_name: "Util.java"
              line_number: 775
              method_name: "newInternal"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.plan.hep.HepRelVertex"
              file_name: "HepRelVertex.java"
              line_number: 68
              method_name: "computeSelfCost"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
              file_name: "RelMdPercentageOriginalRows.java"
              line_number: 165
              method_name: "getNonCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
              file_name: "ReflectiveRelMetadataProvider.java"
              line_number: 194
              method_name: "invoke"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
              file_name: "RelMetadataQuery.java"
              line_number: 115
              method_name: "getNonCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
              file_name: "RelMdPercentageOriginalRows.java"
              line_number: 151
              method_name: "getCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
              file_name: "ReflectiveRelMetadataProvider.java"
              line_number: 194
              method_name: "invoke"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
              file_name: "RelMetadataQuery.java"
              line_number: 101
              method_name: "getCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
              file_name: "RelMdPercentageOriginalRows.java"
              line_number: 154
              method_name: "getCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
              file_name: "ReflectiveRelMetadataProvider.java"
              line_number: 194
              method_name: "invoke"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
              file_name: "RelMetadataQuery.java"
              line_number: 101
              method_name: "getCumulativeCost"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.plan.AbstractRelOptPlanner"
              file_name: "AbstractRelOptPlanner.java"
              line_number: 251
              method_name: "getCost"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.plan.hep.HepPlanner"
              file_name: "HepPlanner.java"
              line_number: 962
              method_name: "dumpGraph"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.calcite.plan.hep.HepPlanner"
              file_name: "HepPlanner.java"
              line_number: 151
              method_name: "setRoot"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
              file_name: "DefaultSqlHandler.java"
              line_number: 449
              method_name: "convertToRel"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
              file_name: "DefaultSqlHandler.java"
              line_number: 191
              method_name: "validateAndConvert"
              is_native_method: false
            }
            stack_trace {
              class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
              file_name: "DefaultSqlHandler.java"
              line_number: 157
              method_name: "getPlan"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.drill.exec.planner.sql.DrillSqlWorker"
              file_name: "DrillSqlWorker.java"
              line_number: 178
              method_name: "getPlan"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.drill.exec.work.foreman.Foreman"
              file_name: "Foreman.java"
              line_number: 903
              method_name: "runSQL"
              is_native_method: false
            }
            stack_trace {
              class_name: "org.apache.drill.exec.work.foreman.Foreman"
              file_name: "Foreman.java"
              line_number: 242
              method_name: "run"
              is_native_method: false
            }
            stack_trace {
              class_name: "..."
              line_number: 0
              method_name: "..."
              is_native_method: false
            }
          }



The mongo database is simplicity itself, for repro purposes:

{
"Date" : "4/4/2014",
"Person" : "Bob",
"Qty1" : 45,
"Qty2" : 52
}
{
"Date" : "4/12/2014",
"Person" : "Sarah",
"Qty1" : 10,
"Qty2" : 14
}
{
"Date" : "4/12/2014",
"Person" : "Bob",
"Qty1" : 72,
"Qty2" : 33
}
{
"Date" : "5/1/2014",
"Person" : "Agnes",
"Qty1" : 24,
"Qty2" : 25
}
{
"Date" : "5/2/2014",
"Person" : "Sarah",
"Qty1" : 86,
"Qty2" : 4
}
{
"Date" : "5/6/2014",
"Person" : "Bob",
"Qty1" : 17,
"Qty2" : 4
}

loaded with `mongoimport --db mine --collection test --drop --file
c:/tmp/work1a.json`

Thank you for any pointers.

Reply via email to