PR 1427 policy persistence: incorporate comments Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/ab503114 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/ab503114 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/ab503114
Branch: refs/heads/master Commit: ab503114734128ccc06cd282b0a2024323d0690e Parents: 94aecdb Author: Aled Sage <aled.s...@gmail.com> Authored: Fri May 30 20:11:17 2014 +0100 Committer: Aled Sage <aled.s...@gmail.com> Committed: Fri May 30 20:11:17 2014 +0100 ---------------------------------------------------------------------- .../rebind/PeriodicDeltaChangeListener.java | 4 +-- .../rebind/RebindExceptionHandlerImpl.java | 2 +- .../entity/rebind/RebindManagerImpl.java | 21 +++++---------- .../entity/rebind/dto/BasicPolicyMemento.java | 16 +++++------ .../entity/rebind/dto/MementosGenerators.java | 1 - .../internal/BrooklynFeatureEnablement.java | 28 +++++++++++++------- .../entity/rebind/RebindTestFixture.java | 8 +++--- .../internal/BrooklynFeatureEnablementTest.java | 4 +-- .../brooklyn/util/javalang/Reflections.java | 8 ++++++ 9 files changed, 49 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java index 6715014..2905493 100644 --- a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java +++ b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java @@ -85,8 +85,8 @@ public class PeriodicDeltaChangeListener implements ChangeListener { this.persister = persister; this.period = Duration.of(periodMillis, TimeUnit.MILLISECONDS); - this.persistPoliciesEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.ENABLE_POLICY_PERSISTENCE_PROPERTY); - this.persistEnrichersEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.ENABLE_ENRICHER_PERSISTENCE_PROPERTY); + this.persistPoliciesEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_POLICY_PERSISTENCE_PROPERTY); + this.persistEnrichersEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_ENRICHER_PERSISTENCE_PROPERTY); } public void start() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java index 028af0b..4dc2b54 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindExceptionHandlerImpl.java @@ -264,7 +264,7 @@ public class RebindExceptionHandlerImpl implements RebindExceptionHandler { allExceptions.add(new IllegalStateException("Missing referenced location"+(missingLocations.size() == 1 ? "" : "s")+": "+missingLocations)); } if (missingPolicies.size() > 0) { - allExceptions.add(new IllegalStateException("Missing referenced policy"+(missingPolicies.size() == 1 ? "" : "s")+": "+missingPolicies)); + allExceptions.add(new IllegalStateException("Missing referenced polic"+(missingPolicies.size() == 1 ? "y" : "ies")+": "+missingPolicies)); } if (missingEnrichers.size() > 0) { allExceptions.add(new IllegalStateException("Missing referenced enricher"+(missingEnrichers.size() == 1 ? "" : "s")+": "+missingEnrichers)); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java index 081b294..d6491a4 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java @@ -83,8 +83,8 @@ public class RebindManagerImpl implements RebindManager { this.managementContext = managementContext; this.changeListener = ChangeListener.NOOP; - this.persistPoliciesEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.ENABLE_POLICY_PERSISTENCE_PROPERTY); - this.persistEnrichersEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.ENABLE_ENRICHER_PERSISTENCE_PROPERTY); + this.persistPoliciesEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_POLICY_PERSISTENCE_PROPERTY); + this.persistEnrichersEnabled = BrooklynFeatureEnablement.isEnabled(BrooklynFeatureEnablement.FEATURE_ENRICHER_PERSISTENCE_PROPERTY); } /** @@ -283,14 +283,14 @@ public class RebindManagerImpl implements RebindManager { if (persistEnrichersEnabled) { LOG.info("RebindManager instantiating enrichers: {}", memento.getEnricherIds()); for (EnricherMemento enricherMemento : memento.getEnricherMementos().values()) { - if (LOG.isDebugEnabled()) LOG.debug("RebindManager instantiating policy {}", enricherMemento); + if (LOG.isDebugEnabled()) LOG.debug("RebindManager instantiating enricher {}", enricherMemento); Enricher enricher = newEnricher(enricherMemento, reflections); enrichers.put(enricherMemento.getId(), enricher); rebindContext.registerEnricher(enricherMemento.getId(), enricher); } } else { - LOG.debug("Not rebinding enrichers; feature disabled: {}", memento.getPolicyIds()); + LOG.debug("Not rebinding enrichers; feature disabled: {}", memento.getEnricherIds()); } // Reconstruct locations @@ -617,23 +617,14 @@ public class RebindManagerImpl implements RebindManager { if (!Policy.class.isAssignableFrom(clazz)) { throw new IllegalArgumentException("Class "+clazz+" is not a policy"); } - return hasNoArgConstructor(clazz); + return Reflections.hasNoArgConstructor(clazz); } private static boolean isNewStyleEnricher(Class<?> clazz) { if (!Enricher.class.isAssignableFrom(clazz)) { throw new IllegalArgumentException("Class "+clazz+" is not an enricher"); } - return hasNoArgConstructor(clazz); - } - - private static boolean hasNoArgConstructor(Class<?> clazz) { - try { - clazz.getConstructor(new Class[0]); - return true; - } catch (NoSuchMethodException e) { - return false; - } + return Reflections.hasNoArgConstructor(clazz); } /** http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/entity/rebind/dto/BasicPolicyMemento.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/BasicPolicyMemento.java b/core/src/main/java/brooklyn/entity/rebind/dto/BasicPolicyMemento.java index 795ea2e..7923549 100644 --- a/core/src/main/java/brooklyn/entity/rebind/dto/BasicPolicyMemento.java +++ b/core/src/main/java/brooklyn/entity/rebind/dto/BasicPolicyMemento.java @@ -38,15 +38,15 @@ public class BasicPolicyMemento extends AbstractMemento implements PolicyMemento } } - private Map<String,Object> config; + private Map<String,Object> config; private Map<String, Object> fields; // Trusts the builder to not mess around with mutability after calling build() - protected BasicPolicyMemento(Builder builder) { - super(builder); - config = toPersistedMap(builder.config); - } - + protected BasicPolicyMemento(Builder builder) { + super(builder); + config = toPersistedMap(builder.config); + } + @Deprecated @Override protected void setCustomFields(Map<String, Object> fields) { @@ -61,8 +61,8 @@ public class BasicPolicyMemento extends AbstractMemento implements PolicyMemento @Override public Map<String, Object> getConfig() { - return fromPersistedMap(config); - } + return fromPersistedMap(config); + } @Override protected ToStringHelper newVerboseStringHelper() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java index 9f744ba..99f1804 100644 --- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java +++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java @@ -251,7 +251,6 @@ public class MementosGenerators { builder.config.putAll(FlagUtils.getFieldsWithFlagsExcludingModifiers(enricher, Modifier.STATIC ^ Modifier.TRANSIENT)); return builder; - } protected static Object configValueToPersistable(Object value) { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java b/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java index 8d8c074..7c2a9ba 100644 --- a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java +++ b/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java @@ -14,11 +14,11 @@ import com.google.common.collect.Maps; */ public class BrooklynFeatureEnablement { - public static final String ENABLE_POLICY_PERSISTENCE_PROPERTY = "brooklyn.experimental.feature.policyPersistence"; + public static final String FEATURE_POLICY_PERSISTENCE_PROPERTY = "brooklyn.experimental.feature.policyPersistence"; - public static final String ENABLE_ENRICHER_PERSISTENCE_PROPERTY = "brooklyn.experimental.feature.enricherPersistence"; + public static final String FEATURE_ENRICHER_PERSISTENCE_PROPERTY = "brooklyn.experimental.feature.enricherPersistence"; - private static final Map<String, Boolean> FEATURE_ENABLEMENT_CACHE = Maps.newLinkedHashMap(); + private static final Map<String, Boolean> FEATURE_ENABLEMENTS = Maps.newLinkedHashMap(); private static final Object MUTEX = new Object(); @@ -31,29 +31,37 @@ public class BrooklynFeatureEnablement { public static boolean isEnabled(String property) { synchronized (MUTEX) { - if (!FEATURE_ENABLEMENT_CACHE.containsKey(property)) { + if (!FEATURE_ENABLEMENTS.containsKey(property)) { String rawVal = System.getProperty(property); boolean val = Boolean.parseBoolean(rawVal); - FEATURE_ENABLEMENT_CACHE.put(property, val); + FEATURE_ENABLEMENTS.put(property, val); } - return FEATURE_ENABLEMENT_CACHE.get(property); + return FEATURE_ENABLEMENTS.get(property); } } + + public static boolean enable(String property) { + return setEnablement(property, true); + } + + public static boolean disable(String property) { + return setEnablement(property, false); + } public static boolean setEnablement(String property, boolean val) { synchronized (MUTEX) { boolean oldVal = isEnabled(property); - FEATURE_ENABLEMENT_CACHE.put(property, val); + FEATURE_ENABLEMENTS.put(property, val); return oldVal; } } static void setDefault(String property, boolean val) { synchronized (MUTEX) { - if (!FEATURE_ENABLEMENT_CACHE.containsKey(property)) { + if (!FEATURE_ENABLEMENTS.containsKey(property)) { String rawVal = System.getProperty(property); if (rawVal == null) { - FEATURE_ENABLEMENT_CACHE.put(property, val); + FEATURE_ENABLEMENTS.put(property, val); } } } @@ -61,7 +69,7 @@ public class BrooklynFeatureEnablement { static void clearCache() { synchronized (MUTEX) { - FEATURE_ENABLEMENT_CACHE.clear(); + FEATURE_ENABLEMENTS.clear(); } } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java index 9099418..d315d75 100644 --- a/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java +++ b/core/src/test/java/brooklyn/entity/rebind/RebindTestFixture.java @@ -34,8 +34,8 @@ public abstract class RebindTestFixture<T extends StartableApplication> { @BeforeMethod(alwaysRun=true) public void setUp() throws Exception { - origPolicyPersistenceEnabled = BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.ENABLE_POLICY_PERSISTENCE_PROPERTY, true); - origEnricherPersistenceEnabled = BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.ENABLE_ENRICHER_PERSISTENCE_PROPERTY, true); + origPolicyPersistenceEnabled = BrooklynFeatureEnablement.enable(BrooklynFeatureEnablement.FEATURE_POLICY_PERSISTENCE_PROPERTY); + origEnricherPersistenceEnabled = BrooklynFeatureEnablement.enable(BrooklynFeatureEnablement.FEATURE_ENRICHER_PERSISTENCE_PROPERTY); mementoDir = Files.createTempDir(); origManagementContext = RebindTestUtils.newPersistingManagementContext(mementoDir, classLoader, 1); @@ -58,8 +58,8 @@ public abstract class RebindTestFixture<T extends StartableApplication> { if (mementoDir != null) RebindTestUtils.deleteMementoDir(mementoDir); origManagementContext = null; } finally { - BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.ENABLE_POLICY_PERSISTENCE_PROPERTY, origPolicyPersistenceEnabled); - BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.ENABLE_ENRICHER_PERSISTENCE_PROPERTY, origEnricherPersistenceEnabled); + BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.FEATURE_POLICY_PERSISTENCE_PROPERTY, origPolicyPersistenceEnabled); + BrooklynFeatureEnablement.setEnablement(BrooklynFeatureEnablement.FEATURE_ENRICHER_PERSISTENCE_PROPERTY, origEnricherPersistenceEnabled); } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java b/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java index e842c15..9ac2686 100644 --- a/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java +++ b/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java @@ -24,11 +24,11 @@ public class BrooklynFeatureEnablementTest { String featureProperty = "brooklyn.experimental.feature.testCanSetPropertyEnablement"; boolean preTestVal = BrooklynFeatureEnablement.isEnabled(featureProperty); try { - boolean oldVal = BrooklynFeatureEnablement.setEnablement(featureProperty, true); + boolean oldVal = BrooklynFeatureEnablement.enable(featureProperty); assertEquals(oldVal, preTestVal); assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty)); - boolean oldVal2 = BrooklynFeatureEnablement.setEnablement(featureProperty, false); + boolean oldVal2 = BrooklynFeatureEnablement.disable(featureProperty); assertTrue(oldVal2); assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty)); } finally { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ab503114/utils/common/src/main/java/brooklyn/util/javalang/Reflections.java ---------------------------------------------------------------------- diff --git a/utils/common/src/main/java/brooklyn/util/javalang/Reflections.java b/utils/common/src/main/java/brooklyn/util/javalang/Reflections.java index 43d1e3e..9e41d48 100644 --- a/utils/common/src/main/java/brooklyn/util/javalang/Reflections.java +++ b/utils/common/src/main/java/brooklyn/util/javalang/Reflections.java @@ -747,4 +747,12 @@ public class Reflections { findAllInterfaces(type.getSuperclass(), found); } + public static boolean hasNoArgConstructor(Class<?> clazz) { + try { + clazz.getConstructor(new Class[0]); + return true; + } catch (NoSuchMethodException e) { + return false; + } + } }