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)