[
https://issues.apache.org/jira/browse/CAMEL-26711?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26711 started by shashank.
----------------------------------------
> camel-kafka - KafkaIdempotentRepository: the rollback of a failed add also
> removes the same key added by a peer
> ---------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26711
> URL: https://issues.apache.org/jira/browse/CAMEL-26711
> Project: Camel
> Issue Type: Bug
> Components: camel-kafka
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> Since CAMEL-23996, {{KafkaIdempotentRepository.add}} puts the key in the
> local cache ({{putIfAbsent(key, key)}}), sends the add record synchronously,
> and when the send fails rolls the cache back with {{cache.remove(key, key)}}.
> The poller thread applies the records of the other instances with
> {{cache.put(messageId, messageId)}}. When it applies the add of the same key
> by a peer while the send of this instance is in flight, and the send then
> fails, the rollback cannot tell the two apart (both values are the key) and
> removes the key of the peer too. The local cache then misses a key that a
> peer added and processed, so the next copy of the message is processed again
> on this instance.
> Sequence (two instances A and B, same topic):
> # A: {{add("k")}} puts {{k}} and sends {{add k}}; the send waits for the
> broker.
> # B processes the same message id; A's poller applies B's {{add k}} ({{k ->
> k}}).
> # A's send fails: {{cache.remove("k", "k")}} removes it.
> # A: {{contains("k")}} is false, and the next copy of {{k}} is processed as
> new.
> The rollback of CAMEL-23996 was meant to undo only the add of the failed
> call. {{KafkaKeyValueRepository.putIfAbsent}} already does so
> ({{cache.remove(key, newEntry)}}).
> Expected: the rollback removes only the value put by the failed call, and a
> key added by a peer in the meantime stays.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)