You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/12/16 10:00:00 UTC

[jira] [Commented] (BROOKLYN-570) Brooklyn hangs with custom java entity synchronizing on self

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

ASF GitHub Bot commented on BROOKLYN-570:
-----------------------------------------

GitHub user aledsage opened a pull request:

    https://github.com/apache/brooklyn-server/pull/917

    BROOKLYN-570: fix entity synchronizing on self

    Fixes https://issues.apache.org/jira/browse/BROOKLYN-570

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/aledsage/brooklyn-server BROOKLYN-570-fix-synchronizedOnEntity

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/brooklyn-server/pull/917.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #917
    
----
commit 704ad5e8ad729f5a35c29d7eb29009cd7fb09bc4
Author: Aled Sage <al...@gmail.com>
Date:   2017-12-16T09:58:13Z

    BROOKLYN-570: fix entity synchronizing on self

----


> Brooklyn hangs with custom java entity synchronizing on self
> ------------------------------------------------------------
>
>                 Key: BROOKLYN-570
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-570
>             Project: Brooklyn
>          Issue Type: Bug
>            Reporter: Aled Sage
>
> If you have a custom Java entity your start method calls a {{synchronized}} method (synchronizing on {{this}}), in which it tries to resolve DSL then it can hang.
> See snippets from {{jstack}} below:
> {noformat}
> "brooklyn-execmanager-sUNO5Yoi-102918" #220491 daemon prio=5 os_prio=31 tid=0x00007faf342f7800 nid=0x2967b waiting for monitor entry [0x000070000ef04000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at org.apache.brooklyn.core.entity.AbstractEntity.setApplication(AbstractEntity.java:753)
>         - waiting to lock <0x0000000797da2ad8> (a com.acme.MyEntityImpl)
>         at org.apache.brooklyn.core.entity.AbstractEntity.getApplication(AbstractEntity.java:744)
>         at org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent$EntityInScopeFinder.callImpl(DslComponent.java:257)
>         at org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent$EntityInScopeFinder.call(DslComponent.java:225)
>         at org.apache.brooklyn.camp.brooklyn.spi.dsl.methods.DslComponent$EntityInScopeFinder.call(DslComponent.java:192)
>         at org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:364)
>         at org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:565)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>         at java.lang.Thread.run(Thread.java:748)
> "brooklyn-execmanager-sUNO5Yoi-102898" #220470 daemon prio=5 os_prio=31 tid=0x00007faf390a8800 nid=0x23477 waiting on condition [0x00007000040ff000]
>    java.lang.Thread.State: WAITING (parking)
>         at sun.misc.Unsafe.park(Native Method)
>         - parking to wait for  <0x00000007984a3ff0> (a java.util.concurrent.FutureTask)
>         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
>         at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
>         at java.util.concurrent.FutureTask.get(FutureTask.java:191)
>         at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:63)
>         at org.apache.brooklyn.util.core.task.BasicTask.get(BasicTask.java:384)
>         at org.apache.brooklyn.util.time.Durations.get(Durations.java:43)
>         at org.apache.brooklyn.util.time.Durations.get(Durations.java:68)
>         at org.apache.brooklyn.util.core.task.ValueResolver.getMaybeInternal(ValueResolver.java:499)
>         at org.apache.brooklyn.util.core.task.ValueResolver.getMaybe(ValueResolver.java:324)
>         at org.apache.brooklyn.util.core.task.ValueResolver.get(ValueResolver.java:317)
>         at org.apache.brooklyn.util.core.task.Tasks.resolveValue(Tasks.java:159)
>         at org.apache.brooklyn.core.config.BasicConfigKey.resolveValue(BasicConfigKey.java:447)
>         at org.apache.brooklyn.core.config.BasicConfigKey.extractValue(BasicConfigKey.java:432)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl.resolveRawValueFromContainerIgnoringDeprecatedNames(AbstractConfigMapImpl.java:352)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl.resolveRawValueFromContainer(AbstractConfigMapImpl.java:324)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl$3.apply(AbstractConfigMapImpl.java:433)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl$3.apply(AbstractConfigMapImpl.java:429)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl.getConfigImpl(AbstractConfigMapImpl.java:446)
>         at org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl.getConfig(AbstractConfigMapImpl.java:113)
>         at org.apache.brooklyn.core.objs.AbstractConfigurationSupportInternal.get(AbstractConfigurationSupportInternal.java:161)
>         at io.com.acme.MyEntityImpl.getTarget(MyEntityImpl.java:106)
>         at com.acme.MyEntityImpl.setupSubscriptions(MyEntityImpl.java:77)
>         - locked <0x0000000797da2ad8> (a com.acme.MyEntityImpl)
>         at com.acme.MyEntityImpl.doStart(MyEntityImpl.java:66)
>         at com.acme.AbstractMyEntityImpl.start(AbstractMyEntityImpl.java:63)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at org.apache.brooklyn.util.javalang.Reflections.invokeMethodFromArgs(Reflections.java:984)
>         at org.apache.brooklyn.util.javalang.Reflections.invokeMethodFromArgs(Reflections.java:871)
>         at org.apache.brooklyn.util.javalang.Reflections.invokeMethodFromArgs(Reflections.java:857)
>         at org.apache.brooklyn.util.javalang.Reflections.invokeMethodFromArgs(Reflections.java:852)
>         at org.apache.brooklyn.core.mgmt.internal.AbstractManagementContext.invokeEffectorMethodLocal(AbstractManagementContext.java:327)
>         at org.apache.brooklyn.core.mgmt.internal.AbstractManagementContext.invokeEffectorMethodSync(AbstractManagementContext.java:366)
>         at org.apache.brooklyn.core.mgmt.internal.EffectorUtils.invokeMethodEffector(EffectorUtils.java:274)
>         at org.apache.brooklyn.core.effector.MethodEffector.call(MethodEffector.java:153)
>         at org.apache.brooklyn.core.entity.trait.Startable$StartEffectorBody.call(Startable.java:56)
>         at org.apache.brooklyn.core.entity.trait.Startable$StartEffectorBody.call(Startable.java:50)
>         at org.apache.brooklyn.core.effector.EffectorTasks$EffectorBodyTaskFactory$1.call(EffectorTasks.java:82)
>         at org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:364)
>         at org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:565)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>         at java.lang.Thread.run(Thread.java:748)
> "qtp507126053-220337" #220337 prio=5 os_prio=31 tid=0x00007faf306da800 nid=0xbde3 waiting for monitor entry [0x000070000cc9d000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at org.apache.brooklyn.core.entity.AbstractEntity.setApplication(AbstractEntity.java:753)
>         - waiting to lock <0x0000000797da2ad8> (a com.acme.MyEntityImpl)
>         at org.apache.brooklyn.core.entity.AbstractEntity.getApplication(AbstractEntity.java:744)
>         at org.apache.brooklyn.core.entity.AbstractEntity.getApplicationId(AbstractEntity.java:763)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at org.apache.brooklyn.core.objs.proxy.EntityProxyImpl.invoke(EntityProxyImpl.java:189)
>         at com.sun.proxy.$Proxy246.getApplicationId(Unknown Source)
>         at org.apache.brooklyn.rest.resources.ApplicationResource.fromEntity(ApplicationResource.java:147)
>         at org.apache.brooklyn.rest.resources.ApplicationResource.fromEntity(ApplicationResource.java:124)
>         at org.apache.brooklyn.rest.resources.ApplicationResource.fetch(ApplicationResource.java:188)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)