[ 
https://issues.apache.org/jira/browse/KAFKA-17696?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lianet Magrans resolved KAFKA-17696.
------------------------------------
    Resolution: Fixed

> New consumer background operations unaware of metadata errors
> -------------------------------------------------------------
>
>                 Key: KAFKA-17696
>                 URL: https://issues.apache.org/jira/browse/KAFKA-17696
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients, consumer
>            Reporter: Lianet Magrans
>            Assignee: 黃竣陽
>            Priority: Blocker
>              Labels: consumer-threading-refactor, kip-848-client-support
>             Fix For: 4.0.0
>
>
> When a metadata error happens (ie. Unauthorized topic), the network layer is 
> the one to detect it and it just propagates it to the app thread via en 
> ErrorEvent.
> [https://github.com/apache/kafka/blob/0edf5dbd204df9eb62bfea1b56993e95737df5a3/clients/src/main/java/org/apache/kafka/clients/consumer/internals/NetworkClientDelegate.java#L153]
> That allows api calls that processBackgroundEvents to throw the error in the 
> app thread (ex. poll, unsubscribe and close, which are the only api calls 
> that currently processBackgroundEvents).
> This means that all other api calls that do not processBackgroundEvent will 
> never know about errors like Unauthorized topics. Moreover, it really means 
> that the background operations are not notified/aborted when a metadata error 
> happens (auth error). Ex. a call to position that blocks waiting for the 
> updateFetchPositions 
> ([here|https://github.com/apache/kafka/blob/0edf5dbd204df9eb62bfea1b56993e95737df5a3/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java#L1586]),
>  will leave a
> pendingOffsetFetchEvent waiting to complete, even when the background already 
> got an Unauthorized exception (but it only passes it to the app thread via 
> ErrorEvent)
> I wonder if we should ensure that metadata errors are not only propagated to 
> the app thread via ErrorEvents, but also ensure that we notify all request 
> managers in the background (so that they can decide if completeExceptionally 
> their outstanding events). Ex. OffsetsRequestManager.onMetadataError should 
> completeExceptionally the pendingOffsetFetchEvent (just first thought, there 
> could be other approaches, but note that calling processBackgroundEvent in 
> api calls like positions will not do because we would block first on the 
> CheckAndUpdatePositions, then processBackgroundEvents that would only happen 
> after the CheckAndUpdate)
>  
> This behaviour can be repro with the integration test 
> AuthorizerIntegrationTest.testOffsetFetchWithNoAccess with the new consumer 
> enabled (discovered with [https://github.com/apache/kafka/pull/17107] )
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to