This is an automated email from the ASF dual-hosted git repository.

wangzhen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-gluten.git


The following commit(s) were added to refs/heads/main by this push:
     new b02b359aa5 [VL] Fix oom when plan is large (#11652)
b02b359aa5 is described below

commit b02b359aa59a813c02222180caef9d55af1f2967
Author: Rex(Hui) An <[email protected]>
AuthorDate: Fri Feb 27 09:52:53 2026 +0800

    [VL] Fix oom when plan is large (#11652)
---
 .../org/apache/gluten/extension/columnar/FallbackTag.scala |  2 +-
 .../columnar/enumerated/planner/property/Conv.scala        |  3 ++-
 .../gluten/extension/columnar/transition/Transition.scala  | 14 ++++++++------
 .../gluten/extension/columnar/transition/Transitions.scala |  4 ++--
 4 files changed, 13 insertions(+), 10 deletions(-)

diff --git 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/FallbackTag.scala
 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/FallbackTag.scala
index ea8f37823b..b18fa519e0 100644
--- 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/FallbackTag.scala
+++ 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/FallbackTag.scala
@@ -105,7 +105,7 @@ object FallbackTags {
 
   def get(plan: TreeNode[_]): FallbackTag = {
     getOption(plan).getOrElse(
-      throw new IllegalStateException("Transform hint tag not set in plan: " + 
plan.toString()))
+      throw new IllegalStateException("Transform hint tag not set in plan: " + 
plan.nodeName))
   }
 
   def getOption(plan: TreeNode[_]): Option[FallbackTag] = {
diff --git 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/enumerated/planner/property/Conv.scala
 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/enumerated/planner/property/Conv.scala
index 868791ac33..748af00b54 100644
--- 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/enumerated/planner/property/Conv.scala
+++ 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/enumerated/planner/property/Conv.scala
@@ -41,7 +41,8 @@ object Conv {
   }
 
   def findTransition(from: Prop, to: Req): Transition = {
-    val out = Transition.factory.findTransition(from.prop, to.req, new 
IllegalStateException())
+    val out =
+      Transition.factory.findTransitionOrThrow(from.prop, to.req)(new 
IllegalStateException())
     out
   }
 
diff --git 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transition.scala
 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transition.scala
index 6a9dfa0623..d479dc4959 100644
--- 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transition.scala
+++ 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transition.scala
@@ -21,6 +21,7 @@ import org.apache.gluten.exception.GlutenException
 import org.apache.gluten.extension.columnar.cost.GlutenCostModel
 
 import org.apache.spark.sql.execution.SparkPlan
+import org.apache.spark.sql.internal.SQLConf
 
 import scala.collection.mutable
 
@@ -52,20 +53,21 @@ object Transition {
   val empty: Transition = (plan: SparkPlan) => plan
   private val abort: Transition = (_: SparkPlan) => throw new 
UnsupportedOperationException("Abort")
   val factory = Factory.newBuiltin()
+  private lazy val maxFields = SQLConf.get.maxToStringFields
 
   def notFound(plan: SparkPlan): GlutenException = {
-    new GlutenException(s"No viable transition found from plan's child to 
itself: $plan")
+    new GlutenException(
+      s"No viable transition found from plan's child to itself: 
${plan.simpleString(maxFields)}")
   }
 
   def notFound(plan: SparkPlan, required: ConventionReq): GlutenException = {
-    new GlutenException(s"No viable transition to [$required] found for plan: 
$plan")
+    new GlutenException(
+      s"No viable transition to [$required] found for plan: 
${plan.simpleString(maxFields)}")
   }
 
   trait Factory {
-    final def findTransition(
-        from: Convention,
-        to: ConventionReq,
-        otherwise: Exception): Transition = {
+    final def findTransitionOrThrow(from: Convention, to: ConventionReq)(
+        otherwise: => Exception): Transition = {
       findTransition(from, to) {
         throw otherwise
       }
diff --git 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transitions.scala
 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transitions.scala
index 2ea30b6af0..1607bc16ce 100644
--- 
a/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transitions.scala
+++ 
b/gluten-core/src/main/scala/org/apache/gluten/extension/columnar/transition/Transitions.scala
@@ -49,7 +49,7 @@ case class InsertTransitions(convReq: ConventionReq) extends 
Rule[SparkPlan] {
           child
         } else {
           val transition =
-            Transition.factory.findTransition(from, convReq, 
Transition.notFound(node))
+            Transition.factory.findTransitionOrThrow(from, 
convReq)(Transition.notFound(node))
           val newChild = transition.apply(child)
           newChild
         }
@@ -98,7 +98,7 @@ object Transitions {
     val convFunc = ConventionFunc.create()
     val removed = RemoveTransitions.removeForNode(plan)
     val transition = Transition.factory
-      .findTransition(convFunc.conventionOf(removed), req, 
Transition.notFound(removed, req))
+      .findTransitionOrThrow(convFunc.conventionOf(removed), 
req)(Transition.notFound(removed, req))
     val out = transition.apply(removed)
     out
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to