This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git

commit 0716b3f14f26c1e12d6400785defc35feb7a30c8
Author: Alex Heneveld <[email protected]>
AuthorDate: Fri Dec 2 19:39:41 2022 +0000

    ensure anonymous config is restored on adjuncts after persistence
---
 .../brooklyn/camp/brooklyn/EnrichersYamlTest.java   | 18 ++++++++++++++----
 .../brooklyn/camp/brooklyn/PoliciesYamlTest.java    | 19 ++++++++++++++++---
 .../test/policy/failover/ElectPrimaryTest.java      | 14 +++++++++++---
 .../apache/brooklyn/core/entity/AbstractEntity.java |  2 +-
 .../brooklyn/core/objs/AbstractEntityAdjunct.java   |  1 +
 .../apache/brooklyn/util/core/flags/FlagUtils.java  | 21 ++++++++++++++++-----
 .../brooklyn/util/core/internal/FlagUtilsTest.java  |  3 ++-
 7 files changed, 61 insertions(+), 17 deletions(-)

diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
index 37c04fb571..04b85040fc 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/EnrichersYamlTest.java
@@ -31,6 +31,7 @@ import org.apache.brooklyn.core.entity.Entities;
 import org.apache.brooklyn.core.entity.EntityAdjuncts;
 import org.apache.brooklyn.core.entity.EntityAsserts;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.core.test.policy.TestEnricher;
@@ -83,10 +84,14 @@ public class EnrichersYamlTest extends AbstractYamlTest {
                 return 
enricher.getConfig(TestEnricher.TARGET_ENTITY_FROM_FLAG);
             }}).get();
         Assert.assertEquals(targetFromFlag, target);
+
         Map<?, ?> leftoverProperties = ((TestEnricher) 
enricher).getLeftoverProperties();
+//        Assert.assertEquals(leftoverProperties.size(), 2);  // 2022-12 there 
are never any leftover properties
+        Assert.assertEquals(leftoverProperties.size(), 0);
+
+        leftoverProperties = 
((BrooklynObjectInternal.ConfigurationSupportInternal)enricher.config()).getBag().getAllConfigMutable();
         Assert.assertEquals(leftoverProperties.get("enricherLiteralValue1"), 
"Hello");
         Assert.assertEquals(leftoverProperties.get("enricherLiteralValue2"), 
"World");
-        Assert.assertEquals(leftoverProperties.size(), 2);
     }
     
     @Test
@@ -112,9 +117,14 @@ public class EnrichersYamlTest extends AbstractYamlTest {
         Assert.assertTrue(enricher instanceof TestEnricher, "enricher=" + 
enricher + "; type=" + enricher.getClass());
         Assert.assertEquals(enricher.getConfig(TestEnricher.CONF_NAME), "Name 
from YAML");
         
Assert.assertEquals(enricher.getConfig(TestEnricher.CONF_FROM_FUNCTION), 
"$brooklyn: is a fun place");
-        
-        Assert.assertEquals(((TestEnricher) enricher).getLeftoverProperties(),
-                ImmutableMap.of("enricherLiteralValue1", "Hello", 
"enricherLiteralValue2", "World"));
+
+        Map<?, ?> leftoverProperties = ((TestEnricher) 
enricher).getLeftoverProperties();
+        //        Assert.assertEquals(leftoverProperties.size(), 2);  // 
2022-12 there are never any leftover properties
+        Assert.assertEquals(leftoverProperties.size(), 0);
+
+        leftoverProperties = 
((BrooklynObjectInternal.ConfigurationSupportInternal)enricher.config()).getBag().getAllConfigMutable();
+        Assert.assertEquals(leftoverProperties.get("enricherLiteralValue1"), 
"Hello");
+        Assert.assertEquals(leftoverProperties.get("enricherLiteralValue2"), 
"World");
     }
     
     @Test
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
index d56c4aea6a..ed5a216542 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/PoliciesYamlTest.java
@@ -26,7 +26,9 @@ import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.entity.Dumper;
 import org.apache.brooklyn.core.entity.EntityInternal;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.core.test.policy.TestEnricher;
 import org.apache.brooklyn.core.test.policy.TestPolicy;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.collections.MutableMap;
@@ -58,10 +60,14 @@ public class PoliciesYamlTest extends AbstractYamlTest {
         Assert.assertTrue(policy instanceof TestPolicy);
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from 
YAML");
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_FROM_FUNCTION), 
"$brooklyn: is a fun place");
+
         Map<?, ?> leftoverProperties = ((TestPolicy) 
policy).getLeftoverProperties();
+        //        Assert.assertEquals(leftoverProperties.size(), 2);  // 
2022-12 there are never any leftover properties
+        Assert.assertEquals(leftoverProperties.size(), 0);
+
+        leftoverProperties = 
((BrooklynObjectInternal.ConfigurationSupportInternal)policy.config()).getBag().getAllConfigMutable();
         Assert.assertEquals(leftoverProperties.get("policyLiteralValue1"), 
"Hello");
         Assert.assertEquals(leftoverProperties.get("policyLiteralValue2"), 
"World");
-        Assert.assertEquals(leftoverProperties.size(), 2);
     }
     
     @Test
