[
https://issues.apache.org/jira/browse/BROOKLYN-332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15423159#comment-15423159
]
Sam Corbett commented on BROOKLYN-332:
--------------------------------------
[~andreaturli] do you remember whether it was a localhost location or byon?
> Blocked task holding mutex lives beyond application lifetime and blocks tasks
> in subsequent applications
> --------------------------------------------------------------------------------------------------------
>
> Key: BROOKLYN-332
> URL: https://issues.apache.org/jira/browse/BROOKLYN-332
> Project: Brooklyn
> Issue Type: Bug
> Reporter: Sam Corbett
>
> Andrea deployed a VanillaJavaApp that got stuck starting on a task that was
> never going to complete. The task that was stuck had obtained a mutex on an
> SshMachineLocation in ArchiveUtils.deploy. The application was stopped but
> the task was not stopped and the mutex was never released. This stacktrace is
> from a thread dump after stopping the app:
> {code}
> brooklyn-execmanager-EiOrzrfj-9" #54 daemon prio=5 os_prio=31
> tid=0x00007fa7f191a800 nid=0x8e03 in Object.wait() [0x0000700003151000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait(Native Method)
> at java.lang.Object.wait(Object.java:502)
> at
> org.apache.brooklyn.util.core.task.BasicTask.blockUntilStarted(BasicTask.java:389)
> - locked <0x0000000784e96ac8> (a
> org.apache.brooklyn.util.core.task.BasicTask)
> at
> org.apache.brooklyn.util.core.task.BasicTask.blockUntilStarted(BasicTask.java:378)
> - locked <0x0000000784e96ac8> (a
> org.apache.brooklyn.util.core.task.BasicTask)
> at org.apache.brooklyn.util.core.task.BasicTask.get(BasicTask.java:360)
> at
> org.apache.brooklyn.util.core.task.BasicTask.getUnchecked(BasicTask.java:370)
> at
> org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper.get(ProcessTaskWrapper.java:153)
> at
> org.apache.brooklyn.util.core.file.ArchiveUtils.deploy(ArchiveUtils.java:277)
> at
> org.apache.brooklyn.util.core.file.ArchiveUtils.deploy(ArchiveUtils.java:237)
> at
> org.apache.brooklyn.entity.java.VanillaJavaAppSshDriver.customize(VanillaJavaAppSshDriver.java:99)
> at
> org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessDriver$3$2.run(AbstractSoftwareProcessDriver.java:175)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:359)
> at
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:519)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> {code}
> The app was redeployed to the same location (Andrea to clarify whether it was
> localhost or BYON). ArchiveUtils' attempt to obtain the machine mutex failed
> because the mutex was still owned by the zombie task:
> {code}
> brooklyn-execmanager-EiOrzrfj-0" #45 daemon prio=5 os_prio=31
> tid=0x00007fa7f0fb3800 nid=0x7c03 waiting on condition [0x0000700002835000]
> java.lang.Thread.State: WAITING (parking)
> at sun.misc.Unsafe.park(Native Method)
> - parking to wait for <0x00000007838ff1d8> (a
> java.util.concurrent.Semaphore$FairSync)
> at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
> at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
> at java.util.concurrent.Semaphore.acquire(Semaphore.java:312)
> at
> org.apache.brooklyn.util.core.mutex.SemaphoreWithOwners.acquire(SemaphoreWithOwners.java:51)
> at
> org.apache.brooklyn.util.core.mutex.MutexSupport.acquireMutex(MutexSupport.java:77)
> at
> org.apache.brooklyn.location.ssh.SshMachineLocation.acquireMutex(SshMachineLocation.java:1078)
> at
> org.apache.brooklyn.util.core.file.ArchiveUtils.deploy(ArchiveUtils.java:266)
> at
> org.apache.brooklyn.util.core.file.ArchiveUtils.deploy(ArchiveUtils.java:237)
> at
> org.apache.brooklyn.entity.java.VanillaJavaAppSshDriver.customize(VanillaJavaAppSshDriver.java:99)
> at
> org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessDriver$3$2.run(AbstractSoftwareProcessDriver.java:175)
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
> at
> org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:359)
> at
> org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:519)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> {code}
> This manifested itself as an app that was forever "installing archive" and
> could only really be understood with a thread dump.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)