Olaf created KAFKA-12296:
----------------------------

             Summary: MockProducer behaves contrary to documentation of Callback
                 Key: KAFKA-12296
                 URL: https://issues.apache.org/jira/browse/KAFKA-12296
             Project: Kafka
          Issue Type: Bug
          Components: producer , unit tests
    Affects Versions: 2.7.0
            Reporter: Olaf


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 lead to a very subtle bug: 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