You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/09/22 21:09:42 UTC

[10/22] brooklyn-server git commit: sketch better api, remove deprecation, tidy map interfaces

sketch better api, remove deprecation, tidy map interfaces


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

Branch: refs/heads/master
Commit: 5e2b7d4b5df57b004e1cc7ac12ef8d215ccc51a4
Parents: 3e266e6
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Sep 20 10:21:28 2016 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Sep 21 16:06:06 2016 +0100

----------------------------------------------------------------------
 .../apache/brooklyn/api/entity/EntityLocal.java |  5 --
 .../ExternalConfigBrooklynPropertiesTest.java   |  2 +-
 .../config/internal/AbstractConfigMapImpl.java  | 24 +++---
 .../brooklyn/core/entity/AbstractEntity.java    |  6 --
 .../core/entity/internal/EntityConfigMap.java   | 77 ++++++--------------
 .../internal/EntityTransientCopyInternal.java   |  7 --
 .../core/internal/BrooklynProperties.java       | 15 ++--
 .../core/internal/BrooklynPropertiesImpl.java   | 10 +--
 .../internal/DeferredBrooklynProperties.java    |  5 +-
 .../brooklyn/core/objs/AdjunctConfigMap.java    |  9 +--
 .../org/apache/brooklyn/config/ConfigMap.java   | 45 ++++++------
 .../util/exceptions/ReferenceWithError.java     |  2 +-
 12 files changed, 78 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/api/src/main/java/org/apache/brooklyn/api/entity/EntityLocal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/entity/EntityLocal.java b/api/src/main/java/org/apache/brooklyn/api/entity/EntityLocal.java
