Skip to content

[VL] Native validation fails when Spark session timezone is GMT #11862

@malinjawi

Description

@malinjawi

Backend

VL (Velox)

Bug description

Expected behavior:

Spark 3.5 queries on Gluten main should be able to use the Velox backend even when the effective Spark session timezone is GMT. Gluten should either pass a native-compatible timezone string to Velox or normalize the Spark value before native validation.

Actual behavior:

Gluten forwards the effective Spark session timezone into native query config. When that value is GMT, native validation fails before execution starts:

Exception: VeloxUserError
Error Source: USER
Error Code: INVALID_ARGUMENT
Reason: session 'session_timezone' set with invalid value 'GMT'
Expression: tz::getTimeZoneID(*tz, false) != -1
Function: validateConfig
File: .../ep/build-velox/build/velox_ep/velox/core/QueryConfig.cpp
Line: 44

As a result, the query never reaches the actual Delta/Iceberg/Velox execution path. Native offload is rejected at validation time because of the session timezone value alone.

This was reproduced on a clean detached worktree without the local timezone normalization patch, after a fresh native rebuild using Gluten's pinned Velox dependency. The failure is not Delta-only; it also reproduces in a non-Delta Velox suite, which indicates this is a general Spark-to-native integration bug in the Velox backend path rather than a Delta-specific semantic issue.

Reproduction summary:

  1. Create a clean detached worktree at f350a440dbfa3a3412f0aed48a89fdac0b16ad48.

  2. Rebuild native dependencies from the clean checkout:

    ./dev/builddeps-veloxbe.sh --run_setup_script=OFF --build_arrow=OFF --build_tests=ON --spark_version=3.5
  3. Run the backend tests from the same clean checkout:

    ./build/mvn \
      -s /path/to/dev/maven-public-settings.xml \
      -Dmaven.repo.local=/path/to/.run-scala-test-cache/m2 \
      -pl backends-velox \
      -am \
      -Pbackends-velox,delta,iceberg,spark-3.5 \
      -Dtest=OptimizedWritesSuite \
      -Dsurefire.failIfNoSpecifiedTests=false \
      test

Observed failures include:

  • org.apache.spark.sql.delta.DeltaColumnDefaultsInsertSuite
  • org.apache.gluten.execution.VeloxDeltaSuite
  • org.apache.gluten.execution.VeloxTPCHMiscSuite

Example clean repro reports:

  • backends-velox/target/surefire-reports/TEST-org.apache.spark.sql.delta.DeltaColumnDefaultsInsertSuite.xml
  • backends-velox/target/surefire-reports/TEST-org.apache.gluten.execution.VeloxDeltaSuite.xml
  • backends-velox/target/surefire-reports/TEST-org.apache.gluten.execution.VeloxTPCHMiscSuite.xml

Why this matters:

  • It blocks native validation before query execution.
  • It prevents meaningful verification of Delta/Iceberg behavior because suites fail on config setup first.
  • It hides deeper runtime issues behind a config gate.
  • It affects the current clean main build path.

Why this appears to be a Gluten-side issue:

  • Spark 3.5 can accept and surface GMT-family timezone IDs as an effective session timezone.
  • Gluten forwards that session timezone into native config.
  • The current clean Gluten product path fails before execution on that value.
  • The practical compatibility boundary between Spark session config and native Velox config is in Gluten.

Candidate fix:

Normalize Spark GMT / GMT+/-offset session timezone values to native-safe UTC forms at the Gluten/native boundary before native validation.

Gluten version

main branch

Spark version

Spark-3.5.x

Spark configurations

No explicit spark.sql.session.timeZone override was set in the reproducer.

The effective session timezone seen by native validation was GMT.

System information

./dev/info.sh: line 47: lscpu: command not found

Gluten Version: 1.7.0-SNAPSHOT
Commit: f350a440dbfa3a3412f0aed48a89fdac0b16ad48
CMake Version: 4.2.3
System: Darwin-25.3.0
Arch: arm64
CPU Name: 
C++ Compiler: /usr/bin/c++
C++ Compiler Version: 17.0.0.17000013
17.0.0.17000013
C Compiler: /usr/bin/cc
C Compiler Version: 17.0.0.17000013
17.0.0.17000013
CMake Prefix Path: /Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr;/opt/homebrew;/usr/local;/usr;/;/opt/homebrew;/usr/local;/usr/X11R6;/usr/pkg;/opt;/sw;/opt/local


### Relevant logs

```bash
Exception: VeloxUserError
Error Source: USER
Error Code: INVALID_ARGUMENT
Reason: session 'session_timezone' set with invalid value 'GMT'
Retriable: False
Expression: tz::getTimeZoneID(*tz, false) != -1
Function: validateConfig
File: /Users/malinjawi/Documents/GitHub/GlutenVelox/incubator-gluten-verify-clean/ep/build-velox/build/velox_ep/velox/core/QueryConfig.cpp
Line: 44
```

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingtriage

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions