[ 
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)

Reply via email to