artemlivshits commented on code in PR #14629:
URL: https://github.com/apache/kafka/pull/14629#discussion_r1375078778


##########
core/src/main/scala/kafka/server/KafkaRequestHandler.scala:
##########
@@ -53,25 +53,27 @@ object KafkaRequestHandler {
    * Wrap callback to schedule it on a request thread.
    * NOTE: this function must be called on a request thread.
    * @param fun Callback function to execute
+   * @param requestLocal The RequestLocal for the current request handler 
thread in case we need to call
+   *                     the callback function without queueing the callback 
request
    * @return Wrapped callback that would execute `fun` on a request thread
    */
-  def wrap[T](fun: T => Unit): T => Unit = {
+  def wrap[T](fun: (RequestLocal, T) => Unit, requestLocal: RequestLocal): T 
=> Unit = {
     val requestChannel = threadRequestChannel.get()
     val currentRequest = threadCurrentRequest.get()
     if (requestChannel == null || currentRequest == null) {
       if (!bypassThreadCheck)
         throw new IllegalStateException("Attempted to reschedule to request 
handler thread from non-request handler thread.")
-      T => fun(T)
+      T => fun(requestLocal, T)
     } else {
       T => {
-        if (threadCurrentRequest.get() != null) {
-          // If the callback is actually executed on a request thread, we can 
directly execute
+        if (threadCurrentRequest.get() == currentRequest) {

Review Comment:
   Yeah, the hope is that we'd see more async patterns as we evolve Kafka, and 
the way it's currently implemented, we just say "execute callback on the 
_current_ thread pool", which is why the thread local is used -- this way we 
can implement a non-blocking wait-and-continue-on-current-thread-pool from any 
level without passing additional arguments through the whole stack.  The same 
functionality could be implemented on other thread pools, e.g. if the group 
coordinator has its own thread pool, we could implement the same primitive 
there as well.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to