[ 
https://issues.apache.org/jira/browse/KAFKA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13967958#comment-13967958
 ] 

Jun Rao commented on KAFKA-1391:
--------------------------------

KAFKA-1363 doesn't quite fix the hanging issue when shutting down 
deleteTopicsThread.  This thread does the following. During the shutdown, if 
the shutdown logic will first unblock awaitTopicDeletionNotification() and then 
mark isRunning as false. However, if the marking happens after the checking of 
isRunning in the deleteTopicsThread, it will block forever. 

    override def doWork() {
      awaitTopicDeletionNotification()

      if(!isRunning.get)
        return

      inLock(controllerContext.controllerLock) {


> transient unit test failure in 
> DeleteTopicTest.testPreferredReplicaElectionDuringDeleteTopic
> --------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-1391
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1391
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 0.8.2
>            Reporter: Jun Rao
>
> The test hang due to the following deadlock.
> "Test worker" prio=5 tid=7fd40c0b2800 nid=0x114ebd000 waiting on condition 
> [114eb9000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <7f40b2aa0> (a 
> java.util.concurrent.CountDownLatch$Sync)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
>         at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:207)
>         at 
> kafka.utils.ShutdownableThread.shutdown(ShutdownableThread.scala:36)
>         at 
> kafka.controller.TopicDeletionManager.shutdown(TopicDeletionManager.scala:105)
>         at 
> kafka.controller.KafkaController$$anonfun$onControllerResignation$1.apply$mcV$sp(KafkaController.scala:344)
>         at 
> kafka.controller.KafkaController$$anonfun$onControllerResignation$1.apply(KafkaController.scala:340)
>         at 
> kafka.controller.KafkaController$$anonfun$onControllerResignation$1.apply(KafkaController.scala:340)
>         at kafka.utils.Utils$.inLock(Utils.scala:537)
>         at 
> kafka.controller.KafkaController.onControllerResignation(KafkaController.scala:340)
>         at 
> kafka.controller.KafkaController$$anonfun$shutdown$1.apply$mcV$sp(KafkaController.scala:647)
>         at 
> kafka.controller.KafkaController$$anonfun$shutdown$1.apply(KafkaController.scala:645)
>         at 
> kafka.controller.KafkaController$$anonfun$shutdown$1.apply(KafkaController.scala:645)
>         at kafka.utils.Utils$.inLock(Utils.scala:537)
>         at 
> kafka.controller.KafkaController.shutdown(KafkaController.scala:645)
>         at 
> kafka.server.KafkaServer$$anonfun$shutdown$9.apply$mcV$sp(KafkaServer.scala:242)
>         at kafka.utils.Utils$.swallow(Utils.scala:166)
>         at kafka.utils.Logging$class.swallowWarn(Logging.scala:92)
>         at kafka.utils.Utils$.swallowWarn(Utils.scala:45)
>         at kafka.utils.Logging$class.swallow(Logging.scala:94)
>         at kafka.utils.Utils$.swallow(Utils.scala:45)
>         at kafka.server.KafkaServer.shutdown(KafkaServer.scala:242)
>         at 
> kafka.admin.DeleteTopicTest.testPreferredReplicaElectionDuringDeleteTopic(DeleteTopicTest.scala:163)
> "delete-topics-thread" prio=5 tid=7fd409ad2000 nid=0x11b0c2000 waiting on 
> condition [11b0c1000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <7f40a7048> (a 
> java.util.concurrent.locks.ReentrantLock$NonfairSync)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:842)
>         at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1178)
>         at 
> java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
>         at 
> java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
>         at kafka.utils.Utils$.inLock(Utils.scala:535)
>         at 
> kafka.controller.TopicDeletionManager$DeleteTopicsThread.doWork(TopicDeletionManager.scala:376)
>         at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:51)



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to