hshi2022 opened a new pull request, #12634:
URL: https://github.com/apache/kafka/pull/12634

   …ntRequestQuotaManager. In the version Scala 2.12, the lazy val 
initialization is under the object lock. The deadlock could happen in the 
following condition:
   
   In thread a, when ClientRequestQuotaManager.exemptSensor is being 
initialized, it has acquired the object lock and enters the the actual 
initialization block. The initialization of 'exemptSensor' requires another 
lock private val lock = new ReentrantReadWriteLock() and it is waiting for this 
lock.
   
   In thread b, at the same time, ClientQuotaManager.updateQuota() is called 
and it has already acquired ReentrantReadWriteLock lock by calling 
lock.writeLock().lock(). And then it executes info(). If this is the first time 
accessing Logging.logger, which is also a lazy val, it need to wait for the 
object lock.
   
   The deadlock happens.
   
   Since the lazy val initialization is under the object lock, we should avoid 
using lazy val if the initialization function holds another lock to prevent 
holding two locks at the same time which is prone for deadlock. Change to 
create exemptSensor during ClientRequestQuotaManager initialization with an 
expiration time of Long.MaxValue to prevent expiration if request quota is not 
enabled at that time.
   
   *More detailed description of your change,
   if necessary. The PR title and PR message become
   the squashed commit message, so use a separate
   comment to ping reviewers.*
   
   *Summary of testing strategy (including rationale)
   for the feature or bug fix. Unit and/or integration
   tests are expected for any behaviour change and
   system tests should be considered for larger changes.*
   
   ### Committer Checklist (excluded from commit message)
   - [ ] Verify design and implementation 
   - [ ] Verify test coverage and CI build status
   - [ ] Verify documentation (including upgrade notes)
   


-- 
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: jira-unsubscr...@kafka.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to