brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From geom...@apache.org
Subject [01/13] brooklyn-server git commit: bulk of structural additions to support persisting osgi bundles
Date Fri, 28 Apr 2017 10:32:02 GMT
Repository: brooklyn-server
Updated Branches:
  refs/heads/master d09b58f9f -> ce5ee7b86


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BrooklynMementoManifestImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BrooklynMementoManifestImpl.java
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BrooklynMementoManifestImpl.java
index 664ddfe..9bc8e94 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BrooklynMementoManifestImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/BrooklynMementoManifestImpl.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.apache.brooklyn.api.mgmt.rebind.mementos.BrooklynMementoManifest;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
+import org.apache.brooklyn.api.mgmt.rebind.mementos.ManagedBundleMemento;
 import org.apache.brooklyn.api.objs.BrooklynObjectType;
 
 import com.google.common.collect.Maps;
@@ -46,10 +47,12 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
         protected final Map<String, String> enricherIdToType = Maps.newConcurrentMap();
         protected final Map<String, String> feedIdToType = Maps.newConcurrentMap();
         protected final Map<String, CatalogItemMemento> catalogItems = Maps.newConcurrentMap();
+        protected final Map<String, ManagedBundleMemento> bundles = Maps.newConcurrentMap();
 
         public Builder planeId(String planeId) {
             this.planeId = planeId; return this;
         }