@@ -82,8 +88,15 @@ public class PoliciesYamlTest extends AbstractYamlTest {
         Assert.assertTrue(policy instanceof TestPolicy, "policy=" + policy + 
"; type=" + policy.getClass());
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_NAME), "Name from 
YAML");
         Assert.assertEquals(policy.getConfig(TestPolicy.CONF_FROM_FUNCTION), 
"$brooklyn: is a fun place");
-        Assert.assertEquals(((TestPolicy) policy).getLeftoverProperties(),
-                ImmutableMap.of("policyLiteralValue1", "Hello", 
"policyLiteralValue2", "World"));
+
+        Map<?, ?> leftoverProperties = ((TestPolicy) 
policy).getLeftoverProperties();
+        //        Assert.assertEquals(leftoverProperties.size(), 2);  // 
2022-12 there are never any leftover properties
+        Assert.assertEquals(leftoverProperties.size(), 0);
+
+        leftoverProperties = 
((BrooklynObjectInternal.ConfigurationSupportInternal)policy.config()).getBag().getAllConfigMutable();
+        Assert.assertEquals(leftoverProperties.get("policyLiteralValue1"), 
"Hello");
+        Assert.assertEquals(leftoverProperties.get("policyLiteralValue2"), 
"World");
+
         
Assert.assertEquals(policy.getConfig(TestPolicy.TEST_ATTRIBUTE_SENSOR), 
TestEntity.NAME);
     }
     
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/policy/failover/ElectPrimaryTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/policy/failover/ElectPrimaryTest.java
index 84974a6216..4963c4f47e 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/policy/failover/ElectPrimaryTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/policy/failover/ElectPrimaryTest.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
+import com.google.common.collect.Iterables;
 import org.apache.brooklyn.api.effector.Effector;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntityLocal;
@@ -41,6 +42,8 @@ import org.apache.brooklyn.core.entity.EntityPredicates;
 import org.apache.brooklyn.core.entity.StartableApplication;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
 import org.apache.brooklyn.core.entity.trait.Startable;
+import org.apache.brooklyn.core.mgmt.rebind.RebindTestUtils;
+import org.apache.brooklyn.core.objs.BrooklynObjectInternal;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.core.test.entity.TestEntity;
 import org.apache.brooklyn.policy.failover.ElectPrimaryConfig;
