[ 
https://issues.apache.org/jira/browse/SPARK-59751?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18118497#comment-18118497
 ] 

Serge Rielau commented on SPARK-59751:
--------------------------------------

Needed work from PR 58317 review of {{b8d27c0e}}

The latest comments are non-blocking, but they describe the actual contract 
this JIRA should implement. Do not patch them onto SPARK-58814.

Design (do this first)

Cache reuse, mutation identity, direct-cache origin, and restoration are still 
separate helpers. Make one {{CacheManager}} lifecycle API:
 # A descriptor with resolved direct-cache origin, analyzed plan, bound scan 
mode, and storage level.
 # Route V1, V2, and Hive mutation, refresh, and rename through that API. 
Ordinary cache substitution stays mode-sensitive; mutation ignores only scan 
mode.
 # Restore each variant in isolated session configuration that shares 
{{SharedState}} / {{{}CacheManager{}}}. Do not wrap restoration in caller 
{{{}withSQLConf{}}}.
 # Keep format/reader-mode work on SPARK-58814.

Must-fix from the latest review
 * Isolate rename restoration from caller {{{}SQLConf{}}}. V2 
{{RenameTableExec}} and V1/Hive {{AlterTableRenameCommand}} both use 
{{{}withSQLConf{}}}; concurrent work can observe restoration-only policy.
 * Match direct V2 caches by resolved table identity, not {{CACHE TABLE}} 
display name. Unqualified or namespace-qualified caches can be dropped on 
rename.
 * Bind {{Legacy}} as an explicit policy and preserve it with PreserveNative 
and SparkStandard through recache, refresh, and rename.
 * Exercise actually bound CHAR/VARCHAR columns in the V1 insert and save 
regressions. Current fixtures are {{{}INT{}}}/{{{}STRING{}}} and {{{}LONG{}}}, 
so both config branches stay unbound and a regression to {{recacheByPlan}} 
still passes.

Nits to include while doing the redesign
 * Check the cheap direct-cache predicate before walking the plan.
 * Bind scan mode inside the existing padding traversal when padding runs; keep 
a standalone walk only when padding is skipped.
 * Correct {{lookupCacheDescriptorsByV2Relation}} Scaladoc: default 
{{directNamedCacheOnly = false}} also returns dependent plans.

> Preserve CHAR/VARCHAR scan policy across cache mutation, refresh, and rename
> ----------------------------------------------------------------------------
>
>                 Key: SPARK-59751
>                 URL: https://issues.apache.org/jira/browse/SPARK-59751
>             Project: Spark
>          Issue Type: Sub-task
>          Components: Spark Core
>    Affects Versions: 5.0.0
>            Reporter: Serge Rielau
>            Priority: Major
>
> First-class CHAR/VARCHAR under SPARK-58794 binds an analyzed scan mode 
> ({{{}PreserveNative{}}} / {{{}SparkStandard{}}}) onto relation identity so 
> incompatible scans cannot reuse each other's cached results. SPARK-58814 / PR 
> 58317 covers format round-trips and ORC truncation, plus the cache-lifecycle 
> repairs that were required to keep that identity from serving stale rows on 
> the paths already in that PR.
> This follow-up is the remaining cache-policy contract. Today {{None}} still 
> means "unbound / not first-class". A cache created with first-class flags off 
> can be rebound when a later session with first-class modes recaches or 
> renames the table. V1 and Hive rename still snapshot one cache entry, so 
> coexisting PreserveNative and SparkStandard variants can lose a mode or 
> storage level. Hive refresh coexistence and a simultaneous three-policy 
> mutation matrix are also not complete.
> Scope:
>  * Represent the pre-first-class policy as an explicit bound state (or 
> equivalent), distinct from unbound.
>  * Preserve that policy, plus PreserveNative and SparkStandard, through 
> recache, refreshTable, and rename for V1, V2, and Hive.
>  * Keep ordinary cache substitution mode-sensitive; ignore scan mode only for 
> mutation/rename discovery.
>  * Restore only direct table caches (including analyzer CHAR/VARCHAR padding 
> Projects); do not promote dependent-query or time-travel caches.
>  * Reproduce with coexisting variants in one SharedState, including a 
> mutation/rename from a session using a different policy.
>  



--
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