You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/08/25 15:14:33 UTC
[1/2] brooklyn-server git commit: don't hold lock on
EntityManagementSupport for longer than needed
Repository: brooklyn-server
Updated Branches:
refs/heads/master 1855c07c8 -> 2efbd86be
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...
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/f0690255
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/f0690255
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/f0690255
Branch: refs/heads/master
Commit: f0690255ed6a686f7cfad82f04ec4dc3ac22d7a2
Parents: 434e262
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Aug 24 13:52:22 2016 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu Aug 25 09:13:31 2016 +0100
----------------------------------------------------------------------
.../mgmt/internal/EntityManagementSupport.java | 33 ++++++++++----------
1 file changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/f0690255/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
index 3811542..852166b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/EntityManagementSupport.java
@@ -234,22 +234,23 @@ public class EntityManagementSupport {
nonDeploymentManagementContext.setMode(NonDeploymentManagementContextMode.MANAGEMENT_STARTED);
- /*
- * - set derived/inherited config values
- * - publish all queued sensors
- * - start all queued executions (e.g. subscription delivery)
- * [above happens in exactly this order, at each entity]
- * then: the entity internally knows it fully managed (ManagementSupport.isManaged() returns true -- though not sure we need that);
- * subsequent sensor events and executions occur directly (no queueing)
- */
-
- if (!isReadOnly()) {
- nonDeploymentManagementContext.getSubscriptionManager().startDelegatingForPublishing();
- }
-
- // TODO more of the above
- // TODO custom started activities
- // (elaborate or remove ^^^ ? -AH, Sept 2014)
+ }
+
+ /* on start, we want to:
+ * - set derived/inherited config values (not needed, the specs should have taken care of that?)
+ * - publish all queued sensors (done below)
+ * - start all queued executions
+ * (e.g. subscription delivery - done below? are there others and if so how are they unlocked?
+ * curious where the "start queued tasks" logic is; must be somewhere as it all seems to have been working fine (Aug 2016))
+ * [in exactly this order, at each entity]
+ * then subsequent sensor events and executions occur directly (no queueing)
+ *
+ * NOTE: should happen out of synch block in case something is potentially long running;
+ * should happen quickly tough, state might get messy and errors occur if stopped while starting!
+ */
+
+ if (!isReadOnly()) {
+ nonDeploymentManagementContext.getSubscriptionManager().startDelegatingForPublishing();
}
if (!isReadOnly()) {
[2/2] brooklyn-server git commit: Closes #306
Posted by sv...@apache.org.
Closes #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...
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/2efbd86b
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/2efbd86b
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/2efbd86b
Branch: refs/heads/master
Commit: 2efbd86beaacc23b6db42b9518f25ef133aaf4ee
Parents: 1855c07 f069025
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Thu Aug 25 18:14:22 2016 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Aug 25 18:14:22 2016 +0300
----------------------------------------------------------------------
.../mgmt/internal/EntityManagementSupport.java | 33 ++++++++++----------
1 file changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------