@@ -106,11 +109,16 @@ public class ElectPrimaryTest extends 
AbstractYamlRebindTest {
     
     @Test
     public void testSimpleRebind() throws Exception {
-        runSetPreferredViaWeightConfigOnB();
-        
+        origApp = (StartableApplication) runSetPreferredViaWeightConfigOnB();
+        
Asserts.assertEquals(Iterables.getOnlyElement(app().policies()).config().get(ElectPrimaryConfig.BEST_WAIT_TIMEOUT),
 Duration.ZERO);
+        
((BrooklynObjectInternal.ConfigurationSupportInternal)Iterables.getOnlyElement(app().policies()).config()).setRaw(TestEntity.CONF_MAP_THING.subKey("x"),
 true, "X");
+        
mgmt().getRebindManager().getChangeListener().onChanged(Iterables.getOnlyElement(app().policies()));
+
         StartableApplication app = rebind();
         Assert.assertEquals(app.sensors().get(PRIMARY).getDisplayName(), "b");
-        
+        
Asserts.assertEquals(Iterables.getOnlyElement(app().policies()).config().get(ElectPrimaryConfig.BEST_WAIT_TIMEOUT),
 Duration.ZERO);
+        
Asserts.assertEquals(Iterables.getOnlyElement(app().policies()).config().get(TestEntity.CONF_MAP_THING.subKey("x")),
 "X");
+
         Entity a = 
(Entity)mgmt().<Entity>lookup(EntityPredicates.displayNameEqualTo("a"));
         Entity b = 
(Entity)mgmt().<Entity>lookup(EntityPredicates.displayNameEqualTo("b"));
         a.sensors().set(WEIGHT_SENSOR, 2.0d);
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 7f3df7ade1..c488c5a2dc 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
@@ -408,7 +408,7 @@ public abstract class AbstractEntity extends 
AbstractBrooklynObject implements E
         // TODO the default values on flags are not used? (we should remove 
that support, since ConfigKeys gives a better way)
         if (flags.size() > 0) {
             FlagUtils.setFieldsFromFlags(flags, this);
-            flags = FlagUtils.setAllConfigKeys(flags, this, false);
+            flags = FlagUtils.setAllConfigKeys(flags, this, false, false);
         }
         
         // finally all config keys specified in map should be set as config
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 75c1fc6d0a..ff2d2bae2f 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
@@ -83,6 +83,7 @@ public abstract class AbstractEntityAdjunct extends 
AbstractBrooklynObject imple
 
     /**
      * @deprecated since 0.7.0; leftover properties are put into config, since 
when coming from yaml this is normal.
+     * since 1.1.0 this will likely always be empty.
      */
     @Deprecated
     protected Map<String,Object> leftoverProperties = Maps.newLinkedHashMap();
diff --git 
a/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java 
b/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
index 4ee493044d..631923cc04 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/flags/FlagUtils.java
@@ -36,6 +36,7 @@ import org.apache.brooklyn.api.objs.Configurable;
 import org.apache.brooklyn.api.objs.SpecParameter;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.groovy.GroovyJavaMethods;
@@ -147,15 +148,22 @@ public class FlagUtils {
     
     /** sets _all_ accessible _{@link ConfigKey}_ and {@link HasConfigKey} 
fields on the given object, 
      * using the indicated flags/config-bag */
-    public static Map<String, ?> setAllConfigKeys(Map<String, ?> 
flagsOrConfig, Configurable instance, boolean includeFlags) {
+    public static void setAllConfigKeys(Map<String, ?> flagsOrConfig, 
Configurable instance, boolean includeFlags) {
+        setAllConfigKeys(flagsOrConfig, instance, includeFlags, true);
+    }
+    public static Map<String, ?> setAllConfigKeys(Map<String, ?> 
flagsOrConfig, Configurable instance, boolean includeFlags, boolean 
writeExtraAsAnonymousConfig) {
         ConfigBag bag = new ConfigBag().putAll(flagsOrConfig);
-        setAllConfigKeys(instance, bag, includeFlags);
+        setAllConfigKeys(instance, bag, includeFlags, 
writeExtraAsAnonymousConfig);
         return bag.getUnusedConfigMutable();
     }
-    
-    /** sets _all_ accessible _{@link ConfigKey}_ and {@link HasConfigKey} 
fields on the given object, 
-     * using the indicated flags/config-bag */
+
     public static void setAllConfigKeys(Configurable o, ConfigBag bag, boolean 
includeFlags) {
+        setAllConfigKeys(o, bag, includeFlags, true);
+    }
+
+    /** sets _all_ accessible _{@link ConfigKey}_ and {@link HasConfigKey} 
fields on the given object, 
+     * using the indicated flags/config-bag, and then the rest as general 
purpose config */
+    public static void setAllConfigKeys(Configurable o, ConfigBag bag, boolean 
includeFlags, boolean writeExtrasAsAnonymousConfig) {
         for (Field f: getAllFields(o.getClass())) {
             ConfigKey<?> key = getFieldAsConfigKey(o, f);
             if (key!=null) {
@@ -165,6 +173,9 @@ public class FlagUtils {
                 }
             }
         }
+        if (writeExtrasAsAnonymousConfig) {
+            bag.getUnusedConfig().keySet().forEach(k -> 
o.config().set(ConfigKeys.newConfigKey(Object.class, k), bag.getStringKey(k)));
+        }
     }
     
     public static class FlagConfigKeyAndValueRecord {
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 b4ace3afaf..f22db62e2e 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
@@ -210,7 +210,8 @@ public class FlagUtilsTest {
     @Test
     public void testSetAllConfigKeys() {
         FooCK f = new FooCK();
-        Map<?,?> unused = FlagUtils.setAllConfigKeys(ImmutableMap.of("f1", 9, 
"ck1", "do-set", "ck2", "do-set-2", "c3", "do-set"), f, true);
+        Map<?,?> unused = FlagUtils.setAllConfigKeys(
+                ImmutableMap.of("f1", 9, "ck1", "do-set", "ck2", "do-set-2", 
"c3", "do-set"), f, true, false);
         assertEquals(f.bag.get(FooCK.CK1), "do-set");
         assertEquals(f.bag.get(FooCK.CK3), "do-set");
         assertEquals(f.bag.containsKey(FooCK.CK2), true);

Reply via email to