[
https://issues.apache.org/jira/browse/KAFKA-12297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Manikumar resolved KAFKA-12297.
-------------------------------
Fix Version/s: 3.0.0
Reviewer: Manikumar
Resolution: Fixed
> Implementation of MockProducer contradicts documentation of Callback for
> async send
> -----------------------------------------------------------------------------------
>
> Key: KAFKA-12297
> URL: https://issues.apache.org/jira/browse/KAFKA-12297
> Project: Kafka
> Issue Type: Bug
> Components: producer , unit tests
> Affects Versions: 2.7.0
> Reporter: Olaf Gottschalk
> Priority: Major
> Fix For: 3.0.0
>
>
> In Unit tests, a MockProducer is used to imitate a real producer.
> Using the errorNext(RuntimeException e) method, it is possible to indicate
> failures.
> BUT: the asynchronous send method with a callback has a clear documentation
> of that callback interface, stating that Metadata will always be set, and
> never null.
> {{The metadata for the record that was sent (i.e. the partition and offset).
> An empty metadata with -1 value for all fields except for topicPartition will
> be returned if an error occurred.}}
>
> The bug is, that in MockProducer's Completion implementation the following
> happens:
> {{if (e == null)}}
> {{ callback.onCompletion(metadata, null);}}
> {{else}}
> {{ callback.onCompletion(null, e);}}
>
> Behaving against the own documentation leads to very subtle bugs: tests that
> implement the error condition checking metadata != null will be fine, but in
> real life fail horribly.
>
> A MockProducer should at all times behave exactly like the real thing and
> adhere to the documentation of the Callback!
--
This message was sent by Atlassian Jira
(v8.3.4#803005)