[ 
https://issues.apache.org/jira/browse/SPARK-59764?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Max Gekk resolved SPARK-59764.
------------------------------
    Fix Version/s: 4.4.0
       Resolution: Fixed

Issue resolved by pull request 59017
[https://github.com/apache/spark/pull/59017]

> BenchmarkQueryTest.checkGeneratedCode checks nothing under adaptive query 
> execution
> -----------------------------------------------------------------------------------
>
>                 Key: SPARK-59764
>                 URL: https://issues.apache.org/jira/browse/SPARK-59764
>             Project: Spark
>          Issue Type: Test
>          Components: SQL
>    Affects Versions: 3.2.0, 4.1.0, 4.0.0, 4.2.0, 4.3.0, 5.0.0
>            Reporter: Max Gekk
>            Assignee: Max Gekk
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 4.4.0
>
>
> {{BenchmarkQueryTest.checkGeneratedCode}} is meant to check that every 
> whole-stage codegen subtree of a benchmark query compiles and that its 
> largest generated method is within 
> {{CodeGenerator.DEFAULT_JVM_HUGE_METHOD_LIMIT}} (8000 bytes, HotSpot's 
> {{HugeMethodLimit}}). {{TPCDSQuerySuite}} (and {{TPCDSQueryWithStatsSuite}}, 
> {{TPCDSQueryANSISuite}}), {{TPCHQuerySuite}} and {{SSBQuerySuite}} call it on 
> {{sql(query).queryExecution.executedPlan}}.
> Since adaptive query execution became the default (SPARK-33679, 3.2.0), that 
> plan is an {{AdaptiveSparkPlanExec}}, a leaf node whose query stages, and so 
> its {{WholeStageCodegenExec}} nodes, are created only when the query runs. 
> The suites never run the queries, so the {{plan foreach}} walk in 
> {{checkGeneratedCode}} finds no {{WholeStageCodegenExec}} and the method 
> returns without compiling or checking anything. The tests pass vacuously.
> Evidence: walking the same way as {{checkGeneratedCode}} (the plan plus its 
> subqueries) over all TPC-DS v1.4 (103), v2.7 (32) and modified (21) queries 
> and all 22 TPC-H queries finds 0 whole-stage stages with 
> {{spark.sql.adaptive.enabled=true}}. With 
> {{spark.sql.adaptive.enabled=false}} the same walk finds about 1,700 TPC-DS 
> stages (without injected statistics) and 126 TPC-H stages, and exactly one of 
> them is past 8000 bytes: {{modified-q3}}'s stage (12214 bytes; 12167 with 
> injected statistics), which the suite already excludes as SPARK-29128.
> Two consequences:
> * The "can be properly compiled" check and the method size check have not run 
> since 3.2.0, so a codegen regression in these queries would not be caught 
> here.
> * The workarounds in {{TPCDSQuerySuite}} guard an assertion that does not 
> run. {{spark.sql.readSideCharPadding=false}} ("so that the generated code is 
> less than 8000") is not needed with AQE off either: padding changes the 
> largest method of some queries by at most about 500 bytes, and none crosses 
> 8000.
> Proposed fix: set {{spark.sql.adaptive.enabled=false}} in 
> {{BenchmarkQueryTest}}'s {{sparkConf}}, since these suites only compile 
> plans, and assert that at least one {{WholeStageCodegenExec}} was found, so 
> the check cannot become vacuous again. Keep the {{modified-q3}} exclusion, 
> and consider dropping the char padding override.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to