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

andygrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-ballista.git


The following commit(s) were added to refs/heads/main by this push:
     new 1cd1affc4 feat: improve state creation (#1963)
1cd1affc4 is described below

commit 1cd1affc40e1cb9b2f84e0397ff4f1f2003947c5
Author: Marko Milenković <[email protected]>
AuthorDate: Sat Jul 11 15:02:13 2026 +0200

    feat: improve state creation (#1963)
---
 ballista/scheduler/src/state/aqe/planner.rs | 47 ++++++++++++-----------------
 1 file changed, 20 insertions(+), 27 deletions(-)

diff --git a/ballista/scheduler/src/state/aqe/planner.rs 
b/ballista/scheduler/src/state/aqe/planner.rs
index 498191227..67d303761 100644
--- a/ballista/scheduler/src/state/aqe/planner.rs
+++ b/ballista/scheduler/src/state/aqe/planner.rs
@@ -30,14 +30,14 @@ use ballista_core::serde::scheduler::PartitionLocation;
 use datafusion::common;
 use datafusion::common::{HashMap, exec_err};
 use datafusion::error::DataFusionError;
+#[cfg(test)]
+use datafusion::execution::config::SessionConfig;
 use datafusion::execution::context::SessionContext;
-use datafusion::execution::runtime_env::RuntimeEnv;
 use datafusion::execution::{SessionState, SessionStateBuilder};
 use datafusion::logical_expr::LogicalPlan;
 use datafusion::physical_optimizer::PhysicalOptimizerRule;
 use datafusion::physical_plan::{ExecutionPlan, ExecutionPlanProperties, 
displayable};
 use datafusion::physical_planner::DefaultPhysicalPlanner;
-use datafusion::prelude::SessionConfig;
 use log::debug;
 use std::collections::HashSet;
 use std::fmt::{Debug, Formatter};
@@ -86,9 +86,7 @@ impl AdaptivePlanner {
     /// Creates a new `AdaptivePlanner` with the specified physical optimizer 
rules.
     ///
     /// # Arguments:
-    ///
-    /// * `session_config` - The session configuration for the job.
-    /// * `runtime_env` - runtime environment
+    /// * `state_builder` -  Session state builder,
     /// * `plan` - The physical execution plan for the job.
     /// * `job_name` - The name of the job.
     /// * `physical_optimizer_rules` - A list of physical optimizer rules to 
apply.
@@ -96,17 +94,13 @@ impl AdaptivePlanner {
     /// # Returns
     /// A new instance of `AdaptivePlanner` or an error if the initialization 
fails.
     pub fn try_new_with_optimizers(
-        session_config: &SessionConfig,
-        runtime_env: Arc<RuntimeEnv>,
+        state_builder: SessionStateBuilder,
         plan: Arc<dyn ExecutionPlan>,
         job_name: String,
         physical_optimizer_rules: Vec<PhysicalOptimizerRuleRef>,
     ) -> common::Result<Self> {
-        let session_state = Self::create_session_state(
-            session_config,
-            runtime_env,
-            physical_optimizer_rules,
-        );
+        let session_state =
+            Self::create_session_state(state_builder, 
physical_optimizer_rules);
         let planner = DefaultPhysicalPlanner::default();
         let plan = planner.optimize_physical_plan(plan, &session_state, |_, _| 
{})?;
 
@@ -137,9 +131,10 @@ impl AdaptivePlanner {
         job_name: String,
     ) -> common::Result<Self> {
         let plan_id_generator = Arc::new(AtomicUsize::new(0));
+        let state_builder = SessionStateBuilder::new_with_default_features()
+            .with_config(session_config.clone());
         Self::try_new_with_optimizers(
-            session_config,
-            RuntimeEnv::default().into(),
+            state_builder,
             plan,
             job_name,
             Self::default_optimizers(plan_id_generator),
@@ -166,14 +161,14 @@ impl AdaptivePlanner {
         // running standard set of optimizers, which will
         // after each stage.
         let plan_id_generator = Arc::new(AtomicUsize::new(0));
-        let runtime_env = ctx.runtime_env();
-        let plan_preparation_stage = Self::create_session_state(
-            ctx.state().config(),
-            ctx.runtime_env(),
+
+        let plan_preparation_state_builder = 
SessionStateBuilder::from(ctx.state());
+        let plan_preparation_state = Self::create_session_state(
+            plan_preparation_state_builder,
             Self::plan_preparation_optimizers(plan_id_generator.clone()),
         );
 
-        let plan = plan_preparation_stage
+        let plan = plan_preparation_state
             .create_physical_plan(logical_plan)
             .await?;
 
@@ -184,9 +179,9 @@ impl AdaptivePlanner {
             .await
             .map_err(|e| DataFusionError::Execution(e.to_string()))?;
 
+        let state_builder = SessionStateBuilder::from(ctx.state());
         Self::try_new_with_optimizers(
-            ctx.state().config(),
-            runtime_env,
+            state_builder,
             plan,
             job_name,
             Self::default_optimizers(plan_id_generator),
@@ -551,22 +546,20 @@ impl AdaptivePlanner {
     /// Creates a session state with the given configuration and optimizer 
rules.
     ///
     /// # Arguments
-    /// * `session_config` - The session configuration.
+    /// * `session_builder` - The session builder.
     /// * `physical_optimizers` - A list of physical optimizer rules.
     ///
     /// # Returns
     /// A new `SessionState` instance.
     fn create_session_state(
-        session_config: &SessionConfig,
-        runtime_env: Arc<RuntimeEnv>,
+        builder: SessionStateBuilder,
         physical_optimizers: Vec<PhysicalOptimizerRuleRef>,
     ) -> SessionState {
-        SessionStateBuilder::new_with_default_features()
+        builder
             .with_physical_optimizer_rules(physical_optimizers)
-            .with_config(session_config.clone())
-            .with_runtime_env(runtime_env)
             .build()
     }
+
     /// Recursively finds runnable exchanges in the execution plan.
     ///
     /// # Arguments


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

Reply via email to