You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/08 11:43:30 UTC

brooklyn-server git commit: fix intermittent failing ItemsInContainersGroupTest.testItemUnmanagedIsRemoved by ensuring group removal is done first

Repository: brooklyn-server
Updated Branches:
  refs/heads/master b6247b48a -> cf29cda76


fix intermittent failing ItemsInContainersGroupTest.testItemUnmanagedIsRemoved
by ensuring group removal is done first


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/cf29cda7
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/cf29cda7
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/cf29cda7

Branch: refs/heads/master
Commit: cf29cda76f98932062989ecde2073dcb7d5b9685
Parents: b6247b4
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Feb 8 10:42:42 2016 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Feb 8 10:43:24 2016 +0000

----------------------------------------------------------------------
 .../entity/group/AbstractGroupImpl.java         | 22 ++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cf29cda7/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
index bfd366f..6b5c02a 100644
--- a/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/entity/group/AbstractGroupImpl.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.entity.stock.DelegateEntity;
 import org.apache.brooklyn.util.collections.SetFromLiveMap;
+import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -175,7 +176,6 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
     @Override
     public boolean removeMember(final Entity member) {
         synchronized (members) {
-            member.removeGroup((Group)getProxyIfAvailable());
             boolean changed = (member != null && members.remove(member));
             if (changed) {
                 log.debug("Group {} lost member {}", this, member);
@@ -205,7 +205,25 @@ public abstract class AbstractGroupImpl extends AbstractEntity implements Abstra
                     }
                 }
 
-                getManagementSupport().getEntityChangeListener().onMembersChanged();
+            }
+            
+            Exception errorRemoving = null;
+            // suppress errors if member is being unmanaged in parallel
+            try {
+                member.removeGroup((Group)getProxyIfAvailable());
+            } catch (Exception e) {
+                Exceptions.propagateIfFatal(e);
+                errorRemoving = e;
+            }
+            
+            getManagementSupport().getEntityChangeListener().onMembersChanged();
+            
+            if (errorRemoving!=null) {
+                if (Entities.isNoLongerManaged(member)) {
+                    log.debug("Ignoring error when telling group "+this+" unmanaged member "+member+" is is removed: "+errorRemoving);
+                } else {
+                    Exceptions.propagate(errorRemoving);
+                }
             }
 
             return changed;