Huilin Shi created KAFKA-14225:
----------------------------------
Summary: lazy val exemptSensor Could Cause Deadlock
Key: KAFKA-14225
URL: https://issues.apache.org/jira/browse/KAFKA-14225
Project: Kafka
Issue Type: Bug
Components: core
Affects Versions: 2.5.1
Reporter: Huilin Shi
There is a chance to cause deadlock when multiple threads access
ClientRequestQuotaManager. In the version of 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. 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.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)