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

Semen Boikov edited comment on IGNITE-426 at 8/14/15 3:06 PM:
--------------------------------------------------------------

Found following problems working on this issue:
1. In tx cache it is not possible to use per-partition udpate counter since 
partition can be update concurrently, one solution is to send counter values in 
tx update messages.
2. In atomic cache obsevered following scenario:
- backup is preloading some partition
- primary updates value, sends message to backup
- backup receives message, does force key request, preloads already updated 
entry from primary, during update on backup version check does not pass and 
update on backup is ignored. As result backup queue and partition update 
counter are not updated. 

It is possible to detect this situation and increment update counter, but in 
this case old value is also required on backup. One solution is to check if 
backup is preloading partition and in this case send old value to backup in 
update request, also in this case it is not possible to use CLOCK mode since 
node initiating update does not have old value.


was (Author: sboikov):
Found following problems working on this issue:
1. In tx cache it is not possible to use per-partition udpate counter since 
partition can be update concurrently, one solution is to send counter values in 
tx update messages.
2. In atomic cache obsevered following scenario:
- backup is preloading some partition
- primary updates value, sends message to backup
- backup receives message, does force key request, preloads already updated 
entry from primary, during update on backup version check does not pass and 
update on backup is ignored. As result backup queue and partition update 
counter are not updated. It is possible to detect this situation and increment 
update counter, but in this case old value is also required on backup. One 
solution is to check if backup is preloading partition and in this case send 
old value to backup in update request, also in this case it is not possible to 
use CLOCK mode since node initiating update does not have old value.

> Make sure continuous queries notifications are not missed in case primary 
> node fails
> ------------------------------------------------------------------------------------
>
>                 Key: IGNITE-426
>                 URL: https://issues.apache.org/jira/browse/IGNITE-426
>             Project: Ignite
>          Issue Type: Sub-task
>          Components: cache
>            Reporter: Yakov Zhdanov
>            Assignee: Semen Boikov
>            Priority: Critical
>             Fix For: ignite-1.4
>
>
> * Maintain updates queue on backup node(s) in addition to primary node.
> * If primary node crushes, this queue is flushed to listening clients.
> * To avoid notification duplicates we will have a per-partition update 
> counter. Once an entry in some partition is updated, counter for this 
> partition is incremented on both primary and backups. The value of this 
> counter is also sent along with the update to the client, which also 
> maintains the copy of this mapping. If at some moment it receives an update 
> with the counter less than in its local map, this update is a duplicate and 
> can be discarded.
> * To cleanup the backup queue we will use communication acks. When batch 
> receival is acked by the client, we will send special ack message to backup 
> nodes that will remove items that are not longer needed. This message has to 
> contain partition to latest update counter map.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to