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

Stanislav Kozlovski updated KAFKA-15767:
----------------------------------------
    Fix Version/s: 3.8.0
                       (was: 3.7.0)

> Redesign TransactionManager to avoid use of ThreadLocal
> -------------------------------------------------------
>
>                 Key: KAFKA-15767
>                 URL: https://issues.apache.org/jira/browse/KAFKA-15767
>             Project: Kafka
>          Issue Type: Improvement
>          Components: clients, producer 
>    Affects Versions: 3.6.0
>            Reporter: Kirk True
>            Assignee: Kirk True
>            Priority: Minor
>             Fix For: 3.8.0
>
>
> A {{TransactionManager}} instance is created by the {{KafkaProducer}} and 
> shared with the {{Sender}} thread. The {{TransactionManager}} has internal 
> states through which it transitions as part of its initialization, 
> transaction management, shutdown, etc. It contains logic to ensure that those 
> state transitions are valid, such that when an invalid transition is 
> attempted, it is handled appropriately. 
> The issue is, the definition of "handled appropriately" depends on which 
> thread is making the API call that is attempting an invalid transition. The 
> application thread expects that the invalid transition will generate an 
> exception. However, the sender thread expects that the invalid transition 
> will "poison" the entire {{TransactionManager}} instance.
> So as part of the implementation of KAFKA-14831, we needed a way to change 
> logic in the {{TransactionManager}} on a per-thread basis, so a 
> {{ThreadLocal}} instance variable was added to the {{TransactionManager}} to 
> keep track of this. However, the use of ThreadLocal instance variables is 
> generally discouraged because of their tendency for memory leaks, shared 
> state across multiple threads, and not working with virtual threads.
> The initial implementation attempt of KAFKA-14831 used a context object, 
> passed in to each method, to affect the logic. However, the number of methods 
> that needed to be changed to accept this new context object grew until most 
> of the methods in {{TransactionManager}} needed to be updated. Thus all the 
> affected call sites needed to be updated, resulting in a much larger change 
> than anticipated.
> The task here is to remove the use of the {{ThreadLocal}} instance variable, 
> let the application thread and {{Sender}} thread keep their desired behavior, 
> but keep the change to a minimum.



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

Reply via email to