GitHub user ahgittin opened a pull request:

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

    don't hold lock on EntityManagementSupport for longer than needed

    fixes a deadlock observed with a screwy blueprints, when:
    
    "item added" callback:  locking EntityManagementSupport to get subscription 
context, while updating members
            at 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport.getSubscriptionContext(EntityManagementSupport.java:362)
            - waiting to lock <0x0000000088908188> (a 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSubscriptionSupport.getSubscriptionContext(AbstractEntity.java:1519)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.emitInternal(AbstractEntity.java:1191)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.emit(AbstractEntity.java:1184)
            at 
org.apache.brooklyn.core.entity.EntityDynamicType.addSensorIfAbsent(EntityDynamicType.java:204)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.set(AbstractEntity.java:1093)
            at 
org.apache.brooklyn.entity.group.AbstractGroupImpl.addMember(AbstractGroupImpl.java:134)
            - locked <0x0000000085f0fa30> (a java.util.LinkedHashSet)
            at 
org.apache.brooklyn.entity.group.DynamicGroupImpl.onEntityAdded(DynamicGroupImpl.java:126)
            - locked <0x0000000085f0fb28> (a java.lang.Object)
            at 
org.apache.brooklyn.entity.group.DynamicGroupImpl$MyEntitySetChangeListener.onItemAdded(DynamicGroupImpl.java:154)
    
    publishing on management started, locking members in order to deliver, 
while handling onManagementStarted
            at 
org.apache.brooklyn.entity.group.AbstractGroupImpl.getMembers(AbstractGroupImpl.java:269)
            - waiting to lock <0x0000000085f0fa30> (a java.util.LinkedHashSet)
            at sun.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
            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:188)
            at com.sun.proxy.$Proxy181.getMembers(Unknown Source)
            at 
org.apache.brooklyn.core.mgmt.internal.AbstractSubscriptionManager$2.apply(AbstractSubscriptionManager.java:130)
            at 
org.apache.brooklyn.core.mgmt.internal.AbstractSubscriptionManager$2.apply(AbstractSubscriptionManager.java:128)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalSubscriptionManager.publish(LocalSubscriptionManager.java:221)
            at 
org.apache.brooklyn.core.mgmt.internal.QueueingSubscriptionManager.startDelegatingForPublishing(QueueingSubscriptionManager.java:91)
            - locked <0x00000000889016a8> (a 
org.apache.brooklyn.core.mgmt.internal.QueueingSubscriptionManager)
            at 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport.onManagementStarted(EntityManagementSupport.java:247)
            - locked <0x0000000088908188> (a 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manageRecursive(LocalEntityManager.java:392)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manage(LocalEntityManager.java:278)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.createEntity(LocalEntityManager.java:152)
            at 
org.apache.brooklyn.core.mgmt.EntityManagementUtils.createUnstarted(EntityManagementUtils.java:83)
    
    my blueprint had a static sensor waiting on an attribute from another 
static sensor, which is possibly why...

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

    $ git pull https://github.com/ahgittin/brooklyn-server 
management-synchronization

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

    https://github.com/apache/brooklyn-server/pull/306.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 #306
    
----
commit f0690255ed6a686f7cfad82f04ec4dc3ac22d7a2
Author: Alex Heneveld <[email protected]>
Date:   2016-08-24T12:52:22Z

    don't hold lock on EntityManagementSupport for longer than needed
    
    fixes a deadlock observed with a screwy blueprints, when:
    
    "item added" callback:  locking EntityManagementSupport to get subscription 
context, while updating members
            at 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport.getSubscriptionContext(EntityManagementSupport.java:362)
            - waiting to lock <0x0000000088908188> (a 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSubscriptionSupport.getSubscriptionContext(AbstractEntity.java:1519)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.emitInternal(AbstractEntity.java:1191)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.emit(AbstractEntity.java:1184)
            at 
org.apache.brooklyn.core.entity.EntityDynamicType.addSensorIfAbsent(EntityDynamicType.java:204)
            at 
org.apache.brooklyn.core.entity.AbstractEntity$BasicSensorSupport.set(AbstractEntity.java:1093)
            at 
org.apache.brooklyn.entity.group.AbstractGroupImpl.addMember(AbstractGroupImpl.java:134)
            - locked <0x0000000085f0fa30> (a java.util.LinkedHashSet)
            at 
org.apache.brooklyn.entity.group.DynamicGroupImpl.onEntityAdded(DynamicGroupImpl.java:126)
            - locked <0x0000000085f0fb28> (a java.lang.Object)
            at 
org.apache.brooklyn.entity.group.DynamicGroupImpl$MyEntitySetChangeListener.onItemAdded(DynamicGroupImpl.java:154)
    
    publishing on management started, locking members in order to deliver, 
while handling onManagementStarted
            at 
org.apache.brooklyn.entity.group.AbstractGroupImpl.getMembers(AbstractGroupImpl.java:269)
            - waiting to lock <0x0000000085f0fa30> (a java.util.LinkedHashSet)
            at sun.reflect.GeneratedMethodAccessor108.invoke(Unknown Source)
            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:188)
            at com.sun.proxy.$Proxy181.getMembers(Unknown Source)
            at 
org.apache.brooklyn.core.mgmt.internal.AbstractSubscriptionManager$2.apply(AbstractSubscriptionManager.java:130)
            at 
org.apache.brooklyn.core.mgmt.internal.AbstractSubscriptionManager$2.apply(AbstractSubscriptionManager.java:128)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalSubscriptionManager.publish(LocalSubscriptionManager.java:221)
            at 
org.apache.brooklyn.core.mgmt.internal.QueueingSubscriptionManager.startDelegatingForPublishing(QueueingSubscriptionManager.java:91)
            - locked <0x00000000889016a8> (a 
org.apache.brooklyn.core.mgmt.internal.QueueingSubscriptionManager)
            at 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport.onManagementStarted(EntityManagementSupport.java:247)
            - locked <0x0000000088908188> (a 
org.apache.brooklyn.core.mgmt.internal.EntityManagementSupport)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manageRecursive(LocalEntityManager.java:392)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.manage(LocalEntityManager.java:278)
            at 
org.apache.brooklyn.core.mgmt.internal.LocalEntityManager.createEntity(LocalEntityManager.java:152)
            at 
org.apache.brooklyn.core.mgmt.EntityManagementUtils.createUnstarted(EntityManagementUtils.java:83)
    
    my blueprint had a static sensor waiting on an attribute from another 
static sensor, which is possibly why...

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to