+
         /** @deprecated since 0.11.0; value is not used */
         @Deprecated
         public Builder brooklynVersion(String val) {
@@ -89,6 +92,12 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
         public Builder catalogItem(CatalogItemMemento val) {
             catalogItems.put(val.getId(), val); return this;
         }
+        public Builder bundles(Map<String, ManagedBundleMemento> vals) {
+            bundles.putAll(vals); return this;
+        }
+        public Builder bundle(ManagedBundleMemento val) {
+            bundles.put(val.getId(), val); return this;
+        }
 
         public Builder putType(BrooklynObjectType type, String id, String javaType) {
             switch (type) {
@@ -97,7 +106,9 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
             case POLICY: return policy(id, javaType);
             case ENRICHER: return enricher(id, javaType);
             case FEED: return feed(id, javaType);
-            case CATALOG_ITEM: throw new IllegalArgumentException(type.toCamelCase()+" requires
different parameters");
+            case CATALOG_ITEM: 
+            case MANAGED_BUNDLE: 
+                throw new IllegalArgumentException(type.toCamelCase()+" requires different
parameters");
             case UNKNOWN: 
             default: 
                 throw new IllegalArgumentException(type.toCamelCase()+" not supported");
@@ -116,6 +127,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
     private final Map<String, String> enricherIdToType;
     private final Map<String, String> feedIdToType;
     private Map<String, CatalogItemMemento> catalogItems;
+    private Map<String, ManagedBundleMemento> bundles; 
     
     private BrooklynMementoManifestImpl(Builder builder) {
         planeId = builder.planeId;
@@ -125,6 +137,7 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
         enricherIdToType = builder.enricherIdToType;
         feedIdToType = builder.feedIdToType;
         catalogItems = builder.catalogItems;
+        bundles = builder.bundles;
     }
 
     @Override
@@ -171,6 +184,21 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
     public Map<String, CatalogItemMemento> getCatalogItemMementos() {
         return Collections.unmodifiableMap(catalogItems);
     }
+    
+    @Override
+    public ManagedBundleMemento getBundle(String id) {
+        return bundles.get(id);
+    }
+
+    @Override
+    public Collection<String> getBundleIds() {
+        return Collections.unmodifiableSet(bundles.keySet());
+    }
+
+    @Override
+    public Map<String, ManagedBundleMemento> getBundles() {
+        return Collections.unmodifiableMap(bundles);
+    }
 
     @Override
     public boolean isEmpty() {
@@ -179,7 +207,8 @@ public class BrooklynMementoManifestImpl implements BrooklynMementoManifest,
Ser
                 policyIdToType.isEmpty() &&
                 enricherIdToType.isEmpty() &&
                 feedIdToType.isEmpty() &&
-                catalogItems.isEmpty();
+                catalogItems.isEmpty() &&
+                bundles.isEmpty();
     }
     
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
index da54080..fbf24b8 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/dto/MementosGenerators.java
@@ -38,6 +38,7 @@ import org.apache.brooklyn.api.mgmt.rebind.mementos.EnricherMemento;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.EntityMemento;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.FeedMemento;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.LocationMemento;
+import org.apache.brooklyn.api.mgmt.rebind.mementos.ManagedBundleMemento;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.Memento;
 import org.apache.brooklyn.api.mgmt.rebind.mementos.PolicyMemento;
 import org.apache.brooklyn.api.objs.BrooklynObject;
@@ -48,6 +49,7 @@ import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.api.sensor.AttributeSensor.SensorPersistenceMode;
 import org.apache.brooklyn.api.sensor.Enricher;
 import org.apache.brooklyn.api.sensor.Feed;
+import org.apache.brooklyn.api.typereg.ManagedBundle;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.catalog.internal.CatalogItemDo;
 import org.apache.brooklyn.core.enricher.AbstractEnricher;
@@ -111,6 +113,8 @@ public class MementosGenerators {
             return newFeedMemento((Feed)instance);
         } else if (instance instanceof CatalogItem) {
             return newCatalogItemMemento((CatalogItem<?,?>) instance);
+        } else if (instance instanceof ManagedBundle) {
+            return newManagedBundleMemento((ManagedBundle) instance);
         } else {
             throw new IllegalArgumentException("Unexpected brooklyn type: "+(instance ==
null ? "null" : instance.getClass())+" ("+instance+")");
         }
@@ -442,6 +446,15 @@ public class MementosGenerators {
         return builder.build();
     }
     
+    private static ManagedBundleMemento newManagedBundleMemento(ManagedBundle bundle) {
+        BasicManagedBundleMemento.Builder builder = BasicManagedBundleMemento.builder();
+        populateBrooklynObjectMementoBuilder(bundle, builder);
+        builder.url(bundle.getUrl())
+            .symbolicName(bundle.getSymbolicName())
+            .version(bundle.getVersion());
+        return builder.build();
+    }
+    
     private static void populateBrooklynObjectMementoBuilder(BrooklynObject instance, AbstractMemento.Builder<?>
builder) {
         if (Proxy.isProxyClass(instance.getClass())) {
             throw new IllegalStateException("Attempt to create memento from proxy "+instance+"
(would fail with wrong type)");

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformer.java
b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformer.java
index 74b8bb0..ce4a2bf 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformer.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/transformer/CompoundTransformer.java
@@ -246,6 +246,7 @@ public class CompoundTransformer {
         Map<String, String> enrichers = MutableMap.copyOf(rawData.getEnrichers());
         Map<String, String> feeds = MutableMap.copyOf(rawData.getFeeds());
         Map<String, String> catalogItems = MutableMap.copyOf(rawData.getCatalogItems());
+        Map<String, String> bundles = MutableMap.copyOf(rawData.getBundles());
 
         // TODO @neykov asks whether transformers should be run in registration order,
         // rather than in type order.  TBD.  (would be an easy change.)
@@ -303,6 +304,14 @@ public class CompoundTransformer {
                 }
                 catalogItems.keySet().removeAll(itemsToDelete);
                 break;
+            case MANAGED_BUNDLE:
+                missing = Sets.difference(itemsToDelete, bundles.keySet());
+                if (missing.size() > 0) {
+                    LOG.warn("Unable to delete " + type + " id"+Strings.s(missing.size())+"
("+missing+"), "
+                            + "because not found in persisted state (continuing)");
+                }
+                bundles.keySet().removeAll(itemsToDelete);
+                break;
             case UNKNOWN:
                 break; // no-op
             default:
@@ -344,6 +353,11 @@ public class CompoundTransformer {
                             entry.setValue(transformer.transform(entry.getValue()));
                         }
                         break;
+                    case MANAGED_BUNDLE:
+                        for (Map.Entry<String, String> entry : bundles.entrySet())
{
+                            entry.setValue(transformer.transform(entry.getValue()));
+                        }
+                        break;
                     case UNKNOWN:
                         break; // no-op
                     default:
@@ -360,6 +374,7 @@ public class CompoundTransformer {
                 .enrichers(enrichers)
                 .feeds(feeds)
                 .catalogItems(catalogItems)
+                .bundles(bundles)
                 .build();
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
index f7df463..0c2c87b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
@@ -32,6 +32,7 @@ import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
 import org.apache.brooklyn.api.typereg.RegisteredType;
 import org.apache.brooklyn.api.typereg.RegisteredType.TypeImplementationPlan;
 import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext;
+import org.apache.brooklyn.api.typereg.ManagedBundle;
 import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
 import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
 import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
@@ -48,6 +49,7 @@ import com.google.common.annotations.Beta;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 
 public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
@@ -55,6 +57,7 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
     private static final Logger log = LoggerFactory.getLogger(BasicBrooklynTypeRegistry.class);
     
     private ManagementContext mgmt;
+    private Map<String,ManagedBundle> uploadedBundles = MutableMap.of();
     private Map<String,RegisteredType> localRegisteredTypes = MutableMap.of();
 
     public BasicBrooklynTypeRegistry(ManagementContext mgmt) {
@@ -321,4 +324,5 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry
{
             throw new IllegalStateException("Cannot add "+type+" to catalog; different "+oldType+"
is already present");
         }
     }
+    
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/typereg/BasicManagedBundle.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicManagedBundle.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicManagedBundle.java
new file mode 100644
index 0000000..4223e79
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicManagedBundle.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.typereg;
+
+import java.util.Map;
+
+import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
+import org.apache.brooklyn.api.typereg.ManagedBundle;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.objs.AbstractBrooklynObject;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+public class BasicManagedBundle extends AbstractBrooklynObject implements ManagedBundle,
BrooklynObjectInternal {
+
+    private String symbolicName;
+    private String version;
+    private String url;
+
+    // for deserializing (not sure if needed?)
+    @SuppressWarnings("unused")
+    private BasicManagedBundle() {}
+
+    public BasicManagedBundle(String name, String version, String url) {
+        if (name == null && version == null) {
+            Preconditions.checkNotNull(url, "Either a URL or both name and version are required");
+        } else {
+            Preconditions.checkNotNull(name, "Either a URL or both name and version are required");
+            Preconditions.checkNotNull(version, "Either a URL or both name and version are
required");
+        }
+
+        this.symbolicName = name;
+        this.version = version;
+        this.url = url;
+    }
+    
+    @Override
+    public boolean isNameResolved() {
+        return symbolicName != null && version != null;
+    }
+    
+    @Override
+    public String getSymbolicName() {
+        return symbolicName;
+    }
+
+    @Override
+    public String getVersion() {
+        return version;
+    }
+
+    @Override
+    public String getUrl() {
+        return url;
+    }
+
+    @Override
+    public String getOsgiUniqueUrl() {
+        return "brooklyn:"+getId();
+    }
+    
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("symbolicName", symbolicName)
+                .add("version", version)
+                .add("url", url)
+                .toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(symbolicName, version, url);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null) return false;
+        if (getClass() != obj.getClass()) return false;
+        OsgiBundleWithUrl other = (OsgiBundleWithUrl) obj;
+        if (!Objects.equal(symbolicName, other.getSymbolicName())) return false;
+        if (!Objects.equal(version, other.getVersion())) return false;
+        if (!Objects.equal(url, other.getUrl())) return false;
+        return true;
+    }
+
+    // ---
+    
+    @Override
+    public String getDisplayName() {
+        return null;
+    }
+
+    @Override
+    public <T> T setConfig(ConfigKey<T> key, T val) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public <T> T getConfig(ConfigKey<T> key) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public RebindSupport<?> getRebindSupport() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ConfigurationSupportInternal config() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public SubscriptionSupportInternal subscriptions() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setDisplayName(String newName) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    protected BrooklynObjectInternal configure(Map<?, ?> flags) {
+        throw new UnsupportedOperationException();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
index 1c8cc40..5db9820 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicOsgiBundleWithUrl.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.core.typereg;
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
 import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
@@ -35,16 +36,20 @@ public class BasicOsgiBundleWithUrl implements CatalogBundle, OsgiBundleWithUrl
 
     public BasicOsgiBundleWithUrl(String name, String version, String url) {
         if (name == null && version == null) {
-            Preconditions.checkNotNull(url, "url to an OSGi bundle is required");
+            Preconditions.checkNotNull(url, "Either a URL or both name and version are required");
         } else {
-            Preconditions.checkNotNull(name, "both name and version are required");
-            Preconditions.checkNotNull(version, "both name and version are required");
+            Preconditions.checkNotNull(name, "Either a URL or both name and version are required");
+            Preconditions.checkNotNull(version, "Either a URL or both name and version are
required");
         }
 
         this.symbolicName = name;
         this.version = version;
         this.url = url;
     }
+    
+    public BasicOsgiBundleWithUrl(OsgiBundleWithUrl b) {
+        this(b.getSymbolicName(), b.getVersion(), b.getUrl());
+    }
 
     @Override
     public boolean isNameResolved() {
@@ -74,7 +79,7 @@ public class BasicOsgiBundleWithUrl implements CatalogBundle, OsgiBundleWithUrl
 
     @Override
     public String toString() {
-        return Objects.toStringHelper(this)
+        return MoreObjects.toStringHelper(this)
                 .add("symbolicName", symbolicName)
                 .add("version", version)
                 .add("url", url)

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
index 29ea68b..4e18336 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindTestUtils.java
@@ -537,7 +537,7 @@ public class RebindTestUtils {
             BrooklynMementoRawData data = persister.loadMementoRawData(RebindExceptionHandlerImpl.builder().build());
             List<BrooklynObjectType> types = ImmutableList.of(BrooklynObjectType.ENTITY,
BrooklynObjectType.LOCATION, 
                     BrooklynObjectType.POLICY, BrooklynObjectType.ENRICHER, BrooklynObjectType.FEED,

-                    BrooklynObjectType.CATALOG_ITEM);
+                    BrooklynObjectType.CATALOG_ITEM, BrooklynObjectType.MANAGED_BUNDLE);
             for (BrooklynObjectType type : types) {
                 LOG.info(type+" ("+data.getObjectsOfType(type).keySet()+"):");
                 for (Map.Entry<String, String> entry : data.getObjectsOfType(type).entrySet())
{

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RecordingRebindExceptionHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RecordingRebindExceptionHandler.java
b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RecordingRebindExceptionHandler.java
index b94970d..e012ac4 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RecordingRebindExceptionHandler.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RecordingRebindExceptionHandler.java
@@ -69,7 +69,7 @@ public class RecordingRebindExceptionHandler extends RebindExceptionHandlerImpl
 
     @Override
     public void onCreateFailed(BrooklynObjectType type, String id, String instanceType, Exception
e) {
-        createFailures.put(id, new IllegalStateException("problem creating location "+id+"
of type "+instanceType, e));
+        createFailures.put(id, new IllegalStateException("problem creating "+type+" "+id+"
of type "+instanceType, e));
         super.onCreateFailed(type, id, instanceType, e);
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/fbe99f1f/launcher/src/test/java/org/apache/brooklyn/launcher/AbstractCleanOrphanedStateTest.java
----------------------------------------------------------------------
diff --git a/launcher/src/test/java/org/apache/brooklyn/launcher/AbstractCleanOrphanedStateTest.java
b/launcher/src/test/java/org/apache/brooklyn/launcher/AbstractCleanOrphanedStateTest.java
index b64f291..9cac744 100644
--- a/launcher/src/test/java/org/apache/brooklyn/launcher/AbstractCleanOrphanedStateTest.java
+++ b/launcher/src/test/java/org/apache/brooklyn/launcher/AbstractCleanOrphanedStateTest.java
@@ -55,6 +55,7 @@ public abstract class AbstractCleanOrphanedStateTest extends RebindTestFixtureWi
                     .planeId(input.getPlaneId())
                     .brooklynVersion(input.getBrooklynVersion())
                     .catalogItems(input.getCatalogItems())
+                    .bundles(input.getBundles())
                     .entities(MutableMap.<String, String>builder().putAll(input.getEntities()).removeAll(deletions.entities).build())
                     .locations(MutableMap.<String, String>builder().putAll(input.getLocations()).removeAll(deletions.locations).build())
                     .feeds(MutableMap.<String, String>builder().putAll(input.getFeeds()).removeAll(deletions.feeds).build())


Mime
View raw message