Dmitry Werner created IGNITE-29232:
--------------------------------------

             Summary: Continuous query backup acknowledgement is sent to a 
single node only when it covers several topology versions
                 Key: IGNITE-29232
                 URL: https://issues.apache.org/jira/browse/IGNITE-29232
             Project: Ignite
          Issue Type: Bug
            Reporter: Dmitry Werner
            Assignee: Dmitry Werner


CacheContinuousQueryHandler#sendBackupAcknowledge makes sure the same ack goes 
to each node only once when the acknowledged entries span more than one 
topology version. For that dedup, it adds the handler's nodeId field to 
sentToNodes instead of node.id(). nodeId is the ID of the node that started the 
routine:

if (sentToNodes != null && !sentToNodes.add(nodeId))
    continue;

The first add succeeds and every later one fails. As a result, an ack covering 
several topology versions reaches only the first remote affinity node, and the 
other nodes never receive it.

Consequences: on the backup nodes that miss the ack, the continuous query 
backup queue (CacheContinuousQueryEventBuffer#backupQ) is not cleaned. The 
entries stay in memory until a later ack with higher counters arrives for the 
same partitions, or until the next exchange flushes the queue. If no further 
updates arrive, they stay indefinitely. This happens whenever a topology change 
(for example, a node join) occurs while acks are being accumulated.

Fix: use node.id() for the dedup.



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

Reply via email to