http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java index 9d82704..d9eefe0 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/AbstractLocation.java @@ -35,7 +35,6 @@ import org.apache.brooklyn.api.location.LocationSpec; import org.apache.brooklyn.api.mgmt.ExecutionContext; import org.apache.brooklyn.api.mgmt.SubscriptionContext; import org.apache.brooklyn.api.mgmt.SubscriptionHandle; -import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.api.mgmt.rebind.RebindSupport; import org.apache.brooklyn.api.mgmt.rebind.mementos.LocationMemento; import org.apache.brooklyn.api.objs.BrooklynObject; @@ -44,7 +43,6 @@ import org.apache.brooklyn.api.sensor.Sensor; import org.apache.brooklyn.api.sensor.SensorEventListener; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; -import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.core.BrooklynFeatureEnablement; import org.apache.brooklyn.core.config.BasicConfigKey; import org.apache.brooklyn.core.config.ConfigConstraints; @@ -70,7 +68,6 @@ import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.flags.FlagUtils; import org.apache.brooklyn.util.core.flags.TypeCoercions; import org.apache.brooklyn.util.exceptions.Exceptions; -import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.stream.Streams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -227,8 +224,8 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements } configMap = new LocationConfigMap(this, managementContext.getStorage().<ConfigKey<?>,Object>getMap(getId()+"-config")); - if (oldConfig.size() > 0) { - configMap.setLocalConfig(oldConfig.getLocalConfig()); + if (!oldConfig.isEmpty()) { + configMap.setLocalConfig(oldConfig.getAllConfigLocalRaw()); } } } @@ -245,7 +242,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements boolean firstTime = !configured.getAndSet(true); - config().set(properties); + config().putAll(properties); if (properties.containsKey(PARENT_LOCATION.getName())) { // need to ensure parent's list of children is also updated @@ -420,7 +417,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements } @Override - protected AbstractConfigMapImpl getConfigsInternal() { + protected AbstractConfigMapImpl<Location> getConfigsInternal() { return configMap; } @@ -499,7 +496,7 @@ public abstract class AbstractLocation extends AbstractBrooklynObject implements @Override @Deprecated public boolean hasConfig(ConfigKey<?> key, boolean includeInherited) { - return config().getInternalConfigMap().getConfigRaw(key, includeInherited).isPresent(); + return config().getInternalConfigMap().getConfigInheritedRaw(key).getWithoutError().asMaybe().isPresent(); } @Override
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java index 537d616..850f3d5 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/BasicLocationRegistry.java @@ -40,7 +40,7 @@ import org.apache.brooklyn.api.location.LocationSpec; import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry; import org.apache.brooklyn.api.typereg.RegisteredType; -import org.apache.brooklyn.config.ConfigMap; +import org.apache.brooklyn.config.StringConfigMap; import org.apache.brooklyn.core.config.ConfigPredicates; import org.apache.brooklyn.core.config.ConfigUtils; import org.apache.brooklyn.core.location.internal.LocationInternal; @@ -274,7 +274,7 @@ public class BasicLocationRegistry implements LocationRegistry { // we need ability/format for persisting named locations, and better support for adding+saving via REST/GUI) int count = 0; String NAMED_LOCATION_PREFIX = "brooklyn.location.named."; - ConfigMap namedLocationProps = mgmt.getConfig().submap(ConfigPredicates.nameStartsWith(NAMED_LOCATION_PREFIX)); + StringConfigMap namedLocationProps = mgmt.getConfig().submap(ConfigPredicates.nameStartsWith(NAMED_LOCATION_PREFIX)); for (String k: namedLocationProps.asMapWithStringKeys().keySet()) { String name = k.substring(NAMED_LOCATION_PREFIX.length()); // If has a dot, then is a sub-property of a named location (e.g. brooklyn.location.named.prod1.user=bob) http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationConfigMap.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationConfigMap.java b/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationConfigMap.java index e820f0d..076443a 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationConfigMap.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/internal/LocationConfigMap.java @@ -18,25 +18,18 @@ */ package org.apache.brooklyn.core.location.internal; -import static org.apache.brooklyn.util.groovy.GroovyJavaMethods.elvis; - import java.util.Map; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.mgmt.ExecutionContext; import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.objs.BrooklynObject; -import org.apache.brooklyn.config.ConfigInheritance; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.config.ConfigMap; -import org.apache.brooklyn.config.ConfigValueAtContainer; -import org.apache.brooklyn.core.config.BasicConfigInheritance; -import org.apache.brooklyn.core.config.BasicConfigInheritance.AncestorContainerAndKeyValueIterator; -import org.apache.brooklyn.core.config.ConfigKeys.InheritanceContext; import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl; import org.apache.brooklyn.core.location.AbstractLocation; -import org.apache.brooklyn.core.objs.BrooklynObjectInternal; -import org.apache.brooklyn.util.core.internal.ConfigKeySelfExtracting; import org.apache.brooklyn.util.guava.Maybe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,8 +37,9 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Function; import com.google.common.base.Predicate; -public class LocationConfigMap extends AbstractConfigMapImpl { +public class LocationConfigMap extends AbstractConfigMapImpl<Location> { + @SuppressWarnings("unused") private static final Logger log = LoggerFactory.getLogger(LocationConfigMap.class); public LocationConfigMap(AbstractLocation loc) { @@ -56,61 +50,6 @@ public class LocationConfigMap extends AbstractConfigMapImpl { super(loc, storage); } - protected AbstractLocation getLocation() { - return (AbstractLocation) getBrooklynObject(); - } - - @Override - protected BrooklynObjectInternal getParent() { - return (BrooklynObjectInternal) getLocation().getParent(); - } - - @Override - protected <T> Maybe<T> getConfigImpl(final ConfigKey<T> key) { - Function<Location, ConfigKey<T>> keyFn = new Function<Location, ConfigKey<T>>() { - @SuppressWarnings("unchecked") - @Override - public ConfigKey<T> apply(Location input) { - if (input instanceof AbstractLocation) { - return (ConfigKey<T>) elvis( ((AbstractLocation)input).getLocationTypeInternal().getConfigKey(key.getName()), key ); - } - return key; - } - }; - - // In case this entity class has overridden the given key (e.g. to set default), then retrieve this entity's key - ConfigKey<T> ownKey = keyFn.apply(getLocation()); - if (ownKey==null) ownKey = key; - - LocalEvaluateKeyValue<Location,T> evalFn = new LocalEvaluateKeyValue<Location,T>(ownKey); - - if (ownKey instanceof ConfigKeySelfExtracting) { - Maybe<T> ownExplicitValue = evalFn.apply(getLocation()); - - AncestorContainerAndKeyValueIterator<Location, T> ckvi = new AncestorContainerAndKeyValueIterator<Location,T>( - getLocation(), keyFn, evalFn, new Function<Location,Location>() { - @Override - public Location apply(Location input) { - if (input==null) return null; - return input.getParent(); - } - }); - - ConfigValueAtContainer<Location,T> result = getDefaultRuntimeInheritance().resolveInheriting(ownKey, - ownExplicitValue, getLocation(), - ckvi, InheritanceContext.RUNTIME_MANAGEMENT); - - return result.asMaybe(); - } else { - log.warn("Config key {} of {} is not a ConfigKeySelfExtracting; cannot retrieve value; returning default", ownKey, getBrooklynObject()); - return Maybe.absent(); - } - } - - private ConfigInheritance getDefaultRuntimeInheritance() { - return BasicConfigInheritance.OVERWRITE; - } - @Override protected ExecutionContext getExecutionContext(BrooklynObject bo) { if (bo==null) return null; @@ -128,18 +67,33 @@ public class LocationConfigMap extends AbstractConfigMapImpl { } @Override - public ConfigMap submap(Predicate<ConfigKey<?>> filter) { + public LocationConfigMap submap(Predicate<ConfigKey<?>> filter) { throw new UnsupportedOperationException("Location does not support submap"); } @Override protected Object coerceConfigVal(ConfigKey<?> key, Object v) { if ((Class.class.isAssignableFrom(key.getType()) || Function.class.isAssignableFrom(key.getType())) && v instanceof String) { - // strings can be written where classes/functions are permitted; this is a common pattern when configuring locations - // (bit sloppy to allow this; tests catch it, eg ImageChooser in jclouds) + // strings can be written where classes/functions are permitted; + // this because an occasional pattern only for locations because validation wasn't enforced there + // (and locations do a lot more config in brooklyn.properties) - eg ImageChooser in jclouds + // TODO slowly warn on this then phase it out return v; } return super.coerceConfigVal(key, v); } + + @Override + protected Location getParentOfContainer(Location container) { + if (container==null) return null; + return container.getParent(); + } + + @Override @Nullable protected <T> ConfigKey<?> getKeyAtContainerImpl(@Nonnull Location container, ConfigKey<T> queryKey) { + return ((AbstractLocation)container).getLocationTypeInternal().getConfigKey(queryKey.getName()); + } + } + + http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/mgmt/entitlement/PerUserEntitlementManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/entitlement/PerUserEntitlementManager.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/entitlement/PerUserEntitlementManager.java index 5452060..61d26d4 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/entitlement/PerUserEntitlementManager.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/entitlement/PerUserEntitlementManager.java @@ -19,6 +19,7 @@ package org.apache.brooklyn.core.mgmt.entitlement; import java.util.Map; +import java.util.Set; import org.apache.brooklyn.api.mgmt.entitlement.EntitlementClass; import org.apache.brooklyn.api.mgmt.entitlement.EntitlementContext; @@ -64,11 +65,11 @@ public class PerUserEntitlementManager implements EntitlementManager { public PerUserEntitlementManager(BrooklynProperties properties) { this(load(properties, properties.getConfig(DEFAULT_MANAGER))); - BrooklynProperties users = properties.submap(ConfigPredicates.nameStartsWith(PER_USER_ENTITLEMENTS_CONFIG_PREFIX+".")); - for (Map.Entry<ConfigKey<?>,?> key: users.getAllConfig().entrySet()) { - if (key.getKey().getName().equals(DEFAULT_MANAGER.getName())) continue; - String user = Strings.removeFromStart(key.getKey().getName(), PER_USER_ENTITLEMENTS_CONFIG_PREFIX+"."); - addUser(user, load(properties, Strings.toString(key.getValue()))); + Set<ConfigKey<?>> users = properties.findKeys(ConfigPredicates.nameStartsWith(PER_USER_ENTITLEMENTS_CONFIG_PREFIX+".")); + for (ConfigKey<?> key: users) { + if (key.getName().equals(DEFAULT_MANAGER.getName())) continue; + String user = Strings.removeFromStart(key.getName(), PER_USER_ENTITLEMENTS_CONFIG_PREFIX+"."); + addUser(user, load(properties, Strings.toString(properties.getConfig(key)))); } log.info(getClass().getSimpleName()+" created with "+perUserManagers.size()+" user"+Strings.s(perUserManagers)+" and " http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java index ac67f22..1a388d5 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicExternalConfigSupplierRegistry.java @@ -88,7 +88,7 @@ public class BasicExternalConfigSupplierRegistry implements ExternalConfigSuppli // brooklyn.external.<name>.<key> : <value> String EXTERNAL_PROVIDER_PREFIX = "brooklyn.external."; - Map<String, Object> externalProviderProperties = mgmt.getConfig().submap(ConfigPredicates.startingWith(EXTERNAL_PROVIDER_PREFIX)).asMapWithStringKeys(); + Map<String, Object> externalProviderProperties = mgmt.getConfig().submap(ConfigPredicates.nameStartsWith(EXTERNAL_PROVIDER_PREFIX)).asMapWithStringKeys(); ClassLoader classloader = mgmt.getCatalogClassLoader(); List<Exception> exceptions = new LinkedList<Exception>(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java index 2495557..69f2423 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java @@ -143,7 +143,7 @@ public class DeferredBrooklynProperties implements BrooklynProperties { } @Override - public Map<ConfigKey<?>, Object> getAllConfig() { + public Map<ConfigKey<?>,Object> getAllConfigLocalRaw() { Map<ConfigKey<?>, Object> raw = delegate.getAllConfig(); Map<ConfigKey<?>, Object> result = Maps.newLinkedHashMap(); for (Map.Entry<ConfigKey<?>, Object> entry : raw.entrySet()) { @@ -152,6 +152,11 @@ public class DeferredBrooklynProperties implements BrooklynProperties { return result; } + @Override @Deprecated + public Map<ConfigKey<?>, Object> getAllConfig() { + return getAllConfigLocalRaw(); + } + @Override public Map<String, Object> asMapWithStringKeys() { Map<ConfigKey<?>, Object> raw = delegate.getAllConfig(); @@ -197,6 +202,10 @@ public class DeferredBrooklynProperties implements BrooklynProperties { BrooklynProperties submap = delegate.submap(filter); return new DeferredBrooklynProperties(submap, mgmt); } + @Override + public Set<ConfigKey<?>> findKeys(Predicate<ConfigKey<?>> filter) { + return delegate.findKeys(filter); + } @Override public BrooklynProperties addEnvironmentVars() { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java index c576663..370173f 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicEntityRebindSupport.java @@ -114,7 +114,7 @@ public class BasicEntityRebindSupport extends AbstractBrooklynObjectRebindSuppor } } - ((EntityInternal)entity).config().set(memento.getConfigUnmatched()); + ((EntityInternal)entity).config().putAll(memento.getConfigUnmatched()); ((EntityInternal)entity).config().refreshInheritedConfig(); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicLocationRebindSupport.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicLocationRebindSupport.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicLocationRebindSupport.java index 5273c65..99f5a24 100644 --- a/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicLocationRebindSupport.java +++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/rebind/BasicLocationRebindSupport.java @@ -70,7 +70,7 @@ public class BasicLocationRebindSupport extends AbstractBrooklynObjectRebindSupp // Note that the flags have been set in the constructor // Sept 2016 - now ignores unused and config description - location.config().set(memento.getLocationConfig()); + location.config().putAll(memento.getLocationConfig()); for (Map.Entry<String, Object> entry : memento.getLocationConfig().entrySet()) { String flagName = entry.getKey(); @@ -90,7 +90,7 @@ public class BasicLocationRebindSupport extends AbstractBrooklynObjectRebindSupp } else { value = TypeCoercions.coerce(entry.getValue(), fieldType); if (value != null) { - location.config().set(MutableMap.of(flagName, value)); + location.config().putAll(MutableMap.of(flagName, value)); FlagUtils.setFieldFromFlag(location, flagName, value); } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/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 a13dc91..33d38a1 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 @@ -329,7 +329,7 @@ public class MementosGenerators { // current code will lose the ConfigKey type on rebind for anything not defined on class. // Whereas entities support that. // TODO Do we need the "nonPersistableFlagNames" that locations use? - Map<ConfigKey<?>, Object> config = ((AbstractPolicy)policy).getConfigMap().getAllConfig(); + Map<ConfigKey<?>, Object> config = ((AbstractPolicy)policy).config().getInternalConfigMap().getAllConfigLocalRaw(); for (Map.Entry<ConfigKey<?>, Object> entry : config.entrySet()) { ConfigKey<?> key = checkNotNull(entry.getKey(), "config=%s", config); Object value = configValueToPersistable(entry.getValue(), policy, key.getName()); @@ -372,7 +372,7 @@ public class MementosGenerators { // current code will lose the ConfigKey type on rebind for anything not defined on class. // Whereas entities support that. // TODO Do we need the "nonPersistableFlagNames" that locations use? - Map<ConfigKey<?>, Object> config = ((AbstractEnricher)enricher).getConfigMap().getAllConfig(); + Map<ConfigKey<?>, Object> config = ((AbstractEnricher)enricher).config().getInternalConfigMap().getAllConfigLocalRaw(); for (Map.Entry<ConfigKey<?>, Object> entry : config.entrySet()) { ConfigKey<?> key = checkNotNull(entry.getKey(), "config=%s", config); Object value = configValueToPersistable(entry.getValue(), enricher, key.getName()); @@ -402,7 +402,7 @@ public class MementosGenerators { // current code will lose the ConfigKey type on rebind for anything not defined on class. // Whereas entities support that. // TODO Do we need the "nonPersistableFlagNames" that locations use? - Map<ConfigKey<?>, Object> config = ((AbstractFeed)feed).getConfigMap().getAllConfig(); + Map<ConfigKey<?>, Object> config = ((AbstractFeed)feed).config().getInternalConfigMap().getAllConfigLocalRaw(); for (Map.Entry<ConfigKey<?>, Object> entry : config.entrySet()) { ConfigKey<?> key = checkNotNull(entry.getKey(), "config=%s", config); Object value = configValueToPersistable(entry.getValue(), feed, key.getName()); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java index c1b1942..402abb8 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractConfigurationSupportInternal.java @@ -20,6 +20,7 @@ package org.apache.brooklyn.core.objs; import java.util.Map; +import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -31,7 +32,7 @@ import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.api.objs.BrooklynObject; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; -import org.apache.brooklyn.config.ConfigMap; +import org.apache.brooklyn.config.ConfigMap.ConfigMapWithInheritance; import org.apache.brooklyn.core.config.MapConfigKey; import org.apache.brooklyn.core.config.StructuredConfigKey; import org.apache.brooklyn.core.config.SubElementConfigKey; @@ -48,6 +49,8 @@ import org.apache.brooklyn.util.guava.Maybe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Predicate; + public abstract class AbstractConfigurationSupportInternal implements BrooklynObjectInternal.ConfigurationSupportInternal { private static final Logger LOG = LoggerFactory.getLogger(AbstractConfigurationSupportInternal.class); @@ -155,7 +158,7 @@ public abstract class AbstractConfigurationSupportInternal implements BrooklynOb return set(key.getConfigKey(), val); } - protected abstract AbstractConfigMapImpl getConfigsInternal(); + protected abstract AbstractConfigMapImpl<? extends BrooklynObject> getConfigsInternal(); protected abstract <T> void assertValid(ConfigKey<T> key, T val); protected abstract BrooklynObject getContainer(); protected abstract <T> void onConfigChanging(ConfigKey<T> key, Object val); @@ -187,32 +190,38 @@ public abstract class AbstractConfigurationSupportInternal implements BrooklynOb @Override public ConfigBag getLocalBag() { - return getConfigsInternal().getLocalConfigBag(); + return ConfigBag.newInstance(getConfigsInternal().getAllConfigLocalRaw()); } + @SuppressWarnings("unchecked") @Override public Maybe<Object> getRaw(ConfigKey<?> key) { - return getConfigsInternal().getConfigRaw(key, true); + return (Maybe<Object>) getConfigsInternal().getConfigInheritedRaw(key).getWithoutError().asMaybe(); } @Override public Maybe<Object> getLocalRaw(ConfigKey<?> key) { - return getConfigsInternal().getConfigRaw(key, false); + return getConfigsInternal().getConfigLocalRaw(key); } @Override + public void putAll(Map<?, ?> vals) { + getConfigsInternal().putAll(vals); + } + + @Override @Deprecated public void set(Map<?, ?> vals) { - getConfigsInternal().addToLocalBag(vals); + putAll(vals); } @Override public void removeKey(String key) { - getConfigsInternal().removeFromLocalBag(key); + getConfigsInternal().removeKey(key); } @Override public void removeKey(ConfigKey<?> key) { - getConfigsInternal().removeFromLocalBag(key); + getConfigsInternal().removeKey(key); } @Override @@ -221,7 +230,12 @@ public abstract class AbstractConfigurationSupportInternal implements BrooklynOb } @Override - public ConfigMap getInternalConfigMap() { + public Set<ConfigKey<?>> findKeys(Predicate<ConfigKey<?>> filter) { + return getConfigsInternal().findKeys(filter); + } + + @Override + public ConfigMapWithInheritance<? extends BrooklynObject> getInternalConfigMap() { return getConfigsInternal(); } @@ -229,8 +243,9 @@ public abstract class AbstractConfigurationSupportInternal implements BrooklynOb return getConfigsInternal().getAllConfigLocalRaw(); } + @SuppressWarnings("deprecation") @Override - // TODO deprecate because key inheritance not respected + // see super; we aspire to depreate this due to poor treatment of inheritance public ConfigBag getBag() { return getConfigsInternal().getAllConfigBag(); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java index c231157..5b1dc88 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/AbstractEntityAdjunct.java @@ -40,7 +40,6 @@ import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.api.sensor.Sensor; import org.apache.brooklyn.api.sensor.SensorEventListener; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.core.config.ConfigConstraints; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl; @@ -311,7 +310,7 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple } @Override - protected AbstractConfigMapImpl getConfigsInternal() { + protected AbstractConfigMapImpl<?> getConfigsInternal() { return configsInternal; } @@ -344,14 +343,6 @@ public abstract class AbstractEntityAdjunct extends AbstractBrooklynObject imple return config().set(key, val); } - // TODO make immutable - /** for inspection only */ - @Beta - @Deprecated - public ConfigMap getConfigMap() { - return configsInternal; - } - /** * Invoked whenever a config change is applied after management is started. * Default implementation throws an exception to disallow the change. http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/objs/AdjunctConfigMap.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/AdjunctConfigMap.java b/core/src/main/java/org/apache/brooklyn/core/objs/AdjunctConfigMap.java index 6494600..fc13cd8 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/AdjunctConfigMap.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/AdjunctConfigMap.java @@ -18,18 +18,15 @@ */ package org.apache.brooklyn.core.objs; -import static org.apache.brooklyn.util.groovy.GroovyJavaMethods.elvis; - import java.util.Map; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.mgmt.ExecutionContext; import org.apache.brooklyn.api.objs.BrooklynObject; +import org.apache.brooklyn.api.objs.EntityAdjunct; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl; import org.apache.brooklyn.core.entity.EntityInternal; -import org.apache.brooklyn.util.core.flags.TypeCoercions; -import org.apache.brooklyn.util.core.internal.ConfigKeySelfExtracting; import org.apache.brooklyn.util.guava.Maybe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,8 +34,9 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; -public class AdjunctConfigMap extends AbstractConfigMapImpl { +public class AdjunctConfigMap extends AbstractConfigMapImpl<EntityAdjunct> { + @SuppressWarnings("unused") private static final Logger LOG = LoggerFactory.getLogger(AdjunctConfigMap.class); public AdjunctConfigMap(AbstractEntityAdjunct adjunct) { @@ -49,29 +47,20 @@ public class AdjunctConfigMap extends AbstractConfigMapImpl { * @deprecated since 0.10.0 kept for serialization */ @Deprecated private AbstractEntityAdjunct adjunct; @Override - public BrooklynObjectInternal getBrooklynObject() { - BrooklynObjectInternal result = super.getBrooklynObject(); + public EntityAdjunct getContainer() { + EntityAdjunct result = super.getContainer(); if (result!=null) return result; synchronized (this) { - result = super.getBrooklynObject(); + result = super.getContainer(); if (result!=null) return result; bo = adjunct; adjunct = null; } - return super.getBrooklynObject(); - } - - protected AbstractEntityAdjunct getAdjunct() { - return (AbstractEntityAdjunct) getBrooklynObject(); + return super.getContainer(); } @Override - protected BrooklynObjectInternal getParent() { - return null; - } - - @Override protected void postLocalEvaluate(ConfigKey<?> key, BrooklynObject bo, Maybe<?> rawValue, Maybe<?> resolvedValue) { /* noop */ } @Override @@ -84,31 +73,23 @@ public class AdjunctConfigMap extends AbstractConfigMapImpl { return (entity != null) ? ((EntityInternal)entity).getExecutionContext() : null; } - protected <T> Maybe<T> getConfigImpl(ConfigKey<T> key) { - // tasks won't resolve if we aren't yet connected to an entity - - // no need for inheritance, so much simpler than other impls - - @SuppressWarnings("unchecked") - ConfigKey<T> ownKey = getAdjunct()!=null ? (ConfigKey<T>)elvis(getAdjunct().getAdjunctType().getConfigKey(key.getName()), key) : key; - - if (ownKey instanceof ConfigKeySelfExtracting) { - if (((ConfigKeySelfExtracting<T>)ownKey).isSet(ownConfig)) { - return Maybe.ofAllowingNull( ((ConfigKeySelfExtracting<T>)ownKey).extractValue(ownConfig, getExecutionContext(getAdjunct())) ); - } - } else { - LOG.warn("Config key {} of {} is not a ConfigKeySelfExtracting; cannot retrieve value; returning default", ownKey, this); - } - return Maybe.ofAllowingNull( TypeCoercions.coerce(ownKey.getDefaultValue(), key.getTypeToken()) ); - } - @Override public AdjunctConfigMap submap(Predicate<ConfigKey<?>> filter) { - AdjunctConfigMap m = new AdjunctConfigMap(getAdjunct()); + AdjunctConfigMap m = new AdjunctConfigMap((AbstractEntityAdjunct)getContainer()); for (Map.Entry<ConfigKey<?>,Object> entry: ownConfig.entrySet()) if (filter.apply(entry.getKey())) m.ownConfig.put(entry.getKey(), entry.getValue()); return m; } + @Override + protected EntityAdjunct getParentOfContainer(EntityAdjunct container) { + return null; + } + + @Override + protected <T> ConfigKey<?> getKeyAtContainerImpl(EntityAdjunct container, ConfigKey<T> queryKey) { + return ((AbstractEntityAdjunct)container).getAdjunctType().getConfigKey(queryKey.getName()); + } + } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java b/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java index d199608..d3e29b6 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/BasicConfigurableObject.java @@ -18,19 +18,25 @@ */ package org.apache.brooklyn.core.objs; +import java.util.Set; + import org.apache.brooklyn.api.mgmt.ManagementContext; import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.api.objs.Configurable; import org.apache.brooklyn.api.objs.Identifiable; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; +import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.core.mgmt.HasBrooklynManagementContext; import org.apache.brooklyn.core.mgmt.ManagementContextInjectable; +import org.apache.brooklyn.util.collections.MutableSet; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.flags.SetFromFlag; import org.apache.brooklyn.util.text.Identifiers; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; + /** * A parent class for ancilliary objects that do not require the full heavy lifting of {@link AbstractBrooklynObject} * or similar, but wish to use {@link ConfigKey} and {@link Configurable} in their construction, via the @@ -115,5 +121,10 @@ public class BasicConfigurableObject implements Configurable, Identifiable, Mana public <T> T set(HasConfigKey<T> key, Task<T> val) { return set(key.getConfigKey(), val); } + + @Override + public Set<ConfigKey<?>> findKeys(Predicate<ConfigKey<?>> predicate) { + return MutableSet.copyOf(Iterables.filter(config.getAllConfigAsConfigKeyMap().keySet(), predicate)); + } } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java index 7a46cfe..1c76f6d 100644 --- a/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java +++ b/core/src/main/java/org/apache/brooklyn/core/objs/BrooklynObjectInternal.java @@ -26,7 +26,7 @@ import org.apache.brooklyn.api.objs.BrooklynObject; import org.apache.brooklyn.api.objs.Configurable; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.config.ConfigKey.HasConfigKey; -import org.apache.brooklyn.config.ConfigMap; +import org.apache.brooklyn.config.ConfigMap.ConfigMapWithInheritance; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.guava.Maybe; @@ -64,7 +64,7 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable { * and callers should be advised this beta method may be removed. */ @Beta - // TODO deprecate + // TODO deprecate. used fairly extensively, mostly in tests. a bit more care will be needed to refactor. ConfigBag getBag(); /** @@ -72,7 +72,7 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable { * backed by a string-based map, including config names that did not match anything on this entity. */ @Beta - // TODO deprecate + // TODO deprecate. used extensively in tests but should be easy (if tedious) to refactor. ConfigBag getLocalBag(); /** Returns all config defined here, in {@link #getLocalRaw(ConfigKey)} format */ @@ -131,6 +131,10 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable { /** Adds keys or strings, making anonymous keys from strings; throws on other keys */ @Beta + void putAll(Map<?, ?> vals); + + /** @deprecated since 0.10.0 use {@link #putAll(Map)} instead */ + @Deprecated // and confirmed no uses void set(Map<?, ?> vals); @Beta @@ -145,8 +149,13 @@ public interface BrooklynObjectInternal extends BrooklynObject, Rebindable { @Beta void refreshInheritedConfigOfChildren(); - @Beta - ConfigMap getInternalConfigMap(); + /** This is currently the only way to get some rolled up collections and raw, + * and also to test for the presence of a value (without any default). + * As more accessors are added callers may be asked to migrate. + * Callers may also consider using {@link #findKeys(com.google.common.base.Predicate)} + * if that isn't too inefficient. */ + @Beta // TODO provide more accessors and deprecate this + ConfigMapWithInheritance<? extends BrooklynObject> getInternalConfigMap(); /** Clears all local config, e.g. on tear-down */ void removeAllLocalConfig(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/core/server/BrooklynServerPaths.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/server/BrooklynServerPaths.java b/core/src/main/java/org/apache/brooklyn/core/server/BrooklynServerPaths.java index 27d6343..fa13d37 100644 --- a/core/src/main/java/org/apache/brooklyn/core/server/BrooklynServerPaths.java +++ b/core/src/main/java/org/apache/brooklyn/core/server/BrooklynServerPaths.java @@ -57,7 +57,7 @@ public class BrooklynServerPaths { /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */ @SuppressWarnings("deprecation") public static String getMgmtBaseDir(StringConfigMap brooklynProperties) { - String base = (String) brooklynProperties.getConfigRaw(BrooklynServerConfig.MGMT_BASE_DIR, true).orNull(); + String base = (String) brooklynProperties.getConfigLocalRaw(BrooklynServerConfig.MGMT_BASE_DIR).orNull(); if (base==null) { base = brooklynProperties.getConfig(BrooklynServerConfig.BROOKLYN_DATA_DIR); if (base!=null) @@ -199,7 +199,7 @@ public class BrooklynServerPaths { } @Override protected String getDefaultPathFromConfig() { - Maybe<Object> result = brooklynProperties.getConfigRaw(BrooklynServerConfig.PERSISTENCE_BACKUPS_DIR, true); + Maybe<Object> result = brooklynProperties.getConfigLocalRaw(BrooklynServerConfig.PERSISTENCE_BACKUPS_DIR); if (result.isPresent()) return Strings.toString(result.get()); if (isBackupSameLocation()) { return backupContainerFor(brooklynProperties.getConfig(BrooklynServerConfig.PERSISTENCE_DIR)); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocation.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocation.java b/core/src/main/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocation.java index 1cabfc5..cc4c2d1 100644 --- a/core/src/main/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocation.java +++ b/core/src/main/java/org/apache/brooklyn/location/byon/FixedListMachineProvisioningLocation.java @@ -385,7 +385,7 @@ implements MachineProvisioningLocation<T>, Closeable { origConfigs.put(machine, origConfig); requestPersist(); - ((ConfigurationSupportInternal)machine.config()).set(strFlags); + ((ConfigurationSupportInternal)machine.config()).putAll(strFlags); } protected void restoreMachineConfig(MachineLocation machine) { @@ -402,7 +402,7 @@ implements MachineProvisioningLocation<T>, Closeable { for (String key : newKeys) { ((ConfigurationSupportInternal)machine.config()).removeKey(key); } - ((ConfigurationSupportInternal)machine.config()).set(origConfig); + ((ConfigurationSupportInternal)machine.config()).putAll(origConfig); } @SuppressWarnings("unchecked") http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java index 9f24b47..dab7238 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/ClassLoaderUtils.java @@ -107,7 +107,7 @@ public class ClassLoaderUtils { checkNotNull(callingClass, "callingClass"); this.classLoader = getValidClassLoader(callingClass.getClassLoader()); this.entity = null; - this.mgmt = checkNotNull(mgmt, "mgmt"); + this.mgmt = mgmt; } // class.getClassLoader() could return null for classes on the boot class path, http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java index 1ecc461..28abc86 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.util.core.task.ssh; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import javax.annotation.Nullable; @@ -32,28 +33,31 @@ import org.apache.brooklyn.api.mgmt.TaskAdaptable; import org.apache.brooklyn.api.mgmt.TaskFactory; import org.apache.brooklyn.api.mgmt.TaskQueueingContext; import org.apache.brooklyn.config.ConfigKey; +import org.apache.brooklyn.config.StringConfigMap; import org.apache.brooklyn.core.config.ConfigKeys; +import org.apache.brooklyn.core.config.ConfigPredicates; import org.apache.brooklyn.core.config.ConfigUtils; import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks; import org.apache.brooklyn.core.location.AbstractLocation; import org.apache.brooklyn.core.location.internal.LocationInternal; import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.apache.brooklyn.location.ssh.SshMachineLocation; +import org.apache.brooklyn.util.collections.MutableSet; import org.apache.brooklyn.util.core.ResourceUtils; -import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.internal.ssh.SshTool; import org.apache.brooklyn.util.core.task.DynamicTasks; import org.apache.brooklyn.util.core.task.Tasks; import org.apache.brooklyn.util.core.task.ssh.internal.PlainSshExecTaskFactory; import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory; import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper; +import org.apache.brooklyn.util.guava.Maybe; import org.apache.brooklyn.util.net.Urls; import org.apache.brooklyn.util.ssh.BashCommands; import org.apache.brooklyn.util.stream.Streams; import org.apache.brooklyn.util.text.Identifiers; import org.apache.brooklyn.util.text.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.annotations.Beta; import com.google.common.base.Function; @@ -122,22 +126,24 @@ public class SshTasks { } private static Map<String, Object> getSshFlags(Location location) { - ConfigBag allConfig = ConfigBag.newInstance(); + Set<ConfigKey<?>> sshConfig = MutableSet.of(); + StringConfigMap mgmtConfig = null; + sshConfig.addAll(location.config().findKeys(ConfigPredicates.nameStartsWith(SshTool.BROOKLYN_CONFIG_KEY_PREFIX))); if (location instanceof AbstractLocation) { ManagementContext mgmt = ((AbstractLocation)location).getManagementContext(); - if (mgmt!=null) - allConfig.putAll(mgmt.getConfig().getAllConfig()); + if (mgmt!=null) { + mgmtConfig = mgmt.getConfig(); + sshConfig.addAll(mgmtConfig.findKeys(ConfigPredicates.nameStartsWith(SshTool.BROOKLYN_CONFIG_KEY_PREFIX))); + } } - allConfig.putAll(((LocationInternal)location).config().getBag()); Map<String, Object> result = Maps.newLinkedHashMap(); - for (String keyS : allConfig.getAllConfig().keySet()) { - ConfigKey<?> key = ConfigKeys.newConfigKey(Object.class, keyS); - if (key.getName().startsWith(SshTool.BROOKLYN_CONFIG_KEY_PREFIX)) { - result.put(ConfigUtils.unprefixedKey(SshTool.BROOKLYN_CONFIG_KEY_PREFIX, key).getName(), allConfig.get(key)); - } + for (ConfigKey<?> key : sshConfig) { + Maybe<Object> v = ((LocationInternal)location).config().getRaw(key); + if (v.isAbsent() && mgmtConfig!=null) v = Maybe.of( (Object) mgmtConfig.getConfig(key) ); + result.put(ConfigUtils.unprefixedKey(SshTool.BROOKLYN_CONFIG_KEY_PREFIX, key).getName(), v.get()); } return result; } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/test/java/org/apache/brooklyn/core/entity/EntityConfigTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/EntityConfigTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/EntityConfigTest.java index af5e816..8e7603b 100644 --- a/core/src/test/java/org/apache/brooklyn/core/entity/EntityConfigTest.java +++ b/core/src/test/java/org/apache/brooklyn/core/entity/EntityConfigTest.java @@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; +import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -36,7 +37,6 @@ import org.apache.brooklyn.api.entity.ImplementedBy; import org.apache.brooklyn.api.mgmt.ExecutionManager; import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.config.ConfigPredicates; import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.IntegerAttributeSensorAndConfigKey; @@ -327,14 +327,17 @@ public class EntityConfigTest extends BrooklynAppUnitTestSupport { assertEquals(entity.getConfig(MySubEntity.SUPER_KEY_2), "changed"); } + // Sept 2016 previously tested submap here, but we've deprecated that + // (it was failing also due to the new approach, and not worth fixing) @Test - public void testConfigSubMap() throws Exception { + public void testConfigFilter() throws Exception { MySubEntity entity = app.addChild(EntitySpec.create(MySubEntity.class)); entity.config().set(MyBaseEntity.SUPER_KEY_1, "s1"); entity.config().set(MySubEntity.SUB_KEY_2, "s2"); - ConfigMap sub = entity.config().getInternalConfigMap().submap(ConfigPredicates.nameMatchesGlob("sup*")); - Assert.assertEquals(sub.getConfigRaw(MyBaseEntity.SUPER_KEY_1, true).get(), "s1"); - Assert.assertFalse(sub.getConfigRaw(MySubEntity.SUB_KEY_2, true).isPresent()); + Set<ConfigKey<?>> filteredKeys = entity.config().getInternalConfigMap().findKeys(ConfigPredicates.nameMatchesGlob("sup*")); + Assert.assertTrue(filteredKeys.contains(MyBaseEntity.SUPER_KEY_1)); + Assert.assertFalse(filteredKeys.contains(MySubEntity.SUB_KEY_2)); + Assert.assertEquals(filteredKeys.size(), 1); } @SuppressWarnings({ "rawtypes", "unchecked" }) http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java index 4ab2f1f..00c3432 100644 --- a/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java +++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/rebind/RebindFailuresTest.java @@ -40,7 +40,6 @@ import org.apache.brooklyn.api.sensor.AttributeSensor; import org.apache.brooklyn.api.sensor.Enricher; import org.apache.brooklyn.api.sensor.EnricherSpec; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.config.ConfigMap; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.core.enricher.AbstractEnricher; import org.apache.brooklyn.core.entity.EntityFunctions; @@ -219,22 +218,15 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp { } public static class MyPolicyFailingImpl extends AbstractPolicy { - @SetFromFlag("failOnGenerateMemento") - public static final ConfigKey<Boolean> FAIL_ON_GENERATE_MEMENTO = ConfigKeys.newBooleanConfigKey("failOnGenerateMemento", "Whether to throw exception when generating memento", false); + // would be nice to test this -- how to intercept memento generation? + // (code was here but not used) +// @SetFromFlag("failOnGenerateMemento") +// public static final ConfigKey<Boolean> FAIL_ON_GENERATE_MEMENTO = ConfigKeys.newBooleanConfigKey("failOnGenerateMemento", "Whether to throw exception when generating memento", false); @SetFromFlag("failOnRebind") public static final ConfigKey<Boolean> FAIL_ON_REBIND = ConfigKeys.newBooleanConfigKey("failOnRebind", "Whether to throw exception when rebinding", false); @Override - public ConfigMap getConfigMap() { - if (Boolean.TRUE.equals(getConfig(FAIL_ON_GENERATE_MEMENTO))) { - throw new RuntimeException("Simulating failure in "+this+", which will cause memento-generation to fail"); - } else { - return super.getConfigMap(); - } - } - - @Override public void rebind() { if (Boolean.TRUE.equals(getConfig(FAIL_ON_REBIND))) { throw new RuntimeException("Simulating failure in "+this+", which will cause rebind to fail"); @@ -243,22 +235,14 @@ public class RebindFailuresTest extends RebindTestFixtureWithApp { } public static class MyEnricherFailingImpl extends AbstractEnricher { - @SetFromFlag("failOnGenerateMemento") - public static final ConfigKey<Boolean> FAIL_ON_GENERATE_MEMENTO = ConfigKeys.newBooleanConfigKey("failOnGenerateMemento", "Whether to throw exception when generating memento", false); + // would be nice to test this -- see MyPolicyFailingImpl +// @SetFromFlag("failOnGenerateMemento") +// public static final ConfigKey<Boolean> FAIL_ON_GENERATE_MEMENTO = ConfigKeys.newBooleanConfigKey("failOnGenerateMemento", "Whether to throw exception when generating memento", false); @SetFromFlag("failOnRebind") public static final ConfigKey<Boolean> FAIL_ON_REBIND = ConfigKeys.newBooleanConfigKey("failOnRebind", "Whether to throw exception when rebinding", false); @Override - public ConfigMap getConfigMap() { - if (Boolean.TRUE.equals(getConfig(FAIL_ON_GENERATE_MEMENTO))) { - throw new RuntimeException("Simulating failure in "+this+", which will cause memento-generation to fail"); - } else { - return super.getConfigMap(); - } - } - - @Override public void rebind() { if (Boolean.TRUE.equals(getConfig(FAIL_ON_REBIND))) { throw new RuntimeException("Simulating failure in "+this+", which will cause rebind to fail"); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/core/src/test/java/org/apache/brooklyn/util/core/internal/FlagUtilsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/FlagUtilsTest.java b/core/src/test/java/org/apache/brooklyn/util/core/internal/FlagUtilsTest.java index 905674a..792b441 100644 --- a/core/src/test/java/org/apache/brooklyn/util/core/internal/FlagUtilsTest.java +++ b/core/src/test/java/org/apache/brooklyn/util/core/internal/FlagUtilsTest.java @@ -37,6 +37,7 @@ import org.apache.brooklyn.core.config.BasicConfigKey; import org.apache.brooklyn.core.config.ConfigKeys; import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.collections.MutableMap; +import org.apache.brooklyn.util.collections.MutableSet; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.flags.FlagUtils; import org.apache.brooklyn.util.core.flags.FlagUtils.FlagConfigKeyAndValueRecord; @@ -48,6 +49,7 @@ import org.testng.annotations.Test; import com.google.common.base.Function; import com.google.common.base.Objects; +import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -403,6 +405,11 @@ public class FlagUtilsTest { public <T> T set(HasConfigKey<T> key, Task<T> val) { return set(key.getConfigKey(), val); } + + @Override + public Set<ConfigKey<?>> findKeys(Predicate<ConfigKey<?>> predicate) { + return MutableSet.copyOf(Iterables.filter(bag.getAllConfigAsConfigKeyMap().keySet(), predicate)); + } } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java index 7bd0381..dac284f 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsByonLocationResolver.java @@ -154,7 +154,7 @@ public class JcloudsByonLocationResolver extends AbstractLocationResolver implem JcloudsLocation jcloudsLocation = (JcloudsLocation) managementContext.getLocationManager().createLocation(jcloudsLocationSpec.get()); for (Map<?,?> machineFlags : machinesFlags) { try { - jcloudsLocation.config().set(machineFlags); + jcloudsLocation.config().putAll(machineFlags); JcloudsMachineLocation machine = jcloudsLocation.registerMachine(jcloudsLocation.config().getBag()); result.add(machine); } catch (NoMachinesAvailableException e) { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java index f6f31a8..31bf4dc 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java @@ -249,7 +249,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im if (config().getLocalBag().containsKey("providerLocationId")) { LOG.warn("Using deprecated 'providerLocationId' key in "+this); if (!config().getLocalBag().containsKey(CLOUD_REGION_ID)) - config().set(MutableMap.of(CLOUD_REGION_ID.getName(), (String)config().getLocalBag().getStringKey("providerLocationId"))); + config().putAll(MutableMap.of(CLOUD_REGION_ID.getName(), (String)config().getLocalBag().getStringKey("providerLocationId"))); } if (isDisplayNameAutoGenerated() || !groovyTruth(getDisplayName())) { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java index b73e7ec..c935ea8 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/templates/AbstractPortableTemplateBuilder.java @@ -453,7 +453,7 @@ public abstract class AbstractPortableTemplateBuilder<T extends AbstractPortable if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; - AbstractPortableTemplateBuilder other = (AbstractPortableTemplateBuilder) obj; + AbstractPortableTemplateBuilder<?> other = (AbstractPortableTemplateBuilder<?>) obj; if (!Objects.equal(additionalOptions, other.additionalOptions)) return false; if (!Objects.equal(commands, other.commands)) return false; if (!Objects.equal(locationId, other.locationId)) return false; http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java index 69342a0..591c4ab 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/BrooklynWebConfig.java @@ -158,7 +158,7 @@ public class BrooklynWebConfig { "SSL_RSA_WITH_3DES_EDE_CBC_SHA"); public final static boolean hasNoSecurityOptions(ConfigMap config) { - return config.submap(ConfigPredicates.nameStartsWith(BASE_NAME_SECURITY)).isEmpty(); + return config.findKeys(ConfigPredicates.nameStartsWith(BASE_NAME_SECURITY)).isEmpty(); } - + } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java index f682d37..5a2ac0d 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/EntityConfigResource.java @@ -28,6 +28,7 @@ import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.config.BasicConfigKey; import org.apache.brooklyn.core.entity.Entities; import org.apache.brooklyn.core.entity.EntityInternal; +import org.apache.brooklyn.core.entity.internal.EntityConfigMap; import org.apache.brooklyn.core.mgmt.entitlement.Entitlements; import org.apache.brooklyn.core.mgmt.entitlement.Entitlements.EntityAndItem; import org.apache.brooklyn.rest.api.EntityConfigApi; @@ -43,7 +44,6 @@ import org.apache.brooklyn.util.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Predicates; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -107,9 +107,10 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement @Override public Map<String, Object> call() throws Exception { - Map<ConfigKey<?>, ?> source = ((EntityInternal) entity).config().getBag().getAllConfigAsConfigKeyMap(); + // TODO on API for this, and other config (location, policy, etc), support requesting local v inherited and resolved v raw + Map<ConfigKey<?>, Object> source = ( (EntityConfigMap)((EntityInternal) entity).config().getInternalConfigMap() ).getAllConfigInheritedRawValuesIgnoringErrors(); Map<String, Object> result = Maps.newLinkedHashMap(); - for (Map.Entry<ConfigKey<?>, ?> ek : source.entrySet()) { + for (Map.Entry<ConfigKey<?>, Object> ek : source.entrySet()) { ConfigKey<?> key = ek.getKey(); Object value = ek.getValue(); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java index c8a7962..e289e93 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/resources/PolicyConfigResource.java @@ -34,6 +34,7 @@ import org.apache.brooklyn.rest.filter.HaHotStateRequired; import org.apache.brooklyn.rest.transform.PolicyTransformer; import org.apache.brooklyn.rest.util.BrooklynRestResourceUtils; import org.apache.brooklyn.rest.util.WebResourceUtils; +import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.flags.TypeCoercions; import com.google.common.collect.Lists; @@ -61,7 +62,8 @@ public class PolicyConfigResource extends AbstractBrooklynRestResource implement public Map<String, Object> batchConfigRead(String application, String entityToken, String policyToken) { // TODO: add test Policy policy = brooklyn().getPolicy(application, entityToken, policyToken); - Map<String, Object> source = ((BrooklynObjectInternal)policy).config().getBag().getAllConfig(); + Map<String, Object> source = ConfigBag.newInstance( + ((BrooklynObjectInternal)policy).config().getInternalConfigMap().getAllConfigInheritedRawValuesIgnoringErrors() ).getAllConfig(); Map<String, Object> result = Maps.newLinkedHashMap(); for (Map.Entry<String, Object> ek : source.entrySet()) { result.put(ek.getKey(), getStringValueForDisplay(brooklyn(), policy, ek.getValue())); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java index a9ae1d3..c612c6f 100644 --- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java +++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/transform/LocationTransformer.java @@ -176,21 +176,20 @@ public class LocationTransformer { if (ll!=null) specId = ll.getId(); } - Map<String, Object> configOrig; + ConfigBag configOrig = ConfigBag.newInstance(); if (level == LocationDetailLevel.LOCAL_EXCLUDING_SECRET) { - configOrig = MutableMap.copyOf(((LocationInternal)l).config().getLocalBag().getAllConfig()); + configOrig.putAll( ((LocationInternal)l).config().getInternalConfigMap().getAllConfigLocalRaw() ); } else { - configOrig = MutableMap.copyOf(((LocationInternal)l).config().getBag().getAllConfig()); + configOrig.putAll( ((LocationInternal)l).config().getInternalConfigMap().getAllConfigInheritedRawValuesIgnoringErrors() ); } if (level==LocationDetailLevel.LOCAL_EXCLUDING_SECRET) { - // for LOCAL, also get the display name - if (!configOrig.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) { - Map<String, Object> configExtra = ((LocationInternal)l).config().getBag().getAllConfig(); - if (configExtra.containsKey(LocationConfigKeys.DISPLAY_NAME.getName())) - configOrig.put(LocationConfigKeys.DISPLAY_NAME.getName(), configExtra.get(LocationConfigKeys.DISPLAY_NAME.getName())); + // for LOCAL, also get an inherited display name + if (!configOrig.containsKey(LocationConfigKeys.DISPLAY_NAME)) { + Maybe<Object> dn = ((LocationInternal)l).config().getRaw(LocationConfigKeys.DISPLAY_NAME); + if (dn.isPresent()) configOrig.configure(LocationConfigKeys.DISPLAY_NAME, l.config().get(LocationConfigKeys.DISPLAY_NAME)); } } - Map<String, ?> config = level==LocationDetailLevel.NONE ? null : copyConfig(configOrig, level); + Map<String, ?> config = level==LocationDetailLevel.NONE ? null : copyConfig(configOrig.getAllConfig(), level); URI selfUri = serviceUriBuilder(ub, LocationApi.class, "get").build(l.getId()); URI parentUri = l.getParent() == null ? null : serviceUriBuilder(ub, LocationApi.class, "get").build(l.getParent().getId()); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/LocationResourceTest.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/LocationResourceTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/LocationResourceTest.java index c0131b2..629dc3c 100644 --- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/LocationResourceTest.java +++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/resources/LocationResourceTest.java @@ -26,11 +26,19 @@ import java.util.Map; import java.util.Set; import javax.annotation.Nullable; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import org.apache.brooklyn.api.location.LocationSpec; import org.apache.brooklyn.core.location.LocationConfigKeys; +import org.apache.brooklyn.core.location.SimulatedLocation; import org.apache.brooklyn.location.byon.FixedListMachineProvisioningLocation; +import org.apache.brooklyn.location.jclouds.JcloudsLocation; +import org.apache.brooklyn.rest.domain.CatalogLocationSummary; +import org.apache.brooklyn.rest.domain.LocationSummary; +import org.apache.brooklyn.rest.testing.BrooklynRestResourceTest; +import org.apache.brooklyn.test.Asserts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; @@ -41,15 +49,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; -import javax.ws.rs.core.GenericType; - -import org.apache.brooklyn.api.location.LocationSpec; -import org.apache.brooklyn.core.location.SimulatedLocation; -import org.apache.brooklyn.location.jclouds.JcloudsLocation; -import org.apache.brooklyn.rest.domain.CatalogLocationSummary; -import org.apache.brooklyn.rest.domain.LocationSummary; -import org.apache.brooklyn.rest.testing.BrooklynRestResourceTest; -import org.apache.brooklyn.test.Asserts; @Test(singleThreaded = true, @@ -226,7 +225,7 @@ public class LocationResourceTest extends BrooklynRestResourceTest { log.info(" summary: " + locationSummary); Assert.assertEquals(locationSummary.getConfig().get(LocationConfigKeys.DISPLAY_NAME.getName()), configDisplayName); - FixedListMachineProvisioningLocation l = (FixedListMachineProvisioningLocation) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); + FixedListMachineProvisioningLocation<?> l = (FixedListMachineProvisioningLocation<?>) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); Assert.assertEquals(l.getDisplayName(), configDisplayName); } @@ -261,7 +260,7 @@ public class LocationResourceTest extends BrooklynRestResourceTest { log.info(" summary: " + locationSummary); Assert.assertEquals(locationSummary.getConfig().get(LocationConfigKeys.DISPLAY_NAME.getName()), testsDisplayName); - FixedListMachineProvisioningLocation l = (FixedListMachineProvisioningLocation) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); + FixedListMachineProvisioningLocation<?> l = (FixedListMachineProvisioningLocation<?>) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); Assert.assertEquals(l.getDisplayName(), testsDisplayName); } @@ -298,7 +297,7 @@ public class LocationResourceTest extends BrooklynRestResourceTest { log.info(" summary: " + locationSummary); Assert.assertEquals(locationSummary.getConfig().get(LocationConfigKeys.DISPLAY_NAME.getName()), configDisplayName); - FixedListMachineProvisioningLocation l = (FixedListMachineProvisioningLocation) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); + FixedListMachineProvisioningLocation<?> l = (FixedListMachineProvisioningLocation<?>) getManagementContext().getLocationRegistry().getLocationManaged(symbolicName); Assert.assertEquals(l.getDisplayName(), configDisplayName); } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/EntityLocationUtilsTest.java ---------------------------------------------------------------------- diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/EntityLocationUtilsTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/EntityLocationUtilsTest.java index 3aee845..2559350 100644 --- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/EntityLocationUtilsTest.java +++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/EntityLocationUtilsTest.java @@ -63,7 +63,7 @@ public class EntityLocationUtilsTest extends BrooklynAppUnitTestSupport { Entities.dumpInfo(app); log.info("r2loc: "+r2.getLocations()); - log.info("props: "+((LocationInternal)r2.getLocations().iterator().next()).config().getBag().getAllConfig()); + log.info("props: "+((LocationInternal)r2.getLocations().iterator().next()).config().getInternalConfigMap().getAllConfigInheritedRawValuesIgnoringErrors()); Map<Location, Integer> counts = new EntityLocationUtils(mgmt).countLeafEntitiesByLocatedLocations(); log.info("count: "+counts); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java ---------------------------------------------------------------------- diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java index 67128c1..93e84a1 100644 --- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java +++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/effector/BrooklynNodeUpgradeEffectorBody.java @@ -145,7 +145,7 @@ public class BrooklynNodeUpgradeEffectorBody extends EffectorBody<Void> { DynamicTasks.waitForLast(); ((EntityInternal)entity()).sensors().set(SoftwareProcess.INSTALL_DIR, (String)null); entity().config().set(SoftwareProcess.INSTALL_UNIQUE_LABEL, (String)null); - entity().config().set(parameters.getAllConfig()); + entity().config().putAll(parameters.getAllConfig()); entity().sensors().set(BrooklynNode.DOWNLOAD_URL, entity().getConfig(DOWNLOAD_URL)); // Setting SUGGESTED_VERSION will result in an new empty INSTALL_FOLDER, but clear it http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/0d655e05/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessTest.java ---------------------------------------------------------------------- diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessTest.java index 2362ec5..ae2cb73 100644 --- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessTest.java +++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessTest.java @@ -289,8 +289,7 @@ public class VanillaSoftwareProcessTest extends BrooklynAppUnitTestSupport { app.start(ImmutableList.of(loc)); // since app does not define it, the child *should* run it - // TODO the following line should execute, when we fix not_reinherited semantics -// assertExecHasOnlyOnce(RecordingSshTool.getExecCmds(), "preInstallCommand"); + assertExecHasOnlyOnce(RecordingSshTool.getExecCmds(), "preInstallCommand"); assertExecHasOnlyOnce(RecordingSshTool.getExecCmds(), "launchCommand"); } }