Skip to content

Commit

Permalink
GEOMESA-2978 Add reduce step to explain logging (locationtech#2686)
Browse files Browse the repository at this point in the history
Signed-off-by: Emilio Lahr-Vivaz <elahrvivaz@ccri.com>
  • Loading branch information
elahrvivaz authored and unknown committed Jan 18, 2022
1 parent 499c264 commit d21da52
Show file tree
Hide file tree
Showing 8 changed files with 12 additions and 3 deletions.
Expand Up @@ -63,6 +63,7 @@ object AccumuloQueryPlan extends LazyLogging {
explainer(s"Ranges (${plan.ranges.size}): ${plan.ranges.take(5).map(rangeToString).mkString(", ")}")
explainer(s"Iterators (${plan.iterators.size}):", plan.iterators.map(i => () => i.toString))
plan.join.foreach { j => explain(j._2, explainer, "Join ") }
explainer(s"Reduce: ${plan.reducer.getOrElse("none")}")
explainer.popLevel()
}

Expand Down
Expand Up @@ -43,7 +43,8 @@ object CassandraQueryPlan {
explainer.pushLevel(s"${prefix}Plan: ${plan.getClass.getName}")
explainer(s"Tables: ${plan.tables.mkString(", ")}")
explainer(s"Ranges (${plan.ranges.size}): ${plan.ranges.take(5).map(_.toString).mkString(", ")}")
explainer(s"Client-side filter: ${plan.clientSideFilter.map(filterToString).getOrElse("None")}")
explainer(s"Client-side filter: ${plan.clientSideFilter.map(filterToString).getOrElse("none")}")
explainer(s"Reduce: ${plan.reducer.getOrElse("none")}")
explainer.popLevel()
}
}
Expand Down
Expand Up @@ -155,7 +155,7 @@ class CassandraDataStoreTest extends Specification {
val filterLine = "Client-side filter: "
val clientSideFilter = out.toString.split("\n").map(_.trim).find(_.startsWith(filterLine)).map(_.substring(filterLine.length))
if (loose) {
clientSideFilter must beSome("None")
clientSideFilter must beSome("none")
} else {
clientSideFilter must beSome(org.locationtech.geomesa.filter.filterToString(filter))
}
Expand Down
Expand Up @@ -62,6 +62,7 @@ sealed trait HBaseQueryPlan extends QueryPlan[HBaseDataStore] {
explainer(s"Column families: ${scans.headOption.flatMap(_.scans.headOption).flatMap(r => Option(r.getFamilies)).getOrElse(Array.empty).map(Bytes.toString).mkString(",")}")
explainer(s"Remote filters: ${scans.headOption.flatMap(_.scans.headOption).flatMap(r => Option(r.getFilter)).map(filterToString).getOrElse("none")}")
explain(explainer)
explainer(s"Reduce: ${reducer.getOrElse("none")}")
explainer.popLevel()
}

Expand Down
Expand Up @@ -218,6 +218,9 @@ object QueryPlan {
* @return
*/
def apply(features: CloseableIterator[SimpleFeature]): CloseableIterator[SimpleFeature]

override def toString: String =
s"class:${getClass.getSimpleName}, state:{${state.map { case (k, v) => s"$k=$v" }.mkString(", ")}}"
}

object FeatureReducer {
Expand Down
Expand Up @@ -122,6 +122,7 @@ class QueryPlanner[DS <: GeoMesaDataStore[DS]](ds: DS) extends QueryRunner with
s"sampling[${hints.getSampling.map { case (s, f) => s"$s${f.map(":" + _).getOrElse("")}"}.getOrElse("none")}]")
output(s"Sort: ${query.getHints.getSortFields.map(QueryHints.sortReadableString).getOrElse("none")}")
output(s"Transforms: ${query.getHints.getTransformDefinition.map(t => if (t.isEmpty) { "empty" } else { t }).getOrElse("none")}")
output(s"Max features: ${query.getHints.getMaxFeatures.getOrElse("none")}")
hints.getFilterCompatibility.foreach(c => output(s"Filter compatibility: $c"))

output.pushLevel("Strategy selection:")
Expand Down
Expand Up @@ -46,6 +46,7 @@ object KuduQueryPlan {
explainer(s"Additional predicates: ${if (plan.predicates.isEmpty) { "None" } else { plan.predicates.map(_.toString).mkString(", ") }}")
explainer(s"Client-side filter: ${plan.ecql.map(filterToString).getOrElse("None")}")
explainer(s"Rows to features: ${plan.adapter}")
explainer(s"Reduce: ${plan.reducer.getOrElse("none")}")
explainer.popLevel()
}

Expand Down
Expand Up @@ -61,9 +61,10 @@ object RedisQueryPlan {
def explain(plan: RedisQueryPlan, explainer: Explainer, prefix: String): Unit = {
explainer.pushLevel(s"${prefix}Plan: ${plan.getClass.getSimpleName}")
explainer(s"Tables: ${plan.tables.mkString(", ")}")
explainer(s"ECQL: ${plan.ecql.map(filterToString).getOrElse("None")}")
explainer(s"ECQL: ${plan.ecql.map(filterToString).getOrElse("none")}")
explainer(s"Ranges (${plan.ranges.size}): ${plan.ranges.take(5).map(rangeToString).mkString(", ")}")
plan.explain(explainer)
explainer(s"Reduce: ${plan.reducer.getOrElse("none")}")
explainer.popLevel()
}

Expand Down

0 comments on commit d21da52

Please sign in to comment.