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

Ilya Shishkov updated IGNITE-25641:
-----------------------------------
    Description: 
{{CacheInterceptor#onBeforePut}} can be invoked twice, and second call occurs 
after committing to external database (i.e. after 
{{CacheStoreSession#onSessionEnd}}). In case of failure in interceptor during 
second invocation we will get inconsistency between external database and 
Ignite cache.

As you can see in attached reproducer 
([^CacheStoreWithInterceptorFailureTest.patch]), second invocation happens on 
origination node, i.e. on transaction coordinator. 
If transaction coordinator is primary, then fail in second invocation on 
primary leads to inconsistency between cache and external storage.

  was:
{{CacheInterceptor#onBeforePut}} can be invoked twice, and second call occurs 
after committing to external database in {{CacheStoreSession#onSessionEnd}}. In 
case of failure in interceptor during second invocation we will get 
inconsistency between external database and Ignite cache.

As you can see in attached reproducer 
([^CacheStoreWithInterceptorFailureTest.patch]), second invocation happens on 
origination node, i.e. on transaction coordinator. 
If transaction coordinator is primary, then fail in second invocation on 
primary leads to inconsistency between cache and external storage.


> Failure in CacheInterceptor#onBeforePut can lead to CacheStore inconsitency
> ---------------------------------------------------------------------------
>
>                 Key: IGNITE-25641
>                 URL: https://issues.apache.org/jira/browse/IGNITE-25641
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Ilya Shishkov
>            Priority: Major
>              Labels: ise
>         Attachments: CacheStoreWithInterceptorFailureTest.patch
>
>
> {{CacheInterceptor#onBeforePut}} can be invoked twice, and second call occurs 
> after committing to external database (i.e. after 
> {{CacheStoreSession#onSessionEnd}}). In case of failure in interceptor during 
> second invocation we will get inconsistency between external database and 
> Ignite cache.
> As you can see in attached reproducer 
> ([^CacheStoreWithInterceptorFailureTest.patch]), second invocation happens on 
> origination node, i.e. on transaction coordinator. 
> If transaction coordinator is primary, then fail in second invocation on 
> primary leads to inconsistency between cache and external storage.



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

Reply via email to