Persist on policy-reconfigured
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/08244283 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/08244283 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/08244283 Branch: refs/heads/master Commit: 08244283a7ce7b54f3914867d5877a897c8087cd Parents: d9570ee Author: Aled Sage <aled.s...@gmail.com> Authored: Thu Jun 5 22:21:21 2014 +0200 Committer: Aled Sage <aled.s...@gmail.com> Committed: Fri Jun 6 16:32:09 2014 +0200 ---------------------------------------------------------------------- .../enricher/basic/AbstractEnricher.java | 5 +++ .../policy/basic/AbstractEntityAdjunct.java | 6 +++- .../brooklyn/policy/basic/AbstractPolicy.java | 5 +++ .../entity/rebind/RebindEnricherTest.java | 4 +-- .../entity/rebind/RebindPolicyTest.java | 33 ++++++++++++++++++-- 5 files changed, 48 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java b/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java index c80c9a7..7fe9811 100644 --- a/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java +++ b/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java @@ -41,4 +41,9 @@ public abstract class AbstractEnricher extends AbstractEntityAdjunct implements public EnricherType getEnricherType() { return enricherType; } + + @Override + protected void onChanged() { + getManagementContext().getRebindManager().getChangeListener().onChanged(this); + } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java index cf41996..89815b6 100644 --- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java +++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java @@ -230,7 +230,9 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab if (entity != null && isRunning()) { doReconfigureConfig(key, val); } - return (T) configsInternal.setConfig(key, val); + T result = (T) configsInternal.setConfig(key, val); + onChanged(); + return result; } // TODO make immutable @@ -244,6 +246,8 @@ public abstract class AbstractEntityAdjunct implements EntityAdjunct, Configurab throw new UnsupportedOperationException("reconfiguring "+key+" unsupported for "+this); } + protected abstract void onChanged(); + protected AdjunctType getAdjunctType() { return adjunctType; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java b/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java index c6b932c..5bd8843 100644 --- a/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java +++ b/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java @@ -77,6 +77,11 @@ public abstract class AbstractPolicy extends AbstractEntityAdjunct implements Po } @Override + protected void onChanged() { + getManagementContext().getRebindManager().getChangeListener().onChanged(this); + } + + @Override public RebindSupport<PolicyMemento> getRebindSupport() { return new BasicPolicyRebindSupport(this); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java index 0a34106..c6de0ee 100644 --- a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java +++ b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java @@ -219,9 +219,9 @@ public class RebindEnricherTest extends RebindTestFixtureWithApp { initCalled = true; } - // TODO When AbstractEnricher declares rebind; @Override + @Override public void rebind() { - // TODO super.rebind(); + super.rebind(); rebindCalled = true; } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java index 8e54781..552db17 100644 --- a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java +++ b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java @@ -124,6 +124,18 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp { } @Test + public void testReconfigurePolicyPersistsChange() throws Exception { + MyPolicyReconfigurable policy = origApp.addPolicy(PolicySpec.create(MyPolicyReconfigurable.class) + .configure(MyPolicyReconfigurable.MY_CONFIG, "oldval")); + policy.setConfig(MyPolicyReconfigurable.MY_CONFIG, "newval"); + + newApp = (TestApplication) rebind(); + MyPolicyReconfigurable newPolicy = (MyPolicyReconfigurable) Iterables.getOnlyElement(newApp.getPolicies()); + + assertEquals(newPolicy.getConfig(MyPolicyReconfigurable.MY_CONFIG), "newval"); + } + + @Test public void testIsRebinding() throws Exception { origApp.addPolicy(PolicySpec.create(PolicyChecksIsRebinding.class)); @@ -182,9 +194,9 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp { initCalled = true; } - // TODO When AbstractPolicy declares rebind; @Override + @Override public void rebind() { - // TODO super.rebind(); + super.rebind(); rebindCalled = true; } } @@ -194,4 +206,21 @@ public class RebindPolicyTest extends RebindTestFixtureWithApp { super(flags); } } + + public static class MyPolicyReconfigurable extends AbstractPolicy { + public static final ConfigKey<String> MY_CONFIG = ConfigKeys.newStringConfigKey("myconfig"); + + public MyPolicyReconfigurable() { + super(); + } + + @Override + protected <T> void doReconfigureConfig(ConfigKey<T> key, T val) { + if (MY_CONFIG.equals(key)) { + // we'd do here whatever reconfig meant; caller will set actual new val + } else { + super.doReconfigureConfig(key, val); + } + } + } }