index aeb7249..4e4e75f 100644
--- a/api/src/main/java/org/apache/brooklyn/api/entity/EntityLocal.java
+++ b/api/src/main/java/org/apache/brooklyn/api/entity/EntityLocal.java
@@ -95,11 +95,6 @@ public interface EntityLocal extends Entity {
      * @deprecated in 0.5; use {@link #getConfig(ConfigKey)}
      */
     <T> T getConfig(ConfigKey<T> key, T defaultValue);
-    
-    /**
-     * @deprecated in 0.5; use {@link #getConfig(HasConfigKey)}
-     */
-    <T> T getConfig(HasConfigKey<T> key, T defaultValue);
 
     /**
      * Allow us to subscribe to data from a {@link Sensor} on another entity.

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
index afa3b36..d7f09de 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigBrooklynPropertiesTest.java
@@ -126,7 +126,7 @@ public class ExternalConfigBrooklynPropertiesTest extends AbstractYamlTest {
         String val1 = props.getConfig(ConfigKeys.newStringConfigKey(property));
         assertEquals(val1, expectedVal);
         
-        DeferredSupplier<?> val2 = (DeferredSupplier<?>) props.getRawConfig(ConfigKeys.newStringConfigKey(property));
+        DeferredSupplier<?> val2 = (DeferredSupplier<?>) props.getConfigRaw(ConfigKeys.newStringConfigKey(property)).get();
         assertEquals(Tasks.resolveValue(val2, String.class, exec), expectedVal);
         
         DeferredSupplier<?> val3 = (DeferredSupplier<?>) props.getConfigRaw(ConfigKeys.newStringConfigKey(property), false).get();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java b/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
index 26e44b6..eb99157 100644
--- a/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
@@ -24,8 +24,9 @@ import java.util.Map;
 import java.util.concurrent.Future;
 
 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.config.Sanitizer;
 import org.apache.brooklyn.core.config.StructuredConfigKey;
 import org.apache.brooklyn.core.entity.internal.ConfigMapViewWithStringKeys;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
@@ -51,19 +52,12 @@ public abstract class AbstractConfigMapImpl implements ConfigMap {
         return getConfig(key, null);
     }
     
+    protected abstract <T> T getConfig(ConfigKey<T> key, T defaultValue);
+
     public <T> T getConfig(HasConfigKey<T> key) {
         return getConfig(key.getConfigKey(), null);
     }
     
-    public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
-        return getConfig(key.getConfigKey(), defaultValue);
-    }
-    
-    @Override @Deprecated
-    public Object getRawConfig(ConfigKey<?> key) {
-        return getConfigRaw(key, true).orNull();
-    }
-    
     @Override
     public Maybe<Object> getConfigLocalRaw(ConfigKey<?> key) {
         return getConfigRaw(key, false);
@@ -113,4 +107,14 @@ public abstract class AbstractConfigMapImpl implements ConfigMap {
     public boolean isEmpty() {
         return ownConfig.isEmpty();
     }
+    
+    @Override
+    public String toString() {
+        Map<ConfigKey<?>, Object> sanitizeConfig;
+        synchronized (ownConfig) {
+            sanitizeConfig = Sanitizer.sanitize(ownConfig);
+        }
+        return super.toString()+"[local="+sanitizeConfig+"]";
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
index 0b40e32..750adb2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/AbstractEntity.java
@@ -1304,12 +1304,6 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
         return config().get(key);
     }
     
-    @Override
-    @Deprecated
-    public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
-        return configsInternal.getConfig(key, defaultValue);
-    }
-    
     //don't use groovy defaults for defaultValue as that doesn't implement the contract; we need the above
     @Override
     @Deprecated

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
index 9014d84..a76a592 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityConfigMap.java
@@ -60,9 +60,6 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
 
     /** entity against which config resolution / task execution will occur */
     private final AbstractEntity entity;
-    /** config bag cache for local anonymous key lookup */
-    // TODO this could be removed and everything made more like AdjunctConfigMap
-    private final ConfigBag ownConfigBag;
 
     public EntityConfigMap(AbstractEntity entity) {
         // Not using ConcurrentMap, because want to (continue to) allow null values.
@@ -73,21 +70,8 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
     public EntityConfigMap(AbstractEntity entity, Map<ConfigKey<?>, Object> storage) {
         this.entity = checkNotNull(entity, "entity must be specified");
         this.ownConfig = checkNotNull(storage, "storage map must be specified");
-        this.ownConfigBag = ConfigBag.newInstance();
     }
     
-    /* These flags are included for documentation.
-     * Changes will require testing.
-     * Note that trying to get a raw inherited value can be problematic
-     * if it is merging resolved values.
-     */
-    final static boolean RESOLVE_AND_COERCE_EXTRACTING_KEYS = true;
-    final static boolean COERCE_DEFAULT_VALUES = true;
-    // TODO We're notifying of config-changed because currently persistence needs to know when the
-    // attributeWhenReady is complete (so it can persist the result).
-    // Long term, we'll just persist tasks properly so the call to onConfigChanged will go!
-    final static boolean NOTIFY_ON_TASK_RESOLUTION = true;
-
     protected static class LocalEvaluateKeyValue<T> implements Function<Entity,Maybe<T>> {
         ConfigKey<T> keyIgnoringInheritance;
         
@@ -100,28 +84,32 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
             ExecutionContext exec = ((EntityInternal)entity).getExecutionContext();
             ConfigMap configMap = ((ConfigurationSupportInternal)entity.config()).getInternalConfigMap();
             Map<ConfigKey<?>,Object> ownConfig = ((EntityConfigMap)configMap).ownConfig;
-            ConfigBag ownConfigBag = ((EntityConfigMap)configMap).ownConfigBag;
             Maybe<Object> rawValue = configMap.getConfigLocalRaw(keyIgnoringInheritance);
             Maybe<T> ownValue;
             
             // Get own value
-            if (RESOLVE_AND_COERCE_EXTRACTING_KEYS && keyIgnoringInheritance instanceof ConfigKeySelfExtracting && ((ConfigKeySelfExtracting<T>)keyIgnoringInheritance).isSet(ownConfig)) {
-                Map<ConfigKey<?>, ?> ownCopy;
-                synchronized (ownConfig) {
-                    // TODO wasteful to make a copy to look up; maybe try once opportunistically?
-                    ownCopy = MutableMap.copyOf(ownConfig);
+            if (keyIgnoringInheritance instanceof ConfigKeySelfExtracting) {
+                if (((ConfigKeySelfExtracting<T>)keyIgnoringInheritance).isSet(ownConfig)) {
+                    Map<ConfigKey<?>, ?> ownCopy;
+                    synchronized (ownConfig) {
+                        // TODO wasteful to make a copy to look up; maybe try once opportunistically?
+                        ownCopy = MutableMap.copyOf(ownConfig);
+                    }
+                    ownValue = Maybe.of(((ConfigKeySelfExtracting<T>) keyIgnoringInheritance).extractValue(ownCopy, exec));
+                } else {
+                    ownValue = Maybe.<T>absent();
                 }
-                ownValue = Maybe.of(((ConfigKeySelfExtracting<T>) keyIgnoringInheritance).extractValue(ownCopy, exec));
-            } else if (ownConfigBag.containsKey(keyIgnoringInheritance)) {
-                // TODO configBag.get doesn't handle tasks/attributeWhenReady - it only uses TypeCoercions
-                // Precedence ordering has changed; previously we'd prefer an explicit isSet(inheritedConfig)
-                // over the localConfigBag.get(key).
-                ownValue = Maybe.of(ownConfigBag.get(keyIgnoringInheritance));
             } else {
+                // all our keys are self-extracting
+                LOG.warn("Unexpected key type "+keyIgnoringInheritance+" ("+keyIgnoringInheritance.getClass()+") in "+entity+"; ignoring value");
                 ownValue = Maybe.<T>absent();
             }
-            
-            if (NOTIFY_ON_TASK_RESOLUTION && rawValue.isPresent() && (rawValue.get() instanceof Task)) {
+
+            // TEMPORARY CODE
+            // We're notifying of config-changed because currently persistence needs to know when the
+            // attributeWhenReady is complete (so it can persist the result).
+            // Long term, we'll just persist tasks properly so the call to onConfigChanged will go!
+            if (rawValue.isPresent() && (rawValue.get() instanceof Task)) {
                 ((EntityInternal)entity).getManagementSupport().getEntityChangeListener().onConfigChanged(keyIgnoringInheritance);
             }
             
@@ -152,7 +140,7 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
         } else {
             LOG.warn("Config key {} of {} is not a ConfigKeySelfExtracting; cannot retrieve value; returning default", ownKey, this);
         }
-        return COERCE_DEFAULT_VALUES ? TypeCoercions.coerce(defaultValue, key.getTypeToken()) : defaultValue;
+        return TypeCoercions.coerce(defaultValue, key.getTypeToken());
     }
 
     private ConfigInheritance getDefaultRuntimeInheritance() {
@@ -186,8 +174,7 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
     /** Creates an immutable copy of the config visible at this entity, local and inherited (preferring local), including those that did not match config keys */
     // TODO deprecate because key inheritance not respected
     public ConfigBag getAllConfigBag() {
-        ConfigBag result = ConfigBag.newInstanceCopying(ownConfigBag)
-                .putAll(ownConfig);
+        ConfigBag result = ConfigBag.newInstance().putAll(ownConfig);
         if (entity.getParent()!=null) {
             result.putIfAbsent(
                 ((EntityConfigMap) ((BrooklynObjectInternal)entity.getParent()).config().getInternalConfigMap()).getAllConfigBag() );
@@ -197,9 +184,7 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
 
     /** Creates an immutable copy of the config defined at this entity, ie not inherited, including those that did not match config keys */
     public ConfigBag getLocalConfigBag() {
-        return ConfigBag.newInstanceCopying(ownConfigBag)
-                .putAll(ownConfig)
-                .seal();
+        return ConfigBag.newInstance().putAll(ownConfig).seal();
     }
 
     @SuppressWarnings("unchecked")
@@ -208,13 +193,8 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
         Object oldVal;
         if (key instanceof StructuredConfigKey) {
             oldVal = ((StructuredConfigKey)key).applyValueToMap(val, ownConfig);
-            // TODO ConfigBag does not handle structured config keys; quick fix is to remove (and should also remove any subkeys;
-            // as it stands if someone set string a.b.c in the config bag then removed structured key a.b, then got a.b.c they'd get a vale);
-            // long term fix is to support structured config keys in ConfigBag, at which point i think we could remove ownConfig altogether
-            ownConfigBag.remove(key);
         } else {
             oldVal = ownConfig.put(key, val);
-            ownConfigBag.put((ConfigKey<Object>)key, v);
         }
         entity.config().refreshInheritedConfigOfChildren();
         return oldVal;
@@ -223,20 +203,17 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
     public void setLocalConfig(Map<ConfigKey<?>, ?> vals) {
         synchronized (ownConfig) {
             ownConfig.clear();
-            ownConfigBag.clear();
             ownConfig.putAll(vals);
-            ownConfigBag.putAll(vals);
         }
     }
  
     public void addToLocalBag(Map<String,?> vals) {
-        ownConfigBag.putAll(vals);
+        ConfigBag ownConfigBag = ConfigBag.newInstance().putAll(vals);
         // TODO quick fix for problem that ownConfig can get out of synch
         ownConfig.putAll(ownConfigBag.getAllConfigAsConfigKeyMap());
     }
 
     public void removeFromLocalBag(String key) {
-        ownConfigBag.remove(key);
         ownConfig.remove(key);
     }
 
@@ -254,7 +231,6 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
         if (entity.getParent()!=null) {
             merge(m, ((EntityConfigMap) ((ConfigurationSupportInternal)entity.getParent().config()).getInternalConfigMap()).submap(filter));
         }
-        m.ownConfigBag.putAll(ownConfig);
         return m;
     }
 
@@ -267,13 +243,4 @@ public class EntityConfigMap extends AbstractConfigMapImpl {
         }
     }
 
-    @Override
-    public String toString() {
-        Map<ConfigKey<?>, Object> sanitizeConfig;
-        synchronized (ownConfig) {
-            sanitizeConfig = Sanitizer.sanitize(ownConfig);
-        }
-        return super.toString()+"[local="+sanitizeConfig+"]";
-    }
-    
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
index 09a8fdf..c462728 100644
--- a/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/entity/internal/EntityTransientCopyInternal.java
@@ -84,13 +84,6 @@ public interface EntityTransientCopyInternal {
     TagSupport tags();
     String getCatalogItemId();
 
-    
-    // from entity local
-    
-    @Deprecated <T> T getConfig(ConfigKey<T> key, T defaultValue);
-    @Deprecated <T> T getConfig(HasConfigKey<T> key, T defaultValue);
-
-    
     // from EntityInternal:
     
     @Deprecated EntityConfigMap getConfigMap();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynProperties.java
index 3d0b128..1bed084 100644
--- a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynProperties.java
+++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynProperties.java
@@ -298,15 +298,20 @@ public interface BrooklynProperties extends Map, StringConfigMap {
     @Override
     public <T> T getConfig(HasConfigKey<T> key);
 
-    @Override
     public <T> T getConfig(HasConfigKey<T> key, T defaultValue);
 
-    @Override
+    
+    /**
+     * Returns value stored against the given key,
+     * resolved (if it is a Task, possibly blocking), and coerced to the appropriate type, 
+     * or given default value if not set, 
+     * unless the default value is null in which case it returns the default.
+     */
     public <T> T getConfig(ConfigKey<T> key, T defaultValue);
 
-    @Override
-    public Object getRawConfig(ConfigKey<?> key);
-    
+    public Maybe<Object> getConfigRaw(ConfigKey<?> key);
+
+    /** Inheritance is ignored here. Preferable to use {@link #getConfigRaw(ConfigKey)}. */
     @Override
     public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
index d4593b3..9ed6a17 100644
--- a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynPropertiesImpl.java
@@ -439,19 +439,19 @@ public class BrooklynPropertiesImpl extends LinkedHashMap implements BrooklynPro
     }
 
     @Override
-    public Object getRawConfig(ConfigKey<?> key) {
-        return get(key.getName());
+    public Maybe<Object> getConfigRaw(ConfigKey<?> key) {
+        if (containsKey(key.getName())) return Maybe.of(get(key.getName()));
+        return Maybe.absent();
     }
     
     @Override
     public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
-        if (containsKey(key.getName())) return Maybe.of(get(key.getName()));
-        return Maybe.absent();
+        return getConfigRaw(key);
     }
 
     @Override
     public Maybe<Object> getConfigLocalRaw(ConfigKey<?> key) {
-        return getConfigRaw(key, false);
+        return getConfigRaw(key);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/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 4e3d342..2495557 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
@@ -126,10 +126,9 @@ public class DeferredBrooklynProperties implements BrooklynProperties {
         return resolve(key, raw);
     }
 
-    @Deprecated
     @Override
-    public Object getRawConfig(ConfigKey<?> key) {
-        return transform(key, delegate.getRawConfig(key));
+    public Maybe<Object> getConfigRaw(ConfigKey<?> key) {
+        return getConfigRaw(key, true);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/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 f0b0811..87e602b 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
@@ -27,7 +27,6 @@ import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.mgmt.ExecutionContext;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.config.Sanitizer;
 import org.apache.brooklyn.core.config.StructuredConfigKey;
 import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl;
 import org.apache.brooklyn.core.entity.EntityInternal;
@@ -63,8 +62,7 @@ public class AdjunctConfigMap extends AbstractConfigMapImpl {
     }
 
     @SuppressWarnings("unchecked")
-    @Override
-    public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
+    protected <T> T getConfig(ConfigKey<T> key, T defaultValue) {
         // FIXME What about inherited task in config?!
         //              alex says: think that should work, no?
         // FIXME What if someone calls getConfig on a task, before setting parent app?
@@ -131,9 +129,4 @@ public class AdjunctConfigMap extends AbstractConfigMapImpl {
         return m;
     }
 
-    @Override
-    public String toString() {
-        return super.toString()+"[own="+Sanitizer.sanitize(ownConfig)+"]";
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/utils/common/src/main/java/org/apache/brooklyn/config/ConfigMap.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/config/ConfigMap.java b/utils/common/src/main/java/org/apache/brooklyn/config/ConfigMap.java
index 7838b15..933e0e7 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/config/ConfigMap.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/config/ConfigMap.java
@@ -32,30 +32,7 @@ public interface ConfigMap {
     
     /** @see #getConfig(ConfigKey, Object), with default value as per the key, or null */
     public <T> T getConfig(HasConfigKey<T> key);
-    
-    /**
-     * @see #getConfig(ConfigKey, Object), with provided default value if not set
-     * @deprecated since 0.7.0; use {@link #getConfig(HasConfigKey)}
-     */
-    @Deprecated
-    public <T> T getConfig(HasConfigKey<T> key, T defaultValue);
-    
-    /**
-     * Returns value stored against the given key,
-     * resolved (if it is a Task, possibly blocking), and coerced to the appropriate type, 
-     * or given default value if not set, 
-     * unless the default value is null in which case it returns the default.
-     * 
-     * @deprecated since 0.7.0; use {@link #getConfig(ConfigKey)}
-     */
-    @Deprecated
-    public <T> T getConfig(ConfigKey<T> key, T defaultValue);
 
-    /** as {@link #getConfigRaw(ConfigKey)} but returning null if not present 
-     * @deprecated since 0.7.0 use {@link #getConfigRaw(ConfigKey)} */
-    @Deprecated
-    public Object getRawConfig(ConfigKey<?> key);
-    
     /** returns the value stored against the given key, 
      * <b>not</b> any default,
      * <b>not</b> resolved (and guaranteed non-blocking),
@@ -68,6 +45,28 @@ public interface ConfigMap {
      */
     // TODO behaviour of this is undefined if the key specifies a merge
     public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited);
+
+    // TODO sketch of new/better implementations
+//    /** As {@link #getConfigLocalRaw(ConfigKey)} but respecting the inheritance rules.
+//     * Because inheritance may not be applicable when working with raw values the result
+//     * is wrapped in a {@link ReferenceWithError}, and if any aspect of inheritance 
+//     * could not be applied, calls to {@link ReferenceWithError#get()} will throw
+//     * (but {@link ReferenceWithError#getWithoutError()} will not).
+//     * <p>
+//     * Note that most modes (eg overwrite, not-inherit) will not cause issues during inheritance
+//     * so this method is ordinarily fine to use.  Problems arise when a merge inheritance mode
+//     * is specified and it is attempting to merge a raw value which is not mergeable.
+//     * <p>
+//     * See also {@link #getConfigAllInheritedRaw(ConfigKey)} which returns the complete set
+//     * of inherited values.
+//     * 
+//     * @param key  key to look up
+//     */    
+//    public ReferenceWithError<ContainerAndValue<Object>> getConfigInheritedRaw(ConfigKey<?> key);
+//
+//    /** As {@link #getConfigLocalRaw(ConfigKey)} but returning all containers through the inheritance
+//     * hierarchy where a value is set (but stopping if it encounters a key is not inheritable from a container). */
+//    public List<ContainerAndValue<Object>> getConfigAllInheritedRaw(ConfigKey<?> key);
     
     /** returns the value stored against the given key, 
      * <b>not</b> any default,

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5e2b7d4b/utils/common/src/main/java/org/apache/brooklyn/util/exceptions/ReferenceWithError.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/exceptions/ReferenceWithError.java b/utils/common/src/main/java/org/apache/brooklyn/util/exceptions/ReferenceWithError.java
index 87fa3f2..95ddd71 100644
--- a/utils/common/src/main/java/org/apache/brooklyn/util/exceptions/ReferenceWithError.java
+++ b/utils/common/src/main/java/org/apache/brooklyn/util/exceptions/ReferenceWithError.java
@@ -41,7 +41,7 @@ public class ReferenceWithError<T> implements Supplier<T> {
         return new ReferenceWithError<T>(object, error, true);
     }
     
-    /** returns a reference which includes an error, but attempts to get the content do not cause the error to throw */
+    /** returns a reference which does not have any error; attempts to get the content are safe */
     public static <T> ReferenceWithError<T> newInstanceWithoutError(T object) {
         return new ReferenceWithError<T>(object, null, false);
     }