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

Andrew Kyle Purtell updated PHOENIX-8046:
-----------------------------------------
    Summary: ALTER INDEX ... CONSISTENCY can desynchronize the metadata cache  
(was: ALTER INDEX ... CONSISTENCY can desynchronize client metadata caches)

> ALTER INDEX ... CONSISTENCY can desynchronize the metadata cache
> ----------------------------------------------------------------
>
>                 Key: PHOENIX-8046
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-8046
>             Project: Phoenix
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 5.3.2
>            Reporter: Andrew Kyle Purtell
>            Assignee: Andrew Kyle Purtell
>            Priority: Major
>             Fix For: 5.4.0, 5.3.3
>
>
> Modifying an index's consistency model via {{ALTER INDEX ... CONSISTENCY}} 
> can silently desynchronize client metadata caches from the underlying schema. 
> A client connection can cache the parent data table without the altered index 
> attached. Subsequent write paths fail to maintain the index, and query 
> planners ignore it. Because the index metadata remains marked as 
> {{{}ACTIVE{}}}, direct reads against it yield missing or stale data.
> Updating consistency modifies only the index header row, leaving the parent 
> table's {{PTable}} and timestamp unchanged. Immediately following the write, 
> the client invalidates its local cache by invoking 
> {{PMetaDataImpl.removeTable}} with the parent table's name and 
> {{{}LATEST_TIMESTAMP{}}}. Rather than dropping the parent entry, the client 
> cache attempts to rebuild the parent definition in place with the index 
> stripped out, preserving the original parent timestamp. Because this 
> timestamp still matches the unmodified server record, subsequent schema 
> resolutions conclude the client's cached parent is current. The client 
> remains pinned to an incomplete table definition. Explicitly resolving the 
> index by name could temporarily reattach it. However, a concurrent lookup of 
> the parent table would overwrite that repair with the earlier incorrect 
> snapshot.
> To guarantee cache coherence, the invalidation model requires two coordinated 
> changes:
>  * *Client Cache Invalidation:* When {{PMetaDataImpl.removeTable}} is invoked 
> with {{{}LATEST_TIMESTAMP{}}}, it must evict the parent table entry entirely. 
> Forcing an eviction ensures the next schema resolution refetches the complete 
> parent definition from the server, preventing stale in-memory snapshots from 
> perpetuating partial states. When an explicit timestamp is supplied, the 
> existing selective removal behavior is preserved.
>  * *Server Cache Coherence:* The ALTER path must proactively purge the parent 
> data table from the server side metadata cache. Because the server caches 
> data tables alongside their associated index descriptors, evicting the parent 
> prevents the server from serving stale descriptors to subsequent client 
> lookups.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to